[llvm-readobj] - Implement LLVM-style dumping for .stack_sizes sections.
[llvm-complete.git] / utils / benchmark / test / clobber_memory_assembly_test.cc
blobf41911a39ce739efc37939b82b1dc7111cb1c8de
1 #include <benchmark/benchmark.h>
3 #ifdef __clang__
4 #pragma clang diagnostic ignored "-Wreturn-type"
5 #endif
7 extern "C" {
9 extern int ExternInt;
10 extern int ExternInt2;
11 extern int ExternInt3;
15 // CHECK-LABEL: test_basic:
16 extern "C" void test_basic() {
17 int x;
18 benchmark::DoNotOptimize(&x);
19 x = 101;
20 benchmark::ClobberMemory();
21 // CHECK: leaq [[DEST:[^,]+]], %rax
22 // CHECK: movl $101, [[DEST]]
23 // CHECK: ret
26 // CHECK-LABEL: test_redundant_store:
27 extern "C" void test_redundant_store() {
28 ExternInt = 3;
29 benchmark::ClobberMemory();
30 ExternInt = 51;
31 // CHECK-DAG: ExternInt
32 // CHECK-DAG: movl $3
33 // CHECK: movl $51
36 // CHECK-LABEL: test_redundant_read:
37 extern "C" void test_redundant_read() {
38 int x;
39 benchmark::DoNotOptimize(&x);
40 x = ExternInt;
41 benchmark::ClobberMemory();
42 x = ExternInt2;
43 // CHECK: leaq [[DEST:[^,]+]], %rax
44 // CHECK: ExternInt(%rip)
45 // CHECK: movl %eax, [[DEST]]
46 // CHECK-NOT: ExternInt2
47 // CHECK: ret
50 // CHECK-LABEL: test_redundant_read2:
51 extern "C" void test_redundant_read2() {
52 int x;
53 benchmark::DoNotOptimize(&x);
54 x = ExternInt;
55 benchmark::ClobberMemory();
56 x = ExternInt2;
57 benchmark::ClobberMemory();
58 // CHECK: leaq [[DEST:[^,]+]], %rax
59 // CHECK: ExternInt(%rip)
60 // CHECK: movl %eax, [[DEST]]
61 // CHECK: ExternInt2(%rip)
62 // CHECK: movl %eax, [[DEST]]
63 // CHECK: ret