1 // RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -emit-llvm < %s| FileCheck %s
2
3 // Test that we have the structure definition, the gep offsets, the name of the
4 // global, the bit grab, and the icmp correct.
5 extern void a(const char *);
6
7 // CHECK: @__cpu_model = external dso_local global { i32, i32, i32, [1 x i32] }
8
intel(void)9 void intel(void) {
10 if (__builtin_cpu_is("intel"))
11 a("intel");
12
13 // CHECK: [[LOAD:%[^ ]+]] = load i32, ptr @__cpu_model
14 // CHECK: = icmp eq i32 [[LOAD]], 1
15 }
16
amd(void)17 void amd(void) {
18 if (__builtin_cpu_is("amd"))
19 a("amd");
20
21 // CHECK: [[LOAD:%[^ ]+]] = load i32, ptr @__cpu_model
22 // CHECK: = icmp eq i32 [[LOAD]], 2
23 }
24
atom(void)25 void atom(void) {
26 if (__builtin_cpu_is("atom"))
27 a("atom");
28
29 // CHECK: [[LOAD:%[^ ]+]] = load i32, ptr getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, ptr @__cpu_model, i32 0, i32 1)
30 // CHECK: = icmp eq i32 [[LOAD]], 1
31 }
32
amdfam10h(void)33 void amdfam10h(void) {
34 if (__builtin_cpu_is("amdfam10h"))
35 a("amdfam10h");
36
37 // CHECK: [[LOAD:%[^ ]+]] = load i32, ptr getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, ptr @__cpu_model, i32 0, i32 1)
38 // CHECK: = icmp eq i32 [[LOAD]], 4
39 }
40
barcelona(void)41 void barcelona(void) {
42 if (__builtin_cpu_is("barcelona"))
43 a("barcelona");
44
45 // CHECK: [[LOAD:%[^ ]+]] = load i32, ptr getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, ptr @__cpu_model, i32 0, i32 2)
46 // CHECK: = icmp eq i32 [[LOAD]], 4
47 }
48
nehalem(void)49 void nehalem(void) {
50 if (__builtin_cpu_is("nehalem"))
51 a("nehalem");
52
53 // CHECK: [[LOAD:%[^ ]+]] = load i32, ptr getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, ptr @__cpu_model, i32 0, i32 2)
54 // CHECK: = icmp eq i32 [[LOAD]], 1
55 }
56