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 void intel() {
8   if (__builtin_cpu_is("intel"))
9     a("intel");
10 
11   // 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)
12   // CHECK: = icmp eq i32 [[LOAD]], 1
13 }
14 
15 void amd() {
16   if (__builtin_cpu_is("amd"))
17     a("amd");
18 
19   // 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)
20   // CHECK: = icmp eq i32 [[LOAD]], 2
21 }
22 
23 void atom() {
24   if (__builtin_cpu_is("atom"))
25     a("atom");
26 
27   // 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)
28   // CHECK: = icmp eq i32 [[LOAD]], 1
29 }
30 
31 void amdfam10h() {
32   if (__builtin_cpu_is("amdfam10h"))
33     a("amdfam10h");
34 
35   // 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)
36   // CHECK: = icmp eq i32 [[LOAD]], 4
37 }
38 
39 void barcelona() {
40   if (__builtin_cpu_is("barcelona"))
41     a("barcelona");
42 
43   // 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)
44   // CHECK: = icmp eq i32 [[LOAD]], 4
45 }
46 
47 void nehalem() {
48   if (__builtin_cpu_is("nehalem"))
49     a("nehalem");
50 
51   // 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)
52   // CHECK: = icmp eq i32 [[LOAD]], 1
53 }
54