Use the DataLayout-aware TargetFolder instead of ConstantFolder in Clang's CGBuilder. The primary impact of this change is that GEP constant expressions are now emitted in canonical `getelementptr i8` form. This is in preparation for the migration to ptradd, which requires this form. Part of the test updates were performed by Claude Code and reviewed by me.
56 lines
1.5 KiB
C
56 lines
1.5 KiB
C
// 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 *);
|
|
|
|
// CHECK: @__cpu_model = external dso_local global { i32, i32, i32, [1 x i32] }
|
|
|
|
void intel(void) {
|
|
if (__builtin_cpu_is("intel"))
|
|
a("intel");
|
|
|
|
// CHECK: [[LOAD:%[^ ]+]] = load i32, ptr @__cpu_model
|
|
// CHECK: = icmp eq i32 [[LOAD]], 1
|
|
}
|
|
|
|
void amd(void) {
|
|
if (__builtin_cpu_is("amd"))
|
|
a("amd");
|
|
|
|
// CHECK: [[LOAD:%[^ ]+]] = load i32, ptr @__cpu_model
|
|
// CHECK: = icmp eq i32 [[LOAD]], 2
|
|
}
|
|
|
|
void atom(void) {
|
|
if (__builtin_cpu_is("atom"))
|
|
a("atom");
|
|
|
|
// CHECK: [[LOAD:%[^ ]+]] = load i32, ptr getelementptr inbounds nuw (i8, ptr @__cpu_model, i64 4)
|
|
// CHECK: = icmp eq i32 [[LOAD]], 1
|
|
}
|
|
|
|
void amdfam10h(void) {
|
|
if (__builtin_cpu_is("amdfam10h"))
|
|
a("amdfam10h");
|
|
|
|
// CHECK: [[LOAD:%[^ ]+]] = load i32, ptr getelementptr inbounds nuw (i8, ptr @__cpu_model, i64 4)
|
|
// CHECK: = icmp eq i32 [[LOAD]], 4
|
|
}
|
|
|
|
void barcelona(void) {
|
|
if (__builtin_cpu_is("barcelona"))
|
|
a("barcelona");
|
|
|
|
// CHECK: [[LOAD:%[^ ]+]] = load i32, ptr getelementptr inbounds nuw (i8, ptr @__cpu_model, i64 8)
|
|
// CHECK: = icmp eq i32 [[LOAD]], 4
|
|
}
|
|
|
|
void nehalem(void) {
|
|
if (__builtin_cpu_is("nehalem"))
|
|
a("nehalem");
|
|
|
|
// CHECK: [[LOAD:%[^ ]+]] = load i32, ptr getelementptr inbounds nuw (i8, ptr @__cpu_model, i64 8)
|
|
// CHECK: = icmp eq i32 [[LOAD]], 1
|
|
}
|