[llvm] 240aff8 - Add initial tests for update_{llc_, cc_, }test_checks.py

Alex Richardson via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 16 03:36:29 PST 2019


Author: Alex Richardson
Date: 2019-12-16T11:35:53Z
New Revision: 240aff80e0e59b79779d046b3275904fc0750d59

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

LOG: Add initial tests for update_{llc_,cc_,}test_checks.py

Summary:
This commit adds basic tests for these update script to validate that
they still work as expected. In the future we could extend these tests
whenever new features are added to avoid introducing regressions.

Reviewers: xbolva00, MaskRay, jdoerfert

Reviewed By: jdoerfert

Subscribers: llvm-commits

Tags: #llvm

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

Added: 
    llvm/test/tools/UpdateTestChecks/lit.local.cfg
    llvm/test/tools/UpdateTestChecks/update_cc_test_checks/Inputs/mangled_names.c
    llvm/test/tools/UpdateTestChecks/update_cc_test_checks/Inputs/mangled_names.c.expected
    llvm/test/tools/UpdateTestChecks/update_cc_test_checks/Inputs/mangled_names.c.funcsig.expected
    llvm/test/tools/UpdateTestChecks/update_cc_test_checks/lit.local.cfg
    llvm/test/tools/UpdateTestChecks/update_cc_test_checks/mangled_names.test
    llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/basic.ll
    llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/basic.ll.expected
    llvm/test/tools/UpdateTestChecks/update_llc_test_checks/basic.test
    llvm/test/tools/UpdateTestChecks/update_llc_test_checks/lit.local.cfg
    llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/basic.ll
    llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/basic.ll.expected
    llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/basic.ll.funcsig.expected
    llvm/test/tools/UpdateTestChecks/update_test_checks/basic.test
    llvm/test/tools/UpdateTestChecks/update_test_checks/lit.local.cfg

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/tools/UpdateTestChecks/lit.local.cfg b/llvm/test/tools/UpdateTestChecks/lit.local.cfg
new file mode 100644
index 000000000000..f6b35f4af204
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/lit.local.cfg
@@ -0,0 +1,61 @@
+import os
+
+import lit.formats
+import lit.util
+
+# python 2.7 backwards compatibility
+try:
+    from shlex import quote as shell_quote
+except ImportError:
+    from pipes import quote as shell_quote
+
+
+def add_update_script_substition(name, python_exe=config.python_executable,
+                                 extra_args=''):
+    script_path = os.path.join(config.llvm_src_root, 'utils', name + '.py')
+    assert os.path.isfile(script_path)
+    config.substitutions.append(
+        ('%' + name, "'%s' %s %s" % (python_exe, script_path, extra_args)))
+
+
+config.test_format = lit.formats.ShTest(execute_external=False)
+config.suffixes = ['.test']
+
+llc_path = os.path.join(config.llvm_tools_dir, 'llc')
+if os.path.isfile(llc_path):
+    config.available_features.add('llc-binary')
+    llc_arg = '--llc-binary ' + shell_quote(llc_path)
+    add_update_script_substition('update_llc_test_checks', extra_args=llc_arg)
+    add_update_script_substition('update_mir_test_checks', extra_args=llc_arg)
+
+opt_path = os.path.join(config.llvm_tools_dir, 'opt')
+if os.path.isfile(opt_path):
+    config.available_features.add('opt-binary')
+    opt_arg = '--opt-binary ' + shell_quote(opt_path)
+    add_update_script_substition('update_test_checks', extra_args=opt_arg)
+    add_update_script_substition('update_analyze_test_checks',
+                                 extra_args=opt_arg)
+
+llvm_mca_path = os.path.join(config.llvm_tools_dir, 'llvm-mca')
+if os.path.isfile(llvm_mca_path):
+    config.available_features.add('llvm-mca-binary')
+    mca_arg = '--llvm-mca-binary ' + shell_quote(llvm_mca_path)
+    add_update_script_substition('update_test_checks', extra_args=mca_arg)
+
+# update_cc_test_checks requires python3
+py3_exe = lit.util.which('python3')
+if py3_exe:
+    config.substitutions.append(('%python3', shell_quote(py3_exe)))
+    config.available_features.add('python3')
+
+clang_path = os.path.join(config.llvm_tools_dir, 'clang')
+if os.path.isfile(clang_path):
+    config.available_features.add('clang-binary')
+    if py3_exe:
+        # XXX: or use --llvm-bin?
+        extra_args = '--clang ' + shell_quote(clang_path)
+        if os.path.isfile(opt_path):
+            extra_args += ' --opt ' + shell_quote(opt_path)
+        add_update_script_substition('update_cc_test_checks',
+                                     python_exe=py3_exe,
+                                     extra_args=extra_args)

