[llvm] ecd5145 - [Utils] Replace llc with cat for tests

Sebastian Neubauer via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 22 01:10:51 PDT 2021


Author: Sebastian Neubauer
Date: 2021-09-22T10:10:35+02:00
New Revision: ecd5145c27e819f95036cc0be8f22ce174f19238

URL: https://github.com/llvm/llvm-project/commit/ecd5145c27e819f95036cc0be8f22ce174f19238
DIFF: https://github.com/llvm/llvm-project/commit/ecd5145c27e819f95036cc0be8f22ce174f19238.diff

LOG: [Utils] Replace llc with cat for tests

Make the update_llc_test_checks script test independant of llc behavior
by using cat with static files to simulate llc output.

This allows changing llc without breaking the script test case.

The update script is executed in a temporary directory, so the
llc-generated assembly files are copied there. %T is deprecated, but it
allows copying a file with a predictable filename.

Differential Revision: https://reviews.llvm.org/D110143

Added: 
    llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/amdgpu_no_merge_comments-O0.s
    llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/amdgpu_no_merge_comments-O3.s

Modified: 
    llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/amdgpu_no_merge_comments.ll
    llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/amdgpu_no_merge_comments.ll.expected
    llvm/test/tools/UpdateTestChecks/update_llc_test_checks/amdgpu-no-merge-comments.test
    llvm/utils/UpdateTestChecks/common.py

Removed: 
    


################################################################################
diff  --git a/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/amdgpu_no_merge_comments-O0.s b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/amdgpu_no_merge_comments-O0.s
new file mode 100644
index 0000000000000..0a089fb5454db
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/amdgpu_no_merge_comments-O0.s
@@ -0,0 +1,38 @@
+	.text
+	.section	.AMDGPU.config
+	.long	47176
+	.long	0
+	.long	47180
+	.long	0
+	.long	47200
+	.long	0
+	.long	4
+	.long	0
+	.long	8
+	.long	0
+	.text
+	.hidden	main                            ; -- Begin function main
+	.globl	main
+	.p2align	2
+	.type	main, at function
+main:                                   ; @main
+; %bb.0:
+	s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+	v_add_u32_e64 v1, v0, v0
+                                        ; implicit-def: $sgpr4
+                                        ; implicit-def: $sgpr4
+	v_mul_lo_u32 v0, v1, v0
+	v_sub_u32_e64 v0, v0, v1
+	s_setpc_b64 s[30:31]
+.Lfunc_end0:
+	.size	main, .Lfunc_end0-main
+                                        ; -- End function
+	.section	.AMDGPU.csdata
+; Function info:
+; codeLenInByte = 32
+; NumSgprs: 36
+; NumVgprs: 2
+; ScratchSize: 0
+; MemoryBound: 0
+	.section	".note.GNU-stack"
+	.amd_amdgpu_isa "amdgcn-unknown---gfx900"

