diff --git a/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/amdgpu_no_merge_comments.ll b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/amdgpu_no_merge_comments.ll new file mode 100644 --- /dev/null +++ b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/amdgpu_no_merge_comments.ll @@ -0,0 +1,9 @@ +; RUN: llc -O0 -mtriple=amdgcn- -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9-O0 %s +; RUN: llc -mtriple=amdgcn- -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9-O3 %s + +define hidden i32 @main(i32 %a) { + %add = add i32 %a, %a + %mul = mul i32 %add, %a + %sub = sub i32 %mul, %add + ret i32 %sub +} diff --git a/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/amdgpu_no_merge_comments.ll.expected b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/amdgpu_no_merge_comments.ll.expected new file mode 100644 --- /dev/null +++ b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/amdgpu_no_merge_comments.ll.expected @@ -0,0 +1,27 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -O0 -mtriple=amdgcn- -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9-O0 %s +; RUN: llc -mtriple=amdgcn- -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9-O3 %s + +define hidden i32 @main(i32 %a) { +; GFX9-O0-LABEL: main: +; GFX9-O0: ; %bb.0: +; GFX9-O0-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; GFX9-O0-NEXT: v_add_u32_e32 v1, v0, v0 +; GFX9-O0-NEXT: ; implicit-def: $sgpr4 +; GFX9-O0-NEXT: ; implicit-def: $sgpr4 +; GFX9-O0-NEXT: v_mul_lo_u32 v0, v1, v0 +; GFX9-O0-NEXT: v_sub_u32_e32 v0, v0, v1 +; GFX9-O0-NEXT: s_setpc_b64 s[30:31] +; +; GFX9-O3-LABEL: main: +; GFX9-O3: ; %bb.0: +; GFX9-O3-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) +; GFX9-O3-NEXT: v_add_u32_e32 v1, v0, v0 +; GFX9-O3-NEXT: v_mul_lo_u32 v0, v1, v0 +; GFX9-O3-NEXT: v_sub_u32_e32 v0, v0, v1 +; GFX9-O3-NEXT: s_setpc_b64 s[30:31] + %add = add i32 %a, %a + %mul = mul i32 %add, %a + %sub = sub i32 %mul, %add + ret i32 %sub +} diff --git a/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/amdgpu-no-merge-comments.test b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/amdgpu-no-merge-comments.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/amdgpu-no-merge-comments.test @@ -0,0 +1,5 @@ +# REQUIRES: amdgpu-registered-target +## Check that functions with different IR comments in the output are not merged + +# RUN: cp -f %S/Inputs/amdgpu_no_merge_comments.ll %t.ll && %update_llc_test_checks %t.ll +# RUN: diff -u %S/Inputs/amdgpu_no_merge_comments.ll.expected %t.ll diff --git a/llvm/utils/UpdateTestChecks/common.py b/llvm/utils/UpdateTestChecks/common.py --- a/llvm/utils/UpdateTestChecks/common.py +++ b/llvm/utils/UpdateTestChecks/common.py @@ -262,7 +262,7 @@ self.extrascrub = extra self.args_and_sig = args_and_sig self.attrs = attrs - def is_same_except_arg_names(self, extrascrub, args_and_sig, attrs): + def is_same_except_arg_names(self, extrascrub, args_and_sig, attrs, is_asm): arg_names = set() def drop_arg_names(match): arg_names.add(match.group(variable_group_in_ir_value_match)) @@ -283,8 +283,9 @@ return False es0 = IR_VALUE_RE.sub(repl_arg_names, self.extrascrub) es1 = IR_VALUE_RE.sub(repl_arg_names, extrascrub) - es0 = SCRUB_IR_COMMENT_RE.sub(r'', es0) - es1 = SCRUB_IR_COMMENT_RE.sub(r'', es1) + if not is_asm: + es0 = SCRUB_IR_COMMENT_RE.sub(r'', es0) + es1 = SCRUB_IR_COMMENT_RE.sub(r'', es1) return es0 == es1 def __str__(self): @@ -318,7 +319,7 @@ def global_var_dict(self): return self._global_var_dict - def process_run_line(self, function_re, scrubber, raw_tool_output, prefixes): + def process_run_line(self, function_re, scrubber, raw_tool_output, prefixes, is_asm): build_global_values_dictionary(self._global_var_dict, raw_tool_output, prefixes) for m in function_re.finditer(raw_tool_output): if not m: @@ -359,7 +360,8 @@ self._func_dict[prefix][func].is_same_except_arg_names( scrubbed_extra, args_and_sig, - attrs)): + attrs, + is_asm)): self._func_dict[prefix][func].scrub = scrubbed_extra self._func_dict[prefix][func].args_and_sig = args_and_sig continue diff --git a/llvm/utils/update_analyze_test_checks.py b/llvm/utils/update_analyze_test_checks.py --- a/llvm/utils/update_analyze_test_checks.py +++ b/llvm/utils/update_analyze_test_checks.py @@ -126,7 +126,7 @@ # Split analysis outputs by "Printing analysis " declarations. for raw_tool_output in re.split(r'Printing analysis ', raw_tool_outputs): builder.process_run_line(common.ANALYZE_FUNCTION_RE, common.scrub_body, - raw_tool_output, prefixes) + raw_tool_output, prefixes, False) func_dict = builder.finish_and_get_func_dict() is_in_function = False diff --git a/llvm/utils/update_cc_test_checks.py b/llvm/utils/update_cc_test_checks.py --- a/llvm/utils/update_cc_test_checks.py +++ b/llvm/utils/update_cc_test_checks.py @@ -197,7 +197,7 @@ if '-emit-llvm' in clang_args: builder.process_run_line( common.OPT_FUNCTION_RE, common.scrub_body, raw_tool_output, - prefixes) + prefixes, False) else: print('The clang command line should include -emit-llvm as asm tests ' 'are discouraged in Clang testsuite.', file=sys.stderr) diff --git a/llvm/utils/update_llc_test_checks.py b/llvm/utils/update_llc_test_checks.py --- a/llvm/utils/update_llc_test_checks.py +++ b/llvm/utils/update_llc_test_checks.py @@ -128,7 +128,7 @@ triple = asm.get_triple_from_march(march_in_cmd) scrubber, function_re = asm.get_run_handler(triple) - builder.process_run_line(function_re, scrubber, raw_tool_output, prefixes) + builder.process_run_line(function_re, scrubber, raw_tool_output, prefixes, True) func_dict = builder.finish_and_get_func_dict() diff --git a/llvm/utils/update_test_checks.py b/llvm/utils/update_test_checks.py --- a/llvm/utils/update_test_checks.py +++ b/llvm/utils/update_test_checks.py @@ -123,7 +123,7 @@ ti.path, preprocess_cmd=preprocess_cmd, verbose=ti.args.verbose) builder.process_run_line(common.OPT_FUNCTION_RE, common.scrub_body, - raw_tool_output, prefixes) + raw_tool_output, prefixes, False) func_dict = builder.finish_and_get_func_dict() is_in_function = False