diff  --git a/llvm/test/tools/UpdateTestChecks/update_cc_test_checks/Inputs/mangled_names.c b/llvm/test/tools/UpdateTestChecks/update_cc_test_checks/Inputs/mangled_names.c
new file mode 100644
index 000000000000..01e42a35e78e
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_cc_test_checks/Inputs/mangled_names.c
@@ -0,0 +1,11 @@
+// Example input for update_cc_test_checks
+// RUN: %clang_cc1 -triple=x86_64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck %s
+
+long test(long a, int b) {
+  return a + b;
+}
+
+// A function with a mangled name
+__attribute__((overloadable)) long test(long a, int b, int c) {
+  return a + b + c;
+}

diff  --git a/llvm/test/tools/UpdateTestChecks/update_cc_test_checks/Inputs/mangled_names.c.expected b/llvm/test/tools/UpdateTestChecks/update_cc_test_checks/Inputs/mangled_names.c.expected
new file mode 100644
index 000000000000..d6ba7ae09b62
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_cc_test_checks/Inputs/mangled_names.c.expected
@@ -0,0 +1,41 @@
+// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
+// Example input for update_cc_test_checks
+// RUN: %clang_cc1 -triple=x86_64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck %s
+
+// CHECK-LABEL: @test(
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 8
+// CHECK-NEXT:    [[B_ADDR:%.*]] = alloca i32, align 4
+// CHECK-NEXT:    store i64 [[A:%.*]], i64* [[A_ADDR]], align 8
+// CHECK-NEXT:    store i32 [[B:%.*]], i32* [[B_ADDR]], align 4
+// CHECK-NEXT:    [[TMP0:%.*]] = load i64, i64* [[A_ADDR]], align 8
+// CHECK-NEXT:    [[TMP1:%.*]] = load i32, i32* [[B_ADDR]], align 4
+// CHECK-NEXT:    [[CONV:%.*]] = sext i32 [[TMP1]] to i64
+// CHECK-NEXT:    [[ADD:%.*]] = add nsw i64 [[TMP0]], [[CONV]]
+// CHECK-NEXT:    ret i64 [[ADD]]
+//
+long test(long a, int b) {
+  return a + b;
+}
+
+// A function with a mangled name
+// CHECK-LABEL: @_Z4testlii(
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 8
+// CHECK-NEXT:    [[B_ADDR:%.*]] = alloca i32, align 4
+// CHECK-NEXT:    [[C_ADDR:%.*]] = alloca i32, align 4
+// CHECK-NEXT:    store i64 [[A:%.*]], i64* [[A_ADDR]], align 8
+// CHECK-NEXT:    store i32 [[B:%.*]], i32* [[B_ADDR]], align 4
+// CHECK-NEXT:    store i32 [[C:%.*]], i32* [[C_ADDR]], align 4
+// CHECK-NEXT:    [[TMP0:%.*]] = load i64, i64* [[A_ADDR]], align 8
+// CHECK-NEXT:    [[TMP1:%.*]] = load i32, i32* [[B_ADDR]], align 4
+// CHECK-NEXT:    [[CONV:%.*]] = sext i32 [[TMP1]] to i64
+// CHECK-NEXT:    [[ADD:%.*]] = add nsw i64 [[TMP0]], [[CONV]]
+// CHECK-NEXT:    [[TMP2:%.*]] = load i32, i32* [[C_ADDR]], align 4
+// CHECK-NEXT:    [[CONV1:%.*]] = sext i32 [[TMP2]] to i64
+// CHECK-NEXT:    [[ADD2:%.*]] = add nsw i64 [[ADD]], [[CONV1]]
+// CHECK-NEXT:    ret i64 [[ADD2]]
+//
+__attribute__((overloadable)) long test(long a, int b, int c) {
+  return a + b + c;
+}