diff  --git a/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/amdgpu_no_merge_comments-O3.s b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/amdgpu_no_merge_comments-O3.s
new file mode 100644
index 0000000000000..8508f293a933f
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/amdgpu_no_merge_comments-O3.s
@@ -0,0 +1,36 @@
+	.text
+	.section	.AMDGPU.config
+	.long	47176
+	.long	0
+	.long	47180
+	.long	0
+	.long	47200
+	.long	0
+	.long	4
+	.long	0
+	.long	8
+	.long	0
+	.text
+	.hidden	main                            ; -- Begin function main
+	.globl	main
+	.p2align	2
+	.type	main, at function
+main:                                   ; @main
+; %bb.0:
+	s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+	v_add_u32_e32 v1, v0, v0
+	v_mul_lo_u32 v0, v1, v0
+	v_sub_u32_e32 v0, v0, v1
+	s_setpc_b64 s[30:31]
+.Lfunc_end0:
+	.size	main, .Lfunc_end0-main
+                                        ; -- End function
+	.section	.AMDGPU.csdata
+; Function info:
+; codeLenInByte = 24
+; NumSgprs: 36
+; NumVgprs: 2
+; ScratchSize: 0
+; MemoryBound: 0
+	.section	".note.GNU-stack"
+	.amd_amdgpu_isa "amdgcn-unknown---gfx900"

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
index 21d01f5a1a375..fa6e521ae653b 100644
--- 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
@@ -1,5 +1,8 @@
-; 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
+; llc is replaced with cat, we just simulate llc by printing text from these files
+; RUN: llc %S/amdgpu_no_merge_comments-O0.s | FileCheck -check-prefixes=GCN,GFX9-O0 %s
+; RUN: llc %S/amdgpu_no_merge_comments-O3.s | FileCheck -check-prefixes=GCN,GFX9-O3 %s
+
+target triple = "amdgcn--"
 
 define hidden i32 @main(i32 %a) {
   %add = add i32 %a, %a

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
index 645b5dd7f065c..a240941bdf255 100644
--- 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
@@ -1,6 +1,9 @@
 ; 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
+; llc is replaced with cat, we just simulate llc by printing text from these files
+; RUN: llc %S/amdgpu_no_merge_comments-O0.s | FileCheck -check-prefixes=GCN,GFX9-O0 %s
+; RUN: llc %S/amdgpu_no_merge_comments-O3.s | FileCheck -check-prefixes=GCN,GFX9-O3 %s
+
+target triple = "amdgcn--"
 
 define hidden i32 @main(i32 %a) {
 ; GFX9-O0-LABEL: main:

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
index 7d078774e8fda..6368451fcaa41 100644
--- 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
@@ -1,5 +1,8 @@
 # REQUIRES: amdgpu-registered-target
 ## Check that functions with 
diff erent 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
+# Replace llc with cat, so we can simulate hypothetical output without actually running llc.
+# Copy the simulated output to the temporary directory.
+# RUN: cp -f %S/Inputs/amdgpu_no_merge_comments-O0.s %T/ && cp -f %S/Inputs/amdgpu_no_merge_comments-O3.s %T/
+# RUN: cp -f %S/Inputs/amdgpu_no_merge_comments.ll %t.ll && %update_llc_test_checks --llc-binary cat %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
index bc4b0738c6ad4..3bc908923bcf1 100644
--- a/llvm/utils/UpdateTestChecks/common.py
+++ b/llvm/utils/UpdateTestChecks/common.py
@@ -147,16 +147,31 @@ def should_add_line_to_output(input_line, prefix_set, skip_global_checks = False
 
   return True
 
+# Perform lit-like substitutions
+def getSubstitutions(sourcepath):
+  sourcedir = os.path.dirname(sourcepath)
+  return [('%s', sourcepath),
+          ('%S', sourcedir),
+          ('%p', sourcedir),
+          ('%{pathsep}', os.pathsep)]
+
+def applySubstitutions(s, substitutions):
+  for a,b in substitutions:
+    s = s.replace(a, b)
+  return s
+
 # Invoke the tool that is being tested.
 def invoke_tool(exe, cmd_args, ir, preprocess_cmd=None, verbose=False):
   with open(ir) as ir_file:
+    substitutions = getSubstitutions(ir)
+
     # TODO Remove the str form which is used by update_test_checks.py and
     # update_llc_test_checks.py
     # The safer list form is used by update_cc_test_checks.py
     if preprocess_cmd:
       # Allow pre-processing the IR file (e.g. using sed):
       assert isinstance(preprocess_cmd, str)  # TODO: use a list instead of using shell
-      preprocess_cmd = preprocess_cmd.replace('%s', ir).strip()
+      preprocess_cmd = applySubstitutions(preprocess_cmd, substitutions).strip()
       if verbose:
         print('Pre-processing input file: ', ir, " with command '",
               preprocess_cmd, "'", sep="", file=sys.stderr)
@@ -165,10 +180,12 @@ def invoke_tool(exe, cmd_args, ir, preprocess_cmd=None, verbose=False):
         pp = subprocess.Popen(preprocess_cmd, shell=True, stdin=devnull,
                               stdout=subprocess.PIPE)
         ir_file = pp.stdout
+
     if isinstance(cmd_args, list):
-      stdout = subprocess.check_output([exe] + cmd_args, stdin=ir_file)
+      args = [applySubstitutions(a, substitutions) for a in cmd_args]
+      stdout = subprocess.check_output([exe] + args, stdin=ir_file)
     else:
-      stdout = subprocess.check_output(exe + ' ' + cmd_args,
+      stdout = subprocess.check_output(exe + ' ' + applySubstitutions(cmd_args, substitutions),
                                        shell=True, stdin=ir_file)
     if sys.version_info[0] > 2:
       stdout = stdout.decode()


        


More information about the llvm-commits mailing list