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