diff  --git a/llvm/test/tools/UpdateTestChecks/update_cc_test_checks/Inputs/mangled_names.c.funcsig.expected b/llvm/test/tools/UpdateTestChecks/update_cc_test_checks/Inputs/mangled_names.c.funcsig.expected
new file mode 100644
index 000000000000..ef6340340b10
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_cc_test_checks/Inputs/mangled_names.c.funcsig.expected
@@ -0,0 +1,43 @@
+// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
+// Example input for update_cc_test_checks
+// RUN: %clang_cc1 -triple=x86_64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck %s
+
+// CHECK-LABEL: define {{[^@]+}}@test
+// CHECK-SAME: (i64 [[A:%.*]], i32 [[B:%.*]]) #0
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 8
+// CHECK-NEXT:    [[B_ADDR:%.*]] = alloca i32, align 4
+// CHECK-NEXT:    store i64 [[A:%.*]], i64* [[A_ADDR]], align 8
+// CHECK-NEXT:    store i32 [[B:%.*]], i32* [[B_ADDR]], align 4
+// CHECK-NEXT:    [[TMP0:%.*]] = load i64, i64* [[A_ADDR]], align 8
+// CHECK-NEXT:    [[TMP1:%.*]] = load i32, i32* [[B_ADDR]], align 4
+// CHECK-NEXT:    [[CONV:%.*]] = sext i32 [[TMP1]] to i64
+// CHECK-NEXT:    [[ADD:%.*]] = add nsw i64 [[TMP0]], [[CONV]]
+// CHECK-NEXT:    ret i64 [[ADD]]
+//
+long test(long a, int b) {
+  return a + b;
+}
+
+// A function with a mangled name
+// CHECK-LABEL: define {{[^@]+}}@_Z4testlii
+// CHECK-SAME: (i64 [[A:%.*]], i32 [[B:%.*]], i32 [[C:%.*]]) #0
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:    [[A_ADDR:%.*]] = alloca i64, align 8
+// CHECK-NEXT:    [[B_ADDR:%.*]] = alloca i32, align 4
+// CHECK-NEXT:    [[C_ADDR:%.*]] = alloca i32, align 4
+// CHECK-NEXT:    store i64 [[A:%.*]], i64* [[A_ADDR]], align 8
+// CHECK-NEXT:    store i32 [[B:%.*]], i32* [[B_ADDR]], align 4
+// CHECK-NEXT:    store i32 [[C:%.*]], i32* [[C_ADDR]], align 4
+// CHECK-NEXT:    [[TMP0:%.*]] = load i64, i64* [[A_ADDR]], align 8
+// CHECK-NEXT:    [[TMP1:%.*]] = load i32, i32* [[B_ADDR]], align 4
+// CHECK-NEXT:    [[CONV:%.*]] = sext i32 [[TMP1]] to i64
+// CHECK-NEXT:    [[ADD:%.*]] = add nsw i64 [[TMP0]], [[CONV]]
+// CHECK-NEXT:    [[TMP2:%.*]] = load i32, i32* [[C_ADDR]], align 4
+// CHECK-NEXT:    [[CONV1:%.*]] = sext i32 [[TMP2]] to i64
+// CHECK-NEXT:    [[ADD2:%.*]] = add nsw i64 [[ADD]], [[CONV1]]
+// CHECK-NEXT:    ret i64 [[ADD2]]
+//
+__attribute__((overloadable)) long test(long a, int b, int c) {
+  return a + b + c;
+}

