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.
65 lines
1.3 KiB
65 lines
1.3 KiB
2 years ago
|
#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
|
||
|
}
|