diff options
Diffstat (limited to 'lib/libcxx/utils/google-benchmark/test/donotoptimize_assembly_test.cc')
-rw-r--r-- | lib/libcxx/utils/google-benchmark/test/donotoptimize_assembly_test.cc | 163 |
1 files changed, 0 insertions, 163 deletions
diff --git a/lib/libcxx/utils/google-benchmark/test/donotoptimize_assembly_test.cc b/lib/libcxx/utils/google-benchmark/test/donotoptimize_assembly_test.cc deleted file mode 100644 index d4b0bab70e7..00000000000 --- a/lib/libcxx/utils/google-benchmark/test/donotoptimize_assembly_test.cc +++ /dev/null @@ -1,163 +0,0 @@ -#include <benchmark/benchmark.h> - -#ifdef __clang__ -#pragma clang diagnostic ignored "-Wreturn-type" -#endif - -extern "C" { - -extern int ExternInt; -extern int ExternInt2; -extern int ExternInt3; - -inline int Add42(int x) { return x + 42; } - -struct NotTriviallyCopyable { - NotTriviallyCopyable(); - explicit NotTriviallyCopyable(int x) : value(x) {} - NotTriviallyCopyable(NotTriviallyCopyable const&); - int value; -}; - -struct Large { - int value; - int data[2]; -}; - -} -// CHECK-LABEL: test_with_rvalue: -extern "C" void test_with_rvalue() { - benchmark::DoNotOptimize(Add42(0)); - // CHECK: movl $42, %eax - // CHECK: ret -} - -// CHECK-LABEL: test_with_large_rvalue: -extern "C" void test_with_large_rvalue() { - benchmark::DoNotOptimize(Large{ExternInt, {ExternInt, ExternInt}}); - // CHECK: ExternInt(%rip) - // CHECK: movl %eax, -{{[0-9]+}}(%[[REG:[a-z]+]] - // CHECK: movl %eax, -{{[0-9]+}}(%[[REG]]) - // CHECK: movl %eax, -{{[0-9]+}}(%[[REG]]) - // CHECK: ret -} - -// CHECK-LABEL: test_with_non_trivial_rvalue: -extern "C" void test_with_non_trivial_rvalue() { - benchmark::DoNotOptimize(NotTriviallyCopyable(ExternInt)); - // CHECK: mov{{l|q}} ExternInt(%rip) - // CHECK: ret -} - -// CHECK-LABEL: test_with_lvalue: -extern "C" void test_with_lvalue() { - int x = 101; - benchmark::DoNotOptimize(x); - // CHECK-GNU: movl $101, %eax - // CHECK-CLANG: movl $101, -{{[0-9]+}}(%[[REG:[a-z]+]]) - // CHECK: ret -} - -// CHECK-LABEL: test_with_large_lvalue: -extern "C" void test_with_large_lvalue() { - Large L{ExternInt, {ExternInt, ExternInt}}; - benchmark::DoNotOptimize(L); - // CHECK: ExternInt(%rip) - // CHECK: movl %eax, -{{[0-9]+}}(%[[REG:[a-z]+]]) - // CHECK: movl %eax, -{{[0-9]+}}(%[[REG]]) - // CHECK: movl %eax, -{{[0-9]+}}(%[[REG]]) - // CHECK: ret -} - -// CHECK-LABEL: test_with_non_trivial_lvalue: -extern "C" void test_with_non_trivial_lvalue() { - NotTriviallyCopyable NTC(ExternInt); - benchmark::DoNotOptimize(NTC); - // CHECK: ExternInt(%rip) - // CHECK: movl %eax, -{{[0-9]+}}(%[[REG:[a-z]+]]) - // CHECK: ret -} - -// CHECK-LABEL: test_with_const_lvalue: -extern "C" void test_with_const_lvalue() { - const int x = 123; - benchmark::DoNotOptimize(x); - // CHECK: movl $123, %eax - // CHECK: ret -} - -// CHECK-LABEL: test_with_large_const_lvalue: -extern "C" void test_with_large_const_lvalue() { - const Large L{ExternInt, {ExternInt, ExternInt}}; - benchmark::DoNotOptimize(L); - // CHECK: ExternInt(%rip) - // CHECK: movl %eax, -{{[0-9]+}}(%[[REG:[a-z]+]]) - // CHECK: movl %eax, -{{[0-9]+}}(%[[REG]]) - // CHECK: movl %eax, -{{[0-9]+}}(%[[REG]]) - // CHECK: ret -} - -// CHECK-LABEL: test_with_non_trivial_const_lvalue: -extern "C" void test_with_non_trivial_const_lvalue() { - const NotTriviallyCopyable Obj(ExternInt); - benchmark::DoNotOptimize(Obj); - // CHECK: mov{{q|l}} ExternInt(%rip) - // CHECK: ret -} - -// CHECK-LABEL: test_div_by_two: -extern "C" int test_div_by_two(int input) { - int divisor = 2; - benchmark::DoNotOptimize(divisor); - return input / divisor; - // CHECK: movl $2, [[DEST:.*]] - // CHECK: idivl [[DEST]] - // CHECK: ret -} - -// CHECK-LABEL: test_inc_integer: -extern "C" int test_inc_integer() { - int x = 0; - for (int i=0; i < 5; ++i) - benchmark::DoNotOptimize(++x); - // CHECK: movl $1, [[DEST:.*]] - // CHECK: {{(addl \$1,|incl)}} [[DEST]] - // CHECK: {{(addl \$1,|incl)}} [[DEST]] - // CHECK: {{(addl \$1,|incl)}} [[DEST]] - // CHECK: {{(addl \$1,|incl)}} [[DEST]] - // CHECK-CLANG: movl [[DEST]], %eax - // CHECK: ret - return x; -} - -// CHECK-LABEL: test_pointer_rvalue -extern "C" void test_pointer_rvalue() { - // CHECK: movl $42, [[DEST:.*]] - // CHECK: leaq [[DEST]], %rax - // CHECK-CLANG: movq %rax, -{{[0-9]+}}(%[[REG:[a-z]+]]) - // CHECK: ret - int x = 42; - benchmark::DoNotOptimize(&x); -} - -// CHECK-LABEL: test_pointer_const_lvalue: -extern "C" void test_pointer_const_lvalue() { - // CHECK: movl $42, [[DEST:.*]] - // CHECK: leaq [[DEST]], %rax - // CHECK-CLANG: movq %rax, -{{[0-9]+}}(%[[REG:[a-z]+]]) - // CHECK: ret - int x = 42; - int * const xp = &x; - benchmark::DoNotOptimize(xp); -} - -// CHECK-LABEL: test_pointer_lvalue: -extern "C" void test_pointer_lvalue() { - // CHECK: movl $42, [[DEST:.*]] - // CHECK: leaq [[DEST]], %rax - // CHECK-CLANG: movq %rax, -{{[0-9]+}}(%[[REG:[a-z+]+]]) - // CHECK: ret - int x = 42; - int *xp = &x; - benchmark::DoNotOptimize(xp); -} |