12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #include <benchmark/benchmark.h>
- #ifdef __clang__
- #pragma clang diagnostic ignored "-Wreturn-type"
- #endif
- extern "C" {
- extern int ExternInt;
- extern int ExternInt2;
- extern int ExternInt3;
- }
- // CHECK-LABEL: test_basic:
- extern "C" void test_basic() {
- int x;
- benchmark::DoNotOptimize(&x);
- x = 101;
- benchmark::ClobberMemory();
- // CHECK: leaq [[DEST:[^,]+]], %rax
- // CHECK: movl $101, [[DEST]]
- // CHECK: ret
- }
- // CHECK-LABEL: test_redundant_store:
- extern "C" void test_redundant_store() {
- ExternInt = 3;
- benchmark::ClobberMemory();
- ExternInt = 51;
- // CHECK-DAG: ExternInt
- // CHECK-DAG: movl $3
- // CHECK: movl $51
- }
- // CHECK-LABEL: test_redundant_read:
- extern "C" void test_redundant_read() {
- int x;
- benchmark::DoNotOptimize(&x);
- x = ExternInt;
- benchmark::ClobberMemory();
- x = ExternInt2;
- // CHECK: leaq [[DEST:[^,]+]], %rax
- // CHECK: ExternInt(%rip)
- // CHECK: movl %eax, [[DEST]]
- // CHECK-NOT: ExternInt2
- // CHECK: ret
- }
- // CHECK-LABEL: test_redundant_read2:
- extern "C" void test_redundant_read2() {
- int x;
- benchmark::DoNotOptimize(&x);
- x = ExternInt;
- benchmark::ClobberMemory();
- x = ExternInt2;
- benchmark::ClobberMemory();
- // CHECK: leaq [[DEST:[^,]+]], %rax
- // CHECK: ExternInt(%rip)
- // CHECK: movl %eax, [[DEST]]
- // CHECK: ExternInt2(%rip)
- // CHECK: movl %eax, [[DEST]]
- // CHECK: ret
- }
|