diff  --git a/llvm/test/tools/UpdateTestChecks/update_cc_test_checks/lit.local.cfg b/llvm/test/tools/UpdateTestChecks/update_cc_test_checks/lit.local.cfg
new file mode 100644
index 000000000000..99346daabcb0
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_cc_test_checks/lit.local.cfg
@@ -0,0 +1,3 @@
+# These tests require clang.
+if 'clang-binary' not in config.available_features:
+    config.unsupported = True

diff  --git a/llvm/test/tools/UpdateTestChecks/update_cc_test_checks/mangled_names.test b/llvm/test/tools/UpdateTestChecks/update_cc_test_checks/mangled_names.test
new file mode 100644
index 000000000000..082ed74304f0
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_cc_test_checks/mangled_names.test
@@ -0,0 +1,13 @@
+## Basic test checking that update_cc_test_checks.py works as expected for
+## functions with mangled names
+# RUN: cp -f %S/Inputs/mangled_names.c %t.c && %update_cc_test_checks -v %t.c
+# RUN: 
diff  -u %t.c %S/Inputs/mangled_names.c.expected
+## Check that running the script again does not change the result:
+# RUN: %update_cc_test_checks -v %t.c
+# RUN: 
diff  -u %t.c %S/Inputs/mangled_names.c.expected
+## Also try the --function-signature flag
+# RUN: %update_cc_test_checks %t.c --function-signature
+# RUN: 
diff  -u %t.c %S/Inputs/mangled_names.c.funcsig.expected
+## Verify that running without the --function-signature flag removes the -SAME: lines:
+# RUN: %update_cc_test_checks %t.c
+# RUN: 
diff  -u %t.c %S/Inputs/mangled_names.c.expected

diff  --git a/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/basic.ll b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/basic.ll
new file mode 100644
index 000000000000..d95d948231b1
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/basic.ll
@@ -0,0 +1,32 @@
+; Example input for update_llc_test_checks (taken from CodeGen/X86/iabs.ll)
+; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s --check-prefix=X86 --check-prefix=X86-NO-CMOV
+; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+cmov | FileCheck %s --check-prefix=X86 --check-prefix=X86-CMOV
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefix=X64
+
+define i8 @test_i8(i8 %a) nounwind {
+  %tmp1neg = sub i8 0, %a
+  %b = icmp sgt i8 %a, -1
+  %abs = select i1 %b, i8 %a, i8 %tmp1neg
+  ret i8 %abs
+}
+
+define i16 @test_i16(i16 %a) nounwind {
+  %tmp1neg = sub i16 0, %a
+  %b = icmp sgt i16 %a, -1
+  %abs = select i1 %b, i16 %a, i16 %tmp1neg
+  ret i16 %abs
+}
+
+define i32 @test_i32(i32 %a) nounwind {
+  %tmp1neg = sub i32 0, %a
+  %b = icmp sgt i32 %a, -1
+  %abs = select i1 %b, i32 %a, i32 %tmp1neg
+  ret i32 %abs
+}
+
+define i64 @test_i64(i64 %a) nounwind {
+  %tmp1neg = sub i64 0, %a
+  %b = icmp sgt i64 %a, -1
+  %abs = select i1 %b, i64 %a, i64 %tmp1neg
+  ret i64 %abs
+}

