You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.3 KiB
64 lines
1.3 KiB
#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 |
|
}
|
|
|