From: Alex Richardson Date: Fri, 13 Dec 2019 10:25:15 +0000 (+0000) Subject: Add initial tests for update_{llc_,cc_,}test_checks.py X-Git-Tag: llvmorg-11-init~2075 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=240aff80e0e59b79779d046b3275904fc0750d59;p=platform%2Fupstream%2Fllvm.git 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 --- diff --git a/llvm/test/tools/UpdateTestChecks/lit.local.cfg b/llvm/test/tools/UpdateTestChecks/lit.local.cfg new file mode 100644 index 0000000..f6b35f4 --- /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 0000000..01e42a3 --- /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 0000000..d6ba7ae --- /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 0000000..ef63403 --- /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 0000000..99346da --- /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 0000000..082ed74 --- /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 0000000..d95d948 --- /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 0000000..96b06de --- /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 0000000..74c2b6c --- /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 0000000..60eb2b6 --- /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 0000000..7189eb4 --- /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 0000000..71abc6a --- /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 0000000..76f9f44 --- /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 0000000..023cccc --- /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 0000000..f6860f4 --- /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