diff  --git a/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/basic.ll.expected b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/basic.ll.expected
new file mode 100644
index 000000000000..96b06de79c93
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/basic.ll.expected
@@ -0,0 +1,116 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; Example input for update_llc_test_checks (taken from CodeGen/X86/iabs.ll)
+; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s --check-prefix=X86 --check-prefix=X86-NO-CMOV
+; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+cmov | FileCheck %s --check-prefix=X86 --check-prefix=X86-CMOV
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefix=X64
+
+define i8 @test_i8(i8 %a) nounwind {
+; X86-LABEL: test_i8:
+; X86:       # %bb.0:
+; X86-NEXT:    movb {{[0-9]+}}(%esp), %al
+; X86-NEXT:    movl %eax, %ecx
+; X86-NEXT:    sarb $7, %cl
+; X86-NEXT:    addb %cl, %al
+; X86-NEXT:    xorb %cl, %al
+; X86-NEXT:    retl
+;
+; X64-LABEL: test_i8:
+; X64:       # %bb.0:
+; X64-NEXT:    # kill: def $edi killed $edi def $rdi
+; X64-NEXT:    movl %edi, %ecx
+; X64-NEXT:    sarb $7, %cl
+; X64-NEXT:    leal (%rdi,%rcx), %eax
+; X64-NEXT:    xorb %cl, %al
+; X64-NEXT:    # kill: def $al killed $al killed $eax
+; X64-NEXT:    retq
+  %tmp1neg = sub i8 0, %a
+  %b = icmp sgt i8 %a, -1
+  %abs = select i1 %b, i8 %a, i8 %tmp1neg
+  ret i8 %abs
+}
+
+define i16 @test_i16(i16 %a) nounwind {
+; X86-NO-CMOV-LABEL: test_i16:
+; X86-NO-CMOV:       # %bb.0:
+; X86-NO-CMOV-NEXT:    movswl {{[0-9]+}}(%esp), %eax
+; X86-NO-CMOV-NEXT:    movl %eax, %ecx
+; X86-NO-CMOV-NEXT:    sarl $15, %ecx
+; X86-NO-CMOV-NEXT:    addl %ecx, %eax
+; X86-NO-CMOV-NEXT:    xorl %ecx, %eax
+; X86-NO-CMOV-NEXT:    # kill: def $ax killed $ax killed $eax
+; X86-NO-CMOV-NEXT:    retl
+;
+; X86-CMOV-LABEL: test_i16:
+; X86-CMOV:       # %bb.0:
+; X86-CMOV-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
+; X86-CMOV-NEXT:    movl %ecx, %eax
+; X86-CMOV-NEXT:    negw %ax
+; X86-CMOV-NEXT:    cmovlw %cx, %ax
+; X86-CMOV-NEXT:    retl
+;
+; X64-LABEL: test_i16:
+; X64:       # %bb.0:
+; X64-NEXT:    movl %edi, %eax
+; X64-NEXT:    negw %ax
+; X64-NEXT:    cmovlw %di, %ax
+; X64-NEXT:    retq
+  %tmp1neg = sub i16 0, %a
+  %b = icmp sgt i16 %a, -1
+  %abs = select i1 %b, i16 %a, i16 %tmp1neg
+  ret i16 %abs
+}
+
+define i32 @test_i32(i32 %a) nounwind {
+; X86-NO-CMOV-LABEL: test_i32:
+; X86-NO-CMOV:       # %bb.0:
+; X86-NO-CMOV-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-NO-CMOV-NEXT:    movl %eax, %ecx
+; X86-NO-CMOV-NEXT:    sarl $31, %ecx
+; X86-NO-CMOV-NEXT:    addl %ecx, %eax
+; X86-NO-CMOV-NEXT:    xorl %ecx, %eax
+; X86-NO-CMOV-NEXT:    retl
+;
+; X86-CMOV-LABEL: test_i32:
+; X86-CMOV:       # %bb.0:
+; X86-CMOV-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; X86-CMOV-NEXT:    movl %ecx, %eax
+; X86-CMOV-NEXT:    negl %eax
+; X86-CMOV-NEXT:    cmovll %ecx, %eax
+; X86-CMOV-NEXT:    retl
+;
+; X64-LABEL: test_i32:
+; X64:       # %bb.0:
+; X64-NEXT:    movl %edi, %eax
+; X64-NEXT:    negl %eax
+; X64-NEXT:    cmovll %edi, %eax
+; X64-NEXT:    retq
+  %tmp1neg = sub i32 0, %a
+  %b = icmp sgt i32 %a, -1
+  %abs = select i1 %b, i32 %a, i32 %tmp1neg
+  ret i32 %abs
+}
+
+define i64 @test_i64(i64 %a) nounwind {
+; X86-LABEL: test_i64:
+; X86:       # %bb.0:
+; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-NEXT:    movl %edx, %ecx
+; X86-NEXT:    sarl $31, %ecx
+; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-NEXT:    addl %ecx, %eax
+; X86-NEXT:    adcl %ecx, %edx
+; X86-NEXT:    xorl %ecx, %edx
+; X86-NEXT:    xorl %ecx, %eax
+; X86-NEXT:    retl
+;
+; X64-LABEL: test_i64:
+; X64:       # %bb.0:
+; X64-NEXT:    movq %rdi, %rax
+; X64-NEXT:    negq %rax
+; X64-NEXT:    cmovlq %rdi, %rax
+; X64-NEXT:    retq
+  %tmp1neg = sub i64 0, %a
+  %b = icmp sgt i64 %a, -1
+  %abs = select i1 %b, i64 %a, i64 %tmp1neg
+  ret i64 %abs
+}

