From 523896f64a4c4b586a5fbcf676181826d2c0fbd0 Mon Sep 17 00:00:00 2001 From: Alex Richardson Date: Thu, 30 Jan 2020 14:36:43 +0000 Subject: [PATCH] Bring back the tests for update_cc_tests_checks.py The tests were removed in 287307a0c60b68099d5f9dd22ac1db2a42593533 to avoid a dependency on python3. update_cc_tests_checks.py also works with python2 so restore the tests without the python3 dependency. --- llvm/test/tools/UpdateTestChecks/lit.local.cfg | 27 +++++++++----- .../update_cc_test_checks/Inputs/mangled_names.c | 11 ++++++ .../Inputs/mangled_names.c.expected | 41 +++++++++++++++++++++ .../Inputs/mangled_names.c.funcsig.expected | 43 ++++++++++++++++++++++ .../update_cc_test_checks/lit.local.cfg | 3 ++ .../update_cc_test_checks/mangled_names.test | 18 +++++++++ 6 files changed, 134 insertions(+), 9 deletions(-) create mode 100644 llvm/test/tools/UpdateTestChecks/update_cc_test_checks/Inputs/mangled_names.c create mode 100644 llvm/test/tools/UpdateTestChecks/update_cc_test_checks/Inputs/mangled_names.c.expected create mode 100644 llvm/test/tools/UpdateTestChecks/update_cc_test_checks/Inputs/mangled_names.c.funcsig.expected create mode 100644 llvm/test/tools/UpdateTestChecks/update_cc_test_checks/lit.local.cfg create mode 100644 llvm/test/tools/UpdateTestChecks/update_cc_test_checks/mangled_names.test diff --git a/llvm/test/tools/UpdateTestChecks/lit.local.cfg b/llvm/test/tools/UpdateTestChecks/lit.local.cfg index c72935f..74164e8 100644 --- a/llvm/test/tools/UpdateTestChecks/lit.local.cfg +++ b/llvm/test/tools/UpdateTestChecks/lit.local.cfg @@ -10,12 +10,13 @@ except ImportError: from pipes import quote as shell_quote -def add_update_script_substition(name, extra_args=''): - script_path = os.path.join(config.llvm_src_root, 'utils', name + '.py') +def add_update_script_substition(name, python_exe=config.python_executable, + extra_args=''): + assert name.startswith('%') + script_path = os.path.join(config.llvm_src_root, 'utils', name[1:] + '.py') assert os.path.isfile(script_path) config.substitutions.append( - ('%' + name, "'%s' %s %s" % ( - config.python_executable, script_path, extra_args))) + (name, "'%s' %s %s" % (python_exe, script_path, extra_args))) config.test_format = lit.formats.ShTest(execute_external=False) @@ -25,19 +26,27 @@ 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) + 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', + 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) + add_update_script_substition('%update_test_checks', extra_args=mca_arg) + +clang_path = os.path.join(config.llvm_tools_dir, 'clang') +if os.path.isfile(clang_path): + config.available_features.add('clang-binary') + 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', 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..4d2b66f --- /dev/null +++ b/llvm/test/tools/UpdateTestChecks/update_cc_test_checks/mangled_names.test @@ -0,0 +1,18 @@ +## Basic test checking that update_cc_test_checks.py works as expected for +## functions with mangled names + +# %update_cc_test_checks is only set if python3 is on the path. +# FIXME: Is this the best approach? See discussion on D70660. +# REQUIRES: python3 + +# 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 -- 2.7.4