diff options
Diffstat (limited to 'test/CodeGen/builtin-cpu-is.c')
-rw-r--r-- | test/CodeGen/builtin-cpu-is.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/test/CodeGen/builtin-cpu-is.c b/test/CodeGen/builtin-cpu-is.c new file mode 100644 index 0000000000000..f2a5f54a0c808 --- /dev/null +++ b/test/CodeGen/builtin-cpu-is.c @@ -0,0 +1,53 @@ +// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -emit-llvm < %s| FileCheck %s + +// Test that we have the structure definition, the gep offsets, the name of the +// global, the bit grab, and the icmp correct. +extern void a(const char *); + +void intel() { + if (__builtin_cpu_is("intel")) + a("intel"); + + // CHECK: [[LOAD:%[^ ]+]] = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 0) + // CHECK: = icmp eq i32 [[LOAD]], 1 +} + +void amd() { + if (__builtin_cpu_is("amd")) + a("amd"); + + // CHECK: [[LOAD:%[^ ]+]] = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 0) + // CHECK: = icmp eq i32 [[LOAD]], 2 +} + +void atom() { + if (__builtin_cpu_is("atom")) + a("atom"); + + // CHECK: [[LOAD:%[^ ]+]] = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 1) + // CHECK: = icmp eq i32 [[LOAD]], 1 +} + +void amdfam10h() { + if (__builtin_cpu_is("amdfam10h")) + a("amdfam10h"); + + // CHECK: [[LOAD:%[^ ]+]] = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 1) + // CHECK: = icmp eq i32 [[LOAD]], 4 +} + +void barcelona() { + if (__builtin_cpu_is("barcelona")) + a("barcelona"); + + // CHECK: [[LOAD:%[^ ]+]] = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 2) + // CHECK: = icmp eq i32 [[LOAD]], 4 +} + +void nehalem() { + if (__builtin_cpu_is("nehalem")) + a("nehalem"); + + // CHECK: [[LOAD:%[^ ]+]] = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 2) + // CHECK: = icmp eq i32 [[LOAD]], 1 +} |