diff  --git a/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/basic.test b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/basic.test
new file mode 100644
index 000000000000..74c2b6cd70ed
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/basic.test
@@ -0,0 +1,15 @@
+# REQUIRES: x86-registered-target
+## Basic test checking that update_llc_test_checks.py can update a file with multiple check prefixes
+
+# RUN: cp -f %S/Inputs/basic.ll %t.ll && %update_llc_test_checks %t.ll
+# RUN: 
diff  -u %S/Inputs/basic.ll.expected %t.ll
+## The flags --x86_scrub_rip and --extra_scrub should have any effect for this
+## test. Check the output is identical.
+# RUN: cp -f %S/Inputs/basic.ll %t.ll &&  %update_llc_test_checks --extra_scrub %t.ll
+# RUN: 
diff  -u %S/Inputs/basic.ll.expected %t.ll
+# RUN: cp -f %S/Inputs/basic.ll %t.ll &&  %update_llc_test_checks --x86_scrub_rip %t.ll
+# RUN: 
diff  -u %S/Inputs/basic.ll.expected %t.ll
+## Finally, run the script on an already updated file and verify that all previous
+## CHECK lines are removed.
+# RUN: %update_llc_test_checks %t.ll
+# RUN: 
diff  -u %S/Inputs/basic.ll.expected %t.ll

diff  --git a/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/lit.local.cfg b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/lit.local.cfg
new file mode 100644
index 000000000000..60eb2b6ae521
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/lit.local.cfg
@@ -0,0 +1,3 @@
+# These tests require llc.
+if 'llc-binary' not in config.available_features:
+    config.unsupported = True

