diff --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/global_remove_same.ll b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/global_remove_same.ll new file mode 100644 index 0000000000000..d3d13ae2622e6 --- /dev/null +++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/global_remove_same.ll @@ -0,0 +1,15 @@ +; RUN: opt -S < %s | FileCheck %s + +define i32 @foo() { +; CHECK-LABEL: @foo( +; CHECK-NEXT: [[RESULT:%.*]] = call i32 @bar(i32 0, i32 1) +; CHECK-NEXT: ret i32 [[RESULT]] +; + %result = call i32 @bar(i32 0, i32 1) + ret i32 %result +} + +declare i32 @bar(i32, i32) +; CHECK-LABEL: @bar( +; CHECK-SAME: i32 +; CHECK-SAME: i32 diff --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/global_remove_same.ll.expected b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/global_remove_same.ll.expected new file mode 100644 index 0000000000000..e76efaedd172c --- /dev/null +++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/global_remove_same.ll.expected @@ -0,0 +1,13 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt -S < %s | FileCheck %s + +define i32 @foo() { +; CHECK-LABEL: @foo( +; CHECK-NEXT: [[RESULT:%.*]] = call i32 @bar(i32 0, i32 1) +; CHECK-NEXT: ret i32 [[RESULT]] +; + %result = call i32 @bar(i32 0, i32 1) + ret i32 %result +} + +declare i32 @bar(i32, i32) diff --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/global_remove_same.test b/llvm/test/tools/UpdateTestChecks/update_test_checks/global_remove_same.test new file mode 100644 index 0000000000000..5d447babddea4 --- /dev/null +++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/global_remove_same.test @@ -0,0 +1,4 @@ +## Basic test checking global checks split over multiple lines are removed together +# RUN: cp -f %S/Inputs/global_remove_same.ll %t.ll && %update_test_checks %t.ll +# RUN: diff -u %t.ll %S/Inputs/global_remove_same.ll.expected + diff --git a/llvm/utils/UpdateTestChecks/common.py b/llvm/utils/UpdateTestChecks/common.py index 4a02a92f824e6..53777523ec2a5 100644 --- a/llvm/utils/UpdateTestChecks/common.py +++ b/llvm/utils/UpdateTestChecks/common.py @@ -388,7 +388,12 @@ def itertests( def should_add_line_to_output( - input_line, prefix_set, skip_global_checks=False, comment_marker=";" + input_line, + prefix_set, + *, + skip_global_checks=False, + skip_same_checks=False, + comment_marker=";", ): # Skip any blank comment lines in the IR. if not skip_global_checks and input_line.strip() == comment_marker: @@ -402,9 +407,14 @@ def should_add_line_to_output( # And skip any CHECK lines. We're building our own. m = CHECK_RE.match(input_line) if m and m.group(1) in prefix_set: + if skip_same_checks and CHECK_SAME_RE.match(input_line): + # The previous CHECK line was removed, so don't leave this dangling + return False if skip_global_checks: + # Skip checks only if they are of global value definitions global_ir_value_re = re.compile(r"(\[\[|@)", flags=(re.M)) - return not global_ir_value_re.search(input_line) + is_global = global_ir_value_re.search(input_line) + return not is_global return False return True @@ -483,6 +493,7 @@ def invoke_tool(exe, cmd_args, ir, preprocess_cmd=None, verbose=False): CHECK_RE = re.compile( r"^\s*(?://|[;#])\s*([^:]+?)(?:-NEXT|-NOT|-DAG|-LABEL|-SAME|-EMPTY)?:" ) +CHECK_SAME_RE = re.compile(r"^\s*(?://|[;#])\s*([^:]+?)(?:-SAME)?:") UTC_ARGS_KEY = "UTC_ARGS:" UTC_ARGS_CMD = re.compile(r".*" + UTC_ARGS_KEY + r"\s*(?P.*)\s*$") diff --git a/llvm/utils/update_test_checks.py b/llvm/utils/update_test_checks.py index 06c247c8010a9..b5077d7935137 100755 --- a/llvm/utils/update_test_checks.py +++ b/llvm/utils/update_test_checks.py @@ -235,6 +235,7 @@ def main(): ) else: # "Normal" mode. + dropped_previous_line = False for input_line_info in ti.iterlines(output_lines): input_line = input_line_info.line args = input_line_info.args @@ -282,7 +283,10 @@ def main(): has_checked_pre_function_globals = True if common.should_add_line_to_output( - input_line, prefix_set, not is_in_function + input_line, + prefix_set, + skip_global_checks=not is_in_function, + skip_same_checks=dropped_previous_line, ): # This input line of the function body will go as-is into the output. # Except make leading whitespace uniform: 2 spaces. @@ -290,9 +294,13 @@ def main(): r" ", input_line ) output_lines.append(input_line) + dropped_previous_line = False if input_line.strip() == "}": is_in_function = False continue + else: + # If we are removing a check line, and the next line is CHECK-SAME, it MUST also be removed + dropped_previous_line = True if is_in_function: continue