diff  --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/basic.ll b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/basic.ll
new file mode 100644
index 000000000000..7189eb4856ea
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/basic.ll
@@ -0,0 +1,49 @@
+; Example input for update_llc_test_checks (taken from test/Transforms/InstSimplify/add.ll)
+; RUN: opt < %s -instsimplify -S | FileCheck %s
+
+define i32 @common_sub_operand(i32 %X, i32 %Y) {
+; CHECK-LABEL: @common_sub_operand(
+; CHECK-NEXT:    ret i32 [[X:%.*]]
+;
+  %Z = sub i32 %X, %Y
+  %Q = add i32 %Z, %Y
+  ret i32 %Q
+}
+
+define i32 @negated_operand(i32 %x) {
+; CHECK-LABEL: @negated_operand(
+; CHECK-NEXT:    ret i32 0
+;
+  %negx = sub i32 0, %x
+  %r = add i32 %negx, %x
+  ret i32 %r
+}
+
+define <2 x i32> @negated_operand_commute_vec(<2 x i32> %x) {
+; CHECK-LABEL: @negated_operand_commute_vec(
+; CHECK-NEXT:    ret <2 x i32> zeroinitializer
+;
+  %negx = sub <2 x i32> zeroinitializer, %x
+  %r = add <2 x i32> %x, %negx
+  ret <2 x i32> %r
+}
+
+define i8 @knownnegation(i8 %x, i8 %y) {
+; CHECK-LABEL: @knownnegation(
+; CHECK-NEXT:    ret i8 0
+;
+  %xy = sub i8 %x, %y
+  %yx = sub i8 %y, %x
+  %r = add i8 %xy, %yx
+  ret i8 %r
+}
+
+define <2 x i8> @knownnegation_commute_vec(<2 x i8> %x, <2 x i8> %y) {
+; CHECK-LABEL: @knownnegation_commute_vec(
+; CHECK-NEXT:    ret <2 x i8> zeroinitializer
+;
+  %xy = sub <2 x i8> %x, %y
+  %yx = sub <2 x i8> %y, %x
+  %r = add <2 x i8> %yx, %xy
+  ret <2 x i8> %r
+}

diff  --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/basic.ll.expected b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/basic.ll.expected
new file mode 100644
index 000000000000..71abc6aec376
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/basic.ll.expected
@@ -0,0 +1,50 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; Example input for update_llc_test_checks (taken from test/Transforms/InstSimplify/add.ll)
+; RUN: opt < %s -instsimplify -S | FileCheck %s
+
+define i32 @common_sub_operand(i32 %X, i32 %Y) {
+; CHECK-LABEL: @common_sub_operand(
+; CHECK-NEXT:    ret i32 [[X:%.*]]
+;
+  %Z = sub i32 %X, %Y
+  %Q = add i32 %Z, %Y
+  ret i32 %Q
+}
+
+define i32 @negated_operand(i32 %x) {
+; CHECK-LABEL: @negated_operand(
+; CHECK-NEXT:    ret i32 0
+;
+  %negx = sub i32 0, %x
+  %r = add i32 %negx, %x
+  ret i32 %r
+}
+
+define <2 x i32> @negated_operand_commute_vec(<2 x i32> %x) {
+; CHECK-LABEL: @negated_operand_commute_vec(
+; CHECK-NEXT:    ret <2 x i32> zeroinitializer
+;
+  %negx = sub <2 x i32> zeroinitializer, %x
+  %r = add <2 x i32> %x, %negx
+  ret <2 x i32> %r
+}
+
+define i8 @knownnegation(i8 %x, i8 %y) {
+; CHECK-LABEL: @knownnegation(
+; CHECK-NEXT:    ret i8 0
+;
+  %xy = sub i8 %x, %y
+  %yx = sub i8 %y, %x
+  %r = add i8 %xy, %yx
+  ret i8 %r
+}
+
+define <2 x i8> @knownnegation_commute_vec(<2 x i8> %x, <2 x i8> %y) {
+; CHECK-LABEL: @knownnegation_commute_vec(
+; CHECK-NEXT:    ret <2 x i8> zeroinitializer
+;
+  %xy = sub <2 x i8> %x, %y
+  %yx = sub <2 x i8> %y, %x
+  %r = add <2 x i8> %yx, %xy
+  ret <2 x i8> %r
+}

diff  --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/basic.ll.funcsig.expected b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/basic.ll.funcsig.expected
new file mode 100644
index 000000000000..76f9f447c3fe
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/basic.ll.funcsig.expected
@@ -0,0 +1,55 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; Example input for update_llc_test_checks (taken from test/Transforms/InstSimplify/add.ll)
+; RUN: opt < %s -instsimplify -S | FileCheck %s
+
+define i32 @common_sub_operand(i32 %X, i32 %Y) {
+; CHECK-LABEL: define {{[^@]+}}@common_sub_operand
+; CHECK-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]])
+; CHECK-NEXT:    ret i32 [[X:%.*]]
+;
+  %Z = sub i32 %X, %Y
+  %Q = add i32 %Z, %Y
+  ret i32 %Q
+}
+
+define i32 @negated_operand(i32 %x) {
+; CHECK-LABEL: define {{[^@]+}}@negated_operand
+; CHECK-SAME: (i32 [[X:%.*]])
+; CHECK-NEXT:    ret i32 0
+;
+  %negx = sub i32 0, %x
+  %r = add i32 %negx, %x
+  ret i32 %r
+}
+
+define <2 x i32> @negated_operand_commute_vec(<2 x i32> %x) {
+; CHECK-LABEL: define {{[^@]+}}@negated_operand_commute_vec
+; CHECK-SAME: (<2 x i32> [[X:%.*]])
+; CHECK-NEXT:    ret <2 x i32> zeroinitializer
+;
+  %negx = sub <2 x i32> zeroinitializer, %x
+  %r = add <2 x i32> %x, %negx
+  ret <2 x i32> %r
+}
+
+define i8 @knownnegation(i8 %x, i8 %y) {
+; CHECK-LABEL: define {{[^@]+}}@knownnegation
+; CHECK-SAME: (i8 [[X:%.*]], i8 [[Y:%.*]])
+; CHECK-NEXT:    ret i8 0
+;
+  %xy = sub i8 %x, %y
+  %yx = sub i8 %y, %x
+  %r = add i8 %xy, %yx
+  ret i8 %r
+}
+
+define <2 x i8> @knownnegation_commute_vec(<2 x i8> %x, <2 x i8> %y) {
+; CHECK-LABEL: define {{[^@]+}}@knownnegation_commute_vec
+; CHECK-SAME: (<2 x i8> [[X:%.*]], <2 x i8> [[Y:%.*]])
+; CHECK-NEXT:    ret <2 x i8> zeroinitializer
+;
+  %xy = sub <2 x i8> %x, %y
+  %yx = sub <2 x i8> %y, %x
+  %r = add <2 x i8> %yx, %xy
+  ret <2 x i8> %r
+}

diff  --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/basic.test b/llvm/test/tools/UpdateTestChecks/update_test_checks/basic.test
new file mode 100644
index 000000000000..023cccc481ee
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/basic.test
@@ -0,0 +1,13 @@
+# REQUIRES: x86-registered-target
+## Basic test checking that update_test_checks.py works correctly
+# RUN: cp -f %S/Inputs/basic.ll %t.ll && %update_test_checks %t.ll
+# RUN: 
diff  -u %t.ll %S/Inputs/basic.ll.expected
+## Check that running the script again does not change the result:
+# RUN: %update_test_checks %t.ll
+# RUN: 
diff  -u %t.ll %S/Inputs/basic.ll.expected
+## Also try the --function-signature flag
+# RUN: %update_test_checks %t.ll --function-signature
+# RUN: 
diff  -u %t.ll %S/Inputs/basic.ll.funcsig.expected
+## Verify that running without the --function-signature flag removes the -SAME: lines:
+# RUN: %update_test_checks %t.ll
+# RUN: 
diff  -u %t.ll %S/Inputs/basic.ll.expected

diff  --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/lit.local.cfg b/llvm/test/tools/UpdateTestChecks/update_test_checks/lit.local.cfg
new file mode 100644
index 000000000000..f6860f438a40
--- /dev/null
+++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/lit.local.cfg
@@ -0,0 +1,3 @@
+# These tests require llc.
+if 'opt-binary' not in config.available_features:
+    config.unsupported = True


        


More information about the llvm-commits mailing list