forked from OSchip/llvm-project
Update Clang tests to handle explicitly typed load changes in LLVM.
llvm-svn: 230795
This commit is contained in:
parent
a79ac14fa6
commit
a953f2825b
|
@ -10,26 +10,26 @@ volatile int& refcall();
|
|||
// CHECK: define void @_Z2f1PViPV1S
|
||||
void f1(volatile int *x, volatile S* s) {
|
||||
// We should perform the load in these cases.
|
||||
// CHECK: load volatile i32*
|
||||
// CHECK: load volatile i32, i32*
|
||||
(*x);
|
||||
// CHECK: load volatile i32*
|
||||
// CHECK: load volatile i32, i32*
|
||||
__extension__ g1;
|
||||
// CHECK: load volatile i32*
|
||||
// CHECK: load volatile i32, i32*
|
||||
s->a;
|
||||
// CHECK: load volatile i32*
|
||||
// CHECK: load volatile i32, i32*
|
||||
g2.a;
|
||||
// CHECK: load volatile i32*
|
||||
// CHECK: load volatile i32, i32*
|
||||
s->*(&S::a);
|
||||
// CHECK: load volatile i32*
|
||||
// CHECK: load volatile i32*
|
||||
// CHECK: load volatile i32, i32*
|
||||
// CHECK: load volatile i32, i32*
|
||||
x[0], 1 ? x[0] : *x;
|
||||
|
||||
// CHECK: load volatile i32*
|
||||
// CHECK: load volatile i32*
|
||||
// CHECK: load volatile i32*
|
||||
// CHECK: load volatile i32, i32*
|
||||
// CHECK: load volatile i32, i32*
|
||||
// CHECK: load volatile i32, i32*
|
||||
*x ?: *x;
|
||||
|
||||
// CHECK: load volatile i32*
|
||||
// CHECK: load volatile i32, i32*
|
||||
({ *x; });
|
||||
|
||||
// CHECK-NOT: load volatile
|
||||
|
|
|
@ -24,7 +24,7 @@ namespace PR11418 {
|
|||
// CHECK-NOT: 17
|
||||
// CHECK: call void @_ZN7PR114186NonPODC1ERKS0_
|
||||
// CHECK-NOT: 17
|
||||
// CHECK: load i32*
|
||||
// CHECK: load i32, i32*
|
||||
// CHECK-NOT: 17
|
||||
// CHECK: store i32
|
||||
// CHECK-NOT: 17
|
||||
|
@ -34,7 +34,7 @@ namespace PR11418 {
|
|||
// CHECK-NOT: 17
|
||||
// CHECK: call void @_ZN7PR114186NonPODC1EOS0_
|
||||
// CHECK-NOT: 17
|
||||
// CHECK: load i32*
|
||||
// CHECK: load i32, i32*
|
||||
// CHECK-NOT: 17
|
||||
// CHECK: store i32
|
||||
// CHECK-NOT: 17
|
||||
|
|
|
@ -9,6 +9,6 @@ struct s {
|
|||
|
||||
void func (struct s *s)
|
||||
{
|
||||
// CHECK: load %struct.s**{{.*}}align 8
|
||||
// CHECK: load %struct.s*, %struct.s**{{.*}}align 8
|
||||
s->word = 0;
|
||||
}
|
||||
|
|
|
@ -9,6 +9,6 @@ static union ibtt2
|
|||
void callee_ibt0f(union ibtt2 ibtp5);
|
||||
|
||||
void test(void) {
|
||||
// CHECK: = load i32*
|
||||
// CHECK: = load i32, i32*
|
||||
callee_ibt0f(ibt15);
|
||||
}
|
||||
|
|
|
@ -8,11 +8,11 @@ long var;
|
|||
|
||||
void test_generic_constraints(int var32, long var64) {
|
||||
asm("add %0, %1, %1" : "=r"(var32) : "0"(var32));
|
||||
// CHECK: [[R32_ARG:%[a-zA-Z0-9]+]] = load i32*
|
||||
// CHECK: [[R32_ARG:%[a-zA-Z0-9]+]] = load i32, i32*
|
||||
// CHECK: call i32 asm "add $0, $1, $1", "=r,0"(i32 [[R32_ARG]])
|
||||
|
||||
asm("add %0, %1, %1" : "=r"(var64) : "0"(var64));
|
||||
// CHECK: [[R32_ARG:%[a-zA-Z0-9]+]] = load i64*
|
||||
// CHECK: [[R32_ARG:%[a-zA-Z0-9]+]] = load i64, i64*
|
||||
// CHECK: call i64 asm "add $0, $1, $1", "=r,0"(i64 [[R32_ARG]])
|
||||
|
||||
asm("ldr %0, %1" : "=r"(var32) : "m"(var));
|
||||
|
@ -25,11 +25,11 @@ float f;
|
|||
double d;
|
||||
void test_constraint_w() {
|
||||
asm("fadd %s0, %s1, %s1" : "=w"(f) : "w"(f));
|
||||
// CHECK: [[FLT_ARG:%[a-zA-Z_0-9]+]] = load float* @f
|
||||
// CHECK: [[FLT_ARG:%[a-zA-Z_0-9]+]] = load float, float* @f
|
||||
// CHECK: call float asm "fadd ${0:s}, ${1:s}, ${1:s}", "=w,w"(float [[FLT_ARG]])
|
||||
|
||||
asm("fadd %d0, %d1, %d1" : "=w"(d) : "w"(d));
|
||||
// CHECK: [[DBL_ARG:%[a-zA-Z_0-9]+]] = load double* @d
|
||||
// CHECK: [[DBL_ARG:%[a-zA-Z_0-9]+]] = load double, double* @d
|
||||
// CHECK: call double asm "fadd ${0:d}, ${1:d}, ${1:d}", "=w,w"(double [[DBL_ARG]])
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ va_list the_list;
|
|||
int simple_int(void) {
|
||||
// CHECK-LABEL: define i32 @simple_int
|
||||
return va_arg(the_list, int);
|
||||
// CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32* getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 3)
|
||||
// CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 3)
|
||||
// CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0
|
||||
// CHECK: br i1 [[EARLY_ONSTACK]], label %[[VAARG_ON_STACK:[a-z_.0-9]+]], label %[[VAARG_MAYBE_REG:[a-z_.0-9]+]]
|
||||
|
||||
|
@ -22,7 +22,7 @@ int simple_int(void) {
|
|||
// CHECK: br i1 [[INREG]], label %[[VAARG_IN_REG:[a-z_.0-9]+]], label %[[VAARG_ON_STACK]]
|
||||
|
||||
// CHECK: [[VAARG_IN_REG]]
|
||||
// CHECK: [[REG_TOP:%[a-z_0-9]+]] = load i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 1)
|
||||
// CHECK: [[REG_TOP:%[a-z_0-9]+]] = load i8*, i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 1)
|
||||
// CHECK: [[REG_ADDR:%[a-z_0-9]+]] = getelementptr i8, i8* [[REG_TOP]], i32 [[GR_OFFS]]
|
||||
// CHECK-BE: [[REG_ADDR_VAL:%[0-9]+]] = ptrtoint i8* [[REG_ADDR]] to i64
|
||||
// CHECK-BE: [[REG_ADDR_VAL_ALIGNED:%[a-z_0-9]*]] = add i64 [[REG_ADDR_VAL]], 4
|
||||
|
@ -31,7 +31,7 @@ int simple_int(void) {
|
|||
// CHECK: br label %[[VAARG_END:[a-z._0-9]+]]
|
||||
|
||||
// CHECK: [[VAARG_ON_STACK]]
|
||||
// CHECK: [[STACK:%[a-z_0-9]+]] = load i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 0)
|
||||
// CHECK: [[STACK:%[a-z_0-9]+]] = load i8*, i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 0)
|
||||
// CHECK: [[NEW_STACK:%[a-z_0-9]+]] = getelementptr i8, i8* [[STACK]], i32 8
|
||||
// CHECK: store i8* [[NEW_STACK]], i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 0)
|
||||
// CHECK-BE: [[STACK_VAL:%[0-9]+]] = ptrtoint i8* [[STACK]] to i64
|
||||
|
@ -42,14 +42,14 @@ int simple_int(void) {
|
|||
|
||||
// CHECK: [[VAARG_END]]
|
||||
// CHECK: [[ADDR:%[a-z._0-9]+]] = phi i32* [ [[FROMREG_ADDR]], %[[VAARG_IN_REG]] ], [ [[FROMSTACK_ADDR]], %[[VAARG_ON_STACK]] ]
|
||||
// CHECK: [[RESULT:%[a-z_0-9]+]] = load i32* [[ADDR]]
|
||||
// CHECK: [[RESULT:%[a-z_0-9]+]] = load i32, i32* [[ADDR]]
|
||||
// CHECK: ret i32 [[RESULT]]
|
||||
}
|
||||
|
||||
__int128 aligned_int(void) {
|
||||
// CHECK-LABEL: define i128 @aligned_int
|
||||
return va_arg(the_list, __int128);
|
||||
// CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32* getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 3)
|
||||
// CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 3)
|
||||
// CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0
|
||||
// CHECK: br i1 [[EARLY_ONSTACK]], label %[[VAARG_ON_STACK:[a-z_.0-9]+]], label %[[VAARG_MAYBE_REG:[a-z_.0-9]+]]
|
||||
|
||||
|
@ -62,13 +62,13 @@ __int128 aligned_int(void) {
|
|||
// CHECK: br i1 [[INREG]], label %[[VAARG_IN_REG:[a-z_.0-9]+]], label %[[VAARG_ON_STACK]]
|
||||
|
||||
// CHECK: [[VAARG_IN_REG]]
|
||||
// CHECK: [[REG_TOP:%[a-z_0-9]+]] = load i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 1)
|
||||
// CHECK: [[REG_TOP:%[a-z_0-9]+]] = load i8*, i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 1)
|
||||
// CHECK: [[REG_ADDR:%[a-z_0-9]+]] = getelementptr i8, i8* [[REG_TOP]], i32 [[ALIGNED_REGOFFS]]
|
||||
// CHECK: [[FROMREG_ADDR:%[a-z_0-9]+]] = bitcast i8* [[REG_ADDR]] to i128*
|
||||
// CHECK: br label %[[VAARG_END:[a-z._0-9]+]]
|
||||
|
||||
// CHECK: [[VAARG_ON_STACK]]
|
||||
// CHECK: [[STACK:%[a-z_0-9]+]] = load i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 0)
|
||||
// CHECK: [[STACK:%[a-z_0-9]+]] = load i8*, i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 0)
|
||||
// CHECK: [[STACKINT:%[a-z_0-9]+]] = ptrtoint i8* [[STACK]] to i64
|
||||
// CHECK: [[ALIGN_STACK:%[a-z_0-9]+]] = add i64 [[STACKINT]], 15
|
||||
// CHECK: [[ALIGNED_STACK_INT:%[a-z_0-9]+]] = and i64 [[ALIGN_STACK]], -16
|
||||
|
@ -80,7 +80,7 @@ __int128 aligned_int(void) {
|
|||
|
||||
// CHECK: [[VAARG_END]]
|
||||
// CHECK: [[ADDR:%[a-z._0-9]+]] = phi i128* [ [[FROMREG_ADDR]], %[[VAARG_IN_REG]] ], [ [[FROMSTACK_ADDR]], %[[VAARG_ON_STACK]] ]
|
||||
// CHECK: [[RESULT:%[a-z_0-9]+]] = load i128* [[ADDR]]
|
||||
// CHECK: [[RESULT:%[a-z_0-9]+]] = load i128, i128* [[ADDR]]
|
||||
// CHECK: ret i128 [[RESULT]]
|
||||
}
|
||||
|
||||
|
@ -91,7 +91,7 @@ struct bigstruct {
|
|||
struct bigstruct simple_indirect(void) {
|
||||
// CHECK-LABEL: define void @simple_indirect
|
||||
return va_arg(the_list, struct bigstruct);
|
||||
// CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32* getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 3)
|
||||
// CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 3)
|
||||
// CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0
|
||||
// CHECK: br i1 [[EARLY_ONSTACK]], label %[[VAARG_ON_STACK:[a-z_.0-9]+]], label %[[VAARG_MAYBE_REG:[a-z_.0-9]+]]
|
||||
|
||||
|
@ -103,13 +103,13 @@ struct bigstruct simple_indirect(void) {
|
|||
// CHECK: br i1 [[INREG]], label %[[VAARG_IN_REG:[a-z_.0-9]+]], label %[[VAARG_ON_STACK]]
|
||||
|
||||
// CHECK: [[VAARG_IN_REG]]
|
||||
// CHECK: [[REG_TOP:%[a-z_0-9]+]] = load i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 1)
|
||||
// CHECK: [[REG_TOP:%[a-z_0-9]+]] = load i8*, i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 1)
|
||||
// CHECK: [[REG_ADDR:%[a-z_0-9]+]] = getelementptr i8, i8* [[REG_TOP]], i32 [[GR_OFFS]]
|
||||
// CHECK: [[FROMREG_ADDR:%[a-z_0-9]+]] = bitcast i8* [[REG_ADDR]] to %struct.bigstruct**
|
||||
// CHECK: br label %[[VAARG_END:[a-z._0-9]+]]
|
||||
|
||||
// CHECK: [[VAARG_ON_STACK]]
|
||||
// CHECK: [[STACK:%[a-z_0-9]+]] = load i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 0)
|
||||
// CHECK: [[STACK:%[a-z_0-9]+]] = load i8*, i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 0)
|
||||
// CHECK-NOT: and i64
|
||||
// CHECK: [[NEW_STACK:%[a-z_0-9]+]] = getelementptr i8, i8* [[STACK]], i32 8
|
||||
// CHECK: store i8* [[NEW_STACK]], i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 0)
|
||||
|
@ -118,7 +118,7 @@ struct bigstruct simple_indirect(void) {
|
|||
|
||||
// CHECK: [[VAARG_END]]
|
||||
// CHECK: [[ADDR:%[a-z._0-9]+]] = phi %struct.bigstruct** [ [[FROMREG_ADDR]], %[[VAARG_IN_REG]] ], [ [[FROMSTACK_ADDR]], %[[VAARG_ON_STACK]] ]
|
||||
// CHECK: load %struct.bigstruct** [[ADDR]]
|
||||
// CHECK: load %struct.bigstruct*, %struct.bigstruct** [[ADDR]]
|
||||
}
|
||||
|
||||
struct aligned_bigstruct {
|
||||
|
@ -129,7 +129,7 @@ struct aligned_bigstruct {
|
|||
struct aligned_bigstruct simple_aligned_indirect(void) {
|
||||
// CHECK-LABEL: define void @simple_aligned_indirect
|
||||
return va_arg(the_list, struct aligned_bigstruct);
|
||||
// CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32* getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 3)
|
||||
// CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 3)
|
||||
// CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0
|
||||
// CHECK: br i1 [[EARLY_ONSTACK]], label %[[VAARG_ON_STACK:[a-z_.0-9]+]], label %[[VAARG_MAYBE_REG:[a-z_.0-9]+]]
|
||||
|
||||
|
@ -140,13 +140,13 @@ struct aligned_bigstruct simple_aligned_indirect(void) {
|
|||
// CHECK: br i1 [[INREG]], label %[[VAARG_IN_REG:[a-z_.0-9]+]], label %[[VAARG_ON_STACK]]
|
||||
|
||||
// CHECK: [[VAARG_IN_REG]]
|
||||
// CHECK: [[REG_TOP:%[a-z_0-9]+]] = load i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 1)
|
||||
// CHECK: [[REG_TOP:%[a-z_0-9]+]] = load i8*, i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 1)
|
||||
// CHECK: [[REG_ADDR:%[a-z_0-9]+]] = getelementptr i8, i8* [[REG_TOP]], i32 [[GR_OFFS]]
|
||||
// CHECK: [[FROMREG_ADDR:%[a-z_0-9]+]] = bitcast i8* [[REG_ADDR]] to %struct.aligned_bigstruct**
|
||||
// CHECK: br label %[[VAARG_END:[a-z._0-9]+]]
|
||||
|
||||
// CHECK: [[VAARG_ON_STACK]]
|
||||
// CHECK: [[STACK:%[a-z_0-9]+]] = load i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 0)
|
||||
// CHECK: [[STACK:%[a-z_0-9]+]] = load i8*, i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 0)
|
||||
// CHECK: [[NEW_STACK:%[a-z_0-9]+]] = getelementptr i8, i8* [[STACK]], i32 8
|
||||
// CHECK: store i8* [[NEW_STACK]], i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 0)
|
||||
// CHECK: [[FROMSTACK_ADDR:%[a-z_0-9]+]] = bitcast i8* [[STACK]] to %struct.aligned_bigstruct**
|
||||
|
@ -154,13 +154,13 @@ struct aligned_bigstruct simple_aligned_indirect(void) {
|
|||
|
||||
// CHECK: [[VAARG_END]]
|
||||
// CHECK: [[ADDR:%[a-z._0-9]+]] = phi %struct.aligned_bigstruct** [ [[FROMREG_ADDR]], %[[VAARG_IN_REG]] ], [ [[FROMSTACK_ADDR]], %[[VAARG_ON_STACK]] ]
|
||||
// CHECK: load %struct.aligned_bigstruct** [[ADDR]]
|
||||
// CHECK: load %struct.aligned_bigstruct*, %struct.aligned_bigstruct** [[ADDR]]
|
||||
}
|
||||
|
||||
double simple_double(void) {
|
||||
// CHECK-LABEL: define double @simple_double
|
||||
return va_arg(the_list, double);
|
||||
// CHECK: [[VR_OFFS:%[a-z_0-9]+]] = load i32* getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 4)
|
||||
// CHECK: [[VR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 4)
|
||||
// CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[VR_OFFS]], 0
|
||||
// CHECK: br i1 [[EARLY_ONSTACK]], label %[[VAARG_ON_STACK:[a-z_.0-9]+]], label %[[VAARG_MAYBE_REG]]
|
||||
|
||||
|
@ -171,7 +171,7 @@ double simple_double(void) {
|
|||
// CHECK: br i1 [[INREG]], label %[[VAARG_IN_REG:[a-z_.0-9]+]], label %[[VAARG_ON_STACK]]
|
||||
|
||||
// CHECK: [[VAARG_IN_REG]]
|
||||
// CHECK: [[REG_TOP:%[a-z_0-9]+]] = load i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 2)
|
||||
// CHECK: [[REG_TOP:%[a-z_0-9]+]] = load i8*, i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 2)
|
||||
// CHECK: [[REG_ADDR:%[a-z_0-9]+]] = getelementptr i8, i8* [[REG_TOP]], i32 [[VR_OFFS]]
|
||||
// CHECK-BE: [[REG_ADDR_VAL:%[0-9]+]] = ptrtoint i8* [[REG_ADDR]] to i64
|
||||
// CHECK-BE: [[REG_ADDR_VAL_ALIGNED:%[a-z_0-9]*]] = add i64 [[REG_ADDR_VAL]], 8
|
||||
|
@ -180,7 +180,7 @@ double simple_double(void) {
|
|||
// CHECK: br label %[[VAARG_END:[a-z._0-9]+]]
|
||||
|
||||
// CHECK: [[VAARG_ON_STACK]]
|
||||
// CHECK: [[STACK:%[a-z_0-9]+]] = load i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 0)
|
||||
// CHECK: [[STACK:%[a-z_0-9]+]] = load i8*, i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 0)
|
||||
// CHECK: [[NEW_STACK:%[a-z_0-9]+]] = getelementptr i8, i8* [[STACK]], i32 8
|
||||
// CHECK: store i8* [[NEW_STACK]], i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 0)
|
||||
// CHECK: [[FROMSTACK_ADDR:%[a-z_0-9]+]] = bitcast i8* [[STACK]] to double*
|
||||
|
@ -188,7 +188,7 @@ double simple_double(void) {
|
|||
|
||||
// CHECK: [[VAARG_END]]
|
||||
// CHECK: [[ADDR:%[a-z._0-9]+]] = phi double* [ [[FROMREG_ADDR]], %[[VAARG_IN_REG]] ], [ [[FROMSTACK_ADDR]], %[[VAARG_ON_STACK]] ]
|
||||
// CHECK: [[RESULT:%[a-z_0-9]+]] = load double* [[ADDR]]
|
||||
// CHECK: [[RESULT:%[a-z_0-9]+]] = load double, double* [[ADDR]]
|
||||
// CHECK: ret double [[RESULT]]
|
||||
}
|
||||
|
||||
|
@ -199,7 +199,7 @@ struct hfa {
|
|||
struct hfa simple_hfa(void) {
|
||||
// CHECK-LABEL: define %struct.hfa @simple_hfa
|
||||
return va_arg(the_list, struct hfa);
|
||||
// CHECK: [[VR_OFFS:%[a-z_0-9]+]] = load i32* getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 4)
|
||||
// CHECK: [[VR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 4)
|
||||
// CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[VR_OFFS]], 0
|
||||
// CHECK: br i1 [[EARLY_ONSTACK]], label %[[VAARG_ON_STACK:[a-z_.0-9]+]], label %[[VAARG_MAYBE_REG:[a-z_.0-9]+]]
|
||||
|
||||
|
@ -210,25 +210,25 @@ struct hfa simple_hfa(void) {
|
|||
// CHECK: br i1 [[INREG]], label %[[VAARG_IN_REG:[a-z_.0-9]+]], label %[[VAARG_ON_STACK]]
|
||||
|
||||
// CHECK: [[VAARG_IN_REG]]
|
||||
// CHECK: [[REG_TOP:%[a-z_0-9]+]] = load i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 2)
|
||||
// CHECK: [[REG_TOP:%[a-z_0-9]+]] = load i8*, i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 2)
|
||||
// CHECK: [[FIRST_REG:%[a-z_0-9]+]] = getelementptr i8, i8* [[REG_TOP]], i32 [[VR_OFFS]]
|
||||
// CHECK-LE: [[EL_ADDR:%[a-z_0-9]+]] = getelementptr i8, i8* [[FIRST_REG]], i32 0
|
||||
// CHECK-BE: [[EL_ADDR:%[a-z_0-9]+]] = getelementptr i8, i8* [[FIRST_REG]], i32 12
|
||||
// CHECK: [[EL_TYPED:%[a-z_0-9]+]] = bitcast i8* [[EL_ADDR]] to float*
|
||||
// CHECK: [[EL_TMPADDR:%[a-z_0-9]+]] = getelementptr inbounds [2 x float], [2 x float]* %[[TMP_HFA:[a-z_.0-9]+]], i32 0, i32 0
|
||||
// CHECK: [[EL:%[a-z_0-9]+]] = load float* [[EL_TYPED]]
|
||||
// CHECK: [[EL:%[a-z_0-9]+]] = load float, float* [[EL_TYPED]]
|
||||
// CHECK: store float [[EL]], float* [[EL_TMPADDR]]
|
||||
// CHECK-LE: [[EL_ADDR:%[a-z_0-9]+]] = getelementptr i8, i8* [[FIRST_REG]], i32 16
|
||||
// CHECK-BE: [[EL_ADDR:%[a-z_0-9]+]] = getelementptr i8, i8* [[FIRST_REG]], i32 28
|
||||
// CHECK: [[EL_TYPED:%[a-z_0-9]+]] = bitcast i8* [[EL_ADDR]] to float*
|
||||
// CHECK: [[EL_TMPADDR:%[a-z_0-9]+]] = getelementptr inbounds [2 x float], [2 x float]* %[[TMP_HFA]], i32 0, i32 1
|
||||
// CHECK: [[EL:%[a-z_0-9]+]] = load float* [[EL_TYPED]]
|
||||
// CHECK: [[EL:%[a-z_0-9]+]] = load float, float* [[EL_TYPED]]
|
||||
// CHECK: store float [[EL]], float* [[EL_TMPADDR]]
|
||||
// CHECK: [[FROMREG_ADDR:%[a-z_0-9]+]] = bitcast [2 x float]* %[[TMP_HFA]] to %struct.hfa*
|
||||
// CHECK: br label %[[VAARG_END:[a-z_.0-9]+]]
|
||||
|
||||
// CHECK: [[VAARG_ON_STACK]]
|
||||
// CHECK: [[STACK:%[a-z_0-9]+]] = load i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 0)
|
||||
// CHECK: [[STACK:%[a-z_0-9]+]] = load i8*, i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 0)
|
||||
// CHECK: [[NEW_STACK:%[a-z_0-9]+]] = getelementptr i8, i8* [[STACK]], i32 8
|
||||
// CHECK: store i8* [[NEW_STACK]], i8** getelementptr inbounds (%struct.__va_list* @the_list, i32 0, i32 0)
|
||||
// CHECK: [[FROMSTACK_ADDR:%[a-z_0-9]+]] = bitcast i8* [[STACK]] to %struct.hfa*
|
||||
|
|
|
@ -5,16 +5,16 @@
|
|||
// CHECK: [[p2addr:%.*]] = alloca %struct.S addrspace(2)*
|
||||
// CHECK: store %struct.S addrspace(1)* %p1, %struct.S addrspace(1)** [[p1addr]]
|
||||
// CHECK: store %struct.S addrspace(2)* %p2, %struct.S addrspace(2)** [[p2addr]]
|
||||
// CHECK: [[t0:%.*]] = load %struct.S addrspace(2)** [[p2addr]], align 8
|
||||
// CHECK: [[t0:%.*]] = load %struct.S addrspace(2)*, %struct.S addrspace(2)** [[p2addr]], align 8
|
||||
// CHECK: [[t1:%.*]] = getelementptr inbounds %struct.S, %struct.S addrspace(2)* [[t0]], i32 0, i32 1
|
||||
// CHECK: [[t2:%.*]] = load i32 addrspace(2)* [[t1]], align 4
|
||||
// CHECK: [[t3:%.*]] = load %struct.S addrspace(1)** [[p1addr]], align 8
|
||||
// CHECK: [[t2:%.*]] = load i32, i32 addrspace(2)* [[t1]], align 4
|
||||
// CHECK: [[t3:%.*]] = load %struct.S addrspace(1)*, %struct.S addrspace(1)** [[p1addr]], align 8
|
||||
// CHECK: [[t4:%.*]] = getelementptr inbounds %struct.S, %struct.S addrspace(1)* [[t3]], i32 0, i32 0
|
||||
// CHECK: store i32 [[t2]], i32 addrspace(1)* [[t4]], align 4
|
||||
// CHECK: [[t5:%.*]] = load %struct.S addrspace(2)** [[p2addr]], align 8
|
||||
// CHECK: [[t5:%.*]] = load %struct.S addrspace(2)*, %struct.S addrspace(2)** [[p2addr]], align 8
|
||||
// CHECK: [[t6:%.*]] = getelementptr inbounds %struct.S, %struct.S addrspace(2)* [[t5]], i32 0, i32 0
|
||||
// CHECK: [[t7:%.*]] = load i32 addrspace(2)* [[t6]], align 4
|
||||
// CHECK: [[t8:%.*]] = load %struct.S addrspace(1)** [[p1addr]], align 8
|
||||
// CHECK: [[t7:%.*]] = load i32, i32 addrspace(2)* [[t6]], align 4
|
||||
// CHECK: [[t8:%.*]] = load %struct.S addrspace(1)*, %struct.S addrspace(1)** [[p1addr]], align 8
|
||||
// CHECK: [[t9:%.*]] = getelementptr inbounds %struct.S, %struct.S addrspace(1)* [[t8]], i32 0, i32 1
|
||||
// CHECK: store i32 [[t7]], i32 addrspace(1)* [[t9]], align 4
|
||||
// CHECK: ret void
|
||||
|
|
|
@ -7,11 +7,11 @@ int foo __attribute__((address_space(1)));
|
|||
int ban[10] __attribute__((address_space(1)));
|
||||
|
||||
// CHECK-LABEL: define i32 @test1()
|
||||
// CHECK: load i32 addrspace(1)* @foo
|
||||
// CHECK: load i32, i32 addrspace(1)* @foo
|
||||
int test1() { return foo; }
|
||||
|
||||
// CHECK-LABEL: define i32 @test2(i32 %i)
|
||||
// CHECK: load i32 addrspace(1)*
|
||||
// CHECK: load i32, i32 addrspace(1)*
|
||||
// CHECK-NEXT: ret i32
|
||||
int test2(int i) { return ban[i]; }
|
||||
|
||||
|
@ -19,9 +19,9 @@ int test2(int i) { return ban[i]; }
|
|||
__attribute__((address_space(2))) int *A, *B;
|
||||
|
||||
// CHECK-LABEL: define void @test3()
|
||||
// CHECK: load i32 addrspace(2)** @B
|
||||
// CHECK: load i32 addrspace(2)*
|
||||
// CHECK: load i32 addrspace(2)** @A
|
||||
// CHECK: load i32 addrspace(2)*, i32 addrspace(2)** @B
|
||||
// CHECK: load i32, i32 addrspace(2)*
|
||||
// CHECK: load i32 addrspace(2)*, i32 addrspace(2)** @A
|
||||
// CHECK: store i32 {{.*}}, i32 addrspace(2)*
|
||||
void test3() {
|
||||
*A = *B;
|
||||
|
|
|
@ -23,7 +23,7 @@ int test1a(myint *p) {
|
|||
return *p;
|
||||
}
|
||||
// CHECK: @test1a(
|
||||
// CHECK: load i32* {{.*}}, align 1
|
||||
// CHECK: load i32, i32* {{.*}}, align 1
|
||||
// CHECK: ret i32
|
||||
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ int main(int argc, char **argv) {
|
|||
// CHECK: call i64 @llvm.annotation.i64
|
||||
|
||||
int inta = __builtin_annotation(intfoo, "annotation_a");
|
||||
// CHECK: load i32* @intfoo
|
||||
// CHECK: load i32, i32* @intfoo
|
||||
// CHECK-NEXT: call i32 @llvm.annotation.i32
|
||||
// CHECK-NEXT: store
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ double varargs_vec_2i(int fixed, ...) {
|
|||
// APCS-GNU: [[AP_NEXT:%.*]] = getelementptr i8, i8* {{%.*}}, i32 8
|
||||
// APCS-GNU: bitcast <2 x i32>* [[VAR_ALIGN]] to i8*
|
||||
// APCS-GNU: call void @llvm.memcpy
|
||||
// APCS-GNU: load <2 x i32>* [[VAR_ALIGN]]
|
||||
// APCS-GNU: load <2 x i32>, <2 x i32>* [[VAR_ALIGN]]
|
||||
va_list ap;
|
||||
double sum = fixed;
|
||||
va_start(ap, fixed);
|
||||
|
@ -82,7 +82,7 @@ double varargs_vec_5c(int fixed, ...) {
|
|||
// APCS-GNU: [[AP_NEXT:%.*]] = getelementptr i8, i8* {{%.*}}, i32 8
|
||||
// APCS-GNU: bitcast <5 x i8>* [[VAR_ALIGN]] to i8*
|
||||
// APCS-GNU: call void @llvm.memcpy
|
||||
// APCS-GNU: load <5 x i8>* [[VAR_ALIGN]]
|
||||
// APCS-GNU: load <5 x i8>, <5 x i8>* [[VAR_ALIGN]]
|
||||
va_list ap;
|
||||
double sum = fixed;
|
||||
va_start(ap, fixed);
|
||||
|
@ -109,14 +109,14 @@ double varargs_vec_9c(int fixed, ...) {
|
|||
// CHECK: [[AP_NEXT:%.*]] = getelementptr i8, i8* [[AP_ALIGN]], i32 16
|
||||
// CHECK: bitcast <9 x i8>* [[VAR_ALIGN]] to i8*
|
||||
// CHECK: call void @llvm.memcpy
|
||||
// CHECK: load <9 x i8>* [[VAR_ALIGN]]
|
||||
// CHECK: load <9 x i8>, <9 x i8>* [[VAR_ALIGN]]
|
||||
// APCS-GNU: varargs_vec_9c
|
||||
// APCS-GNU: alloca <9 x i8>, align 16
|
||||
// APCS-GNU: [[VAR_ALIGN:%.*]] = alloca <9 x i8>
|
||||
// APCS-GNU: [[AP_NEXT:%.*]] = getelementptr i8, i8* {{%.*}}, i32 16
|
||||
// APCS-GNU: bitcast <9 x i8>* [[VAR_ALIGN]] to i8*
|
||||
// APCS-GNU: call void @llvm.memcpy
|
||||
// APCS-GNU: load <9 x i8>* [[VAR_ALIGN]]
|
||||
// APCS-GNU: load <9 x i8>, <9 x i8>* [[VAR_ALIGN]]
|
||||
va_list ap;
|
||||
double sum = fixed;
|
||||
va_start(ap, fixed);
|
||||
|
@ -138,12 +138,12 @@ double varargs_vec_19c(int fixed, ...) {
|
|||
// CHECK: varargs_vec_19c
|
||||
// CHECK: [[AP_NEXT:%.*]] = getelementptr i8, i8* [[AP:%.*]], i32 4
|
||||
// CHECK: [[VAR:%.*]] = bitcast i8* [[AP]] to i8**
|
||||
// CHECK: [[VAR2:%.*]] = load i8** [[VAR]]
|
||||
// CHECK: [[VAR2:%.*]] = load i8*, i8** [[VAR]]
|
||||
// CHECK: bitcast i8* [[VAR2]] to <19 x i8>*
|
||||
// APCS-GNU: varargs_vec_19c
|
||||
// APCS-GNU: [[AP_NEXT:%.*]] = getelementptr i8, i8* [[AP:%.*]], i32 4
|
||||
// APCS-GNU: [[VAR:%.*]] = bitcast i8* [[AP]] to i8**
|
||||
// APCS-GNU: [[VAR2:%.*]] = load i8** [[VAR]]
|
||||
// APCS-GNU: [[VAR2:%.*]] = load i8*, i8** [[VAR]]
|
||||
// APCS-GNU: bitcast i8* [[VAR2]] to <19 x i8>*
|
||||
va_list ap;
|
||||
double sum = fixed;
|
||||
|
@ -175,7 +175,7 @@ double varargs_vec_3s(int fixed, ...) {
|
|||
// APCS-GNU: [[AP_NEXT:%.*]] = getelementptr i8, i8* {{%.*}}, i32 8
|
||||
// APCS-GNU: bitcast <3 x i16>* [[VAR_ALIGN]] to i8*
|
||||
// APCS-GNU: call void @llvm.memcpy
|
||||
// APCS-GNU: load <3 x i16>* [[VAR_ALIGN]]
|
||||
// APCS-GNU: load <3 x i16>, <3 x i16>* [[VAR_ALIGN]]
|
||||
va_list ap;
|
||||
double sum = fixed;
|
||||
va_start(ap, fixed);
|
||||
|
@ -202,14 +202,14 @@ double varargs_vec_5s(int fixed, ...) {
|
|||
// CHECK: [[AP_NEXT:%.*]] = getelementptr i8, i8* [[AP_ALIGN]], i32 16
|
||||
// CHECK: bitcast <5 x i16>* [[VAR_ALIGN]] to i8*
|
||||
// CHECK: call void @llvm.memcpy
|
||||
// CHECK: load <5 x i16>* [[VAR_ALIGN]]
|
||||
// CHECK: load <5 x i16>, <5 x i16>* [[VAR_ALIGN]]
|
||||
// APCS-GNU: varargs_vec_5s
|
||||
// APCS-GNU: alloca <5 x i16>, align 16
|
||||
// APCS-GNU: [[VAR_ALIGN:%.*]] = alloca <5 x i16>
|
||||
// APCS-GNU: [[AP_NEXT:%.*]] = getelementptr i8, i8* {{%.*}}, i32 16
|
||||
// APCS-GNU: bitcast <5 x i16>* [[VAR_ALIGN]] to i8*
|
||||
// APCS-GNU: call void @llvm.memcpy
|
||||
// APCS-GNU: load <5 x i16>* [[VAR_ALIGN]]
|
||||
// APCS-GNU: load <5 x i16>, <5 x i16>* [[VAR_ALIGN]]
|
||||
va_list ap;
|
||||
double sum = fixed;
|
||||
va_start(ap, fixed);
|
||||
|
|
|
@ -185,7 +185,7 @@ void f34(struct s34 s);
|
|||
void g34(struct s34 *s) { f34(*s); }
|
||||
// AAPCS: @g34(%struct.s34* %s)
|
||||
// AAPCS: %[[a:.*]] = alloca [1 x i32]
|
||||
// AAPCS: load [1 x i32]* %[[a]]
|
||||
// AAPCS: load [1 x i32], [1 x i32]* %[[a]]
|
||||
|
||||
// rdar://12596507
|
||||
struct s35
|
||||
|
@ -210,11 +210,11 @@ float32x4_t f35(int i, s35_with_align s1, s35_with_align s2) {
|
|||
// APCS-GNU: %[[c:.*]] = bitcast %struct.s35* %0 to i8*
|
||||
// APCS-GNU: call void @llvm.memcpy.p0i8.p0i8.i32(i8* %[[b]], i8* %[[c]]
|
||||
// APCS-GNU: %[[d:.*]] = bitcast %struct.s35* %[[a]] to <4 x float>*
|
||||
// APCS-GNU: load <4 x float>* %[[d]], align 16
|
||||
// APCS-GNU: load <4 x float>, <4 x float>* %[[d]], align 16
|
||||
// AAPCS-LABEL: define arm_aapcscc <4 x float> @f35(i32 %i, %struct.s35* byval align 16, %struct.s35* byval align 16)
|
||||
// AAPCS: %[[a:.*]] = alloca %struct.s35, align 16
|
||||
// AAPCS: %[[b:.*]] = bitcast %struct.s35* %[[a]] to i8*
|
||||
// AAPCS: %[[c:.*]] = bitcast %struct.s35* %0 to i8*
|
||||
// AAPCS: call void @llvm.memcpy.p0i8.p0i8.i32(i8* %[[b]], i8* %[[c]]
|
||||
// AAPCS: %[[d:.*]] = bitcast %struct.s35* %[[a]] to <4 x float>*
|
||||
// AAPCS: load <4 x float>* %[[d]], align 16
|
||||
// AAPCS: load <4 x float>, <4 x float>* %[[d]], align 16
|
||||
|
|
|
@ -15,7 +15,7 @@ void test_presence(void)
|
|||
__atomic_fetch_add(&i, 1, memory_order_seq_cst);
|
||||
// CHECK: atomicrmw sub i32* {{.*}} seq_cst
|
||||
__atomic_fetch_sub(&i, 1, memory_order_seq_cst);
|
||||
// CHECK: load atomic i32* {{.*}} seq_cst
|
||||
// CHECK: load atomic i32, i32* {{.*}} seq_cst
|
||||
int r;
|
||||
__atomic_load(&i, &r, memory_order_seq_cst);
|
||||
// CHECK: store atomic i32 {{.*}} seq_cst
|
||||
|
|
|
@ -17,7 +17,7 @@ void test_presence(void)
|
|||
__atomic_fetch_add(&i, 1, memory_order_seq_cst);
|
||||
// CHECK: atomicrmw sub i32* {{.*}} seq_cst
|
||||
__atomic_fetch_sub(&i, 1, memory_order_seq_cst);
|
||||
// CHECK: load atomic i32* {{.*}} seq_cst
|
||||
// CHECK: load atomic i32, i32* {{.*}} seq_cst
|
||||
int r;
|
||||
__atomic_load(&i, &r, memory_order_seq_cst);
|
||||
// CHECK: store atomic i32 {{.*}} seq_cst
|
||||
|
@ -28,7 +28,7 @@ void test_presence(void)
|
|||
__atomic_fetch_add(&l, 1, memory_order_seq_cst);
|
||||
// CHECK: atomicrmw sub i64* {{.*}} seq_cst
|
||||
__atomic_fetch_sub(&l, 1, memory_order_seq_cst);
|
||||
// CHECK: load atomic i64* {{.*}} seq_cst
|
||||
// CHECK: load atomic i64, i64* {{.*}} seq_cst
|
||||
long long rl;
|
||||
__atomic_load(&l, &rl, memory_order_seq_cst);
|
||||
// CHECK: store atomic i64 {{.*}} seq_cst
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
void clear(void *ptr, void *ptr2) {
|
||||
// CHECK: clear
|
||||
// CHECK: load i8**
|
||||
// CHECK: load i8**
|
||||
// CHECK: load i8*, i8**
|
||||
// CHECK: load i8*, i8**
|
||||
__clear_cache(ptr, ptr2);
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ void t1(AlignedAddr *addr1, AlignedAddr *addr2) {
|
|||
// Radar 10538555: Make sure unaligned load/stores do not gain alignment.
|
||||
void t2(char *addr) {
|
||||
// CHECK: @t2
|
||||
// CHECK: load i32* %{{.*}}, align 1
|
||||
// CHECK: load i32, i32* %{{.*}}, align 1
|
||||
int32x2_t vec = vld1_dup_s32(addr);
|
||||
// CHECK: store i32 %{{.*}}, i32* {{.*}}, align 1
|
||||
vst1_lane_s32(addr, vec, 1);
|
||||
|
|
|
@ -99,7 +99,7 @@ double varargs_vec_19c(int fixed, ...) {
|
|||
// CHECK: varargs_vec_19c
|
||||
// CHECK: [[AP_NEXT:%.*]] = getelementptr i8, i8* [[AP_CUR:%.*]], i32 8
|
||||
// CHECK: [[VAR:%.*]] = bitcast i8* [[AP_CUR]] to i8**
|
||||
// CHECK: [[VAR2:%.*]] = load i8** [[VAR]]
|
||||
// CHECK: [[VAR2:%.*]] = load i8*, i8** [[VAR]]
|
||||
// CHECK: bitcast i8* [[VAR2]] to <19 x i8>*
|
||||
va_list ap;
|
||||
double sum = fixed;
|
||||
|
@ -185,7 +185,7 @@ double varargs_vec_5i(int fixed, ...) {
|
|||
// CHECK: alloca <5 x i32>, align 16
|
||||
// CHECK: [[AP_NEXT:%.*]] = getelementptr i8, i8* [[AP_CUR:%.*]], i32 8
|
||||
// CHECK: [[VAR:%.*]] = bitcast i8* [[AP_CUR]] to i8**
|
||||
// CHECK: [[VAR2:%.*]] = load i8** [[VAR]]
|
||||
// CHECK: [[VAR2:%.*]] = load i8*, i8** [[VAR]]
|
||||
// CHECK: bitcast i8* [[VAR2]] to <5 x i32>*
|
||||
va_list ap;
|
||||
double sum = fixed;
|
||||
|
@ -207,7 +207,7 @@ double varargs_vec_3d(int fixed, ...) {
|
|||
// CHECK: alloca <3 x double>, align 16
|
||||
// CHECK: [[AP_NEXT:%.*]] = getelementptr i8, i8* [[AP_CUR:%.*]], i32 8
|
||||
// CHECK: [[VAR:%.*]] = bitcast i8* [[AP_CUR]] to i8**
|
||||
// CHECK: [[VAR2:%.*]] = load i8** [[VAR]]
|
||||
// CHECK: [[VAR2:%.*]] = load i8*, i8** [[VAR]]
|
||||
// CHECK: bitcast i8* [[VAR2]] to <3 x double>*
|
||||
va_list ap;
|
||||
double sum = fixed;
|
||||
|
@ -246,7 +246,7 @@ double varargs_vec(int fixed, ...) {
|
|||
__char19 c19 = va_arg(ap, __char19);
|
||||
// CHECK: [[AP_NEXT:%.*]] = getelementptr i8, i8* [[AP_CUR:%.*]], i32 8
|
||||
// CHECK: [[VAR:%.*]] = bitcast i8* [[AP_CUR]] to i8**
|
||||
// CHECK: [[VAR2:%.*]] = load i8** [[VAR]]
|
||||
// CHECK: [[VAR2:%.*]] = load i8*, i8** [[VAR]]
|
||||
// CHECK: bitcast i8* [[VAR2]] to <19 x i8>*
|
||||
sum = sum + c19.x + c19.y;
|
||||
__short3 s3 = va_arg(ap, __short3);
|
||||
|
@ -268,13 +268,13 @@ double varargs_vec(int fixed, ...) {
|
|||
__int5 i5 = va_arg(ap, __int5);
|
||||
// CHECK: [[AP_NEXT:%.*]] = getelementptr i8, i8* [[AP_CUR:%.*]], i32 8
|
||||
// CHECK: [[VAR:%.*]] = bitcast i8* [[AP_CUR]] to i8**
|
||||
// CHECK: [[VAR2:%.*]] = load i8** [[VAR]]
|
||||
// CHECK: [[VAR2:%.*]] = load i8*, i8** [[VAR]]
|
||||
// CHECK: bitcast i8* [[VAR2]] to <5 x i32>*
|
||||
sum = sum + i5.x + i5.y;
|
||||
__double3 d3 = va_arg(ap, __double3);
|
||||
// CHECK: [[AP_NEXT:%.*]] = getelementptr i8, i8* [[AP_CUR:%.*]], i32 8
|
||||
// CHECK: [[VAR:%.*]] = bitcast i8* [[AP_CUR]] to i8**
|
||||
// CHECK: [[VAR2:%.*]] = load i8** [[VAR]]
|
||||
// CHECK: [[VAR2:%.*]] = load i8*, i8** [[VAR]]
|
||||
// CHECK: bitcast i8* [[VAR2]] to <3 x double>*
|
||||
sum = sum + d3.x + d3.y;
|
||||
va_end(ap);
|
||||
|
@ -339,7 +339,7 @@ double fixed_9c(__char9 *in) {
|
|||
|
||||
__attribute__((noinline)) double args_vec_19c(int fixed, __char19 c19) {
|
||||
// CHECK: args_vec_19c
|
||||
// CHECK: [[C19:%.*]] = load <19 x i8>* {{.*}}, align 16
|
||||
// CHECK: [[C19:%.*]] = load <19 x i8>, <19 x i8>* {{.*}}, align 16
|
||||
double sum = fixed;
|
||||
sum = sum + c19.x + c19.y;
|
||||
return sum;
|
||||
|
@ -401,7 +401,7 @@ double fixed_3i(__int3 *in) {
|
|||
|
||||
__attribute__((noinline)) double args_vec_5i(int fixed, __int5 c5) {
|
||||
// CHECK: args_vec_5i
|
||||
// CHECK: [[C5:%.*]] = load <5 x i32>* {{%.*}}, align 16
|
||||
// CHECK: [[C5:%.*]] = load <5 x i32>, <5 x i32>* {{%.*}}, align 16
|
||||
double sum = fixed;
|
||||
sum = sum + c5.x + c5.y;
|
||||
return sum;
|
||||
|
@ -416,7 +416,7 @@ double fixed_5i(__int5 *in) {
|
|||
__attribute__((noinline)) double args_vec_3d(int fixed, __double3 c3) {
|
||||
// CHECK: args_vec_3d
|
||||
// CHECK: [[CAST:%.*]] = bitcast <3 x double>* {{%.*}} to <4 x double>*
|
||||
// CHECK: [[LOAD:%.*]] = load <4 x double>* [[CAST]]
|
||||
// CHECK: [[LOAD:%.*]] = load <4 x double>, <4 x double>* [[CAST]]
|
||||
// CHECK: shufflevector <4 x double> [[LOAD]], <4 x double> undef, <3 x i32> <i32 0, i32 1, i32 2>
|
||||
double sum = fixed;
|
||||
sum = sum + c3.x + c3.y;
|
||||
|
|
|
@ -134,7 +134,7 @@ struct s34 { char c; };
|
|||
void f34(struct s34 s);
|
||||
void g34(struct s34 *s) { f34(*s); }
|
||||
// CHECK: @g34(%struct.s34* %s)
|
||||
// CHECK: %[[a:.*]] = load i8* %{{.*}}
|
||||
// CHECK: %[[a:.*]] = load i8, i8* %{{.*}}
|
||||
// CHECK: zext i8 %[[a]] to i64
|
||||
// CHECK: call void @f34(i64 %{{.*}})
|
||||
|
||||
|
@ -200,9 +200,9 @@ float32x4_t f35(int i, s35_with_align s1, s35_with_align s2) {
|
|||
// CHECK: %s1 = alloca %struct.s35, align 16
|
||||
// CHECK: %s2 = alloca %struct.s35, align 16
|
||||
// CHECK: %[[a:.*]] = bitcast %struct.s35* %s1 to <4 x float>*
|
||||
// CHECK: load <4 x float>* %[[a]], align 16
|
||||
// CHECK: load <4 x float>, <4 x float>* %[[a]], align 16
|
||||
// CHECK: %[[b:.*]] = bitcast %struct.s35* %s2 to <4 x float>*
|
||||
// CHECK: load <4 x float>* %[[b]], align 16
|
||||
// CHECK: load <4 x float>, <4 x float>* %[[b]], align 16
|
||||
float32x4_t v = vaddq_f32(*(float32x4_t *)&s1,
|
||||
*(float32x4_t *)&s2);
|
||||
return v;
|
||||
|
@ -222,9 +222,9 @@ int32x4_t f36(int i, s36_with_align s1, s36_with_align s2) {
|
|||
// CHECK: store i128 %s1.coerce, i128* %{{.*}}, align 1
|
||||
// CHECK: store i128 %s2.coerce, i128* %{{.*}}, align 1
|
||||
// CHECK: %[[a:.*]] = bitcast %struct.s36* %s1 to <4 x i32>*
|
||||
// CHECK: load <4 x i32>* %[[a]], align 16
|
||||
// CHECK: load <4 x i32>, <4 x i32>* %[[a]], align 16
|
||||
// CHECK: %[[b:.*]] = bitcast %struct.s36* %s2 to <4 x i32>*
|
||||
// CHECK: load <4 x i32>* %[[b]], align 16
|
||||
// CHECK: load <4 x i32>, <4 x i32>* %[[b]], align 16
|
||||
int32x4_t v = vaddq_s32(*(int32x4_t *)&s1,
|
||||
*(int32x4_t *)&s2);
|
||||
return v;
|
||||
|
@ -239,9 +239,9 @@ typedef struct s37 s37_with_align;
|
|||
int32x4_t f37(int i, s37_with_align s1, s37_with_align s2) {
|
||||
// CHECK: define <4 x i32> @f37(i32 %i, %struct.s37* %s1, %struct.s37* %s2)
|
||||
// CHECK: %[[a:.*]] = bitcast %struct.s37* %s1 to <4 x i32>*
|
||||
// CHECK: load <4 x i32>* %[[a]], align 16
|
||||
// CHECK: load <4 x i32>, <4 x i32>* %[[a]], align 16
|
||||
// CHECK: %[[b:.*]] = bitcast %struct.s37* %s2 to <4 x i32>*
|
||||
// CHECK: load <4 x i32>* %[[b]], align 16
|
||||
// CHECK: load <4 x i32>, <4 x i32>* %[[b]], align 16
|
||||
int32x4_t v = vaddq_s32(*(int32x4_t *)&s1,
|
||||
*(int32x4_t *)&s2);
|
||||
return v;
|
||||
|
@ -287,8 +287,8 @@ s38_no_align g38;
|
|||
s38_no_align g38_2;
|
||||
int caller38() {
|
||||
// CHECK: define i32 @caller38()
|
||||
// CHECK: %[[a:.*]] = load i64* bitcast (%struct.s38* @g38 to i64*), align 1
|
||||
// CHECK: %[[b:.*]] = load i64* bitcast (%struct.s38* @g38_2 to i64*), align 1
|
||||
// CHECK: %[[a:.*]] = load i64, i64* bitcast (%struct.s38* @g38 to i64*), align 1
|
||||
// CHECK: %[[b:.*]] = load i64, i64* bitcast (%struct.s38* @g38_2 to i64*), align 1
|
||||
// CHECK: call i32 @f38(i32 3, i64 %[[a]], i64 %[[b]])
|
||||
return f38(3, g38, g38_2);
|
||||
}
|
||||
|
@ -309,8 +309,8 @@ int f38_stack(int i, int i2, int i3, int i4, int i5, int i6, int i7, int i8,
|
|||
}
|
||||
int caller38_stack() {
|
||||
// CHECK: define i32 @caller38_stack()
|
||||
// CHECK: %[[a:.*]] = load i64* bitcast (%struct.s38* @g38 to i64*), align 1
|
||||
// CHECK: %[[b:.*]] = load i64* bitcast (%struct.s38* @g38_2 to i64*), align 1
|
||||
// CHECK: %[[a:.*]] = load i64, i64* bitcast (%struct.s38* @g38 to i64*), align 1
|
||||
// CHECK: %[[b:.*]] = load i64, i64* bitcast (%struct.s38* @g38_2 to i64*), align 1
|
||||
// CHECK: call i32 @f38_stack(i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i64 %[[a]], i64 %[[b]])
|
||||
return f38_stack(1, 2, 3, 4, 5, 6, 7, 8, 9, g38, g38_2);
|
||||
}
|
||||
|
@ -340,8 +340,8 @@ s39_with_align g39;
|
|||
s39_with_align g39_2;
|
||||
int caller39() {
|
||||
// CHECK: define i32 @caller39()
|
||||
// CHECK: %[[a:.*]] = load i128* bitcast (%struct.s39* @g39 to i128*), align 1
|
||||
// CHECK: %[[b:.*]] = load i128* bitcast (%struct.s39* @g39_2 to i128*), align 1
|
||||
// CHECK: %[[a:.*]] = load i128, i128* bitcast (%struct.s39* @g39 to i128*), align 1
|
||||
// CHECK: %[[b:.*]] = load i128, i128* bitcast (%struct.s39* @g39_2 to i128*), align 1
|
||||
// CHECK: call i32 @f39(i32 3, i128 %[[a]], i128 %[[b]])
|
||||
return f39(3, g39, g39_2);
|
||||
}
|
||||
|
@ -362,8 +362,8 @@ int f39_stack(int i, int i2, int i3, int i4, int i5, int i6, int i7, int i8,
|
|||
}
|
||||
int caller39_stack() {
|
||||
// CHECK: define i32 @caller39_stack()
|
||||
// CHECK: %[[a:.*]] = load i128* bitcast (%struct.s39* @g39 to i128*), align 1
|
||||
// CHECK: %[[b:.*]] = load i128* bitcast (%struct.s39* @g39_2 to i128*), align 1
|
||||
// CHECK: %[[a:.*]] = load i128, i128* bitcast (%struct.s39* @g39 to i128*), align 1
|
||||
// CHECK: %[[b:.*]] = load i128, i128* bitcast (%struct.s39* @g39_2 to i128*), align 1
|
||||
// CHECK: call i32 @f39_stack(i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i128 %[[a]], i128 %[[b]])
|
||||
return f39_stack(1, 2, 3, 4, 5, 6, 7, 8, 9, g39, g39_2);
|
||||
}
|
||||
|
@ -395,8 +395,8 @@ s40_no_align g40;
|
|||
s40_no_align g40_2;
|
||||
int caller40() {
|
||||
// CHECK: define i32 @caller40()
|
||||
// CHECK: %[[a:.*]] = load [2 x i64]* bitcast (%struct.s40* @g40 to [2 x i64]*), align 1
|
||||
// CHECK: %[[b:.*]] = load [2 x i64]* bitcast (%struct.s40* @g40_2 to [2 x i64]*), align 1
|
||||
// CHECK: %[[a:.*]] = load [2 x i64], [2 x i64]* bitcast (%struct.s40* @g40 to [2 x i64]*), align 1
|
||||
// CHECK: %[[b:.*]] = load [2 x i64], [2 x i64]* bitcast (%struct.s40* @g40_2 to [2 x i64]*), align 1
|
||||
// CHECK: call i32 @f40(i32 3, [2 x i64] %[[a]], [2 x i64] %[[b]])
|
||||
return f40(3, g40, g40_2);
|
||||
}
|
||||
|
@ -417,8 +417,8 @@ int f40_stack(int i, int i2, int i3, int i4, int i5, int i6, int i7, int i8,
|
|||
}
|
||||
int caller40_stack() {
|
||||
// CHECK: define i32 @caller40_stack()
|
||||
// CHECK: %[[a:.*]] = load [2 x i64]* bitcast (%struct.s40* @g40 to [2 x i64]*), align 1
|
||||
// CHECK: %[[b:.*]] = load [2 x i64]* bitcast (%struct.s40* @g40_2 to [2 x i64]*), align 1
|
||||
// CHECK: %[[a:.*]] = load [2 x i64], [2 x i64]* bitcast (%struct.s40* @g40 to [2 x i64]*), align 1
|
||||
// CHECK: %[[b:.*]] = load [2 x i64], [2 x i64]* bitcast (%struct.s40* @g40_2 to [2 x i64]*), align 1
|
||||
// CHECK: call i32 @f40_stack(i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, [2 x i64] %[[a]], [2 x i64] %[[b]])
|
||||
return f40_stack(1, 2, 3, 4, 5, 6, 7, 8, 9, g40, g40_2);
|
||||
}
|
||||
|
@ -450,8 +450,8 @@ s41_with_align g41;
|
|||
s41_with_align g41_2;
|
||||
int caller41() {
|
||||
// CHECK: define i32 @caller41()
|
||||
// CHECK: %[[a:.*]] = load i128* bitcast (%struct.s41* @g41 to i128*), align 1
|
||||
// CHECK: %[[b:.*]] = load i128* bitcast (%struct.s41* @g41_2 to i128*), align 1
|
||||
// CHECK: %[[a:.*]] = load i128, i128* bitcast (%struct.s41* @g41 to i128*), align 1
|
||||
// CHECK: %[[b:.*]] = load i128, i128* bitcast (%struct.s41* @g41_2 to i128*), align 1
|
||||
// CHECK: call i32 @f41(i32 3, i128 %[[a]], i128 %[[b]])
|
||||
return f41(3, g41, g41_2);
|
||||
}
|
||||
|
@ -472,8 +472,8 @@ int f41_stack(int i, int i2, int i3, int i4, int i5, int i6, int i7, int i8,
|
|||
}
|
||||
int caller41_stack() {
|
||||
// CHECK: define i32 @caller41_stack()
|
||||
// CHECK: %[[a:.*]] = load i128* bitcast (%struct.s41* @g41 to i128*), align 1
|
||||
// CHECK: %[[b:.*]] = load i128* bitcast (%struct.s41* @g41_2 to i128*), align 1
|
||||
// CHECK: %[[a:.*]] = load i128, i128* bitcast (%struct.s41* @g41 to i128*), align 1
|
||||
// CHECK: %[[b:.*]] = load i128, i128* bitcast (%struct.s41* @g41_2 to i128*), align 1
|
||||
// CHECK: call i32 @f41_stack(i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i128 %[[a]], i128 %[[b]])
|
||||
return f41_stack(1, 2, 3, 4, 5, 6, 7, 8, 9, g41, g41_2);
|
||||
}
|
||||
|
@ -626,7 +626,7 @@ struct HFA {
|
|||
float test_hfa(int n, ...) {
|
||||
// CHECK-LABEL: define float @test_hfa(i32 %n, ...)
|
||||
// CHECK: [[THELIST:%.*]] = alloca i8*
|
||||
// CHECK: [[CURLIST:%.*]] = load i8** [[THELIST]]
|
||||
// CHECK: [[CURLIST:%.*]] = load i8*, i8** [[THELIST]]
|
||||
|
||||
// HFA is not indirect, so occupies its full 16 bytes on the stack.
|
||||
// CHECK: [[NEXTLIST:%.*]] = getelementptr i8, i8* [[CURLIST]], i32 16
|
||||
|
@ -652,7 +652,7 @@ struct TooBigHFA {
|
|||
float test_toobig_hfa(int n, ...) {
|
||||
// CHECK-LABEL: define float @test_toobig_hfa(i32 %n, ...)
|
||||
// CHECK: [[THELIST:%.*]] = alloca i8*
|
||||
// CHECK: [[CURLIST:%.*]] = load i8** [[THELIST]]
|
||||
// CHECK: [[CURLIST:%.*]] = load i8*, i8** [[THELIST]]
|
||||
|
||||
// TooBigHFA is not actually an HFA, so gets passed indirectly. Only 8 bytes
|
||||
// of stack consumed.
|
||||
|
@ -660,7 +660,7 @@ float test_toobig_hfa(int n, ...) {
|
|||
// CHECK: store i8* [[NEXTLIST]], i8** [[THELIST]]
|
||||
|
||||
// CHECK: [[HFAPTRPTR:%.*]] = bitcast i8* [[CURLIST]] to i8**
|
||||
// CHECK: [[HFAPTR:%.*]] = load i8** [[HFAPTRPTR]]
|
||||
// CHECK: [[HFAPTR:%.*]] = load i8*, i8** [[HFAPTRPTR]]
|
||||
// CHECK: bitcast i8* [[HFAPTR]] to %struct.TooBigHFA*
|
||||
__builtin_va_list thelist;
|
||||
__builtin_va_start(thelist, n);
|
||||
|
@ -675,7 +675,7 @@ struct HVA {
|
|||
int32x4_t test_hva(int n, ...) {
|
||||
// CHECK-LABEL: define <4 x i32> @test_hva(i32 %n, ...)
|
||||
// CHECK: [[THELIST:%.*]] = alloca i8*
|
||||
// CHECK: [[CURLIST:%.*]] = load i8** [[THELIST]]
|
||||
// CHECK: [[CURLIST:%.*]] = load i8*, i8** [[THELIST]]
|
||||
|
||||
// HVA is not indirect, so occupies its full 16 bytes on the stack. but it
|
||||
// must be properly aligned.
|
||||
|
@ -701,7 +701,7 @@ struct TooBigHVA {
|
|||
int32x4_t test_toobig_hva(int n, ...) {
|
||||
// CHECK-LABEL: define <4 x i32> @test_toobig_hva(i32 %n, ...)
|
||||
// CHECK: [[THELIST:%.*]] = alloca i8*
|
||||
// CHECK: [[CURLIST:%.*]] = load i8** [[THELIST]]
|
||||
// CHECK: [[CURLIST:%.*]] = load i8*, i8** [[THELIST]]
|
||||
|
||||
// TooBigHVA is not actually an HVA, so gets passed indirectly. Only 8 bytes
|
||||
// of stack consumed.
|
||||
|
@ -709,7 +709,7 @@ int32x4_t test_toobig_hva(int n, ...) {
|
|||
// CHECK: store i8* [[NEXTLIST]], i8** [[THELIST]]
|
||||
|
||||
// CHECK: [[HVAPTRPTR:%.*]] = bitcast i8* [[CURLIST]] to i8**
|
||||
// CHECK: [[HVAPTR:%.*]] = load i8** [[HVAPTRPTR]]
|
||||
// CHECK: [[HVAPTR:%.*]] = load i8*, i8** [[HVAPTRPTR]]
|
||||
// CHECK: bitcast i8* [[HVAPTR]] to %struct.TooBigHVA*
|
||||
__builtin_va_list thelist;
|
||||
__builtin_va_start(thelist, n);
|
||||
|
|
|
@ -12,7 +12,7 @@ void test1() {
|
|||
// CHECK: @test2
|
||||
void test2() {
|
||||
// CHECK: [[REGCALLRESULT:%[a-zA-Z0-9\.]+]] = call i32* @foo()
|
||||
// CHECK: load i32* [[REGCALLRESULT]]
|
||||
// CHECK: load i32, i32* [[REGCALLRESULT]]
|
||||
// CHECK: call i32 asm
|
||||
// CHECK: store i32 {{%[a-zA-Z0-9\.]+}}, i32* [[REGCALLRESULT]]
|
||||
asm ("foobar" : "+r"(*foo()));
|
||||
|
|
|
@ -16,11 +16,11 @@ int foo() {
|
|||
// CHECK: store i32 42, i32* [[A]]
|
||||
|
||||
asm volatile("; %0 This asm uses rsi" : : "r"(a));
|
||||
// CHECK: [[TMP:%[a-zA-Z0-9]+]] = load i32* [[A]]
|
||||
// CHECK: [[TMP:%[a-zA-Z0-9]+]] = load i32, i32* [[A]]
|
||||
// CHECK: call void asm sideeffect "; $0 This asm uses rsi", "{rsi},~{dirflag},~{fpsr},~{flags}"(i32 [[TMP]])
|
||||
|
||||
return a;
|
||||
// CHECK: [[TMP1:%[a-zA-Z0-9]+]] = load i32* [[A]]
|
||||
// CHECK: [[TMP1:%[a-zA-Z0-9]+]] = load i32, i32* [[A]]
|
||||
// CHECK: ret i32 [[TMP1]]
|
||||
}
|
||||
|
||||
|
@ -39,10 +39,10 @@ int earlyclobber() {
|
|||
// CHECK: store i32 42, i32* [[A]]
|
||||
|
||||
asm volatile("; %0 This asm uses rsi" : : "r"(a));
|
||||
// CHECK: [[TMP:%[a-zA-Z0-9]+]] = load i32* [[A]]
|
||||
// CHECK: [[TMP:%[a-zA-Z0-9]+]] = load i32, i32* [[A]]
|
||||
// CHECK: call void asm sideeffect "; $0 This asm uses rsi", "{rsi},~{dirflag},~{fpsr},~{flags}"(i32 [[TMP]])
|
||||
|
||||
return a;
|
||||
// CHECK: [[TMP1:%[a-zA-Z0-9]+]] = load i32* [[A]]
|
||||
// CHECK: [[TMP1:%[a-zA-Z0-9]+]] = load i32, i32* [[A]]
|
||||
// CHECK: ret i32 [[TMP1]]
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ extern _Atomic(pointer_quad_t) a_pointer_quad;
|
|||
// CHECK: define void @test0()
|
||||
// CHECK: [[TEMP:%.*]] = alloca i8, align 1
|
||||
// CHECK-NEXT: store i8 1, i8* [[TEMP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load i8* [[TEMP]], align 1
|
||||
// CHECK-NEXT: [[T0:%.*]] = load i8, i8* [[TEMP]], align 1
|
||||
// CHECK-NEXT: store atomic i8 [[T0]], i8* @a_bool seq_cst, align 1
|
||||
void test0() {
|
||||
__c11_atomic_store(&a_bool, 1, memory_order_seq_cst);
|
||||
|
@ -34,7 +34,7 @@ void test0() {
|
|||
// CHECK: [[TEMP:%.*]] = alloca float, align 4
|
||||
// CHECK-NEXT: store float 3.000000e+00, float* [[TEMP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = bitcast float* [[TEMP]] to i32*
|
||||
// CHECK-NEXT: [[T1:%.*]] = load i32* [[T0]], align 4
|
||||
// CHECK-NEXT: [[T1:%.*]] = load i32, i32* [[T0]], align 4
|
||||
// CHECK-NEXT: store atomic i32 [[T1]], i32* bitcast (float* @a_float to i32*) seq_cst, align 4
|
||||
void test1() {
|
||||
__c11_atomic_store(&a_float, 3, memory_order_seq_cst);
|
||||
|
@ -44,7 +44,7 @@ void test1() {
|
|||
// CHECK: [[TEMP:%.*]] = alloca i8*, align 8
|
||||
// CHECK-NEXT: store i8* @a_bool, i8** [[TEMP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = bitcast i8** [[TEMP]] to i64*
|
||||
// CHECK-NEXT: [[T1:%.*]] = load i64* [[T0]], align 8
|
||||
// CHECK-NEXT: [[T1:%.*]] = load i64, i64* [[T0]], align 8
|
||||
// CHECK-NEXT: store atomic i64 [[T1]], i64* bitcast (i8** @a_pointer to i64*) seq_cst, align 8
|
||||
void test2() {
|
||||
__c11_atomic_store(&a_pointer, &a_bool, memory_order_seq_cst);
|
||||
|
@ -55,7 +55,7 @@ void test2() {
|
|||
// CHECK-NEXT: [[TEMP:%.*]] = alloca [[PAIR_T]], align 8
|
||||
// CHECK: llvm.memcpy
|
||||
// CHECK-NEXT: [[T0:%.*]] = bitcast [[PAIR_T]]* [[TEMP]] to i128*
|
||||
// CHECK-NEXT: [[T1:%.*]] = load i128* [[T0]], align 16
|
||||
// CHECK-NEXT: [[T1:%.*]] = load i128, i128* [[T0]], align 16
|
||||
// CHECK-NEXT: store atomic i128 [[T1]], i128* bitcast ([[PAIR_T]]* @a_pointer_pair to i128*) seq_cst, align 16
|
||||
void test3(pointer_pair_t pair) {
|
||||
__c11_atomic_store(&a_pointer_pair, pair, memory_order_seq_cst);
|
||||
|
|
|
@ -13,13 +13,13 @@
|
|||
|
||||
int fi1(_Atomic(int) *i) {
|
||||
// CHECK-LABEL: @fi1
|
||||
// CHECK: load atomic i32* {{.*}} seq_cst
|
||||
// CHECK: load atomic i32, i32* {{.*}} seq_cst
|
||||
return __c11_atomic_load(i, memory_order_seq_cst);
|
||||
}
|
||||
|
||||
int fi1a(int *i) {
|
||||
// CHECK-LABEL: @fi1a
|
||||
// CHECK: load atomic i32* {{.*}} seq_cst
|
||||
// CHECK: load atomic i32, i32* {{.*}} seq_cst
|
||||
int v;
|
||||
__atomic_load(i, &v, memory_order_seq_cst);
|
||||
return v;
|
||||
|
@ -27,13 +27,13 @@ int fi1a(int *i) {
|
|||
|
||||
int fi1b(int *i) {
|
||||
// CHECK-LABEL: @fi1b
|
||||
// CHECK: load atomic i32* {{.*}} seq_cst
|
||||
// CHECK: load atomic i32, i32* {{.*}} seq_cst
|
||||
return __atomic_load_n(i, memory_order_seq_cst);
|
||||
}
|
||||
|
||||
int fi1c(atomic_int *i) {
|
||||
// CHECK-LABEL: @fi1c
|
||||
// CHECK: load atomic i32* {{.*}} seq_cst
|
||||
// CHECK: load atomic i32, i32* {{.*}} seq_cst
|
||||
return atomic_load(i);
|
||||
}
|
||||
|
||||
|
@ -148,7 +148,7 @@ _Bool fi4c(atomic_int *i) {
|
|||
|
||||
float ff1(_Atomic(float) *d) {
|
||||
// CHECK-LABEL: @ff1
|
||||
// CHECK: load atomic i32* {{.*}} monotonic
|
||||
// CHECK: load atomic i32, i32* {{.*}} monotonic
|
||||
return __c11_atomic_load(d, memory_order_relaxed);
|
||||
}
|
||||
|
||||
|
@ -184,11 +184,11 @@ void fd2(struct S *a, struct S *b) {
|
|||
// CHECK-NEXT: [[B_ADDR:%.*]] = alloca %struct.S*, align 4
|
||||
// CHECK-NEXT: store %struct.S* %a, %struct.S** [[A_ADDR]], align 4
|
||||
// CHECK-NEXT: store %struct.S* %b, %struct.S** [[B_ADDR]], align 4
|
||||
// CHECK-NEXT: [[LOAD_A_PTR:%.*]] = load %struct.S** [[A_ADDR]], align 4
|
||||
// CHECK-NEXT: [[LOAD_B_PTR:%.*]] = load %struct.S** [[B_ADDR]], align 4
|
||||
// CHECK-NEXT: [[LOAD_A_PTR:%.*]] = load %struct.S*, %struct.S** [[A_ADDR]], align 4
|
||||
// CHECK-NEXT: [[LOAD_B_PTR:%.*]] = load %struct.S*, %struct.S** [[B_ADDR]], align 4
|
||||
// CHECK-NEXT: [[COERCED_A:%.*]] = bitcast %struct.S* [[LOAD_A_PTR]] to i8*
|
||||
// CHECK-NEXT: [[COERCED_B:%.*]] = bitcast %struct.S* [[LOAD_B_PTR]] to i64*
|
||||
// CHECK-NEXT: [[LOAD_B:%.*]] = load i64* [[COERCED_B]], align 4
|
||||
// CHECK-NEXT: [[LOAD_B:%.*]] = load i64, i64* [[COERCED_B]], align 4
|
||||
// CHECK-NEXT: call void @__atomic_store_8(i8* [[COERCED_A]], i64 [[LOAD_B]],
|
||||
// CHECK-NEXT: ret void
|
||||
__atomic_store(a, b, memory_order_seq_cst);
|
||||
|
@ -202,12 +202,12 @@ void fd3(struct S *a, struct S *b, struct S *c) {
|
|||
// CHECK-NEXT: store %struct.S* %a, %struct.S** [[A_ADDR]], align 4
|
||||
// CHECK-NEXT: store %struct.S* %b, %struct.S** [[B_ADDR]], align 4
|
||||
// CHECK-NEXT: store %struct.S* %c, %struct.S** [[C_ADDR]], align 4
|
||||
// CHECK-NEXT: [[LOAD_A_PTR:%.*]] = load %struct.S** [[A_ADDR]], align 4
|
||||
// CHECK-NEXT: [[LOAD_B_PTR:%.*]] = load %struct.S** [[B_ADDR]], align 4
|
||||
// CHECK-NEXT: [[LOAD_C_PTR:%.*]] = load %struct.S** [[C_ADDR]], align 4
|
||||
// CHECK-NEXT: [[LOAD_A_PTR:%.*]] = load %struct.S*, %struct.S** [[A_ADDR]], align 4
|
||||
// CHECK-NEXT: [[LOAD_B_PTR:%.*]] = load %struct.S*, %struct.S** [[B_ADDR]], align 4
|
||||
// CHECK-NEXT: [[LOAD_C_PTR:%.*]] = load %struct.S*, %struct.S** [[C_ADDR]], align 4
|
||||
// CHECK-NEXT: [[COERCED_A:%.*]] = bitcast %struct.S* [[LOAD_A_PTR]] to i8*
|
||||
// CHECK-NEXT: [[COERCED_B:%.*]] = bitcast %struct.S* [[LOAD_B_PTR]] to i64*
|
||||
// CHECK-NEXT: [[LOAD_B:%.*]] = load i64* [[COERCED_B]], align 4
|
||||
// CHECK-NEXT: [[LOAD_B:%.*]] = load i64, i64* [[COERCED_B]], align 4
|
||||
// CHECK-NEXT: [[CALL:%.*]] = call i64 @__atomic_exchange_8(i8* [[COERCED_A]], i64 [[LOAD_B]],
|
||||
// CHECK-NEXT: [[COERCED_C:%.*]] = bitcast %struct.S* [[LOAD_C_PTR]] to i64*
|
||||
// CHECK-NEXT: store i64 [[CALL]], i64* [[COERCED_C]], align 4
|
||||
|
@ -223,13 +223,13 @@ _Bool fd4(struct S *a, struct S *b, struct S *c) {
|
|||
// CHECK: store %struct.S* %a, %struct.S** [[A_ADDR]], align 4
|
||||
// CHECK-NEXT: store %struct.S* %b, %struct.S** [[B_ADDR]], align 4
|
||||
// CHECK-NEXT: store %struct.S* %c, %struct.S** [[C_ADDR]], align 4
|
||||
// CHECK-NEXT: [[LOAD_A_PTR:%.*]] = load %struct.S** [[A_ADDR]], align 4
|
||||
// CHECK-NEXT: [[LOAD_B_PTR:%.*]] = load %struct.S** [[B_ADDR]], align 4
|
||||
// CHECK-NEXT: [[LOAD_C_PTR:%.*]] = load %struct.S** [[C_ADDR]], align 4
|
||||
// CHECK-NEXT: [[LOAD_A_PTR:%.*]] = load %struct.S*, %struct.S** [[A_ADDR]], align 4
|
||||
// CHECK-NEXT: [[LOAD_B_PTR:%.*]] = load %struct.S*, %struct.S** [[B_ADDR]], align 4
|
||||
// CHECK-NEXT: [[LOAD_C_PTR:%.*]] = load %struct.S*, %struct.S** [[C_ADDR]], align 4
|
||||
// CHECK-NEXT: [[COERCED_A:%.*]] = bitcast %struct.S* [[LOAD_A_PTR]] to i8*
|
||||
// CHECK-NEXT: [[COERCED_B:%.*]] = bitcast %struct.S* [[LOAD_B_PTR]] to i8*
|
||||
// CHECK-NEXT: [[COERCED_C:%.*]] = bitcast %struct.S* [[LOAD_C_PTR]] to i64*
|
||||
// CHECK-NEXT: [[LOAD_C:%.*]] = load i64* [[COERCED_C]], align 4
|
||||
// CHECK-NEXT: [[LOAD_C:%.*]] = load i64, i64* [[COERCED_C]], align 4
|
||||
// CHECK-NEXT: [[CALL:%.*]] = call zeroext i1 @__atomic_compare_exchange_8(i8* [[COERCED_A]], i8* [[COERCED_B]], i64 [[LOAD_C]]
|
||||
// CHECK-NEXT: ret i1 [[CALL]]
|
||||
return __atomic_compare_exchange(a, b, c, 1, 5, 5);
|
||||
|
@ -237,7 +237,7 @@ _Bool fd4(struct S *a, struct S *b, struct S *c) {
|
|||
|
||||
int* fp1(_Atomic(int*) *p) {
|
||||
// CHECK-LABEL: @fp1
|
||||
// CHECK: load atomic i32* {{.*}} seq_cst
|
||||
// CHECK: load atomic i32, i32* {{.*}} seq_cst
|
||||
return __c11_atomic_load(p, memory_order_seq_cst);
|
||||
}
|
||||
|
||||
|
@ -388,7 +388,7 @@ int structAtomicCmpExchange() {
|
|||
// CHECK: %[[call1:.*]] = call zeroext i1 @__atomic_compare_exchange(i32 3, {{.*}} @smallThing{{.*}} @thing1{{.*}} @thing2
|
||||
// CHECK: %[[zext1:.*]] = zext i1 %[[call1]] to i8
|
||||
// CHECK: store i8 %[[zext1]], i8* %[[x_mem]], align 1
|
||||
// CHECK: %[[x:.*]] = load i8* %[[x_mem]]
|
||||
// CHECK: %[[x:.*]] = load i8, i8* %[[x_mem]]
|
||||
// CHECK: %[[x_bool:.*]] = trunc i8 %[[x]] to i1
|
||||
// CHECK: %[[conv1:.*]] = zext i1 %[[x_bool]] to i32
|
||||
|
||||
|
@ -558,11 +558,11 @@ int PR21643() {
|
|||
// CHECK: %[[atomictmp:.*]] = alloca i32, align 4
|
||||
// CHECK: %[[atomicdst:.*]] = alloca i32, align 4
|
||||
// CHECK: store i32 1, i32* %[[atomictmp]]
|
||||
// CHECK: %[[one:.*]] = load i32* %[[atomictmp]], align 4
|
||||
// CHECK: %[[one:.*]] = load i32, i32* %[[atomictmp]], align 4
|
||||
// CHECK: %[[old:.*]] = atomicrmw or i32 addrspace(257)* inttoptr (i32 776 to i32 addrspace(257)*), i32 %[[one]] monotonic
|
||||
// CHECK: %[[new:.*]] = or i32 %[[old]], %[[one]]
|
||||
// CHECK: store i32 %[[new]], i32* %[[atomicdst]], align 4
|
||||
// CHECK: %[[ret:.*]] = load i32* %[[atomicdst]], align 4
|
||||
// CHECK: %[[ret:.*]] = load i32, i32* %[[atomicdst]], align 4
|
||||
// CHECK: ret i32 %[[ret]]
|
||||
}
|
||||
|
||||
|
@ -571,10 +571,10 @@ int PR17306_1(volatile _Atomic(int) *i) {
|
|||
// CHECK: %[[i_addr:.*]] = alloca i32
|
||||
// CHECK-NEXT: %[[atomicdst:.*]] = alloca i32
|
||||
// CHECK-NEXT: store i32* %i, i32** %[[i_addr]]
|
||||
// CHECK-NEXT: %[[addr:.*]] = load i32** %[[i_addr]]
|
||||
// CHECK-NEXT: %[[res:.*]] = load atomic volatile i32* %[[addr]] seq_cst
|
||||
// CHECK-NEXT: %[[addr:.*]] = load i32*, i32** %[[i_addr]]
|
||||
// CHECK-NEXT: %[[res:.*]] = load atomic volatile i32, i32* %[[addr]] seq_cst
|
||||
// CHECK-NEXT: store i32 %[[res]], i32* %[[atomicdst]]
|
||||
// CHECK-NEXT: %[[retval:.*]] = load i32* %[[atomicdst]]
|
||||
// CHECK-NEXT: %[[retval:.*]] = load i32, i32* %[[atomicdst]]
|
||||
// CHECK-NEXT: ret i32 %[[retval]]
|
||||
return __c11_atomic_load(i, memory_order_seq_cst);
|
||||
}
|
||||
|
@ -587,14 +587,14 @@ int PR17306_2(volatile int *i, int value) {
|
|||
// CHECK-NEXT: %[[atomicdst:.*]] = alloca i32
|
||||
// CHECK-NEXT: store i32* %i, i32** %[[i_addr]]
|
||||
// CHECK-NEXT: store i32 %value, i32* %[[value_addr]]
|
||||
// CHECK-NEXT: %[[i_lval:.*]] = load i32** %[[i_addr]]
|
||||
// CHECK-NEXT: %[[value:.*]] = load i32* %[[value_addr]]
|
||||
// CHECK-NEXT: %[[i_lval:.*]] = load i32*, i32** %[[i_addr]]
|
||||
// CHECK-NEXT: %[[value:.*]] = load i32, i32* %[[value_addr]]
|
||||
// CHECK-NEXT: store i32 %[[value]], i32* %[[atomictmp]]
|
||||
// CHECK-NEXT: %[[value_lval:.*]] = load i32* %[[atomictmp]]
|
||||
// CHECK-NEXT: %[[value_lval:.*]] = load i32, i32* %[[atomictmp]]
|
||||
// CHECK-NEXT: %[[old_val:.*]] = atomicrmw volatile add i32* %[[i_lval]], i32 %[[value_lval]] seq_cst
|
||||
// CHECK-NEXT: %[[new_val:.*]] = add i32 %[[old_val]], %[[value_lval]]
|
||||
// CHECK-NEXT: store i32 %[[new_val]], i32* %[[atomicdst]]
|
||||
// CHECK-NEXT: %[[retval:.*]] = load i32* %[[atomicdst]]
|
||||
// CHECK-NEXT: %[[retval:.*]] = load i32, i32* %[[atomicdst]]
|
||||
// CHECK-NEXT: ret i32 %[[retval]]
|
||||
return __atomic_add_fetch(i, value, memory_order_seq_cst);
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ extern _Atomic _Bool b;
|
|||
|
||||
_Bool bar() {
|
||||
// CHECK-LABEL: @bar
|
||||
// CHECK: %[[load:.*]] = load atomic i8* @b seq_cst
|
||||
// CHECK: %[[load:.*]] = load atomic i8, i8* @b seq_cst
|
||||
// CHECK: %[[tobool:.*]] = trunc i8 %[[load]] to i1
|
||||
// CHECK: ret i1 %[[tobool]]
|
||||
return b;
|
||||
|
|
|
@ -44,11 +44,11 @@ void test1(void) {
|
|||
// ARM: call{{.*}} void @__atomic_store(i32 100, i8* getelementptr inbounds ([100 x i8]* @a1, i32 0, i32 0), i8* getelementptr inbounds ([100 x i8]* @a2, i32 0, i32 0)
|
||||
|
||||
// PPC32-LABEL: define void @test1
|
||||
// PPC32: = load atomic i8* @c1 seq_cst
|
||||
// PPC32: = load atomic i8, i8* @c1 seq_cst
|
||||
// PPC32: store atomic i8 {{.*}}, i8* @c1 seq_cst
|
||||
// PPC32: = load atomic i16* @s1 seq_cst
|
||||
// PPC32: = load atomic i16, i16* @s1 seq_cst
|
||||
// PPC32: store atomic i16 {{.*}}, i16* @s1 seq_cst
|
||||
// PPC32: = load atomic i32* @i1 seq_cst
|
||||
// PPC32: = load atomic i32, i32* @i1 seq_cst
|
||||
// PPC32: store atomic i32 {{.*}}, i32* @i1 seq_cst
|
||||
// PPC32: = call i64 @__atomic_load_8(i8* bitcast (i64* @ll1 to i8*)
|
||||
// PPC32: call void @__atomic_store_8(i8* bitcast (i64* @ll1 to i8*), i64
|
||||
|
@ -56,23 +56,23 @@ void test1(void) {
|
|||
// PPC32: call void @__atomic_store(i32 100, i8* getelementptr inbounds ([100 x i8]* @a1, i32 0, i32 0), i8* getelementptr inbounds ([100 x i8]* @a2, i32 0, i32 0)
|
||||
|
||||
// PPC64-LABEL: define void @test1
|
||||
// PPC64: = load atomic i8* @c1 seq_cst
|
||||
// PPC64: = load atomic i8, i8* @c1 seq_cst
|
||||
// PPC64: store atomic i8 {{.*}}, i8* @c1 seq_cst
|
||||
// PPC64: = load atomic i16* @s1 seq_cst
|
||||
// PPC64: = load atomic i16, i16* @s1 seq_cst
|
||||
// PPC64: store atomic i16 {{.*}}, i16* @s1 seq_cst
|
||||
// PPC64: = load atomic i32* @i1 seq_cst
|
||||
// PPC64: = load atomic i32, i32* @i1 seq_cst
|
||||
// PPC64: store atomic i32 {{.*}}, i32* @i1 seq_cst
|
||||
// PPC64: = load atomic i64* @ll1 seq_cst
|
||||
// PPC64: = load atomic i64, i64* @ll1 seq_cst
|
||||
// PPC64: store atomic i64 {{.*}}, i64* @ll1 seq_cst
|
||||
// PPC64: call void @__atomic_load(i64 100, i8* getelementptr inbounds ([100 x i8]* @a1, i32 0, i32 0), i8* getelementptr inbounds ([100 x i8]* @a2, i32 0, i32 0)
|
||||
// PPC64: call void @__atomic_store(i64 100, i8* getelementptr inbounds ([100 x i8]* @a1, i32 0, i32 0), i8* getelementptr inbounds ([100 x i8]* @a2, i32 0, i32 0)
|
||||
|
||||
// MIPS32-LABEL: define void @test1
|
||||
// MIPS32: = load atomic i8* @c1 seq_cst
|
||||
// MIPS32: = load atomic i8, i8* @c1 seq_cst
|
||||
// MIPS32: store atomic i8 {{.*}}, i8* @c1 seq_cst
|
||||
// MIPS32: = load atomic i16* @s1 seq_cst
|
||||
// MIPS32: = load atomic i16, i16* @s1 seq_cst
|
||||
// MIPS32: store atomic i16 {{.*}}, i16* @s1 seq_cst
|
||||
// MIPS32: = load atomic i32* @i1 seq_cst
|
||||
// MIPS32: = load atomic i32, i32* @i1 seq_cst
|
||||
// MIPS32: store atomic i32 {{.*}}, i32* @i1 seq_cst
|
||||
// MIPS32: call i64 @__atomic_load_8(i8* bitcast (i64* @ll1 to i8*)
|
||||
// MIPS32: call void @__atomic_store_8(i8* bitcast (i64* @ll1 to i8*), i64
|
||||
|
@ -80,13 +80,13 @@ void test1(void) {
|
|||
// MIPS32: call void @__atomic_store(i32 zeroext 100, i8* getelementptr inbounds ([100 x i8]* @a1, i32 0, i32 0), i8* getelementptr inbounds ([100 x i8]* @a2, i32 0, i32 0)
|
||||
|
||||
// MIPS64-LABEL: define void @test1
|
||||
// MIPS64: = load atomic i8* @c1 seq_cst
|
||||
// MIPS64: = load atomic i8, i8* @c1 seq_cst
|
||||
// MIPS64: store atomic i8 {{.*}}, i8* @c1 seq_cst
|
||||
// MIPS64: = load atomic i16* @s1 seq_cst
|
||||
// MIPS64: = load atomic i16, i16* @s1 seq_cst
|
||||
// MIPS64: store atomic i16 {{.*}}, i16* @s1 seq_cst
|
||||
// MIPS64: = load atomic i32* @i1 seq_cst
|
||||
// MIPS64: = load atomic i32, i32* @i1 seq_cst
|
||||
// MIPS64: store atomic i32 {{.*}}, i32* @i1 seq_cst
|
||||
// MIPS64: = load atomic i64* @ll1 seq_cst
|
||||
// MIPS64: = load atomic i64, i64* @ll1 seq_cst
|
||||
// MIPS64: store atomic i64 {{.*}}, i64* @ll1 seq_cst
|
||||
// MIPS64: call void @__atomic_load(i64 zeroext 100, i8* getelementptr inbounds ([100 x i8]* @a1, i32 0, i32 0)
|
||||
// MIPS64: call void @__atomic_store(i64 zeroext 100, i8* getelementptr inbounds ([100 x i8]* @a1, i32 0, i32 0), i8* getelementptr inbounds ([100 x i8]* @a2, i32 0, i32 0)
|
||||
|
|
|
@ -79,7 +79,7 @@ void (__attribute__((fastcall)) *fptr)(int);
|
|||
void t21(void) {
|
||||
fptr(10);
|
||||
}
|
||||
// CHECK: [[FPTRVAR:%[a-z0-9]+]] = load void (i32)** @fptr
|
||||
// CHECK: [[FPTRVAR:%[a-z0-9]+]] = load void (i32)*, void (i32)** @fptr
|
||||
// CHECK-NEXT: call x86_fastcallcc void [[FPTRVAR]](i32 inreg 10)
|
||||
|
||||
|
||||
|
|
|
@ -10,17 +10,17 @@
|
|||
//
|
||||
|
||||
__m256 test__mm256_loadu_ps(void* p) {
|
||||
// CHECK: load <8 x float>* %{{.*}}, align 1
|
||||
// CHECK: load <8 x float>, <8 x float>* %{{.*}}, align 1
|
||||
return _mm256_loadu_ps(p);
|
||||
}
|
||||
|
||||
__m256d test__mm256_loadu_pd(void* p) {
|
||||
// CHECK: load <4 x double>* %{{.*}}, align 1
|
||||
// CHECK: load <4 x double>, <4 x double>* %{{.*}}, align 1
|
||||
return _mm256_loadu_pd(p);
|
||||
}
|
||||
|
||||
__m256i test__mm256_loadu_si256(void* p) {
|
||||
// CHECK: load <4 x i64>* %{{.+}}, align 1
|
||||
// CHECK: load <4 x i64>, <4 x i64>* %{{.+}}, align 1
|
||||
return _mm256_loadu_si256(p);
|
||||
}
|
||||
|
||||
|
|
|
@ -106,14 +106,14 @@ void test_mm512_store_pd(void *p, __m512d a)
|
|||
__m512 test_mm512_loadu_ps(void *p)
|
||||
{
|
||||
// CHECK-LABEL: @test_mm512_loadu_ps
|
||||
// CHECK: load <16 x float>* {{.*}}, align 1{{$}}
|
||||
// CHECK: load <16 x float>, <16 x float>* {{.*}}, align 1{{$}}
|
||||
return _mm512_loadu_ps(p);
|
||||
}
|
||||
|
||||
__m512d test_mm512_loadu_pd(void *p)
|
||||
{
|
||||
// CHECK-LABEL: @test_mm512_loadu_pd
|
||||
// CHECK: load <8 x double>* {{.*}}, align 1{{$}}
|
||||
// CHECK: load <8 x double>, <8 x double>* {{.*}}, align 1{{$}}
|
||||
return _mm512_loadu_pd(p);
|
||||
}
|
||||
|
||||
|
|
|
@ -16,13 +16,13 @@ typedef enum memory_order {
|
|||
|
||||
int fi1(_Atomic(int) *i) {
|
||||
// CHECK: @fi1
|
||||
// CHECK: load atomic i32* {{.*}} seq_cst
|
||||
// CHECK: load atomic i32, i32* {{.*}} seq_cst
|
||||
return __c11_atomic_load(i, memory_order_seq_cst);
|
||||
}
|
||||
|
||||
int fi1a(int *i) {
|
||||
// CHECK: @fi1a
|
||||
// CHECK: load atomic i32* {{.*}} seq_cst
|
||||
// CHECK: load atomic i32, i32* {{.*}} seq_cst
|
||||
int v;
|
||||
__atomic_load(i, &v, memory_order_seq_cst);
|
||||
return v;
|
||||
|
@ -30,7 +30,7 @@ int fi1a(int *i) {
|
|||
|
||||
int fi1b(int *i) {
|
||||
// CHECK: @fi1b
|
||||
// CHECK: load atomic i32* {{.*}} seq_cst
|
||||
// CHECK: load atomic i32, i32* {{.*}} seq_cst
|
||||
return __atomic_load_n(i, memory_order_seq_cst);
|
||||
}
|
||||
|
||||
|
@ -113,7 +113,7 @@ _Bool fi4b(int *i) {
|
|||
|
||||
float ff1(_Atomic(float) *d) {
|
||||
// CHECK: @ff1
|
||||
// CHECK: load atomic i32* {{.*}} monotonic
|
||||
// CHECK: load atomic i32, i32* {{.*}} monotonic
|
||||
return __c11_atomic_load(d, memory_order_relaxed);
|
||||
}
|
||||
|
||||
|
@ -129,7 +129,7 @@ float ff3(_Atomic(float) *d) {
|
|||
|
||||
int* fp1(_Atomic(int*) *p) {
|
||||
// CHECK: @fp1
|
||||
// CHECK: load atomic i64* {{.*}} seq_cst
|
||||
// CHECK: load atomic i64, i64* {{.*}} seq_cst
|
||||
return __c11_atomic_load(p, memory_order_seq_cst);
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ void test0() {
|
|||
// CHECK-NEXT: store i32 [[RESULT]], i32* [[T0]]
|
||||
// Check that we properly assign into the forwarding pointer.
|
||||
// CHECK-NEXT: [[A_FORWARDING:%.*]] = getelementptr inbounds [[BYREF]], [[BYREF]]* [[A]], i32 0, i32 1
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[BYREF]]** [[A_FORWARDING]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[BYREF]]*, [[BYREF]]** [[A_FORWARDING]]
|
||||
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[BYREF]], [[BYREF]]* [[T0]], i32 0, i32 4
|
||||
// CHECK-NEXT: [[T2:%.*]] = bitcast [[AGG]]* [[T1]] to i8*
|
||||
// CHECK-NEXT: [[T3:%.*]] = bitcast [[AGG]]* [[TEMP]] to i8*
|
||||
|
@ -46,14 +46,14 @@ void test1() {
|
|||
// CHECK-NEXT: store i32 [[RESULT]], i32* [[T0]]
|
||||
// Check that we properly assign into the forwarding pointer, first for b:
|
||||
// CHECK-NEXT: [[B_FORWARDING:%.*]] = getelementptr inbounds [[B_BYREF]], [[B_BYREF]]* [[B]], i32 0, i32 1
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[B_BYREF]]** [[B_FORWARDING]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[B_BYREF]]*, [[B_BYREF]]** [[B_FORWARDING]]
|
||||
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[B_BYREF]], [[B_BYREF]]* [[T0]], i32 0, i32 4
|
||||
// CHECK-NEXT: [[T2:%.*]] = bitcast [[AGG]]* [[T1]] to i8*
|
||||
// CHECK-NEXT: [[T3:%.*]] = bitcast [[AGG]]* [[TEMP]] to i8*
|
||||
// CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[T2]], i8* [[T3]], i64 4, i32 4, i1 false)
|
||||
// Then for 'a':
|
||||
// CHECK-NEXT: [[A_FORWARDING:%.*]] = getelementptr inbounds [[A_BYREF]], [[A_BYREF]]* [[A]], i32 0, i32 1
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[A_BYREF]]** [[A_FORWARDING]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[A_BYREF]]*, [[A_BYREF]]** [[A_FORWARDING]]
|
||||
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[A_BYREF]], [[A_BYREF]]* [[T0]], i32 0, i32 4
|
||||
// CHECK-NEXT: [[T2:%.*]] = bitcast [[AGG]]* [[T1]] to i8*
|
||||
// CHECK-NEXT: [[T3:%.*]] = bitcast [[AGG]]* [[TEMP]] to i8*
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
// CHECK: [[Vi:%.+]] = alloca %struct.__block_byref_i, align 8
|
||||
// CHECK: call i32 (...)* @rhs()
|
||||
// CHECK: [[V7:%.+]] = getelementptr inbounds %struct.__block_byref_i, %struct.__block_byref_i* [[Vi]], i32 0, i32 1
|
||||
// CHECK: load %struct.__block_byref_i** [[V7]]
|
||||
// CHECK: load %struct.__block_byref_i*, %struct.__block_byref_i** [[V7]]
|
||||
// CHECK: call i32 (...)* @rhs()
|
||||
// CHECK: [[V11:%.+]] = getelementptr inbounds %struct.__block_byref_i, %struct.__block_byref_i* [[Vi]], i32 0, i32 1
|
||||
// CHECK: load %struct.__block_byref_i** [[V11]]
|
||||
// CHECK: load %struct.__block_byref_i*, %struct.__block_byref_i** [[V11]]
|
||||
|
||||
int rhs();
|
||||
|
||||
|
|
|
@ -72,7 +72,7 @@ void (^b)() = ^{};
|
|||
int main() {
|
||||
(b?: ^{})();
|
||||
}
|
||||
// CHECK: [[ZERO:%.*]] = load void (...)** @b
|
||||
// CHECK: [[ZERO:%.*]] = load void (...)*, void (...)** @b
|
||||
// CHECK-NEXT: [[TB:%.*]] = icmp ne void (...)* [[ZERO]], null
|
||||
// CHECK-NEXT: br i1 [[TB]], label [[CT:%.*]], label [[CF:%.*]]
|
||||
// CHECK: [[ONE:%.*]] = bitcast void (...)* [[ZERO]] to void ()*
|
||||
|
|
|
@ -9,7 +9,7 @@ void f(_Bool *x, _Bool *y) {
|
|||
}
|
||||
|
||||
// CHECK-LABEL: define void @f(
|
||||
// CHECK: [[FROMMEM:%.*]] = load i32* %
|
||||
// CHECK: [[FROMMEM:%.*]] = load i32, i32* %
|
||||
// CHECK: [[BOOLVAL:%.*]] = trunc i32 [[FROMMEM]] to i1
|
||||
// CHECK: [[TOMEM:%.*]] = zext i1 [[BOOLVAL]] to i32
|
||||
// CHECK: store i32 [[TOMEM]]
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
// CHECK-LABEL: @test1
|
||||
int test1(int *a, int i) {
|
||||
// CHECK: store i32* %a, i32** [[A_ADDR:%.+]], align
|
||||
// CHECK: [[A:%.+]] = load i32** [[A_ADDR]]
|
||||
// CHECK: [[A:%.+]] = load i32*, i32** [[A_ADDR]]
|
||||
// CHECK: [[CMP:%.+]] = icmp ne i32* [[A]], null
|
||||
// CHECK: call void @llvm.assume(i1 [[CMP]])
|
||||
#ifdef _MSC_VER
|
||||
|
@ -14,7 +14,7 @@ int test1(int *a, int i) {
|
|||
#endif
|
||||
|
||||
// Nothing is generated for an assume with side effects...
|
||||
// CHECK-NOT: load i32** %i.addr
|
||||
// CHECK-NOT: load i32*, i32** %i.addr
|
||||
// CHECK-NOT: call void @llvm.assume
|
||||
#ifdef _MSC_VER
|
||||
__assume(++i != 0)
|
||||
|
|
|
@ -34,7 +34,7 @@ void f0() {
|
|||
void f1() {
|
||||
static char *x = "hello";
|
||||
bar(x);
|
||||
// CHECK: [[T1:%.*]] = load i8** @f1.x
|
||||
// CHECK: [[T1:%.*]] = load i8*, i8** @f1.x
|
||||
// CHECK: call void @bar(i8* [[T1:%.*]])
|
||||
}
|
||||
|
||||
|
|
|
@ -13,22 +13,22 @@ void testFloat(_Atomic(float) *fp) {
|
|||
// CHECK-NEXT: [[F:%.*]] = alloca float
|
||||
// CHECK-NEXT: store float* {{%.*}}, float** [[FP]]
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = load float** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load float*, float** [[FP]]
|
||||
// CHECK-NEXT: store float 1.000000e+00, float* [[T0]], align 4
|
||||
__c11_atomic_init(fp, 1.0f);
|
||||
|
||||
// CHECK-NEXT: store float 2.000000e+00, float* [[X]], align 4
|
||||
_Atomic(float) x = 2.0f;
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = load float** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load float*, float** [[FP]]
|
||||
// CHECK-NEXT: [[T1:%.*]] = bitcast float* [[T0]] to i32*
|
||||
// CHECK-NEXT: [[T2:%.*]] = load atomic i32* [[T1]] seq_cst, align 4
|
||||
// CHECK-NEXT: [[T2:%.*]] = load atomic i32, i32* [[T1]] seq_cst, align 4
|
||||
// CHECK-NEXT: [[T3:%.*]] = bitcast i32 [[T2]] to float
|
||||
// CHECK-NEXT: store float [[T3]], float* [[F]]
|
||||
float f = *fp;
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = load float* [[F]], align 4
|
||||
// CHECK-NEXT: [[T1:%.*]] = load float** [[FP]], align 4
|
||||
// CHECK-NEXT: [[T0:%.*]] = load float, float* [[F]], align 4
|
||||
// CHECK-NEXT: [[T1:%.*]] = load float*, float** [[FP]], align 4
|
||||
// CHECK-NEXT: [[T2:%.*]] = bitcast float [[T0]] to i32
|
||||
// CHECK-NEXT: [[T3:%.*]] = bitcast float* [[T1]] to i32*
|
||||
// CHECK-NEXT: store atomic i32 [[T2]], i32* [[T3]] seq_cst, align 4
|
||||
|
@ -46,7 +46,7 @@ void testComplexFloat(_Atomic(_Complex float) *fp) {
|
|||
// CHECK-NEXT: [[TMP1:%.*]] = alloca [[CF]], align 8
|
||||
// CHECK-NEXT: store [[CF]]*
|
||||
|
||||
// CHECK-NEXT: [[P:%.*]] = load [[CF]]** [[FP]]
|
||||
// CHECK-NEXT: [[P:%.*]] = load [[CF]]*, [[CF]]** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[P]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[P]], i32 0, i32 1
|
||||
// CHECK-NEXT: store float 1.000000e+00, float* [[T0]]
|
||||
|
@ -59,15 +59,15 @@ void testComplexFloat(_Atomic(_Complex float) *fp) {
|
|||
// CHECK-NEXT: store float 0.000000e+00, float* [[T1]]
|
||||
_Atomic(_Complex float) x = 2.0f;
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[CF]]** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[CF]]*, [[CF]]** [[FP]]
|
||||
// CHECK-NEXT: [[T1:%.*]] = bitcast [[CF]]* [[T0]] to i64*
|
||||
// CHECK-NEXT: [[T2:%.*]] = load atomic i64* [[T1]] seq_cst, align 8
|
||||
// CHECK-NEXT: [[T2:%.*]] = load atomic i64, i64* [[T1]] seq_cst, align 8
|
||||
// CHECK-NEXT: [[T3:%.*]] = bitcast [[CF]]* [[TMP0]] to i64*
|
||||
// CHECK-NEXT: store i64 [[T2]], i64* [[T3]], align 8
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[TMP0]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[R:%.*]] = load float* [[T0]]
|
||||
// CHECK-NEXT: [[R:%.*]] = load float, float* [[T0]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[TMP0]], i32 0, i32 1
|
||||
// CHECK-NEXT: [[I:%.*]] = load float* [[T0]]
|
||||
// CHECK-NEXT: [[I:%.*]] = load float, float* [[T0]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[F]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[F]], i32 0, i32 1
|
||||
// CHECK-NEXT: store float [[R]], float* [[T0]]
|
||||
|
@ -75,16 +75,16 @@ void testComplexFloat(_Atomic(_Complex float) *fp) {
|
|||
_Complex float f = *fp;
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[F]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[R:%.*]] = load float* [[T0]]
|
||||
// CHECK-NEXT: [[R:%.*]] = load float, float* [[T0]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[F]], i32 0, i32 1
|
||||
// CHECK-NEXT: [[I:%.*]] = load float* [[T0]]
|
||||
// CHECK-NEXT: [[DEST:%.*]] = load [[CF]]** [[FP]], align 4
|
||||
// CHECK-NEXT: [[I:%.*]] = load float, float* [[T0]]
|
||||
// CHECK-NEXT: [[DEST:%.*]] = load [[CF]]*, [[CF]]** [[FP]], align 4
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[TMP1]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[TMP1]], i32 0, i32 1
|
||||
// CHECK-NEXT: store float [[R]], float* [[T0]]
|
||||
// CHECK-NEXT: store float [[I]], float* [[T1]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = bitcast [[CF]]* [[TMP1]] to i64*
|
||||
// CHECK-NEXT: [[T1:%.*]] = load i64* [[T0]], align 8
|
||||
// CHECK-NEXT: [[T1:%.*]] = load i64, i64* [[T0]], align 8
|
||||
// CHECK-NEXT: [[T2:%.*]] = bitcast [[CF]]* [[DEST]] to i64*
|
||||
// CHECK-NEXT: store atomic i64 [[T1]], i64* [[T2]] seq_cst, align 8
|
||||
*fp = f;
|
||||
|
@ -101,7 +101,7 @@ void testStruct(_Atomic(S) *fp) {
|
|||
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[S]], align 8
|
||||
// CHECK-NEXT: store [[S]]*
|
||||
|
||||
// CHECK-NEXT: [[P:%.*]] = load [[S]]** [[FP]]
|
||||
// CHECK-NEXT: [[P:%.*]] = load [[S]]*, [[S]]** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[S]], [[S]]* [[P]], i32 0, i32 0
|
||||
// CHECK-NEXT: store i16 1, i16* [[T0]], align 2
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[S]], [[S]]* [[P]], i32 0, i32 1
|
||||
|
@ -122,19 +122,19 @@ void testStruct(_Atomic(S) *fp) {
|
|||
// CHECK-NEXT: store i16 4, i16* [[T0]], align 2
|
||||
_Atomic(S) x = (S){1,2,3,4};
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[S]]** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[S]]*, [[S]]** [[FP]]
|
||||
// CHECK-NEXT: [[T1:%.*]] = bitcast [[S]]* [[T0]] to i64*
|
||||
// CHECK-NEXT: [[T2:%.*]] = load atomic i64* [[T1]] seq_cst, align 8
|
||||
// CHECK-NEXT: [[T2:%.*]] = load atomic i64, i64* [[T1]] seq_cst, align 8
|
||||
// CHECK-NEXT: [[T3:%.*]] = bitcast [[S]]* [[F]] to i64*
|
||||
// CHECK-NEXT: store i64 [[T2]], i64* [[T3]], align 2
|
||||
S f = *fp;
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[S]]** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[S]]*, [[S]]** [[FP]]
|
||||
// CHECK-NEXT: [[T1:%.*]] = bitcast [[S]]* [[TMP0]] to i8*
|
||||
// CHECK-NEXT: [[T2:%.*]] = bitcast [[S]]* [[F]] to i8*
|
||||
// CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* [[T1]], i8* [[T2]], i32 8, i32 2, i1 false)
|
||||
// CHECK-NEXT: [[T3:%.*]] = bitcast [[S]]* [[TMP0]] to i64*
|
||||
// CHECK-NEXT: [[T4:%.*]] = load i64* [[T3]], align 8
|
||||
// CHECK-NEXT: [[T4:%.*]] = load i64, i64* [[T3]], align 8
|
||||
// CHECK-NEXT: [[T5:%.*]] = bitcast [[S]]* [[T0]] to i64*
|
||||
// CHECK-NEXT: store atomic i64 [[T4]], i64* [[T5]] seq_cst, align 8
|
||||
*fp = f;
|
||||
|
@ -152,7 +152,7 @@ void testPromotedStruct(_Atomic(PS) *fp) {
|
|||
// CHECK-NEXT: [[TMP1:%.*]] = alloca [[APS]], align 8
|
||||
// CHECK-NEXT: store [[APS]]*
|
||||
|
||||
// CHECK-NEXT: [[P:%.*]] = load [[APS]]** [[FP]]
|
||||
// CHECK-NEXT: [[P:%.*]] = load [[APS]]*, [[APS]]** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = bitcast [[APS]]* [[P]] to i8*
|
||||
// CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* [[T0]], i8 0, i64 8, i32 8, i1 false)
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[APS]], [[APS]]* [[P]], i32 0, i32 0
|
||||
|
@ -175,9 +175,9 @@ void testPromotedStruct(_Atomic(PS) *fp) {
|
|||
// CHECK-NEXT: store i16 3, i16* [[T1]], align 2
|
||||
_Atomic(PS) x = (PS){1,2,3};
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[APS]]** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[APS]]*, [[APS]]** [[FP]]
|
||||
// CHECK-NEXT: [[T1:%.*]] = bitcast [[APS]]* [[T0]] to i64*
|
||||
// CHECK-NEXT: [[T2:%.*]] = load atomic i64* [[T1]] seq_cst, align 8
|
||||
// CHECK-NEXT: [[T2:%.*]] = load atomic i64, i64* [[T1]] seq_cst, align 8
|
||||
// CHECK-NEXT: [[T3:%.*]] = bitcast [[APS]]* [[TMP0]] to i64*
|
||||
// CHECK-NEXT: store i64 [[T2]], i64* [[T3]], align 2
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[APS]], [[APS]]* [[TMP0]], i32 0, i32 0
|
||||
|
@ -186,7 +186,7 @@ void testPromotedStruct(_Atomic(PS) *fp) {
|
|||
// CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* [[T1]], i8* [[T2]], i32 6, i32 2, i1 false)
|
||||
PS f = *fp;
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[APS]]** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[APS]]*, [[APS]]** [[FP]]
|
||||
// CHECK-NEXT: [[T1:%.*]] = bitcast { %struct.PS, [2 x i8] }* [[TMP1]] to i8*
|
||||
// CHECK-NEXT: call void @llvm.memset.p0i8.i32(i8* [[T1]], i8 0, i32 8, i32 8, i1 false)
|
||||
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[APS]], [[APS]]* [[TMP1]], i32 0, i32 0
|
||||
|
@ -194,7 +194,7 @@ void testPromotedStruct(_Atomic(PS) *fp) {
|
|||
// CHECK-NEXT: [[T3:%.*]] = bitcast [[PS]]* [[F]] to i8*
|
||||
// CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* [[T2]], i8* [[T3]], i32 6, i32 2, i1 false)
|
||||
// CHECK-NEXT: [[T4:%.*]] = bitcast [[APS]]* [[TMP1]] to i64*
|
||||
// CHECK-NEXT: [[T5:%.*]] = load i64* [[T4]], align 8
|
||||
// CHECK-NEXT: [[T5:%.*]] = load i64, i64* [[T4]], align 8
|
||||
// CHECK-NEXT: [[T6:%.*]] = bitcast [[APS]]* [[T0]] to i64*
|
||||
// CHECK-NEXT: store atomic i64 [[T5]], i64* [[T6]] seq_cst, align 8
|
||||
*fp = f;
|
||||
|
|
|
@ -147,23 +147,23 @@ void testFloat(_Atomic(float) *fp) {
|
|||
// CHECK-NEXT: [[TMP1:%.*]] = alloca float
|
||||
// CHECK-NEXT: store float* {{%.*}}, float** [[FP]]
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = load float** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load float*, float** [[FP]]
|
||||
// CHECK-NEXT: store float 1.000000e+00, float* [[T0]], align 4
|
||||
__c11_atomic_init(fp, 1.0f);
|
||||
|
||||
// CHECK-NEXT: store float 2.000000e+00, float* [[X]], align 4
|
||||
_Atomic(float) x = 2.0f;
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = load float** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load float*, float** [[FP]]
|
||||
// CHECK-NEXT: [[T1:%.*]] = bitcast float* [[T0]] to i8*
|
||||
// CHECK-NEXT: [[T2:%.*]] = bitcast float* [[TMP0]] to i8*
|
||||
// CHECK-NEXT: call arm_aapcscc void @__atomic_load(i32 4, i8* [[T1]], i8* [[T2]], i32 5)
|
||||
// CHECK-NEXT: [[T3:%.*]] = load float* [[TMP0]], align 4
|
||||
// CHECK-NEXT: [[T3:%.*]] = load float, float* [[TMP0]], align 4
|
||||
// CHECK-NEXT: store float [[T3]], float* [[F]]
|
||||
float f = *fp;
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = load float* [[F]], align 4
|
||||
// CHECK-NEXT: [[T1:%.*]] = load float** [[FP]], align 4
|
||||
// CHECK-NEXT: [[T0:%.*]] = load float, float* [[F]], align 4
|
||||
// CHECK-NEXT: [[T1:%.*]] = load float*, float** [[FP]], align 4
|
||||
// CHECK-NEXT: store float [[T0]], float* [[TMP1]], align 4
|
||||
// CHECK-NEXT: [[T2:%.*]] = bitcast float* [[T1]] to i8*
|
||||
// CHECK-NEXT: [[T3:%.*]] = bitcast float* [[TMP1]] to i8*
|
||||
|
@ -182,7 +182,7 @@ void testComplexFloat(_Atomic(_Complex float) *fp) {
|
|||
// CHECK-NEXT: [[TMP1:%.*]] = alloca [[CF]], align 8
|
||||
// CHECK-NEXT: store [[CF]]*
|
||||
|
||||
// CHECK-NEXT: [[P:%.*]] = load [[CF]]** [[FP]]
|
||||
// CHECK-NEXT: [[P:%.*]] = load [[CF]]*, [[CF]]** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[P]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[P]], i32 0, i32 1
|
||||
// CHECK-NEXT: store float 1.000000e+00, float* [[T0]]
|
||||
|
@ -195,14 +195,14 @@ void testComplexFloat(_Atomic(_Complex float) *fp) {
|
|||
// CHECK-NEXT: store float 0.000000e+00, float* [[T1]]
|
||||
_Atomic(_Complex float) x = 2.0f;
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[CF]]** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[CF]]*, [[CF]]** [[FP]]
|
||||
// CHECK-NEXT: [[T1:%.*]] = bitcast [[CF]]* [[T0]] to i8*
|
||||
// CHECK-NEXT: [[T2:%.*]] = bitcast [[CF]]* [[TMP0]] to i8*
|
||||
// CHECK-NEXT: call arm_aapcscc void @__atomic_load(i32 8, i8* [[T1]], i8* [[T2]], i32 5)
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[TMP0]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[R:%.*]] = load float* [[T0]]
|
||||
// CHECK-NEXT: [[R:%.*]] = load float, float* [[T0]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[TMP0]], i32 0, i32 1
|
||||
// CHECK-NEXT: [[I:%.*]] = load float* [[T0]]
|
||||
// CHECK-NEXT: [[I:%.*]] = load float, float* [[T0]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[F]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[F]], i32 0, i32 1
|
||||
// CHECK-NEXT: store float [[R]], float* [[T0]]
|
||||
|
@ -210,10 +210,10 @@ void testComplexFloat(_Atomic(_Complex float) *fp) {
|
|||
_Complex float f = *fp;
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[F]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[R:%.*]] = load float* [[T0]]
|
||||
// CHECK-NEXT: [[R:%.*]] = load float, float* [[T0]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[F]], i32 0, i32 1
|
||||
// CHECK-NEXT: [[I:%.*]] = load float* [[T0]]
|
||||
// CHECK-NEXT: [[DEST:%.*]] = load [[CF]]** [[FP]], align 4
|
||||
// CHECK-NEXT: [[I:%.*]] = load float, float* [[T0]]
|
||||
// CHECK-NEXT: [[DEST:%.*]] = load [[CF]]*, [[CF]]** [[FP]], align 4
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[TMP1]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[CF]], [[CF]]* [[TMP1]], i32 0, i32 1
|
||||
// CHECK-NEXT: store float [[R]], float* [[T0]]
|
||||
|
@ -236,7 +236,7 @@ void testStruct(_Atomic(S) *fp) {
|
|||
// CHECK-NEXT: [[TMP0:%.*]] = alloca [[S]], align 8
|
||||
// CHECK-NEXT: store [[S]]*
|
||||
|
||||
// CHECK-NEXT: [[P:%.*]] = load [[S]]** [[FP]]
|
||||
// CHECK-NEXT: [[P:%.*]] = load [[S]]*, [[S]]** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[S]], [[S]]* [[P]], i32 0, i32 0
|
||||
// CHECK-NEXT: store i16 1, i16* [[T0]], align 2
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[S]], [[S]]* [[P]], i32 0, i32 1
|
||||
|
@ -257,13 +257,13 @@ void testStruct(_Atomic(S) *fp) {
|
|||
// CHECK-NEXT: store i16 4, i16* [[T0]], align 2
|
||||
_Atomic(S) x = (S){1,2,3,4};
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[S]]** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[S]]*, [[S]]** [[FP]]
|
||||
// CHECK-NEXT: [[T1:%.*]] = bitcast [[S]]* [[T0]] to i8*
|
||||
// CHECK-NEXT: [[T2:%.*]] = bitcast [[S]]* [[F]] to i8*
|
||||
// CHECK-NEXT: call arm_aapcscc void @__atomic_load(i32 8, i8* [[T1]], i8* [[T2]], i32 5)
|
||||
S f = *fp;
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[S]]** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[S]]*, [[S]]** [[FP]]
|
||||
// CHECK-NEXT: [[T1:%.*]] = bitcast [[S]]* [[TMP0]] to i8*
|
||||
// CHECK-NEXT: [[T2:%.*]] = bitcast [[S]]* [[F]] to i8*
|
||||
// CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* [[T1]], i8* [[T2]], i32 8, i32 2, i1 false)
|
||||
|
@ -289,7 +289,7 @@ void testPromotedStruct(_Atomic(PS) *fp) {
|
|||
// CHECK-NEXT: [[TMP3:%.*]] = alloca [[APS]], align 8
|
||||
// CHECK-NEXT: store [[APS]]*
|
||||
|
||||
// CHECK-NEXT: [[P:%.*]] = load [[APS]]** [[FP]]
|
||||
// CHECK-NEXT: [[P:%.*]] = load [[APS]]*, [[APS]]** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = bitcast [[APS]]* [[P]] to i8*
|
||||
// CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* [[T0]], i8 0, i64 8, i32 8, i1 false)
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[APS]], [[APS]]* [[P]], i32 0, i32 0
|
||||
|
@ -312,7 +312,7 @@ void testPromotedStruct(_Atomic(PS) *fp) {
|
|||
// CHECK-NEXT: store i16 3, i16* [[T1]], align 2
|
||||
_Atomic(PS) x = (PS){1,2,3};
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[APS]]** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[APS]]*, [[APS]]** [[FP]]
|
||||
// CHECK-NEXT: [[T1:%.*]] = bitcast [[APS]]* [[T0]] to i8*
|
||||
// CHECK-NEXT: [[T2:%.*]] = bitcast [[APS]]* [[TMP0]] to i8*
|
||||
// CHECK-NEXT: call arm_aapcscc void @__atomic_load(i32 8, i8* [[T1]], i8* [[T2]], i32 5)
|
||||
|
@ -322,7 +322,7 @@ void testPromotedStruct(_Atomic(PS) *fp) {
|
|||
// CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* [[T1]], i8* [[T2]], i32 6, i32 2, i1 false)
|
||||
PS f = *fp;
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[APS]]** [[FP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[APS]]*, [[APS]]** [[FP]]
|
||||
// CHECK-NEXT: [[T1:%.*]] = bitcast { %struct.PS, [2 x i8] }* [[TMP1]] to i8*
|
||||
// CHECK-NEXT: call void @llvm.memset.p0i8.i32(i8* [[T1]], i8 0, i32 8, i32 8, i1 false)
|
||||
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[APS]], [[APS]]* [[TMP1]], i32 0, i32 0
|
||||
|
@ -334,7 +334,7 @@ void testPromotedStruct(_Atomic(PS) *fp) {
|
|||
// CHECK-NEXT: call arm_aapcscc void @__atomic_store(i32 8, i8* [[T4]], i8* [[T5]], i32 5)
|
||||
*fp = f;
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[APS]]** [[FP]], align 4
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [[APS]]*, [[APS]]** [[FP]], align 4
|
||||
// CHECK-NEXT: [[T1:%.*]] = bitcast [[APS]]* [[T0]] to i8*
|
||||
// CHECK-NEXT: [[T2:%.*]] = bitcast [[APS]]* [[TMP3]] to i8*
|
||||
// CHECK-NEXT: call arm_aapcscc void @__atomic_load(i32 8, i8* [[T1]], i8* [[T2]], i32 5)
|
||||
|
@ -343,7 +343,7 @@ void testPromotedStruct(_Atomic(PS) *fp) {
|
|||
// CHECK-NEXT: [[T2:%.*]] = bitcast %struct.PS* [[T0]] to i8*
|
||||
// CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* [[T1]], i8* [[T2]], i32 6, i32 2, i1 false)
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds %struct.PS, %struct.PS* [[TMP2]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[T1:%.*]] = load i16* [[T0]], align 2
|
||||
// CHECK-NEXT: [[T1:%.*]] = load i16, i16* [[T0]], align 2
|
||||
// CHECK-NEXT: [[T2:%.*]] = sext i16 [[T1]] to i32
|
||||
// CHECK-NEXT: store i32 [[T2]], i32* [[A]], align 4
|
||||
int a = ((PS)*fp).x;
|
||||
|
|
|
@ -15,6 +15,6 @@ int main ()
|
|||
// CHECK-LABEL: define internal void @__main_block_invoke
|
||||
// CHECK: [[C1:%.*]] = alloca { double, double }, align 8
|
||||
// CHECK: [[RP:%.*]] = getelementptr inbounds { double, double }, { double, double }* [[C1]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[R:%.*]] = load double* [[RP]]
|
||||
// CHECK-NEXT: [[R:%.*]] = load double, double* [[RP]]
|
||||
// CHECK-NEXT: [[IP:%.*]] = getelementptr inbounds { double, double }, { double, double }* [[C1]], i32 0, i32 1
|
||||
// CHECK-NEXT: [[I:%.*]] = load double* [[IP]]
|
||||
// CHECK-NEXT: [[I:%.*]] = load double, double* [[IP]]
|
||||
|
|
|
@ -32,59 +32,59 @@ void test_nest_captured_stmt(int param, int size, int param_arr[size]) {
|
|||
|
||||
// CHECK1: define internal void @__captured_stmt{{.*}}([[T]]
|
||||
// CHECK1: [[PARAM_ARR_SIZE_REF:%.+]] = getelementptr inbounds [[T]], [[T]]* {{.+}}, i{{[0-9]+}} 0, i{{[0-9]+}} 5
|
||||
// CHECK1: [[PARAM_ARR_SIZE:%.+]] = load [[SIZE_TYPE]]* [[PARAM_ARR_SIZE_REF]]
|
||||
// CHECK1: [[PARAM_ARR_SIZE:%.+]] = load [[SIZE_TYPE]], [[SIZE_TYPE]]* [[PARAM_ARR_SIZE_REF]]
|
||||
// CHECK1: [[ARR_SIZE1_REF:%.+]] = getelementptr inbounds [[T]], [[T]]* {{.+}}, i{{[0-9]+}} 0, i{{[0-9]+}} 8
|
||||
// CHECK1: [[ARR_SIZE1:%.+]] = load [[SIZE_TYPE]]* [[ARR_SIZE1_REF]]
|
||||
// CHECK1: [[ARR_SIZE1:%.+]] = load [[SIZE_TYPE]], [[SIZE_TYPE]]* [[ARR_SIZE1_REF]]
|
||||
// CHECK1: [[ARR_SIZE2_REF:%.+]] = getelementptr inbounds [[T]], [[T]]* {{.+}}, i{{[0-9]+}} 0, i{{[0-9]+}} 9
|
||||
// CHECK1: [[ARR_SIZE2:%.+]] = load [[SIZE_TYPE]]* [[ARR_SIZE2_REF]]
|
||||
// CHECK1: [[ARR_SIZE2:%.+]] = load [[SIZE_TYPE]], [[SIZE_TYPE]]* [[ARR_SIZE2_REF]]
|
||||
//
|
||||
// CHECK1: getelementptr inbounds [[T]], [[T]]* {{.*}}, i{{[0-9]+}} 0, i{{[0-9]+}} 2
|
||||
// CHECK1-NEXT: load %struct.A**
|
||||
// CHECK1-NEXT: load %struct.A*, %struct.A**
|
||||
// CHECK1-NEXT: getelementptr inbounds %struct.A, %struct.A*
|
||||
// CHECK1-NEXT: store i{{.+}} 1
|
||||
//
|
||||
// CHECK1: getelementptr inbounds [[T]], [[T]]* {{.*}}, i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK1-NEXT: load i{{[0-9]+}}**
|
||||
// CHECK1-NEXT: load i{{[0-9]+}}*, i{{[0-9]+}}**
|
||||
// CHECK1-NEXT: store i{{[0-9]+}} 1
|
||||
//
|
||||
// CHECK1: getelementptr inbounds [[T]], [[T]]* {{.*}}, i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK1-NEXT: load i{{[0-9]+}}**
|
||||
// CHECK1-NEXT: load i{{[0-9]+}}*, i{{[0-9]+}}**
|
||||
// CHECK1-NEXT: store i{{[0-9]+}} 1
|
||||
//
|
||||
// CHECK1: getelementptr inbounds [[T]], [[T]]* {{.*}}, i{{[0-9]+}} 0, i{{[0-9]+}} 4
|
||||
// CHECK1-NEXT: load i{{[0-9]+}}**
|
||||
// CHECK1-NEXT: load i{{[0-9]+}}*
|
||||
// CHECK1-NEXT: load i{{[0-9]+}}*, i{{[0-9]+}}**
|
||||
// CHECK1-NEXT: load i{{[0-9]+}}, i{{[0-9]+}}*
|
||||
// CHECK1-NEXT: getelementptr inbounds [[T]], [[T]]* {{.*}}, i{{[0-9]+}} 0, i{{[0-9]+}} 3
|
||||
// CHECK1-NEXT: load i{{[0-9]+}}***
|
||||
// CHECK1-NEXT: load i{{[0-9]+}}**
|
||||
// CHECK1-NEXT: load i{{[0-9]+}}**, i{{[0-9]+}}***
|
||||
// CHECK1-NEXT: load i{{[0-9]+}}*, i{{[0-9]+}}**
|
||||
// CHECK1-NEXT: store i{{[0-9]+}}
|
||||
//
|
||||
// CHECK1: getelementptr inbounds [[T]], [[T]]* {{.*}}, i{{[0-9]+}} 0, i{{[0-9]+}} 2
|
||||
// CHECK1-NEXT: load %struct.A**
|
||||
// CHECK1-NEXT: load %struct.A*, %struct.A**
|
||||
// CHECK1-NEXT: getelementptr inbounds %struct.A, %struct.A*
|
||||
// CHECK1-NEXT: store float
|
||||
//
|
||||
// CHECK1: getelementptr inbounds [[T]], [[T]]* {{.*}}, i{{[0-9]+}} 0, i{{[0-9]+}} 2
|
||||
// CHECK1-NEXT: load %struct.A**
|
||||
// CHECK1-NEXT: load %struct.A*, %struct.A**
|
||||
// CHECK1-NEXT: getelementptr inbounds %struct.A, %struct.A*
|
||||
// CHECK1-NEXT: store i8 99
|
||||
//
|
||||
// CHECK1: [[SIZE_ADDR_REF:%.*]] = getelementptr inbounds [[T]], [[T]]* {{.*}}, i{{.+}} 0, i{{.+}} 7
|
||||
// CHECK1-DAG: [[SIZE_ADDR:%.*]] = load i{{.+}}** [[SIZE_ADDR_REF]]
|
||||
// CHECK1-DAG: [[SIZE:%.*]] = load i{{.+}}* [[SIZE_ADDR]]
|
||||
// CHECK1-DAG: [[SIZE_ADDR:%.*]] = load i{{.+}}*, i{{.+}}** [[SIZE_ADDR_REF]]
|
||||
// CHECK1-DAG: [[SIZE:%.*]] = load i{{.+}}, i{{.+}}* [[SIZE_ADDR]]
|
||||
// CHECK1-DAG: [[PARAM_ARR_IDX:%.*]] = sub nsw i{{.+}} [[SIZE]], 1
|
||||
// CHECK1-DAG: [[PARAM_ARR_ADDR_REF:%.*]] = getelementptr inbounds [[T]], [[T]]* {{.*}}, i{{.+}} 0, i{{.+}} 6
|
||||
// CHECK1-DAG: [[PARAM_ARR_ADDR:%.*]] = load i{{.+}}*** [[PARAM_ARR_ADDR_REF]]
|
||||
// CHECK1-DAG: [[PARAM_ARR:%.*]] = load i{{.+}}** [[PARAM_ARR_ADDR]]
|
||||
// CHECK1-DAG: [[PARAM_ARR_ADDR:%.*]] = load i{{.+}}**, i{{.+}}*** [[PARAM_ARR_ADDR_REF]]
|
||||
// CHECK1-DAG: [[PARAM_ARR:%.*]] = load i{{.+}}*, i{{.+}}** [[PARAM_ARR_ADDR]]
|
||||
// CHECK1-DAG: [[PARAM_ARR_SIZE_MINUS_1_ADDR:%.*]] = getelementptr inbounds i{{.+}}, i{{.+}}* [[PARAM_ARR]], i{{.*}}
|
||||
// CHECK1: store i{{.+}} 2, i{{.+}}* [[PARAM_ARR_SIZE_MINUS_1_ADDR]]
|
||||
//
|
||||
// CHECK1: [[Z_ADDR_REF:%.*]] = getelementptr inbounds [[T]], [[T]]* {{.*}}, i{{.+}} 0, i{{.+}} 2
|
||||
// CHECK1-DAG: [[Z_ADDR:%.*]] = load %struct.A** [[Z_ADDR_REF]]
|
||||
// CHECK1-DAG: [[Z_ADDR:%.*]] = load %struct.A*, %struct.A** [[Z_ADDR_REF]]
|
||||
// CHECK1-DAG: [[Z_A_ADDR:%.*]] = getelementptr inbounds %struct.A, %struct.A* [[Z_ADDR]], i{{.+}} 0, i{{.+}} 0
|
||||
// CHECK1-DAG: [[ARR_IDX_2:%.*]] = load i{{.+}}* [[Z_A_ADDR]]
|
||||
// CHECK1-DAG: [[ARR_IDX_2:%.*]] = load i{{.+}}, i{{.+}}* [[Z_A_ADDR]]
|
||||
// CHECK1-DAG: [[ARR_ADDR_REF:%.*]] = getelementptr inbounds [[T]], [[T]]* {{.*}}, i{{.+}} 0, i{{.+}} 10
|
||||
// CHECK1-DAG: [[ARR_ADDR:%.*]] = load i{{.+}}** [[ARR_ADDR_REF]]
|
||||
// CHECK1-DAG: [[ARR_ADDR:%.*]] = load i{{.+}}*, i{{.+}}** [[ARR_ADDR_REF]]
|
||||
// CHECK1-DAG: [[ARR_IDX_1:%.*]] = mul {{.*}} 10
|
||||
// CHECK1-DAG: [[ARR_10_ADDR:%.*]] = getelementptr inbounds i{{.+}}, i{{.+}}* [[ARR_ADDR]], i{{.*}} [[ARR_IDX_1]]
|
||||
// CHECK1-DAG: [[ARR_10_Z_A_ADDR:%.*]] = getelementptr inbounds i{{.+}}, i{{.+}}* [[ARR_10_ADDR]], i{{.*}}
|
||||
|
@ -143,12 +143,12 @@ void test_nest_block() {
|
|||
// CHECK2: [[CapA:%[0-9a-z_.]*]] = getelementptr inbounds {{.*}}, i{{[0-9]+}} 0, i{{[0-9]+}} 7
|
||||
//
|
||||
// CHECK2: getelementptr inbounds %struct.anon{{.*}}, i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK2: load i{{[0-9]+}}**
|
||||
// CHECK2: load i{{[0-9]+}}*
|
||||
// CHECK2: load i{{[0-9]+}}*, i{{[0-9]+}}**
|
||||
// CHECK2: load i{{[0-9]+}}, i{{[0-9]+}}*
|
||||
// CHECK2: store i{{[0-9]+}} {{.*}}, i{{[0-9]+}}* [[CapA]]
|
||||
//
|
||||
// CHECK2: [[CapC:%[0-9a-z_.]*]] = getelementptr inbounds {{.*}}, i{{[0-9]+}} 0, i{{[0-9]+}} 8
|
||||
// CHECK2-NEXT: [[Val:%[0-9a-z_]*]] = load i{{[0-9]+}}* [[C]]
|
||||
// CHECK2-NEXT: [[Val:%[0-9a-z_]*]] = load i{{[0-9]+}}, i{{[0-9]+}}* [[C]]
|
||||
// CHECK2-NEXT: store i{{[0-9]+}} [[Val]], i{{[0-9]+}}* [[CapC]]
|
||||
//
|
||||
// CHECK2: bitcast %struct.__block_byref_d*
|
||||
|
|
|
@ -27,8 +27,8 @@ void test1() {
|
|||
|
||||
// CHECK-1: define internal void @[[HelperName]](%struct.anon
|
||||
// CHECK-1: getelementptr inbounds %struct.anon{{.*}}, i32 0, i32 0
|
||||
// CHECK-1: load i32**
|
||||
// CHECK-1: load i32*
|
||||
// CHECK-1: load i32*, i32**
|
||||
// CHECK-1: load i32, i32*
|
||||
// CHECK-1: add nsw i32
|
||||
// CHECK-1: store i32
|
||||
|
||||
|
@ -70,7 +70,7 @@ void test4(intptr_t size, intptr_t vla_arr[size]) {
|
|||
}
|
||||
// CHECK-3: test4([[INTPTR_T:i.+]] {{.*}}[[SIZE_ARG:%.+]], [[INTPTR_T]]*
|
||||
// CHECK-3: store [[INTPTR_T]] {{.*}}[[SIZE_ARG]], [[INTPTR_T]]* [[SIZE_ADDR:%.+]],
|
||||
// CHECK-3: [[SIZE:%.+]] = load [[INTPTR_T]]* [[SIZE_ADDR]],
|
||||
// CHECK-3: [[SIZE:%.+]] = load [[INTPTR_T]], [[INTPTR_T]]* [[SIZE_ADDR]],
|
||||
// CHECK-3: [[REF:%.+]] = getelementptr inbounds
|
||||
// CHECK-3: store [[INTPTR_T]] [[SIZE]], [[INTPTR_T]]* [[REF]]
|
||||
// CHECK-3: call void @__captured_stmt
|
||||
|
@ -92,6 +92,6 @@ void dont_capture_global() {
|
|||
|
||||
// CHECK-GLOBALS: define internal void @__captured_stmt[[HelperName]]
|
||||
// CHECK-GLOBALS-NOT: ret
|
||||
// CHECK-GLOBALS: load i32* @global
|
||||
// CHECK-GLOBALS: load i32* @
|
||||
// CHECK-GLOBALS: load i32* @e
|
||||
// CHECK-GLOBALS: load i32, i32* @global
|
||||
// CHECK-GLOBALS: load i32, i32* @
|
||||
// CHECK-GLOBALS: load i32, i32* @e
|
||||
|
|
|
@ -33,108 +33,108 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
|
||||
sc1 = csc;
|
||||
// CHECK: %[[VAR1:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC:[A-Za-z0-9.]+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR2:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR1]]
|
||||
// CHECK-NEXT: %[[VAR2:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR1]]
|
||||
// CHECK-NEXT: store i[[CHSIZE]] %[[VAR2]], i[[CHSIZE]]* %[[SC1:[A-Za-z0-9.]+]], align [[CHALIGN]]
|
||||
|
||||
sc1 = cuc;
|
||||
// CHECK-NEXT: %[[VAR3:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC:[A-Za-z0-9.]+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR4:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR3]]
|
||||
// CHECK-NEXT: %[[VAR4:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR3]]
|
||||
// CHECK-NEXT: store i[[CHSIZE]] %[[VAR4]], i[[CHSIZE]]* %[[SC1]], align [[CHALIGN]]
|
||||
|
||||
sc1 = csll;
|
||||
// CHECK-NEXT: %[[VAR5:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL:[A-Za-z0-9.]+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR6:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR5]]
|
||||
// CHECK-NEXT: %[[VAR6:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR5]]
|
||||
// CHECK-NEXT: %[[VAR7:[A-Za-z0-9.]+]] = trunc i[[LLSIZE]] %[[VAR6]] to i[[CHSIZE]]
|
||||
// CHECK-NEXT: store i[[CHSIZE]] %[[VAR7]], i[[CHSIZE]]* %[[SC1]], align [[CHALIGN]]
|
||||
|
||||
sc1 = cull;
|
||||
// CHECK-NEXT: %[[VAR8:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL:[A-Za-z0-9.]+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR9:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR8]]
|
||||
// CHECK-NEXT: %[[VAR9:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR8]]
|
||||
// CHECK-NEXT: %[[VAR10:[A-Za-z0-9.]+]] = trunc i[[LLSIZE]] %[[VAR9]] to i[[CHSIZE]]
|
||||
// CHECK-NEXT: store i[[CHSIZE]] %[[VAR10]], i[[CHSIZE]]* %[[SC1]], align [[CHALIGN]]
|
||||
|
||||
uc1 = csc;
|
||||
// CHECK-NEXT: %[[VAR11:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR12:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR11]]
|
||||
// CHECK-NEXT: %[[VAR12:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR11]]
|
||||
// CHECK-NEXT: store i[[CHSIZE]] %[[VAR12]], i[[CHSIZE]]* %[[UC1:[A-Za-z0-9.]+]], align [[CHALIGN]]
|
||||
|
||||
uc1 = cuc;
|
||||
// CHECK-NEXT: %[[VAR13:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR14:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR13]]
|
||||
// CHECK-NEXT: %[[VAR14:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR13]]
|
||||
// CHECK-NEXT: store i[[CHSIZE]] %[[VAR14]], i[[CHSIZE]]* %[[UC1]], align [[CHALIGN]]
|
||||
|
||||
uc1 = csll;
|
||||
// CHECK-NEXT: %[[VAR15:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR16:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR15]]
|
||||
// CHECK-NEXT: %[[VAR16:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR15]]
|
||||
// CHECK-NEXT: %[[VAR17:[A-Za-z0-9.]+]] = trunc i[[LLSIZE]] %[[VAR16]] to i[[CHSIZE]]
|
||||
// CHECK-NEXT: store i[[CHSIZE]] %[[VAR17]], i[[CHSIZE]]* %[[UC1]], align [[CHALIGN]]
|
||||
|
||||
uc1 = cull;
|
||||
// CHECK-NEXT: %[[VAR18:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR19:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR18]]
|
||||
// CHECK-NEXT: %[[VAR19:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR18]]
|
||||
// CHECK-NEXT: %[[VAR20:[A-Za-z0-9.]+]] = trunc i[[LLSIZE]] %[[VAR19]] to i[[CHSIZE]]
|
||||
// CHECK-NEXT: store i[[CHSIZE]] %[[VAR20]], i[[CHSIZE]]* %[[UC1]], align [[CHALIGN]]
|
||||
|
||||
sll1 = csc;
|
||||
// CHECK-NEXT: %[[VAR21:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR22:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR21]]
|
||||
// CHECK-NEXT: %[[VAR22:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR21]]
|
||||
// CHECK-NEXT: %[[VAR23:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR22]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR23]], i[[LLSIZE]]* %[[SLL1:[A-Za-z0-9]+]], align [[LLALIGN]]
|
||||
|
||||
sll1 = cuc;
|
||||
// CHECK-NEXT: %[[VAR24:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR25:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR24]]
|
||||
// CHECK-NEXT: %[[VAR25:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR24]]
|
||||
// CHECK-NEXT: %[[VAR26:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR25]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR26]], i[[LLSIZE]]* %[[SLL1]], align [[LLALIGN]]
|
||||
|
||||
sll1 = csll;
|
||||
// CHECK-NEXT: %[[VAR27:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR28:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR27]]
|
||||
// CHECK-NEXT: %[[VAR28:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR27]]
|
||||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR28]], i[[LLSIZE]]* %[[SLL1]], align [[LLALIGN]]
|
||||
|
||||
sll1 = cull;
|
||||
// CHECK-NEXT: %[[VAR29:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR30:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR29]]
|
||||
// CHECK-NEXT: %[[VAR30:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR29]]
|
||||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR30]], i[[LLSIZE]]* %[[SLL1]], align [[LLALIGN]]
|
||||
|
||||
ull1 = csc;
|
||||
// CHECK-NEXT: %[[VAR31:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR32:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR31]]
|
||||
// CHECK-NEXT: %[[VAR32:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR31]]
|
||||
// CHECK-NEXT: %[[VAR33:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR32]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR33]], i[[LLSIZE]]* %[[ULL1:[A-Za-z0-9]+]], align [[LLALIGN]]
|
||||
|
||||
ull1 = cuc;
|
||||
// CHECK-NEXT: %[[VAR34:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR35:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR34]]
|
||||
// CHECK-NEXT: %[[VAR35:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR34]]
|
||||
// CHECK-NEXT: %[[VAR36:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR35]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR36]], i[[LLSIZE]]* %[[ULL1]], align [[LLALIGN]]
|
||||
|
||||
ull1 = csll;
|
||||
// CHECK-NEXT: %[[VAR37:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR38:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR37]]
|
||||
// CHECK-NEXT: %[[VAR38:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR37]]
|
||||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR38]], i[[LLSIZE]]* %[[ULL1]], align [[LLALIGN]]
|
||||
|
||||
ull1 = cull;
|
||||
// CHECK-NEXT: %[[VAR39:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR40:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR39]]
|
||||
// CHECK-NEXT: %[[VAR40:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR39]]
|
||||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR40]], i[[LLSIZE]]* %[[ULL1]], align [[LLALIGN]]
|
||||
|
||||
csc1 = sc;
|
||||
// CHECK-NEXT: %[[VAR41:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[SCADDR:[A-Za-z0-9.]+]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR41:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[SCADDR:[A-Za-z0-9.]+]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR42:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC1:[A-Za-z0-9.]+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR43:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC1]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: store i[[CHSIZE]] %[[VAR41]], i[[CHSIZE]]* %[[VAR42]]
|
||||
// CHECK-NEXT: store i[[CHSIZE]] 0, i[[CHSIZE]]* %[[VAR43]]
|
||||
|
||||
csc1 = uc;
|
||||
// CHECK-NEXT: %[[VAR44:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[UCADDR:[A-Za-z0-9.]+]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR44:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[UCADDR:[A-Za-z0-9.]+]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR45:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR46:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC1]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: store i[[CHSIZE]] %[[VAR44]], i[[CHSIZE]]* %[[VAR45]]
|
||||
// CHECK-NEXT: store i[[CHSIZE]] 0, i[[CHSIZE]]* %[[VAR46]]
|
||||
|
||||
csc1 = sll;
|
||||
// CHECK-NEXT: %[[VAR47:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[SLLADDR:[A-Za-z0-9.]+]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR47:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[SLLADDR:[A-Za-z0-9.]+]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR48:[A-Za-z0-9.]+]] = trunc i[[LLSIZE]] %[[VAR47]] to i[[CHSIZE]]
|
||||
// CHECK-NEXT: %[[VAR49:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR50:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC1]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
|
@ -142,7 +142,7 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[CHSIZE]] 0, i[[CHSIZE]]* %[[VAR50]]
|
||||
|
||||
csc1 = ull;
|
||||
// CHECK-NEXT: %[[VAR51:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[ULLADDR:[A-Za-z0-9.]+]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR51:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[ULLADDR:[A-Za-z0-9.]+]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR52:[A-Za-z0-9.]+]] = trunc i[[LLSIZE]] %[[VAR51]] to i[[CHSIZE]]
|
||||
// CHECK-NEXT: %[[VAR53:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR54:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC1]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
|
@ -150,21 +150,21 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[CHSIZE]] 0, i[[CHSIZE]]* %[[VAR54]]
|
||||
|
||||
cuc1 = sc;
|
||||
// CHECK-NEXT: %[[VAR55:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR55:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR56:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC1:[A-Za-z0-9.]+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR57:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC1]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: store i[[CHSIZE]] %[[VAR55]], i[[CHSIZE]]* %[[VAR56]]
|
||||
// CHECK-NEXT: store i[[CHSIZE]] 0, i[[CHSIZE]]* %[[VAR57]]
|
||||
|
||||
cuc1 = uc;
|
||||
// CHECK-NEXT: %[[VAR58:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR58:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR59:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR60:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC1]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: store i[[CHSIZE]] %[[VAR58]], i[[CHSIZE]]* %[[VAR59]]
|
||||
// CHECK-NEXT: store i[[CHSIZE]] 0, i[[CHSIZE]]* %[[VAR60]]
|
||||
|
||||
cuc1 = sll;
|
||||
// CHECK-NEXT: %[[VAR61:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR61:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR62:[A-Za-z0-9.]+]] = trunc i[[LLSIZE]] %[[VAR61]] to i[[CHSIZE]]
|
||||
// CHECK-NEXT: %[[VAR63:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR64:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC1]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
|
@ -172,7 +172,7 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[CHSIZE]] 0, i[[CHSIZE]]* %[[VAR64]]
|
||||
|
||||
cuc1 = ull;
|
||||
// CHECK-NEXT: %[[VAR65:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR65:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR66:[A-Za-z0-9.]+]] = trunc i[[LLSIZE]] %[[VAR65]] to i[[CHSIZE]]
|
||||
// CHECK-NEXT: %[[VAR67:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR68:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC1]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
|
@ -180,7 +180,7 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[CHSIZE]] 0, i[[CHSIZE]]* %[[VAR68]]
|
||||
|
||||
csll1 = sc;
|
||||
// CHECK-NEXT: %[[VAR69:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR69:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR70:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR69]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR71:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL1:[A-Za-z0-9.]+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR72:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
|
@ -188,7 +188,7 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[LLSIZE]] 0, i[[LLSIZE]]* %[[VAR72]]
|
||||
|
||||
csll1 = uc;
|
||||
// CHECK-NEXT: %[[VAR73:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR73:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR74:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR73]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR75:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR76:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
|
@ -196,21 +196,21 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[LLSIZE]] 0, i[[LLSIZE]]* %[[VAR76]]
|
||||
|
||||
csll1 = sll;
|
||||
// CHECK-NEXT: %[[VAR77:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR77:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR78:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR79:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR77]], i[[LLSIZE]]* %[[VAR78]]
|
||||
// CHECK-NEXT: store i[[LLSIZE]] 0, i[[LLSIZE]]* %[[VAR79]]
|
||||
|
||||
csll1 = ull;
|
||||
// CHECK-NEXT: %[[VAR77:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR77:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR78:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR79:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR77]], i[[LLSIZE]]* %[[VAR78]]
|
||||
// CHECK-NEXT: store i[[LLSIZE]] 0, i[[LLSIZE]]* %[[VAR79]]
|
||||
|
||||
cull1 = sc;
|
||||
// CHECK-NEXT: %[[VAR80:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR80:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR81:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR80]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR82:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL1:[A-Za-z0-9.]+]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR83:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
|
@ -218,7 +218,7 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[LLSIZE]] 0, i[[LLSIZE]]* %[[VAR83]]
|
||||
|
||||
cull1 = uc;
|
||||
// CHECK-NEXT: %[[VAR84:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR84:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR85:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR84]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR86:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR87:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
|
@ -226,26 +226,26 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[LLSIZE]] 0, i[[LLSIZE]]* %[[VAR87]]
|
||||
|
||||
cull1 = sll;
|
||||
// CHECK-NEXT: %[[VAR88:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR88:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR89:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR90:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR88]], i[[LLSIZE]]* %[[VAR89]]
|
||||
// CHECK-NEXT: store i[[LLSIZE]] 0, i[[LLSIZE]]* %[[VAR90]]
|
||||
|
||||
cull1 = ull;
|
||||
// CHECK-NEXT: %[[VAR91:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR91:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR92:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR93:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR91]], i[[LLSIZE]]* %[[VAR92]]
|
||||
// CHECK-NEXT: store i[[LLSIZE]] 0, i[[LLSIZE]]* %[[VAR93]]
|
||||
|
||||
csc1 = sc + csc;
|
||||
// CHECK-NEXT: %[[VAR94:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR94:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR95:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR94]] to i[[ARSIZE:[0-9]+]]
|
||||
// CHECK-NEXT: %[[VAR96:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR97:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR96]]
|
||||
// CHECK-NEXT: %[[VAR97:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR96]]
|
||||
// CHECK-NEXT: %[[VAR98:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR99:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR98]]
|
||||
// CHECK-NEXT: %[[VAR99:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR98]]
|
||||
// CHECK-NEXT: %[[VAR100:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR97]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR101:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR99]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR102:[A-Za-z0-9.]+]] = add i[[ARSIZE]] %[[VAR95]], %[[VAR100]]
|
||||
|
@ -258,12 +258,12 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[CHSIZE]] %[[VAR105]], i[[CHSIZE]]* %[[VAR107]]
|
||||
|
||||
cuc1 = sc + cuc;
|
||||
// CHECK-NEXT: %[[VAR108:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR108:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR109:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR108]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR110:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR111:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR110]]
|
||||
// CHECK-NEXT: %[[VAR111:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR110]]
|
||||
// CHECK-NEXT: %[[VAR112:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR113:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR112]]
|
||||
// CHECK-NEXT: %[[VAR113:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR112]]
|
||||
// CHECK-NEXT: %[[VAR114:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR111]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR115:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR113]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR116:[A-Za-z0-9.]+]] = add i[[ARSIZE]] %[[VAR109]], %[[VAR114]]
|
||||
|
@ -276,12 +276,12 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[CHSIZE]] %[[VAR119]], i[[CHSIZE]]* %[[VAR121]]
|
||||
|
||||
csll1 = sc + csll;
|
||||
// CHECK-NEXT: %[[VAR122:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR122:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR123:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR122]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR124:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR125:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR124]]
|
||||
// CHECK-NEXT: %[[VAR125:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR124]]
|
||||
// CHECK-NEXT: %[[VAR126:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR127:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR126]]
|
||||
// CHECK-NEXT: %[[VAR127:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR126]]
|
||||
// CHECK-NEXT: %[[VAR128:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR123]], %[[VAR125]]
|
||||
// CHECK-NEXT: %[[VAR129:[A-Za-z0-9.]+]] = add i[[LLSIZE]] 0, %[[VAR127]]
|
||||
// CHECK-NEXT: %[[VAR130:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
|
@ -290,12 +290,12 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR129]], i[[LLSIZE]]* %[[VAR131]]
|
||||
|
||||
cull1 = sc + cull;
|
||||
// CHECK-NEXT: %[[VAR132:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR132:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR133:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR132]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR134:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR135:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR134]]
|
||||
// CHECK-NEXT: %[[VAR135:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR134]]
|
||||
// CHECK-NEXT: %[[VAR136:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR137:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR136]]
|
||||
// CHECK-NEXT: %[[VAR137:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR136]]
|
||||
// CHECK-NEXT: %[[VAR138:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR133]], %[[VAR135]]
|
||||
// CHECK-NEXT: %[[VAR139:[A-Za-z0-9.]+]] = add i[[LLSIZE]] 0, %[[VAR137]]
|
||||
// CHECK-NEXT: %[[VAR140:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
|
@ -304,12 +304,12 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR139]], i[[LLSIZE]]* %[[VAR141]]
|
||||
|
||||
csc1 = uc + csc;
|
||||
// CHECK-NEXT: %[[VAR142:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR142:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR143:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR142]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR144:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR145:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR144]]
|
||||
// CHECK-NEXT: %[[VAR145:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR144]]
|
||||
// CHECK-NEXT: %[[VAR146:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR147:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR146]]
|
||||
// CHECK-NEXT: %[[VAR147:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR146]]
|
||||
// CHECK-NEXT: %[[VAR148:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR145]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR149:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR147]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR150:[A-Za-z0-9.]+]] = add i[[ARSIZE]] %[[VAR143]], %[[VAR148]]
|
||||
|
@ -322,12 +322,12 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[CHSIZE]] %[[VAR153]], i[[CHSIZE]]* %[[VAR155]]
|
||||
|
||||
cuc1 = uc + cuc;
|
||||
// CHECK-NEXT: %[[VAR156:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR156:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR157:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR156]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR158:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR159:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR158]]
|
||||
// CHECK-NEXT: %[[VAR159:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR158]]
|
||||
// CHECK-NEXT: %[[VAR160:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR161:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR160]]
|
||||
// CHECK-NEXT: %[[VAR161:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR160]]
|
||||
// CHECK-NEXT: %[[VAR162:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR159]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR163:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR161]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR164:[A-Za-z0-9.]+]] = add i[[ARSIZE]] %[[VAR157]], %[[VAR162]]
|
||||
|
@ -340,12 +340,12 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[CHSIZE]] %[[VAR167]], i[[CHSIZE]]* %[[VAR169]]
|
||||
|
||||
csll1 = uc + csll;
|
||||
// CHECK-NEXT: %[[VAR170:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR170:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR171:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR170]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR172:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR173:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR172]]
|
||||
// CHECK-NEXT: %[[VAR173:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR172]]
|
||||
// CHECK-NEXT: %[[VAR174:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR175:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR174]]
|
||||
// CHECK-NEXT: %[[VAR175:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR174]]
|
||||
// CHECK-NEXT: %[[VAR176:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR171]], %[[VAR173]]
|
||||
// CHECK-NEXT: %[[VAR177:[A-Za-z0-9.]+]] = add i[[LLSIZE]] 0, %[[VAR175]]
|
||||
// CHECK-NEXT: %[[VAR178:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
|
@ -354,12 +354,12 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR177]], i[[LLSIZE]]* %[[VAR179]]
|
||||
|
||||
cull1 = uc + cull;
|
||||
// CHECK-NEXT: %[[VAR180:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR180:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR181:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR180]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR182:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR183:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR182]]
|
||||
// CHECK-NEXT: %[[VAR183:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR182]]
|
||||
// CHECK-NEXT: %[[VAR184:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR185:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR184]]
|
||||
// CHECK-NEXT: %[[VAR185:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR184]]
|
||||
// CHECK-NEXT: %[[VAR186:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR181]], %[[VAR183]]
|
||||
// CHECK-NEXT: %[[VAR187:[A-Za-z0-9.]+]] = add i[[LLSIZE]] 0, %[[VAR185]]
|
||||
// CHECK-NEXT: %[[VAR188:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
|
@ -368,11 +368,11 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR187]], i[[LLSIZE]]* %[[VAR189]]
|
||||
|
||||
csll1 = sll + csc;
|
||||
// CHECK-NEXT: %[[VAR190:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR190:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR191:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR192:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR191]]
|
||||
// CHECK-NEXT: %[[VAR192:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR191]]
|
||||
// CHECK-NEXT: %[[VAR193:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR194:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR193]]
|
||||
// CHECK-NEXT: %[[VAR194:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR193]]
|
||||
// CHECK-NEXT: %[[VAR195:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR192]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR196:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR194]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR197:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR190]], %[[VAR195]]
|
||||
|
@ -383,11 +383,11 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR198]], i[[LLSIZE]]* %[[VAR200]]
|
||||
|
||||
csll1 = sll + cuc;
|
||||
// CHECK-NEXT: %[[VAR201:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR201:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR202:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR203:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR202]]
|
||||
// CHECK-NEXT: %[[VAR203:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR202]]
|
||||
// CHECK-NEXT: %[[VAR204:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR205:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR204]]
|
||||
// CHECK-NEXT: %[[VAR205:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR204]]
|
||||
// CHECK-NEXT: %[[VAR206:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR203]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR207:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR205]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR208:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR201]], %[[VAR206]]
|
||||
|
@ -398,11 +398,11 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR209]], i[[LLSIZE]]* %[[VAR211]]
|
||||
|
||||
csll1 = sll + csll;
|
||||
// CHECK-NEXT: %[[VAR212:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR212:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR213:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR214:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR213]]
|
||||
// CHECK-NEXT: %[[VAR214:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR213]]
|
||||
// CHECK-NEXT: %[[VAR215:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR216:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR215]]
|
||||
// CHECK-NEXT: %[[VAR216:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR215]]
|
||||
// CHECK-NEXT: %[[VAR217:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR212]], %[[VAR214]]
|
||||
// CHECK-NEXT: %[[VAR218:[A-Za-z0-9.]+]] = add i[[LLSIZE]] 0, %[[VAR216]]
|
||||
// CHECK-NEXT: %[[VAR219:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
|
@ -411,11 +411,11 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR218]], i[[LLSIZE]]* %[[VAR220]]
|
||||
|
||||
csll1 = sll + cull;
|
||||
// CHECK-NEXT: %[[VAR221:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR221:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR222:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR223:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR222]]
|
||||
// CHECK-NEXT: %[[VAR223:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR222]]
|
||||
// CHECK-NEXT: %[[VAR224:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR225:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR224]]
|
||||
// CHECK-NEXT: %[[VAR225:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR224]]
|
||||
// CHECK-NEXT: %[[VAR226:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR221]], %[[VAR223]]
|
||||
// CHECK-NEXT: %[[VAR227:[A-Za-z0-9.]+]] = add i[[LLSIZE]] 0, %[[VAR225]]
|
||||
// CHECK-NEXT: %[[VAR228:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
|
@ -424,11 +424,11 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR227]], i[[LLSIZE]]* %[[VAR229]]
|
||||
|
||||
csll1 = ull + csc;
|
||||
// CHECK-NEXT: %[[VAR230:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR230:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR231:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR232:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR231]]
|
||||
// CHECK-NEXT: %[[VAR232:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR231]]
|
||||
// CHECK-NEXT: %[[VAR233:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR234:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR233]]
|
||||
// CHECK-NEXT: %[[VAR234:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR233]]
|
||||
// CHECK-NEXT: %[[VAR235:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR232]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR236:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR234]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR237:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR230]], %[[VAR235]]
|
||||
|
@ -439,11 +439,11 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR238]], i[[LLSIZE]]* %[[VAR240]]
|
||||
|
||||
cull1 = ull + cuc;
|
||||
// CHECK-NEXT: %[[VAR241:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR241:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR242:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR243:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR242]]
|
||||
// CHECK-NEXT: %[[VAR243:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR242]]
|
||||
// CHECK-NEXT: %[[VAR244:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR245:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR244]]
|
||||
// CHECK-NEXT: %[[VAR245:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR244]]
|
||||
// CHECK-NEXT: %[[VAR246:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR243]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR247:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR245]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR248:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR241]], %[[VAR246]]
|
||||
|
@ -454,11 +454,11 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR249]], i[[LLSIZE]]* %[[VAR251]]
|
||||
|
||||
csll1 = ull + csll;
|
||||
// CHECK-NEXT: %[[VAR252:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR252:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR253:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR254:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR253]]
|
||||
// CHECK-NEXT: %[[VAR254:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR253]]
|
||||
// CHECK-NEXT: %[[VAR255:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR256:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR255]]
|
||||
// CHECK-NEXT: %[[VAR256:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR255]]
|
||||
// CHECK-NEXT: %[[VAR257:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR252]], %[[VAR254]]
|
||||
// CHECK-NEXT: %[[VAR258:[A-Za-z0-9.]+]] = add i[[LLSIZE]] 0, %[[VAR256]]
|
||||
// CHECK-NEXT: %[[VAR259:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
|
@ -467,11 +467,11 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR258]], i[[LLSIZE]]* %[[VAR260]]
|
||||
|
||||
cull1 = ull + cull;
|
||||
// CHECK-NEXT: %[[VAR261:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR261:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR262:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR263:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR262]]
|
||||
// CHECK-NEXT: %[[VAR263:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR262]]
|
||||
// CHECK-NEXT: %[[VAR264:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR265:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR264]]
|
||||
// CHECK-NEXT: %[[VAR265:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR264]]
|
||||
// CHECK-NEXT: %[[VAR266:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR261]], %[[VAR263]]
|
||||
// CHECK-NEXT: %[[VAR267:[A-Za-z0-9.]+]] = add i[[LLSIZE]] 0, %[[VAR265]]
|
||||
// CHECK-NEXT: %[[VAR268:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
|
@ -481,12 +481,12 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
|
||||
csc1 = csc + sc;
|
||||
// CHECK-NEXT: %[[VAR270:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR271:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR270]]
|
||||
// CHECK-NEXT: %[[VAR271:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR270]]
|
||||
// CHECK-NEXT: %[[VAR272:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR273:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR272]]
|
||||
// CHECK-NEXT: %[[VAR273:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR272]]
|
||||
// CHECK-NEXT: %[[VAR274:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR271]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR275:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR273]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR276:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR276:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR277:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR276]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR278:[A-Za-z0-9.]+]] = add i[[ARSIZE]] %[[VAR274]], %[[VAR277]]
|
||||
// CHECK-NEXT: %[[VAR279:[A-Za-z0-9.]+]] = add i[[ARSIZE]] %[[VAR275]], 0
|
||||
|
@ -499,12 +499,12 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
|
||||
csc1 = csc + uc;
|
||||
// CHECK-NEXT: %[[VAR284:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR285:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR284]]
|
||||
// CHECK-NEXT: %[[VAR285:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR284]]
|
||||
// CHECK-NEXT: %[[VAR286:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR287:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR286]]
|
||||
// CHECK-NEXT: %[[VAR287:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR286]]
|
||||
// CHECK-NEXT: %[[VAR288:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR285]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR289:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR287]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR290:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR290:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR291:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR290]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR292:[A-Za-z0-9.]+]] = add i[[ARSIZE]] %[[VAR288]], %[[VAR291]]
|
||||
// CHECK-NEXT: %[[VAR293:[A-Za-z0-9.]+]] = add i[[ARSIZE]] %[[VAR289]], 0
|
||||
|
@ -517,12 +517,12 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
|
||||
csll1 = csc + sll;
|
||||
// CHECK-NEXT: %[[VAR298:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR299:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR298]]
|
||||
// CHECK-NEXT: %[[VAR299:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR298]]
|
||||
// CHECK-NEXT: %[[VAR300:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR301:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR300]]
|
||||
// CHECK-NEXT: %[[VAR301:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR300]]
|
||||
// CHECK-NEXT: %[[VAR302:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR299]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR303:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR301]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR304:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR304:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR305:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR302]], %[[VAR304]]
|
||||
// CHECK-NEXT: %[[VAR306:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR303]], 0
|
||||
// CHECK-NEXT: %[[VAR307:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
|
@ -532,12 +532,12 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
|
||||
csll1 = csc + ull;
|
||||
// CHECK-NEXT: %[[VAR309:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR310:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR309]]
|
||||
// CHECK-NEXT: %[[VAR310:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR309]]
|
||||
// CHECK-NEXT: %[[VAR311:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CSC]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR312:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR311]]
|
||||
// CHECK-NEXT: %[[VAR312:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR311]]
|
||||
// CHECK-NEXT: %[[VAR313:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR310]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR314:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR312]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR315:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR315:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR316:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR313]], %[[VAR315]]
|
||||
// CHECK-NEXT: %[[VAR317:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR314]], 0
|
||||
// CHECK-NEXT: %[[VAR318:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
|
@ -547,12 +547,12 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
|
||||
csc1 = cuc + sc;
|
||||
// CHECK-NEXT: %[[VAR320:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR321:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR320]]
|
||||
// CHECK-NEXT: %[[VAR321:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR320]]
|
||||
// CHECK-NEXT: %[[VAR322:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR323:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR322]]
|
||||
// CHECK-NEXT: %[[VAR323:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR322]]
|
||||
// CHECK-NEXT: %[[VAR324:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR321]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR325:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR323]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR326:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR326:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR327:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR326]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR328:[A-Za-z0-9.]+]] = add i[[ARSIZE]] %[[VAR324]], %[[VAR327]]
|
||||
// CHECK-NEXT: %[[VAR329:[A-Za-z0-9.]+]] = add i[[ARSIZE]] %[[VAR325]], 0
|
||||
|
@ -565,12 +565,12 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
|
||||
cuc1 = cuc + uc;
|
||||
// CHECK-NEXT: %[[VAR334:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR335:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR334]]
|
||||
// CHECK-NEXT: %[[VAR335:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR334]]
|
||||
// CHECK-NEXT: %[[VAR336:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR337:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR336]]
|
||||
// CHECK-NEXT: %[[VAR337:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR336]]
|
||||
// CHECK-NEXT: %[[VAR338:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR335]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR339:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR337]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR340:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR340:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR341:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR340]] to i[[ARSIZE]]
|
||||
// CHECK-NEXT: %[[VAR342:[A-Za-z0-9.]+]] = add i[[ARSIZE]] %[[VAR338]], %[[VAR341]]
|
||||
// CHECK-NEXT: %[[VAR343:[A-Za-z0-9.]+]] = add i[[ARSIZE]] %[[VAR339]], 0
|
||||
|
@ -583,12 +583,12 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
|
||||
csll1 = cuc + sll;
|
||||
// CHECK-NEXT: %[[VAR348:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR349:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR348]]
|
||||
// CHECK-NEXT: %[[VAR349:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR348]]
|
||||
// CHECK-NEXT: %[[VAR350:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR351:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR350]]
|
||||
// CHECK-NEXT: %[[VAR351:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR350]]
|
||||
// CHECK-NEXT: %[[VAR352:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR349]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR353:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR351]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR354:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR354:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR355:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR352]], %[[VAR354]]
|
||||
// CHECK-NEXT: %[[VAR356:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR353]], 0
|
||||
// CHECK-NEXT: %[[VAR357:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
|
@ -598,12 +598,12 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
|
||||
cull1 = cuc + ull;
|
||||
// CHECK-NEXT: %[[VAR357:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR358:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR357]]
|
||||
// CHECK-NEXT: %[[VAR358:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR357]]
|
||||
// CHECK-NEXT: %[[VAR359:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[CHSIZE]], i[[CHSIZE]] }, { i[[CHSIZE]], i[[CHSIZE]] }* %[[CUC]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR360:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[VAR359]]
|
||||
// CHECK-NEXT: %[[VAR360:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[VAR359]]
|
||||
// CHECK-NEXT: %[[VAR361:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR358]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR362:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR360]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR363:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR363:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR364:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR361]], %[[VAR363]]
|
||||
// CHECK-NEXT: %[[VAR365:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR362]], 0
|
||||
// CHECK-NEXT: %[[VAR366:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
|
@ -613,10 +613,10 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
|
||||
csll1 = csll + sc;
|
||||
// CHECK-NEXT: %[[VAR368:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR369:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR368]]
|
||||
// CHECK-NEXT: %[[VAR369:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR368]]
|
||||
// CHECK-NEXT: %[[VAR370:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR371:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR370]]
|
||||
// CHECK-NEXT: %[[VAR372:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR371:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR370]]
|
||||
// CHECK-NEXT: %[[VAR372:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR373:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR372]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR374:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR369]], %[[VAR373]]
|
||||
// CHECK-NEXT: %[[VAR375:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR371]], 0
|
||||
|
@ -627,10 +627,10 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
|
||||
csll1 = csll + uc;
|
||||
// CHECK-NEXT: %[[VAR378:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR379:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR378]]
|
||||
// CHECK-NEXT: %[[VAR379:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR378]]
|
||||
// CHECK-NEXT: %[[VAR380:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR381:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR380]]
|
||||
// CHECK-NEXT: %[[VAR382:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR381:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR380]]
|
||||
// CHECK-NEXT: %[[VAR382:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR383:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR382]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR384:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR379]], %[[VAR383]]
|
||||
// CHECK-NEXT: %[[VAR385:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR381]], 0
|
||||
|
@ -641,10 +641,10 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
|
||||
csll1 = csll + sll;
|
||||
// CHECK-NEXT: %[[VAR388:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR389:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR388]]
|
||||
// CHECK-NEXT: %[[VAR389:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR388]]
|
||||
// CHECK-NEXT: %[[VAR390:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR391:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR390]]
|
||||
// CHECK-NEXT: %[[VAR392:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR391:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR390]]
|
||||
// CHECK-NEXT: %[[VAR392:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR393:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR389]], %[[VAR392]]
|
||||
// CHECK-NEXT: %[[VAR394:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR391]], 0
|
||||
// CHECK-NEXT: %[[VAR395:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
|
@ -654,10 +654,10 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
|
||||
csll1 = csll + ull;
|
||||
// CHECK-NEXT: %[[VAR397:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR398:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR397]]
|
||||
// CHECK-NEXT: %[[VAR398:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR397]]
|
||||
// CHECK-NEXT: %[[VAR399:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR400:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR399]]
|
||||
// CHECK-NEXT: %[[VAR401:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR400:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR399]]
|
||||
// CHECK-NEXT: %[[VAR401:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR402:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR398]], %[[VAR401]]
|
||||
// CHECK-NEXT: %[[VAR403:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR400]], 0
|
||||
// CHECK-NEXT: %[[VAR404:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
|
@ -667,10 +667,10 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
|
||||
csll1 = cull + sc;
|
||||
// CHECK-NEXT: %[[VAR406:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR407:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR406]]
|
||||
// CHECK-NEXT: %[[VAR407:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR406]]
|
||||
// CHECK-NEXT: %[[VAR408:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR409:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR408]]
|
||||
// CHECK-NEXT: %[[VAR410:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR409:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR408]]
|
||||
// CHECK-NEXT: %[[VAR410:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[SCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR411:[A-Za-z0-9.]+]] = sext i[[CHSIZE]] %[[VAR410]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR412:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR407]], %[[VAR411]]
|
||||
// CHECK-NEXT: %[[VAR413:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR409]], 0
|
||||
|
@ -681,10 +681,10 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
|
||||
cull1 = cull + uc;
|
||||
// CHECK-NEXT: %[[VAR416:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR417:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR416]]
|
||||
// CHECK-NEXT: %[[VAR417:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR416]]
|
||||
// CHECK-NEXT: %[[VAR418:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR419:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR418]]
|
||||
// CHECK-NEXT: %[[VAR420:[A-Za-z0-9.]+]] = load i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR419:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR418]]
|
||||
// CHECK-NEXT: %[[VAR420:[A-Za-z0-9.]+]] = load i[[CHSIZE]], i[[CHSIZE]]* %[[UCADDR]], align [[CHALIGN]]
|
||||
// CHECK-NEXT: %[[VAR421:[A-Za-z0-9.]+]] = zext i[[CHSIZE]] %[[VAR420]] to i[[LLSIZE]]
|
||||
// CHECK-NEXT: %[[VAR422:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR417]], %[[VAR421]]
|
||||
// CHECK-NEXT: %[[VAR423:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR419]], 0
|
||||
|
@ -695,10 +695,10 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
|
||||
csll1 = cull + sll;
|
||||
// CHECK-NEXT: %[[VAR426:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR427:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR426]]
|
||||
// CHECK-NEXT: %[[VAR427:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR426]]
|
||||
// CHECK-NEXT: %[[VAR428:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR429:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR428]]
|
||||
// CHECK-NEXT: %[[VAR430:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR429:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR428]]
|
||||
// CHECK-NEXT: %[[VAR430:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[SLLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR431:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR427]], %[[VAR430]]
|
||||
// CHECK-NEXT: %[[VAR432:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR429]], 0
|
||||
// CHECK-NEXT: %[[VAR433:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CSLL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
|
@ -708,10 +708,10 @@ void foo(signed char sc, unsigned char uc, signed long long sll,
|
|||
|
||||
cull1 = cull + ull;
|
||||
// CHECK-NEXT: %[[VAR435:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
// CHECK-NEXT: %[[VAR436:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR435]]
|
||||
// CHECK-NEXT: %[[VAR436:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR435]]
|
||||
// CHECK-NEXT: %[[VAR437:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL]], i{{[0-9]+}} 0, i{{[0-9]+}} 1
|
||||
// CHECK-NEXT: %[[VAR438:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[VAR437]]
|
||||
// CHECK-NEXT: %[[VAR439:[A-Za-z0-9.]+]] = load i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR438:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[VAR437]]
|
||||
// CHECK-NEXT: %[[VAR439:[A-Za-z0-9.]+]] = load i[[LLSIZE]], i[[LLSIZE]]* %[[ULLADDR]], align [[LLALIGN]]
|
||||
// CHECK-NEXT: %[[VAR440:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR436]], %[[VAR439]]
|
||||
// CHECK-NEXT: %[[VAR441:[A-Za-z0-9.]+]] = add i[[LLSIZE]] %[[VAR438]], 0
|
||||
// CHECK-NEXT: %[[VAR442:[A-Za-z0-9.]+]] = getelementptr inbounds { i[[LLSIZE]], i[[LLSIZE]] }, { i[[LLSIZE]], i[[LLSIZE]] }* %[[CULL1]], i{{[0-9]+}} 0, i{{[0-9]+}} 0
|
||||
|
|
|
@ -20,11 +20,11 @@ void f() {
|
|||
// CHECK-NEXT: [[COMPOUNDLIT:%[a-zA-Z0-9.]+]] = alloca [[STRUCT]]
|
||||
// CHECK-NEXT: [[CX:%[a-zA-Z0-9.]+]] = getelementptr inbounds [[STRUCT]], [[STRUCT]]* [[COMPOUNDLIT]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[SY:%[a-zA-Z0-9.]+]] = getelementptr inbounds [[STRUCT]], [[STRUCT]]* [[S]], i32 0, i32 1
|
||||
// CHECK-NEXT: [[TMP:%[a-zA-Z0-9.]+]] = load i32* [[SY]]
|
||||
// CHECK-NEXT: [[TMP:%[a-zA-Z0-9.]+]] = load i32, i32* [[SY]]
|
||||
// CHECK-NEXT: store i32 [[TMP]], i32* [[CX]]
|
||||
// CHECK-NEXT: [[CY:%[a-zA-Z0-9.]+]] = getelementptr inbounds [[STRUCT]], [[STRUCT]]* [[COMPOUNDLIT]], i32 0, i32 1
|
||||
// CHECK-NEXT: [[SX:%[a-zA-Z0-9.]+]] = getelementptr inbounds [[STRUCT]], [[STRUCT]]* [[S]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[TMP:%[a-zA-Z0-9.]+]] = load i32* [[SX]]
|
||||
// CHECK-NEXT: [[TMP:%[a-zA-Z0-9.]+]] = load i32, i32* [[SX]]
|
||||
// CHECK-NEXT: store i32 [[TMP]], i32* [[CY]]
|
||||
// CHECK-NEXT: [[SI8:%[a-zA-Z0-9.]+]] = bitcast [[STRUCT]]* [[S]] to i8*
|
||||
// CHECK-NEXT: [[COMPOUNDLITI8:%[a-zA-Z0-9.]+]] = bitcast [[STRUCT]]* [[COMPOUNDLIT]] to i8*
|
||||
|
@ -47,15 +47,15 @@ struct G g(int x, int y, int z) {
|
|||
|
||||
// Evaluate the compound literal directly in the result value slot.
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[G]], [[G]]* [[RESULT]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[T1:%.*]] = load i32* [[X]], align 4
|
||||
// CHECK-NEXT: [[T1:%.*]] = load i32, i32* [[X]], align 4
|
||||
// CHECK-NEXT: [[T2:%.*]] = trunc i32 [[T1]] to i16
|
||||
// CHECK-NEXT: store i16 [[T2]], i16* [[T0]], align 2
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[G]], [[G]]* [[RESULT]], i32 0, i32 1
|
||||
// CHECK-NEXT: [[T1:%.*]] = load i32* [[Y]], align 4
|
||||
// CHECK-NEXT: [[T1:%.*]] = load i32, i32* [[Y]], align 4
|
||||
// CHECK-NEXT: [[T2:%.*]] = trunc i32 [[T1]] to i16
|
||||
// CHECK-NEXT: store i16 [[T2]], i16* [[T0]], align 2
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[G]], [[G]]* [[RESULT]], i32 0, i32 2
|
||||
// CHECK-NEXT: [[T1:%.*]] = load i32* [[Z]], align 4
|
||||
// CHECK-NEXT: [[T1:%.*]] = load i32, i32* [[Z]], align 4
|
||||
// CHECK-NEXT: [[T2:%.*]] = trunc i32 [[T1]] to i16
|
||||
// CHECK-NEXT: store i16 [[T2]], i16* [[T0]], align 2
|
||||
return (struct G) { x, y, z };
|
||||
|
@ -63,6 +63,6 @@ struct G g(int x, int y, int z) {
|
|||
// CHECK-NEXT: [[T0:%.*]] = bitcast i48* [[COERCE_TEMP]] to i8*
|
||||
// CHECK-NEXT: [[T1:%.*]] = bitcast [[G]]* [[RESULT]] to i8*
|
||||
// CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[T0]], i8* [[T1]], i64 6
|
||||
// CHECK-NEXT: [[T0:%.*]] = load i48* [[COERCE_TEMP]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load i48, i48* [[COERCE_TEMP]]
|
||||
// CHECK-NEXT: ret i48 [[T0]]
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ void basic_finally(void) {
|
|||
//
|
||||
// CHECK: [[finally]]
|
||||
// CHECK: call void @cleanup()
|
||||
// CHECK: load i8* %[[abnormal]]
|
||||
// CHECK: load i8, i8* %[[abnormal]]
|
||||
// CHECK: icmp eq
|
||||
// CHECK: br i1 %{{.*}}, label %[[finallycont:[^ ]*]], label %[[resumecont:[^ ]*]]
|
||||
//
|
||||
|
@ -97,10 +97,10 @@ void use_abnormal_termination(void) {
|
|||
// CHECK: br label %[[finally:[^ ]*]]
|
||||
//
|
||||
// CHECK: [[finally]]
|
||||
// CHECK: load i8* %[[abnormal]]
|
||||
// CHECK: load i8, i8* %[[abnormal]]
|
||||
// CHECK: zext i8 %{{.*}} to i32
|
||||
// CHECK: store i32 %{{.*}}, i32* @crashed
|
||||
// CHECK: load i8* %[[abnormal]]
|
||||
// CHECK: load i8, i8* %[[abnormal]]
|
||||
// CHECK: icmp eq
|
||||
// CHECK: br i1 %{{.*}}, label %[[finallycont:[^ ]*]], label %[[resumecont:[^ ]*]]
|
||||
//
|
||||
|
@ -209,7 +209,7 @@ int nested___finally___finally() {
|
|||
// CHECK-NEXT: br label %[[finallycont:[^ ]*]]
|
||||
//
|
||||
// CHECK: [[finallycont]]
|
||||
// CHECK-NEXT: %[[dest:[^ ]*]] = load i32* %
|
||||
// CHECK-NEXT: %[[dest:[^ ]*]] = load i32, i32* %
|
||||
// CHECK-NEXT: switch i32 %[[dest]]
|
||||
// CHECK-NEXT: i32 0, label %[[cleanupcont:[^ ]*]]
|
||||
//
|
||||
|
@ -218,7 +218,7 @@ int nested___finally___finally() {
|
|||
// CHECK-NEXT: br label %[[return:[^ ]*]]
|
||||
//
|
||||
// CHECK: [[return]]
|
||||
// CHECK-NEXT: %[[reg:[^ ]*]] = load i32* %
|
||||
// CHECK-NEXT: %[[reg:[^ ]*]] = load i32, i32* %
|
||||
// CHECK-NEXT: ret i32 %[[reg]]
|
||||
|
||||
int nested___finally___finally_with_eh_edge() {
|
||||
|
@ -255,12 +255,12 @@ int nested___finally___finally_with_eh_edge() {
|
|||
// CHECK-NEXT: br label %[[outerfinally:[^ ]*]]
|
||||
//
|
||||
// CHECK: [[outerfinally]]
|
||||
// CHECK-NEXT: %[[abnormallocal:[^ ]*]] = load i8* %[[abnormal]]
|
||||
// CHECK-NEXT: %[[abnormallocal:[^ ]*]] = load i8, i8* %[[abnormal]]
|
||||
// CHECK-NEXT: %[[reg:[^ ]*]] = icmp eq i8 %[[abnormallocal]], 0
|
||||
// CHECK-NEXT: br i1 %[[reg]], label %[[finallycont:[^ ]*]], label %[[finallyresume:[^ ]*]]
|
||||
//
|
||||
// CHECK: [[finallycont]]
|
||||
// CHECK-NEXT: %[[dest:[^ ]*]] = load i32* %
|
||||
// CHECK-NEXT: %[[dest:[^ ]*]] = load i32, i32* %
|
||||
// CHECK-NEXT: switch i32 %[[dest]]
|
||||
// CHECK-NEXT: i32 0, label %[[cleanupcont:[^ ]*]]
|
||||
//
|
||||
|
@ -283,7 +283,7 @@ int nested___finally___finally_with_eh_edge() {
|
|||
// CHECK-NEXT: br label %[[ehresume:[^ ]*]]
|
||||
//
|
||||
// CHECK: [[return]]
|
||||
// CHECK-NEXT: %[[reg:[^ ]*]] = load i32* %
|
||||
// CHECK-NEXT: %[[reg:[^ ]*]] = load i32, i32* %
|
||||
// CHECK-NEXT: ret i32 %[[reg]]
|
||||
//
|
||||
// The ehresume block, not reachable either.
|
||||
|
|
|
@ -286,7 +286,7 @@ int nested___finally___except() {
|
|||
// CHECK-NEXT: br label %[[finally:[^ ]*]]
|
||||
|
||||
// CHECK: [[finally]]
|
||||
// CHECK-NEXT: %[[abnormallocal:[^ ]*]] = load i8* %[[abnormal]]
|
||||
// CHECK-NEXT: %[[abnormallocal:[^ ]*]] = load i8, i8* %[[abnormal]]
|
||||
// CHECK-NEXT: %[[reg:[^ ]*]] = icmp eq i8 %[[abnormallocal]], 0
|
||||
// CHECK-NEXT: br i1 %[[reg]], label %[[finallycont:[^ ]*]], label %[[finallyresume:[^ ]*]]
|
||||
|
||||
|
@ -345,7 +345,7 @@ int nested___finally___finally() {
|
|||
// CHECK-NEXT: br label %[[outerfinally:[^ ]*]]
|
||||
|
||||
// CHECK: [[outerfinally]]
|
||||
// CHECK-NEXT: %[[abnormallocal:[^ ]*]] = load i8* %[[abnormal]]
|
||||
// CHECK-NEXT: %[[abnormallocal:[^ ]*]] = load i8, i8* %[[abnormal]]
|
||||
// CHECK-NEXT: %[[reg:[^ ]*]] = icmp eq i8 %[[abnormallocal]], 0
|
||||
// CHECK-NEXT: br i1 %[[reg]], label %[[finallycont:[^ ]*]], label %[[finallyresume:[^ ]*]]
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ int safe_div(int numerator, int denominator, int *res) {
|
|||
// CHECK: [[except]]
|
||||
// CHECK-NEXT: store i32 -42, i32* %[[success:[^ ]*]]
|
||||
//
|
||||
// CHECK: %[[res:[^ ]*]] = load i32* %[[success]]
|
||||
// CHECK: %[[res:[^ ]*]] = load i32, i32* %[[success]]
|
||||
// CHECK: ret i32 %[[res]]
|
||||
|
||||
void j(void);
|
||||
|
@ -57,7 +57,7 @@ int filter_expr_capture(void) {
|
|||
// CHECK-NEXT: catch i8* bitcast (i32 (i8*, i8*)* @"\01?filt$0@0@filter_expr_capture@@" to i8*)
|
||||
// CHECK: store i32 13, i32* %[[r]]
|
||||
//
|
||||
// CHECK: %[[rv:[^ ]*]] = load i32* %[[r]]
|
||||
// CHECK: %[[rv:[^ ]*]] = load i32, i32* %[[r]]
|
||||
// CHECK: ret i32 %[[rv]]
|
||||
|
||||
// CHECK-LABEL: define internal i32 @"\01?filt$0@0@filter_expr_capture@@"(i8* %exception_pointers, i8* %frame_pointer)
|
||||
|
@ -95,12 +95,12 @@ int nested_try(void) {
|
|||
// CHECK: store i8* %{{.*}}, i8** %[[ehptr_slot:[^ ]*]]
|
||||
// CHECK: store i32 %{{.*}}, i32* %[[sel_slot:[^ ]*]]
|
||||
//
|
||||
// CHECK: load i32* %[[sel_slot]]
|
||||
// CHECK: load i32, i32* %[[sel_slot]]
|
||||
// CHECK: call i32 @llvm.eh.typeid.for(i8* bitcast (i32 (i8*, i8*)* @"\01?filt$1@0@nested_try@@" to i8*))
|
||||
// CHECK: icmp eq i32
|
||||
// CHECK: br i1
|
||||
//
|
||||
// CHECK: load i32* %[[sel_slot]]
|
||||
// CHECK: load i32, i32* %[[sel_slot]]
|
||||
// CHECK: call i32 @llvm.eh.typeid.for(i8* bitcast (i32 (i8*, i8*)* @"\01?filt$0@0@nested_try@@" to i8*))
|
||||
// CHECK: icmp eq i32
|
||||
// CHECK: br i1
|
||||
|
@ -109,7 +109,7 @@ int nested_try(void) {
|
|||
// CHECK: br label %[[outer_try_cont:[^ ]*]]
|
||||
//
|
||||
// CHECK: [[outer_try_cont]]
|
||||
// CHECK: %[[r_load:[^ ]*]] = load i32* %[[r]]
|
||||
// CHECK: %[[r_load:[^ ]*]] = load i32, i32* %[[r]]
|
||||
// CHECK: ret i32 %[[r_load]]
|
||||
//
|
||||
// CHECK: store i32 123, i32* %[[r]]
|
||||
|
@ -130,7 +130,7 @@ void basic_finally(void) {
|
|||
}
|
||||
}
|
||||
// CHECK-LABEL: define void @basic_finally()
|
||||
// CHECK: load i32* @g
|
||||
// CHECK: load i32, i32* @g
|
||||
// CHECK: add i32 %{{.*}}, 1
|
||||
// CHECK: store i32 %{{.*}}, i32* @g
|
||||
//
|
||||
|
@ -141,7 +141,7 @@ void basic_finally(void) {
|
|||
// CHECK: br label %[[finally:[^ ]*]]
|
||||
//
|
||||
// CHECK: [[finally]]
|
||||
// CHECK: load i32* @g
|
||||
// CHECK: load i32, i32* @g
|
||||
// CHECK: add i32 %{{.*}}, -1
|
||||
// CHECK: store i32 %{{.*}}, i32* @g
|
||||
// CHECK: icmp eq
|
||||
|
@ -177,7 +177,7 @@ int except_return(void) {
|
|||
// CHECK: br label %[[retbb]]
|
||||
//
|
||||
// CHECK: [[retbb]]
|
||||
// CHECK: %[[r:[^ ]*]] = load i32* %[[rv]]
|
||||
// CHECK: %[[r:[^ ]*]] = load i32, i32* %[[rv]]
|
||||
// CHECK: ret i32 %[[r]]
|
||||
|
||||
// CHECK: attributes #[[NOINLINE]] = { {{.*noinline.*}} }
|
||||
|
|
|
@ -127,9 +127,9 @@ int f11(long X) {
|
|||
return A[X];
|
||||
|
||||
// CHECK: [[Xaddr:%[^ ]+]] = alloca i64, align 8
|
||||
// CHECK: load {{.*}}* [[Xaddr]]
|
||||
// CHECK: load {{.*}}, {{.*}}* [[Xaddr]]
|
||||
// CHECK-NEXT: getelementptr inbounds [100 x i32], [100 x i32]* %A, i32 0,
|
||||
// CHECK-NEXT: load i32*
|
||||
// CHECK-NEXT: load i32, i32*
|
||||
}
|
||||
|
||||
int f12() {
|
||||
|
|
|
@ -17,11 +17,11 @@ void func(struct struct1* p, float *a, float *b, float c) {
|
|||
// FIXME: We should be able to come up with a more aggressive alignment
|
||||
// estimate.
|
||||
// CHECK: @func
|
||||
// CHECK: load <4 x float>* {{%.*}}, align 1
|
||||
// CHECK: load <4 x float>, <4 x float>* {{%.*}}, align 1
|
||||
// CHECK: store <4 x float> {{%.*}}, <4 x float>* {{%.*}}, align 1
|
||||
// CHECK: load <4 x float>* {{%.*}}, align 1
|
||||
// CHECK: load <4 x float>* {{%.*}}, align 1
|
||||
// CHECK: load <4 x float>* {{%.*}}, align 1
|
||||
// CHECK: load <4 x float>, <4 x float>* {{%.*}}, align 1
|
||||
// CHECK: load <4 x float>, <4 x float>* {{%.*}}, align 1
|
||||
// CHECK: load <4 x float>, <4 x float>* {{%.*}}, align 1
|
||||
// CHECK: store <4 x float> {{%.*}}, <4 x float>* {{%.*}}, align 1
|
||||
// CHECK: ret void
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ extern inline int f(int a) {return a;}
|
|||
int g(void) {return f(0);}
|
||||
// CHECK: call i32 @f
|
||||
int f(int b) {return 1+b;}
|
||||
// CHECK: load i32* %{{.*}}
|
||||
// CHECK: load i32, i32* %{{.*}}
|
||||
// CHECK: add nsw i32 1, %{{.*}}
|
||||
int h(void) {return f(1);}
|
||||
// CHECK: call i32 @f
|
||||
|
@ -18,8 +18,8 @@ extern inline int f2(int a, int b) {return a+b;}
|
|||
int g2(void) {return f2(0,1);}
|
||||
// CHECK: call i32 @f2
|
||||
static int f2(int a, int b) {return a*b;}
|
||||
// CHECK: load i32* %{{.*}}
|
||||
// CHECK: load i32* %{{.*}}
|
||||
// CHECK: load i32, i32* %{{.*}}
|
||||
// CHECK: load i32, i32* %{{.*}}
|
||||
// CHECK: mul nsw i32 %{{.*}}, %{{.*}}
|
||||
int h2(void) {return f2(1,2);}
|
||||
// CHECK: call i32 @f2
|
||||
|
|
|
@ -29,9 +29,9 @@ int test_i32(char *fmt, ...) {
|
|||
// ALL: call void @llvm.va_start(i8* [[VA1]])
|
||||
//
|
||||
// O32: [[TMP0:%.+]] = bitcast i8** %va to i32**
|
||||
// O32: [[AP_CUR:%.+]] = load i32** [[TMP0]], align [[PTRALIGN]]
|
||||
// O32: [[AP_CUR:%.+]] = load i32*, i32** [[TMP0]], align [[PTRALIGN]]
|
||||
// NEW: [[TMP0:%.+]] = bitcast i8** %va to i64**
|
||||
// NEW: [[AP_CUR:%.+]] = load i64** [[TMP0]], align [[PTRALIGN]]
|
||||
// NEW: [[AP_CUR:%.+]] = load i64*, i64** [[TMP0]], align [[PTRALIGN]]
|
||||
//
|
||||
// O32: [[AP_NEXT:%.+]] = getelementptr i32, i32* [[AP_CUR]], i32 1
|
||||
// NEW: [[AP_NEXT:%.+]] = getelementptr i64, i64* [[AP_CUR]], {{i32|i64}} 1
|
||||
|
@ -39,8 +39,8 @@ int test_i32(char *fmt, ...) {
|
|||
// O32: store i32* [[AP_NEXT]], i32** [[TMP0]], align [[PTRALIGN]]
|
||||
// NEW: store i64* [[AP_NEXT]], i64** [[TMP0]], align [[PTRALIGN]]
|
||||
//
|
||||
// O32: [[ARG1:%.+]] = load i32* [[AP_CUR]], align 4
|
||||
// NEW: [[TMP2:%.+]] = load i64* [[AP_CUR]], align 8
|
||||
// O32: [[ARG1:%.+]] = load i32, i32* [[AP_CUR]], align 4
|
||||
// NEW: [[TMP2:%.+]] = load i64, i64* [[AP_CUR]], align 8
|
||||
// NEW: [[ARG1:%.+]] = trunc i64 [[TMP2]] to i32
|
||||
//
|
||||
// ALL: call void @llvm.va_end(i8* [[VA1]])
|
||||
|
@ -65,9 +65,9 @@ int test_i32_2args(char *fmt, ...) {
|
|||
// ALL: call void @llvm.va_start(i8* [[VA1]])
|
||||
//
|
||||
// O32: [[TMP0:%.+]] = bitcast i8** %va to i32**
|
||||
// O32: [[AP_CUR:%.+]] = load i32** [[TMP0]], align [[PTRALIGN]]
|
||||
// O32: [[AP_CUR:%.+]] = load i32*, i32** [[TMP0]], align [[PTRALIGN]]
|
||||
// NEW: [[TMP0:%.+]] = bitcast i8** %va to i64**
|
||||
// NEW: [[AP_CUR:%.+]] = load i64** [[TMP0]], align [[PTRALIGN]]
|
||||
// NEW: [[AP_CUR:%.+]] = load i64*, i64** [[TMP0]], align [[PTRALIGN]]
|
||||
//
|
||||
// O32: [[AP_NEXT1:%.+]] = getelementptr i32, i32* [[AP_CUR]], i32 1
|
||||
// NEW: [[AP_NEXT1:%.+]] = getelementptr i64, i64* [[AP_CUR]], [[INTPTR_T:i32|i64]] 1
|
||||
|
@ -76,8 +76,8 @@ int test_i32_2args(char *fmt, ...) {
|
|||
// FIXME: N32 optimised this store out. Why only for this ABI?
|
||||
// N64: store i64* [[AP_NEXT1]], i64** [[TMP0]], align [[PTRALIGN]]
|
||||
//
|
||||
// O32: [[ARG1:%.+]] = load i32* [[AP_CUR]], align 4
|
||||
// NEW: [[TMP3:%.+]] = load i64* [[AP_CUR]], align 8
|
||||
// O32: [[ARG1:%.+]] = load i32, i32* [[AP_CUR]], align 4
|
||||
// NEW: [[TMP3:%.+]] = load i64, i64* [[AP_CUR]], align 8
|
||||
// NEW: [[ARG1:%.+]] = trunc i64 [[TMP3]] to i32
|
||||
//
|
||||
// O32: [[AP_NEXT2:%.+]] = getelementptr i32, i32* [[AP_CUR]], i32 2
|
||||
|
@ -86,8 +86,8 @@ int test_i32_2args(char *fmt, ...) {
|
|||
// O32: store i32* [[AP_NEXT2]], i32** [[TMP0]], align [[PTRALIGN]]
|
||||
// NEW: store i64* [[AP_NEXT2]], i64** [[TMP0]], align [[PTRALIGN]]
|
||||
//
|
||||
// O32: [[ARG2:%.+]] = load i32* [[AP_NEXT1]], align 4
|
||||
// NEW: [[TMP4:%.+]] = load i64* [[AP_NEXT1]], align 8
|
||||
// O32: [[ARG2:%.+]] = load i32, i32* [[AP_NEXT1]], align 4
|
||||
// NEW: [[TMP4:%.+]] = load i64, i64* [[AP_NEXT1]], align 8
|
||||
// NEW: [[ARG2:%.+]] = trunc i64 [[TMP4]] to i32
|
||||
//
|
||||
// ALL: call void @llvm.va_end(i8* [[VA1]])
|
||||
|
@ -111,9 +111,9 @@ long long test_i64(char *fmt, ...) {
|
|||
// ALL: [[VA1:%.+]] = bitcast i8** %va to i8*
|
||||
// ALL: call void @llvm.va_start(i8* [[VA1]])
|
||||
//
|
||||
// O32: [[AP_CUR:%.+]] = load i8** %va, align [[PTRALIGN]]
|
||||
// O32: [[AP_CUR:%.+]] = load i8*, i8** %va, align [[PTRALIGN]]
|
||||
// NEW: [[TMP0:%.+]] = bitcast i8** %va to i64**
|
||||
// NEW: [[AP_CUR:%.+]] = load i64** [[TMP0]], align [[PTRALIGN]]
|
||||
// NEW: [[AP_CUR:%.+]] = load i64*, i64** [[TMP0]], align [[PTRALIGN]]
|
||||
//
|
||||
// i64 is 8-byte aligned, while this is within O32's stack alignment there's no
|
||||
// guarantee that the offset is still 8-byte aligned after earlier reads.
|
||||
|
@ -129,8 +129,8 @@ long long test_i64(char *fmt, ...) {
|
|||
// O32: store i8* [[AP_NEXT]], i8** %va, align [[PTRALIGN]]
|
||||
// NEW: store i64* [[AP_NEXT]], i64** [[TMP0]], align [[PTRALIGN]]
|
||||
//
|
||||
// O32: [[ARG1:%.+]] = load i64* [[PTR3]], align 8
|
||||
// NEW: [[ARG1:%.+]] = load i64* [[AP_CUR]], align 8
|
||||
// O32: [[ARG1:%.+]] = load i64, i64* [[PTR3]], align 8
|
||||
// NEW: [[ARG1:%.+]] = load i64, i64* [[AP_CUR]], align 8
|
||||
//
|
||||
// ALL: call void @llvm.va_end(i8* [[VA1]])
|
||||
// ALL: ret i64 [[ARG1]]
|
||||
|
@ -156,12 +156,12 @@ char *test_ptr(char *fmt, ...) {
|
|||
// ALL: call void @llvm.va_start(i8* [[VA1]])
|
||||
//
|
||||
// O32: [[TMP0:%.+]] = bitcast i8** %va to i8***
|
||||
// O32: [[AP_CUR:%.+]] = load i8*** [[TMP0]], align [[PTRALIGN]]
|
||||
// O32: [[AP_CUR:%.+]] = load i8**, i8*** [[TMP0]], align [[PTRALIGN]]
|
||||
// N32 differs because the vararg is not a N32 pointer. It's been promoted to 64-bit.
|
||||
// N32: [[TMP0:%.+]] = bitcast i8** %va to i64**
|
||||
// N32: [[AP_CUR:%.+]] = load i64** [[TMP0]], align [[PTRALIGN]]
|
||||
// N32: [[AP_CUR:%.+]] = load i64*, i64** [[TMP0]], align [[PTRALIGN]]
|
||||
// N64: [[TMP0:%.+]] = bitcast i8** %va to i8***
|
||||
// N64: [[AP_CUR:%.+]] = load i8*** [[TMP0]], align [[PTRALIGN]]
|
||||
// N64: [[AP_CUR:%.+]] = load i8**, i8*** [[TMP0]], align [[PTRALIGN]]
|
||||
//
|
||||
// O32: [[AP_NEXT:%.+]] = getelementptr i8*, i8** [[AP_CUR]], i32 1
|
||||
// N32 differs because the vararg is not a N32 pointer. It's been promoted to 64-bit.
|
||||
|
@ -173,13 +173,13 @@ char *test_ptr(char *fmt, ...) {
|
|||
// N32: store i64* [[AP_NEXT]], i64** [[TMP0]], align [[PTRALIGN]]
|
||||
// N64: store i8** [[AP_NEXT]], i8*** [[TMP0]], align [[PTRALIGN]]
|
||||
//
|
||||
// O32: [[ARG1:%.+]] = load i8** [[AP_CUR]], align 4
|
||||
// O32: [[ARG1:%.+]] = load i8*, i8** [[AP_CUR]], align 4
|
||||
// N32 differs because the vararg is not a N32 pointer. It's been promoted to
|
||||
// 64-bit so we must truncate the excess and bitcast to a N32 pointer.
|
||||
// N32: [[TMP2:%.+]] = load i64* [[AP_CUR]], align 8
|
||||
// N32: [[TMP2:%.+]] = load i64, i64* [[AP_CUR]], align 8
|
||||
// N32: [[TMP3:%.+]] = trunc i64 [[TMP2]] to i32
|
||||
// N32: [[ARG1:%.+]] = inttoptr i32 [[TMP3]] to i8*
|
||||
// N64: [[ARG1:%.+]] = load i8** [[AP_CUR]], align 8
|
||||
// N64: [[ARG1:%.+]] = load i8*, i8** [[AP_CUR]], align 8
|
||||
//
|
||||
// ALL: call void @llvm.va_end(i8* [[VA1]])
|
||||
// ALL: ret i8* [[ARG1]]
|
||||
|
@ -200,7 +200,7 @@ int test_v4i32(char *fmt, ...) {
|
|||
// ALL: %va = alloca i8*, align [[PTRALIGN]]
|
||||
// ALL: [[VA1:%.+]] = bitcast i8** %va to i8*
|
||||
// ALL: call void @llvm.va_start(i8* [[VA1]])
|
||||
// ALL: [[AP_CUR:%.+]] = load i8** %va, align [[PTRALIGN]]
|
||||
// ALL: [[AP_CUR:%.+]] = load i8*, i8** %va, align [[PTRALIGN]]
|
||||
//
|
||||
// O32: [[PTR0:%.+]] = ptrtoint i8* [[AP_CUR]] to [[INTPTR_T:i32]]
|
||||
// N32: [[PTR0:%.+]] = ptrtoint i8* [[AP_CUR]] to [[INTPTR_T:i32]]
|
||||
|
@ -218,7 +218,7 @@ int test_v4i32(char *fmt, ...) {
|
|||
// ALL: [[PTR4:%.+]] = inttoptr [[INTPTR_T]] [[PTR2]] to i8*
|
||||
// ALL: [[AP_NEXT:%.+]] = getelementptr i8, i8* [[PTR4]], [[INTPTR_T]] 16
|
||||
// ALL: store i8* [[AP_NEXT]], i8** %va, align [[PTRALIGN]]
|
||||
// ALL: [[PTR5:%.+]] = load <4 x i32>* [[PTR3]], align 16
|
||||
// ALL: [[PTR5:%.+]] = load <4 x i32>, <4 x i32>* [[PTR3]], align 16
|
||||
// ALL: call void @llvm.va_end(i8* [[VA1]])
|
||||
// ALL: [[VECEXT:%.+]] = extractelement <4 x i32> [[PTR5]], i32 0
|
||||
// ALL: ret i32 [[VECEXT]]
|
||||
|
|
|
@ -28,32 +28,32 @@ void foo()
|
|||
|
||||
// CHECK: getelementptr inbounds %struct.test, %struct.test* %var, i32 0, i32 1
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.nested2, %struct.nested2* %{{.*}}, i32 0, i32 0
|
||||
// CHECK-NEXT: load i32* %{{.*}}, align 4
|
||||
// CHECK-NEXT: load i32, i32* %{{.*}}, align 4
|
||||
var.a;
|
||||
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.test, %struct.test* %var, i32 0, i32 1
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.nested2, %struct.nested2* %{{.*}}, i32 0, i32 2
|
||||
// CHECK-NEXT: load i32* %{{.*}}, align 4
|
||||
// CHECK-NEXT: load i32, i32* %{{.*}}, align 4
|
||||
var.b;
|
||||
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.test, %struct.test* %var, i32 0, i32 1
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.nested2, %struct.nested2* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.nested1, %struct.nested1* %{{.*}}, i32 0, i32 0
|
||||
// CHECK-NEXT: load i32* %{{.*}}, align 4
|
||||
// CHECK-NEXT: load i32, i32* %{{.*}}, align 4
|
||||
var.a1;
|
||||
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.test, %struct.test* %{{.*}}var, i32 0, i32 1
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.nested2, %struct.nested2* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.nested1, %struct.nested1* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-NEXT: load i32* %{{.*}}, align 4
|
||||
// CHECK-NEXT: load i32, i32* %{{.*}}, align 4
|
||||
var.b1;
|
||||
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.test, %struct.test* %var, i32 0, i32 0
|
||||
// CHECK-NEXT: load i32* %{{.*}}, align 4
|
||||
// CHECK-NEXT: load i32, i32* %{{.*}}, align 4
|
||||
var.x;
|
||||
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.test, %struct.test* %var, i32 0, i32 2
|
||||
// CHECK-NEXT: load i32* %{{.*}}, align 4
|
||||
// CHECK-NEXT: load i32, i32* %{{.*}}, align 4
|
||||
var.y;
|
||||
}
|
||||
|
||||
|
@ -61,39 +61,39 @@ void foo2(struct test* var)
|
|||
{
|
||||
// CHECK: alloca %struct.test*, align
|
||||
// CHECK-NEXT: store %struct.test* %var, %struct.test** %{{.*}}, align
|
||||
// CHECK-NEXT: load %struct.test** %{{.*}}, align
|
||||
// CHECK-NEXT: load %struct.test*, %struct.test** %{{.*}}, align
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.test, %struct.test* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.nested2, %struct.nested2* %{{.*}}, i32 0, i32 0
|
||||
// CHECK-NEXT: load i32* %{{.*}}, align 4
|
||||
// CHECK-NEXT: load i32, i32* %{{.*}}, align 4
|
||||
var->a;
|
||||
|
||||
// CHECK-NEXT: load %struct.test** %{{.*}}, align
|
||||
// CHECK-NEXT: load %struct.test*, %struct.test** %{{.*}}, align
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.test, %struct.test* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.nested2, %struct.nested2* %{{.*}}, i32 0, i32 2
|
||||
// CHECK-NEXT: load i32* %{{.*}}, align 4
|
||||
// CHECK-NEXT: load i32, i32* %{{.*}}, align 4
|
||||
var->b;
|
||||
|
||||
// CHECK-NEXT: load %struct.test** %{{.*}}, align
|
||||
// CHECK-NEXT: load %struct.test*, %struct.test** %{{.*}}, align
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.test, %struct.test* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.nested2, %struct.nested2* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.nested1, %struct.nested1* %{{.*}}, i32 0, i32 0
|
||||
// CHECK-NEXT: load i32* %{{.*}}, align 4
|
||||
// CHECK-NEXT: load i32, i32* %{{.*}}, align 4
|
||||
var->a1;
|
||||
|
||||
// CHECK-NEXT: load %struct.test** %{{.*}}, align
|
||||
// CHECK-NEXT: load %struct.test*, %struct.test** %{{.*}}, align
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.test, %struct.test* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.nested2, %struct.nested2* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.nested1, %struct.nested1* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-NEXT: load i32* %{{.*}}, align 4
|
||||
// CHECK-NEXT: load i32, i32* %{{.*}}, align 4
|
||||
var->b1;
|
||||
|
||||
// CHECK-NEXT: load %struct.test** %{{.*}}, align
|
||||
// CHECK-NEXT: load %struct.test*, %struct.test** %{{.*}}, align
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.test, %struct.test* %{{.*}}, i32 0, i32 0
|
||||
// CHECK-NEXT: load i32* %{{.*}}, align 4
|
||||
// CHECK-NEXT: load i32, i32* %{{.*}}, align 4
|
||||
var->x;
|
||||
|
||||
// CHECK-NEXT: load %struct.test** %{{.*}}, align
|
||||
// CHECK-NEXT: load %struct.test*, %struct.test** %{{.*}}, align
|
||||
// CHECK-NEXT: getelementptr inbounds %struct.test, %struct.test* %{{.*}}, i32 0, i32 2
|
||||
// CHECK-NEXT: load i32* %{{.*}}, align 4
|
||||
// CHECK-NEXT: load i32, i32* %{{.*}}, align 4
|
||||
var->y;
|
||||
}
|
||||
|
|
|
@ -93,7 +93,7 @@ unsigned t10(void) {
|
|||
// CHECK: [[J:%[a-zA-Z0-9]+]] = alloca i32, align 4
|
||||
// CHECK: store i32 1, i32* [[I]], align 4
|
||||
// CHECK: call i32 asm sideeffect inteldialect "mov eax, dword ptr $2\0A\09mov dword ptr $0, eax", "=*m,={eax},*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}, i32* %{{.*}})
|
||||
// CHECK: [[RET:%[a-zA-Z0-9]+]] = load i32* [[J]], align 4
|
||||
// CHECK: [[RET:%[a-zA-Z0-9]+]] = load i32, i32* [[J]], align 4
|
||||
// CHECK: ret i32 [[RET]]
|
||||
}
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ struct T4 {
|
|||
// CHECK-LABEL: define void @_ZN2T44testEv(
|
||||
void T4::test() {
|
||||
// CHECK: [[T0:%.*]] = alloca [[T4:%.*]]*,
|
||||
// CHECK: [[THIS:%.*]] = load [[T4]]** [[T0]]
|
||||
// CHECK: [[THIS:%.*]] = load [[T4]]*, [[T4]]** [[T0]]
|
||||
// CHECK: [[X:%.*]] = getelementptr inbounds [[T4]], [[T4]]* [[THIS]], i32 0, i32 0
|
||||
__asm mov eax, x;
|
||||
__asm mov y, eax;
|
||||
|
|
|
@ -57,7 +57,7 @@ long test__readfsdword(unsigned long Offset) {
|
|||
|
||||
// CHECK-I386: define i32 @test__readfsdword(i32 %Offset){{.*}}{
|
||||
// CHECK-I386: [[PTR:%[0-9]+]] = inttoptr i32 %Offset to i32 addrspace(257)*
|
||||
// CHECK-I386: [[VALUE:%[0-9]+]] = load volatile i32 addrspace(257)* [[PTR]], align 4
|
||||
// CHECK-I386: [[VALUE:%[0-9]+]] = load volatile i32, i32 addrspace(257)* [[PTR]], align 4
|
||||
// CHECK-I386: ret i32 [[VALUE:%[0-9]+]]
|
||||
// CHECK-I386: }
|
||||
#endif
|
||||
|
|
|
@ -21,7 +21,7 @@ unsigned long get_stack_pointer_addr() {
|
|||
// CHECK: declare{{.*}} i[[bits]] @llvm.read_register.i[[bits]](metadata)
|
||||
|
||||
// CHECK: define{{.*}} void @set_stack_pointer_addr(i[[bits]] %addr) #0 {
|
||||
// CHECK: [[sto:%[0-9]+]] = load i[[bits]]* %
|
||||
// CHECK: [[sto:%[0-9]+]] = load i[[bits]], i[[bits]]* %
|
||||
// CHECK: call void @llvm.write_register.i[[bits]](metadata !0, i[[bits]] [[sto]])
|
||||
// CHECK: ret void
|
||||
void set_stack_pointer_addr(unsigned long addr) {
|
||||
|
|
|
@ -39,7 +39,7 @@ void test4() {
|
|||
|
||||
// CHECK-LABEL: define void @test5
|
||||
void test5() {
|
||||
// CHECK: = load i8** @gp
|
||||
// CHECK: = load i8*, i8** @gp
|
||||
// CHECK-NEXT:= call i64 @llvm.objectsize.i64.p0i8(i8* %{{.*}}, i1 false)
|
||||
strcpy(gp, "Hi there");
|
||||
}
|
||||
|
|
|
@ -52,10 +52,10 @@ int align2_x0 = __alignof(((struct s2*) 0)->x[0]);
|
|||
int align3_x0 = __alignof(((struct s3*) 0)->x[0]);
|
||||
|
||||
// CHECK-LABEL: define i32 @f0_a
|
||||
// CHECK: load i32* %{{.*}}, align 1
|
||||
// CHECK: load i32, i32* %{{.*}}, align 1
|
||||
// CHECK: }
|
||||
// CHECK-LABEL: define i32 @f0_b
|
||||
// CHECK: load i32* %{{.*}}, align 4
|
||||
// CHECK: load i32, i32* %{{.*}}, align 4
|
||||
// CHECK: }
|
||||
int f0_a(struct s0 *a) {
|
||||
return a->x[1];
|
||||
|
@ -67,19 +67,19 @@ int f0_b(struct s0 *a) {
|
|||
// Note that we are incompatible with GCC on this example.
|
||||
//
|
||||
// CHECK-LABEL: define i32 @f1_a
|
||||
// CHECK: load i32* %{{.*}}, align 1
|
||||
// CHECK: load i32, i32* %{{.*}}, align 1
|
||||
// CHECK: }
|
||||
// CHECK-LABEL: define i32 @f1_b
|
||||
// CHECK: load i32* %{{.*}}, align 4
|
||||
// CHECK: load i32, i32* %{{.*}}, align 4
|
||||
// CHECK: }
|
||||
|
||||
// Note that we are incompatible with GCC on this example.
|
||||
//
|
||||
// CHECK-LABEL: define i32 @f1_c
|
||||
// CHECK: load i32* %{{.*}}, align 4
|
||||
// CHECK: load i32, i32* %{{.*}}, align 4
|
||||
// CHECK: }
|
||||
// CHECK-LABEL: define i32 @f1_d
|
||||
// CHECK: load i32* %{{.*}}, align 1
|
||||
// CHECK: load i32, i32* %{{.*}}, align 1
|
||||
// CHECK: }
|
||||
int f1_a(struct s1 *a) {
|
||||
return a->x[1];
|
||||
|
@ -95,16 +95,16 @@ int f1_d(struct s1 *a) {
|
|||
}
|
||||
|
||||
// CHECK-LABEL: define i32 @f2_a
|
||||
// CHECK: load i32* %{{.*}}, align 1
|
||||
// CHECK: load i32, i32* %{{.*}}, align 1
|
||||
// CHECK: }
|
||||
// CHECK-LABEL: define i32 @f2_b
|
||||
// CHECK: load i32* %{{.*}}, align 4
|
||||
// CHECK: load i32, i32* %{{.*}}, align 4
|
||||
// CHECK: }
|
||||
// CHECK-LABEL: define i32 @f2_c
|
||||
// CHECK: load i32* %{{.*}}, align 1
|
||||
// CHECK: load i32, i32* %{{.*}}, align 1
|
||||
// CHECK: }
|
||||
// CHECK-LABEL: define i32 @f2_d
|
||||
// CHECK: load i32* %{{.*}}, align 1
|
||||
// CHECK: load i32, i32* %{{.*}}, align 1
|
||||
// CHECK: }
|
||||
int f2_a(struct s2 *a) {
|
||||
return a->x[1];
|
||||
|
@ -120,16 +120,16 @@ int f2_d(struct s2 *a) {
|
|||
}
|
||||
|
||||
// CHECK-LABEL: define i32 @f3_a
|
||||
// CHECK: load i32* %{{.*}}, align 1
|
||||
// CHECK: load i32, i32* %{{.*}}, align 1
|
||||
// CHECK: }
|
||||
// CHECK-LABEL: define i32 @f3_b
|
||||
// CHECK: load i32* %{{.*}}, align 4
|
||||
// CHECK: load i32, i32* %{{.*}}, align 4
|
||||
// CHECK: }
|
||||
// CHECK-LABEL: define i32 @f3_c
|
||||
// CHECK: load i32* %{{.*}}, align 1
|
||||
// CHECK: load i32, i32* %{{.*}}, align 1
|
||||
// CHECK: }
|
||||
// CHECK-LABEL: define i32 @f3_d
|
||||
// CHECK: load i32* %{{.*}}, align 1
|
||||
// CHECK: load i32, i32* %{{.*}}, align 1
|
||||
// CHECK: }
|
||||
int f3_a(struct s3 *a) {
|
||||
return a->x[1];
|
||||
|
@ -147,7 +147,7 @@ int f3_d(struct s3 *a) {
|
|||
// Verify we don't claim things are overaligned.
|
||||
//
|
||||
// CHECK-LABEL: define double @f4
|
||||
// CHECK: load double* {{.*}}, align 8
|
||||
// CHECK: load double, double* {{.*}}, align 8
|
||||
// CHECK: }
|
||||
extern double g4[5] __attribute__((aligned(16)));
|
||||
double f4() {
|
||||
|
|
|
@ -35,7 +35,7 @@ void test4() {
|
|||
// PR12395
|
||||
int test5() {
|
||||
// CHECK: @test5
|
||||
// CHECK: load i32* getelementptr inbounds (%struct.Y* @g, i32 0, i32 1, i32 0, i64 0), align 1
|
||||
// CHECK: load i32, i32* getelementptr inbounds (%struct.Y* @g, i32 0, i32 1, i32 0, i64 0), align 1
|
||||
return g.y.x[0];
|
||||
}
|
||||
|
||||
|
@ -60,6 +60,6 @@ struct YBitfield gbitfield;
|
|||
|
||||
unsigned test7() {
|
||||
// CHECK: @test7
|
||||
// CHECK: load i32* getelementptr inbounds (%struct.YBitfield* @gbitfield, i32 0, i32 1, i32 0), align 4
|
||||
// CHECK: load i32, i32* getelementptr inbounds (%struct.YBitfield* @gbitfield, i32 0, i32 1, i32 0), align 4
|
||||
return gbitfield.y.b2;
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@ int s0_align_y = __alignof(((struct s0*)0)->y);
|
|||
int s0_align = __alignof(struct s0);
|
||||
|
||||
// CHECK-FUNCTIONS-LABEL: define i32 @s0_load_x
|
||||
// CHECK-FUNCTIONS: [[s0_load_x:%.*]] = load i32* {{.*}}, align 4
|
||||
// CHECK-FUNCTIONS: [[s0_load_x:%.*]] = load i32, i32* {{.*}}, align 4
|
||||
// CHECK-FUNCTIONS: ret i32 [[s0_load_x]]
|
||||
int s0_load_x(struct s0 *a) { return a->x; }
|
||||
// FIXME: This seems like it should be align 1. This is actually something which
|
||||
|
@ -25,7 +25,7 @@ int s0_load_x(struct s0 *a) { return a->x; }
|
|||
// with align 1 (in 2363.1 at least).
|
||||
//
|
||||
// CHECK-FUNCTIONS-LABEL: define i32 @s0_load_y
|
||||
// CHECK-FUNCTIONS: [[s0_load_y:%.*]] = load i32* {{.*}}, align 1
|
||||
// CHECK-FUNCTIONS: [[s0_load_y:%.*]] = load i32, i32* {{.*}}, align 1
|
||||
// CHECK-FUNCTIONS: ret i32 [[s0_load_y]]
|
||||
int s0_load_y(struct s0 *a) { return a->y; }
|
||||
// CHECK-FUNCTIONS-LABEL: define void @s0_copy
|
||||
|
@ -47,11 +47,11 @@ int s1_align_y = __alignof(((struct s1*)0)->y);
|
|||
int s1_align = __alignof(struct s1);
|
||||
|
||||
// CHECK-FUNCTIONS-LABEL: define i32 @s1_load_x
|
||||
// CHECK-FUNCTIONS: [[s1_load_x:%.*]] = load i32* {{.*}}, align 1
|
||||
// CHECK-FUNCTIONS: [[s1_load_x:%.*]] = load i32, i32* {{.*}}, align 1
|
||||
// CHECK-FUNCTIONS: ret i32 [[s1_load_x]]
|
||||
int s1_load_x(struct s1 *a) { return a->x; }
|
||||
// CHECK-FUNCTIONS-LABEL: define i32 @s1_load_y
|
||||
// CHECK-FUNCTIONS: [[s1_load_y:%.*]] = load i32* {{.*}}, align 1
|
||||
// CHECK-FUNCTIONS: [[s1_load_y:%.*]] = load i32, i32* {{.*}}, align 1
|
||||
// CHECK-FUNCTIONS: ret i32 [[s1_load_y]]
|
||||
int s1_load_y(struct s1 *a) { return a->y; }
|
||||
// CHECK-FUNCTIONS-LABEL: define void @s1_copy
|
||||
|
@ -75,11 +75,11 @@ int s2_align_y = __alignof(((struct s2*)0)->y);
|
|||
int s2_align = __alignof(struct s2);
|
||||
|
||||
// CHECK-FUNCTIONS-LABEL: define i32 @s2_load_x
|
||||
// CHECK-FUNCTIONS: [[s2_load_y:%.*]] = load i32* {{.*}}, align 2
|
||||
// CHECK-FUNCTIONS: [[s2_load_y:%.*]] = load i32, i32* {{.*}}, align 2
|
||||
// CHECK-FUNCTIONS: ret i32 [[s2_load_y]]
|
||||
int s2_load_x(struct s2 *a) { return a->x; }
|
||||
// CHECK-FUNCTIONS-LABEL: define i32 @s2_load_y
|
||||
// CHECK-FUNCTIONS: [[s2_load_y:%.*]] = load i32* {{.*}}, align 2
|
||||
// CHECK-FUNCTIONS: [[s2_load_y:%.*]] = load i32, i32* {{.*}}, align 2
|
||||
// CHECK-FUNCTIONS: ret i32 [[s2_load_y]]
|
||||
int s2_load_y(struct s2 *a) { return a->y; }
|
||||
// CHECK-FUNCTIONS-LABEL: define void @s2_copy
|
||||
|
@ -95,6 +95,6 @@ int s3_1 = __alignof(((struct s3*) 0)->anInt);
|
|||
// CHECK-FUNCTIONS-LABEL: define i32 @test3(
|
||||
int test3(struct s3 *ptr) {
|
||||
// CHECK-FUNCTIONS: [[PTR:%.*]] = getelementptr inbounds {{%.*}}, {{%.*}}* {{%.*}}, i32 0, i32 1
|
||||
// CHECK-FUNCTIONS-NEXT: load i32* [[PTR]], align 1
|
||||
// CHECK-FUNCTIONS-NEXT: load i32, i32* [[PTR]], align 1
|
||||
return ptr->anInt;
|
||||
}
|
||||
|
|
|
@ -28,11 +28,11 @@ void testva (int n, ...)
|
|||
// CHECK-PPC-NEXT: [[FOUR:%[0-9]+]] = inttoptr i32 [[THREE]] to i8**
|
||||
// CHECK-PPC-NEXT: [[FIVE:%[0-9]+]] = add i32 [[THREE]], 4
|
||||
// CHECK-PPC-NEXT: [[SIX:%[0-9]+]] = inttoptr i32 [[FIVE]] to i8**
|
||||
// CHECK-PPC-NEXT: [[GPR:%[a-z0-9]+]] = load i8* [[GPRPTR]]
|
||||
// CHECK-PPC-NEXT: [[FPR:%[a-z0-9]+]] = load i8* [[TWO]]
|
||||
// CHECK-PPC-NEXT: [[OVERFLOW_AREA:%[a-z_0-9]+]] = load i8** [[FOUR]]
|
||||
// CHECK-PPC-NEXT: [[GPR:%[a-z0-9]+]] = load i8, i8* [[GPRPTR]]
|
||||
// CHECK-PPC-NEXT: [[FPR:%[a-z0-9]+]] = load i8, i8* [[TWO]]
|
||||
// CHECK-PPC-NEXT: [[OVERFLOW_AREA:%[a-z_0-9]+]] = load i8*, i8** [[FOUR]]
|
||||
// CHECK-PPC-NEXT: [[SEVEN:%[0-9]+]] = ptrtoint i8* [[OVERFLOW_AREA]] to i32
|
||||
// CHECK-PPC-NEXT: [[REGSAVE_AREA:%[a-z_0-9]+]] = load i8** [[SIX]]
|
||||
// CHECK-PPC-NEXT: [[REGSAVE_AREA:%[a-z_0-9]+]] = load i8*, i8** [[SIX]]
|
||||
// CHECK-PPC-NEXT: [[EIGHT:%[0-9]+]] = ptrtoint i8* [[REGSAVE_AREA]] to i32
|
||||
// CHECK-PPC-NEXT: [[COND:%[a-z0-9]+]] = icmp ult i8 [[GPR]], 8
|
||||
// CHECK-PPC-NEXT: [[NINE:%[0-9]+]] = mul i8 [[GPR]], 4
|
||||
|
@ -56,7 +56,7 @@ void testva (int n, ...)
|
|||
// CHECK-PPC1:[[CONT]]
|
||||
// CHECK-PPC: [[VAARG_ADDR:%[a-z.0-9]+]] = phi %struct.x* [ [[TWELVE]], [[USING_REGS]] ], [ [[FOURTEEN]], [[USING_OVERFLOW]] ]
|
||||
// CHECK-PPC-NEXT: [[AGGRPTR:%[a-z0-9]+]] = bitcast %struct.x* [[VAARG_ADDR]] to i8**
|
||||
// CHECK-PPC-NEXT: [[AGGR:%[a-z0-9]+]] = load i8** [[AGGRPTR]]
|
||||
// CHECK-PPC-NEXT: [[AGGR:%[a-z0-9]+]] = load i8*, i8** [[AGGRPTR]]
|
||||
// CHECK-PPC-NEXT: [[SEVENTEEN:%[0-9]+]] = bitcast %struct.x* %t to i8*
|
||||
// CHECK-PPC-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* [[SEVENTEEN]], i8* [[AGGR]], i32 16, i32 8, i1 false)
|
||||
|
||||
|
@ -74,11 +74,11 @@ void testva (int n, ...)
|
|||
// CHECK-PPC-NEXT: [[TWENTYTWO:%[0-9]+]] = inttoptr i32 [[TWENTYONE]] to i8**
|
||||
// CHECK-PPC-NEXT: [[TWENTYTHREE:%[0-9]+]] = add i32 [[TWENTYONE]], 4
|
||||
// CHECK-PPC-NEXT: [[TWENTYFOUR:%[0-9]+]] = inttoptr i32 [[TWENTYTHREE]] to i8**
|
||||
// CHECK-PPC-NEXT: [[GPR1:%[a-z0-9]+]] = load i8* [[GPRPTR1]]
|
||||
// CHECK-PPC-NEXT: [[FPR1:%[a-z0-9]+]] = load i8* [[TWENTY]]
|
||||
// CHECK-PPC-NEXT: [[OVERFLOW_AREA1:%[a-z_0-9]+]] = load i8** [[TWENTYTWO]]
|
||||
// CHECK-PPC-NEXT: [[GPR1:%[a-z0-9]+]] = load i8, i8* [[GPRPTR1]]
|
||||
// CHECK-PPC-NEXT: [[FPR1:%[a-z0-9]+]] = load i8, i8* [[TWENTY]]
|
||||
// CHECK-PPC-NEXT: [[OVERFLOW_AREA1:%[a-z_0-9]+]] = load i8*, i8** [[TWENTYTWO]]
|
||||
// CHECK-PPC-NEXT: [[TWENTYFIVE:%[0-9]+]] = ptrtoint i8* [[OVERFLOW_AREA1]] to i32
|
||||
// CHECK-PPC-NEXT: [[REGSAVE_AREA1:%[a-z_0-9]+]] = load i8** [[TWENTYFOUR]]
|
||||
// CHECK-PPC-NEXT: [[REGSAVE_AREA1:%[a-z_0-9]+]] = load i8*, i8** [[TWENTYFOUR]]
|
||||
// CHECK-PPC-NEXT: [[TWENTYSIX:%[0-9]+]] = ptrtoint i8* [[REGSAVE_AREA1]] to i32
|
||||
// CHECK-PPC-NEXT: [[COND1:%[a-z0-9]+]] = icmp ult i8 [[GPR1]], 8
|
||||
// CHECK-PPC-NEXT: [[TWENTYSEVEN:%[0-9]+]] = mul i8 [[GPR1]], 4
|
||||
|
@ -101,12 +101,12 @@ void testva (int n, ...)
|
|||
//
|
||||
// CHECK-PPC1:[[CONT1]]:
|
||||
// CHECK-PPC: [[VAARG_ADDR1:%[a-z.0-9]+]] = phi i32* [ [[THIRTY]], [[USING_REGS1]] ], [ [[THIRTYTWO]], [[USING_OVERFLOW1]] ]
|
||||
// CHECK-PPC-NEXT: [[THIRTYFIVE:%[0-9]+]] = load i32* [[VAARG_ADDR1]]
|
||||
// CHECK-PPC-NEXT: [[THIRTYFIVE:%[0-9]+]] = load i32, i32* [[VAARG_ADDR1]]
|
||||
// CHECK-PPC-NEXT: store i32 [[THIRTYFIVE]], i32* %v, align 4
|
||||
|
||||
#ifdef __powerpc64__
|
||||
__int128_t u = va_arg (ap, __int128_t);
|
||||
#endif
|
||||
// CHECK: bitcast i8* %{{[a-z.0-9]+}} to i128*
|
||||
// CHECK-NEXT: load i128* %{{[0-9]+}}
|
||||
// CHECK-NEXT: load i128, i128* %{{[0-9]+}}
|
||||
}
|
||||
|
|
|
@ -13,4 +13,4 @@ long double test (struct S x)
|
|||
return x.b;
|
||||
}
|
||||
|
||||
// CHECK: %{{[0-9]}} = load ppc_fp128* %{{[a-zA-Z0-9]+}}, align 16
|
||||
// CHECK: %{{[0-9]}} = load ppc_fp128, ppc_fp128* %{{[a-zA-Z0-9]+}}, align 16
|
||||
|
|
|
@ -49,7 +49,7 @@ void test7 (int x, struct test7 y)
|
|||
}
|
||||
|
||||
// CHECK: define void @test1va(%struct.test1* noalias sret %agg.result, i32 signext %x, ...)
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8** %ap
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8*, i8** %ap
|
||||
// CHECK: %[[NEXT:[^ ]+]] = getelementptr i8, i8* %[[CUR]], i64 8
|
||||
// CHECK: store i8* %[[NEXT]], i8** %ap
|
||||
// CHECK: bitcast i8* %[[CUR]] to %struct.test1*
|
||||
|
@ -64,7 +64,7 @@ struct test1 test1va (int x, ...)
|
|||
}
|
||||
|
||||
// CHECK: define void @test2va(%struct.test2* noalias sret %agg.result, i32 signext %x, ...)
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8** %ap
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8*, i8** %ap
|
||||
// CHECK: %[[TMP0:[^ ]+]] = ptrtoint i8* %[[CUR]] to i64
|
||||
// CHECK: %[[TMP1:[^ ]+]] = add i64 %[[TMP0]], 15
|
||||
// CHECK: %[[TMP2:[^ ]+]] = and i64 %[[TMP1]], -16
|
||||
|
@ -83,7 +83,7 @@ struct test2 test2va (int x, ...)
|
|||
}
|
||||
|
||||
// CHECK: define void @test3va(%struct.test3* noalias sret %agg.result, i32 signext %x, ...)
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8** %ap
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8*, i8** %ap
|
||||
// CHECK: %[[TMP0:[^ ]+]] = ptrtoint i8* %[[CUR]] to i64
|
||||
// CHECK: %[[TMP1:[^ ]+]] = add i64 %[[TMP0]], 15
|
||||
// CHECK: %[[TMP2:[^ ]+]] = and i64 %[[TMP1]], -16
|
||||
|
@ -102,7 +102,7 @@ struct test3 test3va (int x, ...)
|
|||
}
|
||||
|
||||
// CHECK: define void @test4va(%struct.test4* noalias sret %agg.result, i32 signext %x, ...)
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8** %ap
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8*, i8** %ap
|
||||
// CHECK: %[[NEXT:[^ ]+]] = getelementptr i8, i8* %[[CUR]], i64 16
|
||||
// CHECK: store i8* %[[NEXT]], i8** %ap
|
||||
// CHECK: bitcast i8* %[[CUR]] to %struct.test4*
|
||||
|
@ -117,7 +117,7 @@ struct test4 test4va (int x, ...)
|
|||
}
|
||||
|
||||
// CHECK: define void @testva_longdouble(%struct.test_longdouble* noalias sret %agg.result, i32 signext %x, ...)
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8** %ap
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8*, i8** %ap
|
||||
// CHECK: %[[NEXT:[^ ]+]] = getelementptr i8, i8* %[[CUR]], i64 16
|
||||
// CHECK: store i8* %[[NEXT]], i8** %ap
|
||||
// CHECK: bitcast i8* %[[CUR]] to %struct.test_longdouble*
|
||||
|
@ -133,7 +133,7 @@ struct test_longdouble testva_longdouble (int x, ...)
|
|||
}
|
||||
|
||||
// CHECK: define void @testva_vector(%struct.test_vector* noalias sret %agg.result, i32 signext %x, ...)
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8** %ap
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8*, i8** %ap
|
||||
// CHECK: %[[TMP0:[^ ]+]] = ptrtoint i8* %[[CUR]] to i64
|
||||
// CHECK: %[[TMP1:[^ ]+]] = add i64 %[[TMP0]], 15
|
||||
// CHECK: %[[TMP2:[^ ]+]] = and i64 %[[TMP1]], -16
|
||||
|
|
|
@ -63,9 +63,9 @@ void bar_float(void) {
|
|||
// CHECK: store float 2.000000e+00, float* %[[VAR2]]
|
||||
// CHECK: store float -2.500000e+00, float* %[[VAR3]]
|
||||
// CHECK: %[[VAR4:[A-Za-z0-9.]+]] = getelementptr { float, float }, { float, float }* %[[VAR1]], i32 0, i32 0
|
||||
// CHECK: %[[VAR5:[A-Za-z0-9.]+]] = load float* %[[VAR4]], align 1
|
||||
// CHECK: %[[VAR5:[A-Za-z0-9.]+]] = load float, float* %[[VAR4]], align 1
|
||||
// CHECK: %[[VAR6:[A-Za-z0-9.]+]] = getelementptr { float, float }, { float, float }* %[[VAR1]], i32 0, i32 1
|
||||
// CHECK: %[[VAR7:[A-Za-z0-9.]+]] = load float* %[[VAR6]], align 1
|
||||
// CHECK: %[[VAR7:[A-Za-z0-9.]+]] = load float, float* %[[VAR6]], align 1
|
||||
// CHECK: %{{[A-Za-z0-9.]+}} = call float @foo_float(float %[[VAR5]], float %[[VAR7]])
|
||||
|
||||
void bar_double(void) {
|
||||
|
@ -79,9 +79,9 @@ void bar_double(void) {
|
|||
// CHECK: store double 2.000000e+00, double* %[[VAR12]]
|
||||
// CHECK: store double -2.500000e+00, double* %[[VAR13]]
|
||||
// CHECK: %[[VAR14:[A-Za-z0-9.]+]] = getelementptr { double, double }, { double, double }* %[[VAR11]], i32 0, i32 0
|
||||
// CHECK: %[[VAR15:[A-Za-z0-9.]+]] = load double* %[[VAR14]], align 1
|
||||
// CHECK: %[[VAR15:[A-Za-z0-9.]+]] = load double, double* %[[VAR14]], align 1
|
||||
// CHECK: %[[VAR16:[A-Za-z0-9.]+]] = getelementptr { double, double }, { double, double }* %[[VAR11]], i32 0, i32 1
|
||||
// CHECK: %[[VAR17:[A-Za-z0-9.]+]] = load double* %[[VAR16]], align 1
|
||||
// CHECK: %[[VAR17:[A-Za-z0-9.]+]] = load double, double* %[[VAR16]], align 1
|
||||
// CHECK: %{{[A-Za-z0-9.]+}} = call double @foo_double(double %[[VAR15]], double %[[VAR17]])
|
||||
|
||||
void bar_long_double(void) {
|
||||
|
@ -95,9 +95,9 @@ void bar_long_double(void) {
|
|||
// CHECK: store ppc_fp128 0xM40000000000000000000000000000000, ppc_fp128* %[[VAR22]]
|
||||
// CHECK: store ppc_fp128 0xMC0040000000000000000000000000000, ppc_fp128* %[[VAR23]]
|
||||
// CHECK: %[[VAR24:[A-Za-z0-9.]+]] = getelementptr { ppc_fp128, ppc_fp128 }, { ppc_fp128, ppc_fp128 }* %[[VAR21]], i32 0, i32 0
|
||||
// CHECK: %[[VAR25:[A-Za-z0-9.]+]] = load ppc_fp128* %[[VAR24]], align 1
|
||||
// CHECK: %[[VAR25:[A-Za-z0-9.]+]] = load ppc_fp128, ppc_fp128* %[[VAR24]], align 1
|
||||
// CHECK: %[[VAR26:[A-Za-z0-9.]+]] = getelementptr { ppc_fp128, ppc_fp128 }, { ppc_fp128, ppc_fp128 }* %[[VAR21]], i32 0, i32 1
|
||||
// CHECK: %[[VAR27:[A-Za-z0-9.]+]] = load ppc_fp128* %[[VAR26]], align 1
|
||||
// CHECK: %[[VAR27:[A-Za-z0-9.]+]] = load ppc_fp128, ppc_fp128* %[[VAR26]], align 1
|
||||
// CHECK: %{{[A-Za-z0-9.]+}} = call ppc_fp128 @foo_long_double(ppc_fp128 %[[VAR25]], ppc_fp128 %[[VAR27]])
|
||||
|
||||
void bar_int(void) {
|
||||
|
@ -111,9 +111,9 @@ void bar_int(void) {
|
|||
// CHECK: store i32 2, i32* %[[VAR32]]
|
||||
// CHECK: store i32 -3, i32* %[[VAR33]]
|
||||
// CHECK: %[[VAR34:[A-Za-z0-9.]+]] = getelementptr { i32, i32 }, { i32, i32 }* %[[VAR31]], i32 0, i32 0
|
||||
// CHECK: %[[VAR35:[A-Za-z0-9.]+]] = load i32* %[[VAR34]], align 1
|
||||
// CHECK: %[[VAR35:[A-Za-z0-9.]+]] = load i32, i32* %[[VAR34]], align 1
|
||||
// CHECK: %[[VAR36:[A-Za-z0-9.]+]] = getelementptr { i32, i32 }, { i32, i32 }* %[[VAR31]], i32 0, i32 1
|
||||
// CHECK: %[[VAR37:[A-Za-z0-9.]+]] = load i32* %[[VAR36]], align 1
|
||||
// CHECK: %[[VAR37:[A-Za-z0-9.]+]] = load i32, i32* %[[VAR36]], align 1
|
||||
// CHECK: %{{[A-Za-z0-9.]+}} = call signext i32 @foo_int(i32 %[[VAR35]], i32 %[[VAR37]])
|
||||
|
||||
void bar_short(void) {
|
||||
|
@ -127,9 +127,9 @@ void bar_short(void) {
|
|||
// CHECK: store i16 2, i16* %[[VAR42]]
|
||||
// CHECK: store i16 -3, i16* %[[VAR43]]
|
||||
// CHECK: %[[VAR44:[A-Za-z0-9.]+]] = getelementptr { i16, i16 }, { i16, i16 }* %[[VAR41]], i32 0, i32 0
|
||||
// CHECK: %[[VAR45:[A-Za-z0-9.]+]] = load i16* %[[VAR44]], align 1
|
||||
// CHECK: %[[VAR45:[A-Za-z0-9.]+]] = load i16, i16* %[[VAR44]], align 1
|
||||
// CHECK: %[[VAR46:[A-Za-z0-9.]+]] = getelementptr { i16, i16 }, { i16, i16 }* %[[VAR41]], i32 0, i32 1
|
||||
// CHECK: %[[VAR47:[A-Za-z0-9.]+]] = load i16* %[[VAR46]], align 1
|
||||
// CHECK: %[[VAR47:[A-Za-z0-9.]+]] = load i16, i16* %[[VAR46]], align 1
|
||||
// CHECK: %{{[A-Za-z0-9.]+}} = call signext i16 @foo_short(i16 %[[VAR45]], i16 %[[VAR47]])
|
||||
|
||||
void bar_char(void) {
|
||||
|
@ -143,9 +143,9 @@ void bar_char(void) {
|
|||
// CHECK: store i8 2, i8* %[[VAR52]]
|
||||
// CHECK: store i8 -3, i8* %[[VAR53]]
|
||||
// CHECK: %[[VAR54:[A-Za-z0-9.]+]] = getelementptr { i8, i8 }, { i8, i8 }* %[[VAR51]], i32 0, i32 0
|
||||
// CHECK: %[[VAR55:[A-Za-z0-9.]+]] = load i8* %[[VAR54]], align 1
|
||||
// CHECK: %[[VAR55:[A-Za-z0-9.]+]] = load i8, i8* %[[VAR54]], align 1
|
||||
// CHECK: %[[VAR56:[A-Za-z0-9.]+]] = getelementptr { i8, i8 }, { i8, i8 }* %[[VAR51]], i32 0, i32 1
|
||||
// CHECK: %[[VAR57:[A-Za-z0-9.]+]] = load i8* %[[VAR56]], align 1
|
||||
// CHECK: %[[VAR57:[A-Za-z0-9.]+]] = load i8, i8* %[[VAR56]], align 1
|
||||
// CHECK: %{{[A-Za-z0-9.]+}} = call signext i8 @foo_char(i8 %[[VAR55]], i8 %[[VAR57]])
|
||||
|
||||
void bar_long(void) {
|
||||
|
@ -159,9 +159,9 @@ void bar_long(void) {
|
|||
// CHECK: store i64 2, i64* %[[VAR62]]
|
||||
// CHECK: store i64 -3, i64* %[[VAR63]]
|
||||
// CHECK: %[[VAR64:[A-Za-z0-9.]+]] = getelementptr { i64, i64 }, { i64, i64 }* %[[VAR61]], i32 0, i32 0
|
||||
// CHECK: %[[VAR65:[A-Za-z0-9.]+]] = load i64* %[[VAR64]], align 1
|
||||
// CHECK: %[[VAR65:[A-Za-z0-9.]+]] = load i64, i64* %[[VAR64]], align 1
|
||||
// CHECK: %[[VAR66:[A-Za-z0-9.]+]] = getelementptr { i64, i64 }, { i64, i64 }* %[[VAR61]], i32 0, i32 1
|
||||
// CHECK: %[[VAR67:[A-Za-z0-9.]+]] = load i64* %[[VAR66]], align 1
|
||||
// CHECK: %[[VAR67:[A-Za-z0-9.]+]] = load i64, i64* %[[VAR66]], align 1
|
||||
// CHECK: %{{[A-Za-z0-9.]+}} = call i64 @foo_long(i64 %[[VAR65]], i64 %[[VAR67]])
|
||||
|
||||
void bar_long_long(void) {
|
||||
|
@ -175,9 +175,9 @@ void bar_long_long(void) {
|
|||
// CHECK: store i64 2, i64* %[[VAR72]]
|
||||
// CHECK: store i64 -3, i64* %[[VAR73]]
|
||||
// CHECK: %[[VAR74:[A-Za-z0-9.]+]] = getelementptr { i64, i64 }, { i64, i64 }* %[[VAR71]], i32 0, i32 0
|
||||
// CHECK: %[[VAR75:[A-Za-z0-9.]+]] = load i64* %[[VAR74]], align 1
|
||||
// CHECK: %[[VAR75:[A-Za-z0-9.]+]] = load i64, i64* %[[VAR74]], align 1
|
||||
// CHECK: %[[VAR76:[A-Za-z0-9.]+]] = getelementptr { i64, i64 }, { i64, i64 }* %[[VAR71]], i32 0, i32 1
|
||||
// CHECK: %[[VAR77:[A-Za-z0-9.]+]] = load i64* %[[VAR76]], align 1
|
||||
// CHECK: %[[VAR77:[A-Za-z0-9.]+]] = load i64, i64* %[[VAR76]], align 1
|
||||
// CHECK: %{{[A-Za-z0-9.]+}} = call i64 @foo_long_long(i64 %[[VAR75]], i64 %[[VAR77]])
|
||||
|
||||
// CHECK: attributes [[NUW]] = { nounwind{{.*}} }
|
||||
|
|
|
@ -36,14 +36,14 @@ void foo(void)
|
|||
|
||||
// CHECK-LABEL: define void @foo
|
||||
// CHECK: %{{[a-zA-Z0-9.]+}} = getelementptr %struct.s1, %struct.s1* %p1, i32 0, i32 0
|
||||
// CHECK: %{{[0-9]+}} = load float* %{{[a-zA-Z0-9.]+}}, align 1
|
||||
// CHECK: %{{[0-9]+}} = load float, float* %{{[a-zA-Z0-9.]+}}, align 1
|
||||
// CHECK: %{{[a-zA-Z0-9.]+}} = getelementptr %struct.s2, %struct.s2* %p2, i32 0, i32 0
|
||||
// CHECK: %{{[0-9]+}} = load double* %{{[a-zA-Z0-9.]+}}, align 1
|
||||
// CHECK: %{{[0-9]+}} = load double, double* %{{[a-zA-Z0-9.]+}}, align 1
|
||||
// CHECK: %{{[a-zA-Z0-9.]+}} = getelementptr %struct.s4, %struct.s4* %p4, i32 0, i32 0
|
||||
// CHECK: %{{[a-zA-Z0-9.]+}} = getelementptr %struct.s1, %struct.s1* %{{[a-zA-Z0-9.]+}}, i32 0, i32 0
|
||||
// CHECK: %{{[0-9]+}} = load float* %{{[a-zA-Z0-9.]+}}, align 1
|
||||
// CHECK: %{{[0-9]+}} = load float, float* %{{[a-zA-Z0-9.]+}}, align 1
|
||||
// CHECK: %{{[a-zA-Z0-9.]+}} = getelementptr %struct.s5, %struct.s5* %p5, i32 0, i32 0
|
||||
// CHECK: %{{[a-zA-Z0-9.]+}} = getelementptr %struct.s2, %struct.s2* %{{[a-zA-Z0-9.]+}}, i32 0, i32 0
|
||||
// CHECK: %{{[0-9]+}} = load double* %{{[a-zA-Z0-9.]+}}, align 1
|
||||
// CHECK: %{{[0-9]+}} = load double, double* %{{[a-zA-Z0-9.]+}}, align 1
|
||||
// CHECK: call void @bar(float inreg %{{[0-9]+}}, double inreg %{{[0-9]+}}, float inreg %{{[0-9]+}}, double inreg %{{[0-9]+}})
|
||||
// CHECK: ret void
|
||||
|
|
|
@ -8,7 +8,7 @@ void testva (int n, ...)
|
|||
va_list ap;
|
||||
|
||||
_Complex int i = va_arg(ap, _Complex int);
|
||||
// CHECK: %[[VAR40:[A-Za-z0-9.]+]] = load i8** %[[VAR100:[A-Za-z0-9.]+]]
|
||||
// CHECK: %[[VAR40:[A-Za-z0-9.]+]] = load i8*, i8** %[[VAR100:[A-Za-z0-9.]+]]
|
||||
// CHECK-NEXT: %[[VAR41:[A-Za-z0-9.]+]] = getelementptr i8, i8* %[[VAR40]], i64 16
|
||||
// CHECK-NEXT: store i8* %[[VAR41]], i8** %[[VAR100]]
|
||||
// CHECK-NEXT: %[[VAR1:[A-Za-z0-9.]+]] = ptrtoint i8* %[[VAR40]] to i64
|
||||
|
@ -16,15 +16,15 @@ void testva (int n, ...)
|
|||
// CHECK-NEXT: %[[VAR3:[A-Za-z0-9.]+]] = add i64 %[[VAR1]], 12
|
||||
// CHECK-NEXT: %[[VAR4:[A-Za-z0-9.]+]] = inttoptr i64 %[[VAR2]] to i32*
|
||||
// CHECK-NEXT: %[[VAR5:[A-Za-z0-9.]+]] = inttoptr i64 %[[VAR3]] to i32*
|
||||
// CHECK-NEXT: %[[VAR6:[A-Za-z0-9.]+]] = load i32* %[[VAR4]]
|
||||
// CHECK-NEXT: %[[VAR7:[A-Za-z0-9.]+]] = load i32* %[[VAR5]]
|
||||
// CHECK-NEXT: %[[VAR6:[A-Za-z0-9.]+]] = load i32, i32* %[[VAR4]]
|
||||
// CHECK-NEXT: %[[VAR7:[A-Za-z0-9.]+]] = load i32, i32* %[[VAR5]]
|
||||
// CHECK-NEXT: %[[VAR8:[A-Za-z0-9.]+]] = getelementptr inbounds { i32, i32 }, { i32, i32 }* %[[VAR0:[A-Za-z0-9.]+]], i32 0, i32 0
|
||||
// CHECK-NEXT: %[[VAR9:[A-Za-z0-9.]+]] = getelementptr inbounds { i32, i32 }, { i32, i32 }* %[[VAR0]], i32 0, i32 1
|
||||
// CHECK-NEXT: store i32 %[[VAR6]], i32* %[[VAR8]]
|
||||
// CHECK-NEXT: store i32 %[[VAR7]], i32* %[[VAR9]]
|
||||
|
||||
_Complex short s = va_arg(ap, _Complex short);
|
||||
// CHECK: %[[VAR50:[A-Za-z0-9.]+]] = load i8** %[[VAR100:[A-Za-z0-9.]+]]
|
||||
// CHECK: %[[VAR50:[A-Za-z0-9.]+]] = load i8*, i8** %[[VAR100:[A-Za-z0-9.]+]]
|
||||
// CHECK-NEXT: %[[VAR51:[A-Za-z0-9.]+]] = getelementptr i8, i8* %[[VAR50]], i64 16
|
||||
// CHECK-NEXT: store i8* %[[VAR51]], i8** %[[VAR100]]
|
||||
// CHECK: %[[VAR11:[A-Za-z0-9.]+]] = ptrtoint i8* %{{[A-Za-z0-9.]+}} to i64
|
||||
|
@ -32,15 +32,15 @@ void testva (int n, ...)
|
|||
// CHECK-NEXT: %[[VAR13:[A-Za-z0-9.]+]] = add i64 %[[VAR11]], 14
|
||||
// CHECK-NEXT: %[[VAR14:[A-Za-z0-9.]+]] = inttoptr i64 %[[VAR12]] to i16*
|
||||
// CHECK-NEXT: %[[VAR15:[A-Za-z0-9.]+]] = inttoptr i64 %[[VAR13]] to i16*
|
||||
// CHECK-NEXT: %[[VAR16:[A-Za-z0-9.]+]] = load i16* %[[VAR14]]
|
||||
// CHECK-NEXT: %[[VAR17:[A-Za-z0-9.]+]] = load i16* %[[VAR15]]
|
||||
// CHECK-NEXT: %[[VAR16:[A-Za-z0-9.]+]] = load i16, i16* %[[VAR14]]
|
||||
// CHECK-NEXT: %[[VAR17:[A-Za-z0-9.]+]] = load i16, i16* %[[VAR15]]
|
||||
// CHECK-NEXT: %[[VAR18:[A-Za-z0-9.]+]] = getelementptr inbounds { i16, i16 }, { i16, i16 }* %[[VAR10:[A-Za-z0-9.]+]], i32 0, i32 0
|
||||
// CHECK-NEXT: %[[VAR19:[A-Za-z0-9.]+]] = getelementptr inbounds { i16, i16 }, { i16, i16 }* %[[VAR10]], i32 0, i32 1
|
||||
// CHECK-NEXT: store i16 %[[VAR16]], i16* %[[VAR18]]
|
||||
// CHECK-NEXT: store i16 %[[VAR17]], i16* %[[VAR19]]
|
||||
|
||||
_Complex char c = va_arg(ap, _Complex char);
|
||||
// CHECK: %[[VAR60:[A-Za-z0-9.]+]] = load i8** %[[VAR100:[A-Za-z0-9.]+]]
|
||||
// CHECK: %[[VAR60:[A-Za-z0-9.]+]] = load i8*, i8** %[[VAR100:[A-Za-z0-9.]+]]
|
||||
// CHECK-NEXT: %[[VAR61:[A-Za-z0-9.]+]] = getelementptr i8, i8* %[[VAR60]], i64 16
|
||||
// CHECK-NEXT: store i8* %[[VAR61]], i8** %[[VAR100]]
|
||||
// CHECK: %[[VAR21:[A-Za-z0-9.]+]] = ptrtoint i8* %{{[A-Za-z0-9.]+}} to i64
|
||||
|
@ -48,15 +48,15 @@ void testva (int n, ...)
|
|||
// CHECK-NEXT: %[[VAR23:[A-Za-z0-9.]+]] = add i64 %[[VAR21]], 15
|
||||
// CHECK-NEXT: %[[VAR24:[A-Za-z0-9.]+]] = inttoptr i64 %[[VAR22]] to i8*
|
||||
// CHECK-NEXT: %[[VAR25:[A-Za-z0-9.]+]] = inttoptr i64 %[[VAR23]] to i8*
|
||||
// CHECK-NEXT: %[[VAR26:[A-Za-z0-9.]+]] = load i8* %[[VAR24]]
|
||||
// CHECK-NEXT: %[[VAR27:[A-Za-z0-9.]+]] = load i8* %[[VAR25]]
|
||||
// CHECK-NEXT: %[[VAR26:[A-Za-z0-9.]+]] = load i8, i8* %[[VAR24]]
|
||||
// CHECK-NEXT: %[[VAR27:[A-Za-z0-9.]+]] = load i8, i8* %[[VAR25]]
|
||||
// CHECK-NEXT: %[[VAR28:[A-Za-z0-9.]+]] = getelementptr inbounds { i8, i8 }, { i8, i8 }* %[[VAR20:[A-Za-z0-9.]+]], i32 0, i32 0
|
||||
// CHECK-NEXT: %[[VAR29:[A-Za-z0-9.]+]] = getelementptr inbounds { i8, i8 }, { i8, i8 }* %[[VAR20]], i32 0, i32 1
|
||||
// CHECK-NEXT: store i8 %[[VAR26]], i8* %[[VAR28]]
|
||||
// CHECK-NEXT: store i8 %[[VAR27]], i8* %[[VAR29]]
|
||||
|
||||
_Complex float f = va_arg(ap, _Complex float);
|
||||
// CHECK: %[[VAR70:[A-Za-z0-9.]+]] = load i8** %[[VAR100:[A-Za-z0-9.]+]]
|
||||
// CHECK: %[[VAR70:[A-Za-z0-9.]+]] = load i8*, i8** %[[VAR100:[A-Za-z0-9.]+]]
|
||||
// CHECK-NEXT: %[[VAR71:[A-Za-z0-9.]+]] = getelementptr i8, i8* %[[VAR70]], i64 16
|
||||
// CHECK-NEXT: store i8* %[[VAR71]], i8** %[[VAR100]]
|
||||
// CHECK: %[[VAR31:[A-Za-z0-9.]+]] = ptrtoint i8* %{{[A-Za-z0-9.]+}} to i64
|
||||
|
@ -64,8 +64,8 @@ void testva (int n, ...)
|
|||
// CHECK-NEXT: %[[VAR33:[A-Za-z0-9.]+]] = add i64 %[[VAR31]], 12
|
||||
// CHECK-NEXT: %[[VAR34:[A-Za-z0-9.]+]] = inttoptr i64 %[[VAR32]] to float*
|
||||
// CHECK-NEXT: %[[VAR35:[A-Za-z0-9.]+]] = inttoptr i64 %[[VAR33]] to float*
|
||||
// CHECK-NEXT: %[[VAR36:[A-Za-z0-9.]+]] = load float* %[[VAR34]]
|
||||
// CHECK-NEXT: %[[VAR37:[A-Za-z0-9.]+]] = load float* %[[VAR35]]
|
||||
// CHECK-NEXT: %[[VAR36:[A-Za-z0-9.]+]] = load float, float* %[[VAR34]]
|
||||
// CHECK-NEXT: %[[VAR37:[A-Za-z0-9.]+]] = load float, float* %[[VAR35]]
|
||||
// CHECK-NEXT: %[[VAR38:[A-Za-z0-9.]+]] = getelementptr inbounds { float, float }, { float, float }* %[[VAR30:[A-Za-z0-9.]+]], i32 0, i32 0
|
||||
// CHECK-NEXT: %[[VAR39:[A-Za-z0-9.]+]] = getelementptr inbounds { float, float }, { float, float }* %[[VAR30]], i32 0, i32 1
|
||||
// CHECK-NEXT: store float %[[VAR36]], float* %[[VAR38]]
|
||||
|
|
|
@ -54,49 +54,49 @@ struct fabc func_fabc(struct fabc x) { return x; }
|
|||
struct f2a2b func_f2a2b(struct f2a2b x) { return x; }
|
||||
|
||||
// CHECK-LABEL: @call_f1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load float* getelementptr inbounds (%struct.f1* @global_f1, i32 0, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load float, float* getelementptr inbounds (%struct.f1* @global_f1, i32 0, i32 0, i32 0), align 1
|
||||
// CHECK: call [1 x float] @func_f1(float inreg %[[TMP]])
|
||||
struct f1 global_f1;
|
||||
void call_f1(void) { global_f1 = func_f1(global_f1); }
|
||||
|
||||
// CHECK-LABEL: @call_f2
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [2 x float]* getelementptr inbounds (%struct.f2* @global_f2, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [2 x float], [2 x float]* getelementptr inbounds (%struct.f2* @global_f2, i32 0, i32 0), align 1
|
||||
// CHECK: call [2 x float] @func_f2([2 x float] %[[TMP]])
|
||||
struct f2 global_f2;
|
||||
void call_f2(void) { global_f2 = func_f2(global_f2); }
|
||||
|
||||
// CHECK-LABEL: @call_f3
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [3 x float]* getelementptr inbounds (%struct.f3* @global_f3, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [3 x float], [3 x float]* getelementptr inbounds (%struct.f3* @global_f3, i32 0, i32 0), align 1
|
||||
// CHECK: call [3 x float] @func_f3([3 x float] %[[TMP]])
|
||||
struct f3 global_f3;
|
||||
void call_f3(void) { global_f3 = func_f3(global_f3); }
|
||||
|
||||
// CHECK-LABEL: @call_f4
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [4 x float]* getelementptr inbounds (%struct.f4* @global_f4, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [4 x float], [4 x float]* getelementptr inbounds (%struct.f4* @global_f4, i32 0, i32 0), align 1
|
||||
// CHECK: call [4 x float] @func_f4([4 x float] %[[TMP]])
|
||||
struct f4 global_f4;
|
||||
void call_f4(void) { global_f4 = func_f4(global_f4); }
|
||||
|
||||
// CHECK-LABEL: @call_f5
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [5 x float]* getelementptr inbounds (%struct.f5* @global_f5, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [5 x float], [5 x float]* getelementptr inbounds (%struct.f5* @global_f5, i32 0, i32 0), align 1
|
||||
// CHECK: call [5 x float] @func_f5([5 x float] %[[TMP]])
|
||||
struct f5 global_f5;
|
||||
void call_f5(void) { global_f5 = func_f5(global_f5); }
|
||||
|
||||
// CHECK-LABEL: @call_f6
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [6 x float]* getelementptr inbounds (%struct.f6* @global_f6, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [6 x float], [6 x float]* getelementptr inbounds (%struct.f6* @global_f6, i32 0, i32 0), align 1
|
||||
// CHECK: call [6 x float] @func_f6([6 x float] %[[TMP]])
|
||||
struct f6 global_f6;
|
||||
void call_f6(void) { global_f6 = func_f6(global_f6); }
|
||||
|
||||
// CHECK-LABEL: @call_f7
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [7 x float]* getelementptr inbounds (%struct.f7* @global_f7, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [7 x float], [7 x float]* getelementptr inbounds (%struct.f7* @global_f7, i32 0, i32 0), align 1
|
||||
// CHECK: call [7 x float] @func_f7([7 x float] %[[TMP]])
|
||||
struct f7 global_f7;
|
||||
void call_f7(void) { global_f7 = func_f7(global_f7); }
|
||||
|
||||
// CHECK-LABEL: @call_f8
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [8 x float]* getelementptr inbounds (%struct.f8* @global_f8, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [8 x float], [8 x float]* getelementptr inbounds (%struct.f8* @global_f8, i32 0, i32 0), align 1
|
||||
// CHECK: call [8 x float] @func_f8([8 x float] %[[TMP]])
|
||||
struct f8 global_f8;
|
||||
void call_f8(void) { global_f8 = func_f8(global_f8); }
|
||||
|
@ -105,19 +105,19 @@ void call_f8(void) { global_f8 = func_f8(global_f8); }
|
|||
// CHECK: %[[TMP1:[^ ]+]] = alloca [5 x i64]
|
||||
// CHECK: %[[TMP2:[^ ]+]] = bitcast [5 x i64]* %[[TMP1]] to i8*
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* %[[TMP2]], i8* bitcast (%struct.f9* @global_f9 to i8*), i64 36, i32 1, i1 false)
|
||||
// CHECK: %[[TMP3:[^ ]+]] = load [5 x i64]* %[[TMP1]]
|
||||
// CHECK: %[[TMP3:[^ ]+]] = load [5 x i64], [5 x i64]* %[[TMP1]]
|
||||
// CHECK: call void @func_f9(%struct.f9* sret %{{[^ ]+}}, [5 x i64] %[[TMP3]])
|
||||
struct f9 global_f9;
|
||||
void call_f9(void) { global_f9 = func_f9(global_f9); }
|
||||
|
||||
// CHECK-LABEL: @call_fab
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [2 x float]* bitcast (%struct.fab* @global_fab to [2 x float]*)
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [2 x float], [2 x float]* bitcast (%struct.fab* @global_fab to [2 x float]*)
|
||||
// CHECK: call [2 x float] @func_fab([2 x float] %[[TMP]])
|
||||
struct fab global_fab;
|
||||
void call_fab(void) { global_fab = func_fab(global_fab); }
|
||||
|
||||
// CHECK-LABEL: @call_fabc
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [3 x float]* bitcast (%struct.fabc* @global_fabc to [3 x float]*)
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [3 x float], [3 x float]* bitcast (%struct.fabc* @global_fabc to [3 x float]*)
|
||||
// CHECK: call [3 x float] @func_fabc([3 x float] %[[TMP]])
|
||||
struct fabc global_fabc;
|
||||
void call_fabc(void) { global_fabc = func_fabc(global_fabc); }
|
||||
|
@ -172,49 +172,49 @@ struct vab func_vab(struct vab x) { return x; }
|
|||
struct vabc func_vabc(struct vabc x) { return x; }
|
||||
|
||||
// CHECK-LABEL: @call_v1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load <4 x i32>* getelementptr inbounds (%struct.v1* @global_v1, i32 0, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load <4 x i32>, <4 x i32>* getelementptr inbounds (%struct.v1* @global_v1, i32 0, i32 0, i32 0), align 1
|
||||
// CHECK: call [1 x <4 x i32>] @func_v1(<4 x i32> inreg %[[TMP]])
|
||||
struct v1 global_v1;
|
||||
void call_v1(void) { global_v1 = func_v1(global_v1); }
|
||||
|
||||
// CHECK-LABEL: @call_v2
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [2 x <4 x i32>]* getelementptr inbounds (%struct.v2* @global_v2, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [2 x <4 x i32>], [2 x <4 x i32>]* getelementptr inbounds (%struct.v2* @global_v2, i32 0, i32 0), align 1
|
||||
// CHECK: call [2 x <4 x i32>] @func_v2([2 x <4 x i32>] %[[TMP]])
|
||||
struct v2 global_v2;
|
||||
void call_v2(void) { global_v2 = func_v2(global_v2); }
|
||||
|
||||
// CHECK-LABEL: @call_v3
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [3 x <4 x i32>]* getelementptr inbounds (%struct.v3* @global_v3, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [3 x <4 x i32>], [3 x <4 x i32>]* getelementptr inbounds (%struct.v3* @global_v3, i32 0, i32 0), align 1
|
||||
// CHECK: call [3 x <4 x i32>] @func_v3([3 x <4 x i32>] %[[TMP]])
|
||||
struct v3 global_v3;
|
||||
void call_v3(void) { global_v3 = func_v3(global_v3); }
|
||||
|
||||
// CHECK-LABEL: @call_v4
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [4 x <4 x i32>]* getelementptr inbounds (%struct.v4* @global_v4, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [4 x <4 x i32>], [4 x <4 x i32>]* getelementptr inbounds (%struct.v4* @global_v4, i32 0, i32 0), align 1
|
||||
// CHECK: call [4 x <4 x i32>] @func_v4([4 x <4 x i32>] %[[TMP]])
|
||||
struct v4 global_v4;
|
||||
void call_v4(void) { global_v4 = func_v4(global_v4); }
|
||||
|
||||
// CHECK-LABEL: @call_v5
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [5 x <4 x i32>]* getelementptr inbounds (%struct.v5* @global_v5, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [5 x <4 x i32>], [5 x <4 x i32>]* getelementptr inbounds (%struct.v5* @global_v5, i32 0, i32 0), align 1
|
||||
// CHECK: call [5 x <4 x i32>] @func_v5([5 x <4 x i32>] %[[TMP]])
|
||||
struct v5 global_v5;
|
||||
void call_v5(void) { global_v5 = func_v5(global_v5); }
|
||||
|
||||
// CHECK-LABEL: @call_v6
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [6 x <4 x i32>]* getelementptr inbounds (%struct.v6* @global_v6, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [6 x <4 x i32>], [6 x <4 x i32>]* getelementptr inbounds (%struct.v6* @global_v6, i32 0, i32 0), align 1
|
||||
// CHECK: call [6 x <4 x i32>] @func_v6([6 x <4 x i32>] %[[TMP]])
|
||||
struct v6 global_v6;
|
||||
void call_v6(void) { global_v6 = func_v6(global_v6); }
|
||||
|
||||
// CHECK-LABEL: @call_v7
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [7 x <4 x i32>]* getelementptr inbounds (%struct.v7* @global_v7, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [7 x <4 x i32>], [7 x <4 x i32>]* getelementptr inbounds (%struct.v7* @global_v7, i32 0, i32 0), align 1
|
||||
// CHECK: call [7 x <4 x i32>] @func_v7([7 x <4 x i32>] %[[TMP]])
|
||||
struct v7 global_v7;
|
||||
void call_v7(void) { global_v7 = func_v7(global_v7); }
|
||||
|
||||
// CHECK-LABEL: @call_v8
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [8 x <4 x i32>]* getelementptr inbounds (%struct.v8* @global_v8, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [8 x <4 x i32>], [8 x <4 x i32>]* getelementptr inbounds (%struct.v8* @global_v8, i32 0, i32 0), align 1
|
||||
// CHECK: call [8 x <4 x i32>] @func_v8([8 x <4 x i32>] %[[TMP]])
|
||||
struct v8 global_v8;
|
||||
void call_v8(void) { global_v8 = func_v8(global_v8); }
|
||||
|
@ -225,13 +225,13 @@ struct v9 global_v9;
|
|||
void call_v9(void) { global_v9 = func_v9(global_v9); }
|
||||
|
||||
// CHECK-LABEL: @call_vab
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [2 x <4 x i32>]* bitcast (%struct.vab* @global_vab to [2 x <4 x i32>]*)
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [2 x <4 x i32>], [2 x <4 x i32>]* bitcast (%struct.vab* @global_vab to [2 x <4 x i32>]*)
|
||||
// CHECK: call [2 x <4 x i32>] @func_vab([2 x <4 x i32>] %[[TMP]])
|
||||
struct vab global_vab;
|
||||
void call_vab(void) { global_vab = func_vab(global_vab); }
|
||||
|
||||
// CHECK-LABEL: @call_vabc
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [3 x <4 x i32>]* bitcast (%struct.vabc* @global_vabc to [3 x <4 x i32>]*)
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [3 x <4 x i32>], [3 x <4 x i32>]* bitcast (%struct.vabc* @global_vabc to [3 x <4 x i32>]*)
|
||||
// CHECK: call [3 x <4 x i32>] @func_vabc([3 x <4 x i32>] %[[TMP]])
|
||||
struct vabc global_vabc;
|
||||
void call_vabc(void) { global_vabc = func_vabc(global_vabc); }
|
||||
|
@ -289,49 +289,49 @@ struct v3fab func_v3fab(struct v3fab x) { return x; }
|
|||
struct v3fabc func_v3fabc(struct v3fabc x) { return x; }
|
||||
|
||||
// CHECK-LABEL: @call_v3f1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load <3 x float>* getelementptr inbounds (%struct.v3f1* @global_v3f1, i32 0, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load <3 x float>, <3 x float>* getelementptr inbounds (%struct.v3f1* @global_v3f1, i32 0, i32 0, i32 0), align 1
|
||||
// CHECK: call [1 x <3 x float>] @func_v3f1(<3 x float> inreg %[[TMP]])
|
||||
struct v3f1 global_v3f1;
|
||||
void call_v3f1(void) { global_v3f1 = func_v3f1(global_v3f1); }
|
||||
|
||||
// CHECK-LABEL: @call_v3f2
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [2 x <3 x float>]* getelementptr inbounds (%struct.v3f2* @global_v3f2, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [2 x <3 x float>], [2 x <3 x float>]* getelementptr inbounds (%struct.v3f2* @global_v3f2, i32 0, i32 0), align 1
|
||||
// CHECK: call [2 x <3 x float>] @func_v3f2([2 x <3 x float>] %[[TMP]])
|
||||
struct v3f2 global_v3f2;
|
||||
void call_v3f2(void) { global_v3f2 = func_v3f2(global_v3f2); }
|
||||
|
||||
// CHECK-LABEL: @call_v3f3
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [3 x <3 x float>]* getelementptr inbounds (%struct.v3f3* @global_v3f3, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [3 x <3 x float>], [3 x <3 x float>]* getelementptr inbounds (%struct.v3f3* @global_v3f3, i32 0, i32 0), align 1
|
||||
// CHECK: call [3 x <3 x float>] @func_v3f3([3 x <3 x float>] %[[TMP]])
|
||||
struct v3f3 global_v3f3;
|
||||
void call_v3f3(void) { global_v3f3 = func_v3f3(global_v3f3); }
|
||||
|
||||
// CHECK-LABEL: @call_v3f4
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [4 x <3 x float>]* getelementptr inbounds (%struct.v3f4* @global_v3f4, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [4 x <3 x float>], [4 x <3 x float>]* getelementptr inbounds (%struct.v3f4* @global_v3f4, i32 0, i32 0), align 1
|
||||
// CHECK: call [4 x <3 x float>] @func_v3f4([4 x <3 x float>] %[[TMP]])
|
||||
struct v3f4 global_v3f4;
|
||||
void call_v3f4(void) { global_v3f4 = func_v3f4(global_v3f4); }
|
||||
|
||||
// CHECK-LABEL: @call_v3f5
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [5 x <3 x float>]* getelementptr inbounds (%struct.v3f5* @global_v3f5, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [5 x <3 x float>], [5 x <3 x float>]* getelementptr inbounds (%struct.v3f5* @global_v3f5, i32 0, i32 0), align 1
|
||||
// CHECK: call [5 x <3 x float>] @func_v3f5([5 x <3 x float>] %[[TMP]])
|
||||
struct v3f5 global_v3f5;
|
||||
void call_v3f5(void) { global_v3f5 = func_v3f5(global_v3f5); }
|
||||
|
||||
// CHECK-LABEL: @call_v3f6
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [6 x <3 x float>]* getelementptr inbounds (%struct.v3f6* @global_v3f6, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [6 x <3 x float>], [6 x <3 x float>]* getelementptr inbounds (%struct.v3f6* @global_v3f6, i32 0, i32 0), align 1
|
||||
// CHECK: call [6 x <3 x float>] @func_v3f6([6 x <3 x float>] %[[TMP]])
|
||||
struct v3f6 global_v3f6;
|
||||
void call_v3f6(void) { global_v3f6 = func_v3f6(global_v3f6); }
|
||||
|
||||
// CHECK-LABEL: @call_v3f7
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [7 x <3 x float>]* getelementptr inbounds (%struct.v3f7* @global_v3f7, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [7 x <3 x float>], [7 x <3 x float>]* getelementptr inbounds (%struct.v3f7* @global_v3f7, i32 0, i32 0), align 1
|
||||
// CHECK: call [7 x <3 x float>] @func_v3f7([7 x <3 x float>] %[[TMP]])
|
||||
struct v3f7 global_v3f7;
|
||||
void call_v3f7(void) { global_v3f7 = func_v3f7(global_v3f7); }
|
||||
|
||||
// CHECK-LABEL: @call_v3f8
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [8 x <3 x float>]* getelementptr inbounds (%struct.v3f8* @global_v3f8, i32 0, i32 0), align 1
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [8 x <3 x float>], [8 x <3 x float>]* getelementptr inbounds (%struct.v3f8* @global_v3f8, i32 0, i32 0), align 1
|
||||
// CHECK: call [8 x <3 x float>] @func_v3f8([8 x <3 x float>] %[[TMP]])
|
||||
struct v3f8 global_v3f8;
|
||||
void call_v3f8(void) { global_v3f8 = func_v3f8(global_v3f8); }
|
||||
|
@ -342,13 +342,13 @@ struct v3f9 global_v3f9;
|
|||
void call_v3f9(void) { global_v3f9 = func_v3f9(global_v3f9); }
|
||||
|
||||
// CHECK-LABEL: @call_v3fab
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [2 x <3 x float>]* bitcast (%struct.v3fab* @global_v3fab to [2 x <3 x float>]*)
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [2 x <3 x float>], [2 x <3 x float>]* bitcast (%struct.v3fab* @global_v3fab to [2 x <3 x float>]*)
|
||||
// CHECK: call [2 x <3 x float>] @func_v3fab([2 x <3 x float>] %[[TMP]])
|
||||
struct v3fab global_v3fab;
|
||||
void call_v3fab(void) { global_v3fab = func_v3fab(global_v3fab); }
|
||||
|
||||
// CHECK-LABEL: @call_v3fabc
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [3 x <3 x float>]* bitcast (%struct.v3fabc* @global_v3fabc to [3 x <3 x float>]*)
|
||||
// CHECK: %[[TMP:[^ ]+]] = load [3 x <3 x float>], [3 x <3 x float>]* bitcast (%struct.v3fabc* @global_v3fabc to [3 x <3 x float>]*)
|
||||
// CHECK: call [3 x <3 x float>] @func_v3fabc([3 x <3 x float>] %[[TMP]])
|
||||
struct v3fabc global_v3fabc;
|
||||
void call_v3fabc(void) { global_v3fabc = func_v3fabc(global_v3fabc); }
|
||||
|
|
|
@ -8,60 +8,60 @@ void testva (int n, ...)
|
|||
va_list ap;
|
||||
|
||||
_Complex int i = va_arg(ap, _Complex int);
|
||||
// CHECK: %[[VAR40:[A-Za-z0-9.]+]] = load i8** %[[VAR100:[A-Za-z0-9.]+]]
|
||||
// CHECK: %[[VAR40:[A-Za-z0-9.]+]] = load i8*, i8** %[[VAR100:[A-Za-z0-9.]+]]
|
||||
// CHECK-NEXT: %[[VAR41:[A-Za-z0-9.]+]] = getelementptr i8, i8* %[[VAR40]], i64 16
|
||||
// CHECK-NEXT: store i8* %[[VAR41]], i8** %[[VAR100]]
|
||||
// CHECK-NEXT: %[[VAR1:[A-Za-z0-9.]+]] = ptrtoint i8* %[[VAR40]] to i64
|
||||
// CHECK-NEXT: %[[VAR3:[A-Za-z0-9.]+]] = add i64 %[[VAR1]], 8
|
||||
// CHECK-NEXT: %[[VAR4:[A-Za-z0-9.]+]] = inttoptr i64 %[[VAR1]] to i32*
|
||||
// CHECK-NEXT: %[[VAR5:[A-Za-z0-9.]+]] = inttoptr i64 %[[VAR3]] to i32*
|
||||
// CHECK-NEXT: %[[VAR6:[A-Za-z0-9.]+]] = load i32* %[[VAR4]]
|
||||
// CHECK-NEXT: %[[VAR7:[A-Za-z0-9.]+]] = load i32* %[[VAR5]]
|
||||
// CHECK-NEXT: %[[VAR6:[A-Za-z0-9.]+]] = load i32, i32* %[[VAR4]]
|
||||
// CHECK-NEXT: %[[VAR7:[A-Za-z0-9.]+]] = load i32, i32* %[[VAR5]]
|
||||
// CHECK-NEXT: %[[VAR8:[A-Za-z0-9.]+]] = getelementptr inbounds { i32, i32 }, { i32, i32 }* %[[VAR0:[A-Za-z0-9.]+]], i32 0, i32 0
|
||||
// CHECK-NEXT: %[[VAR9:[A-Za-z0-9.]+]] = getelementptr inbounds { i32, i32 }, { i32, i32 }* %[[VAR0]], i32 0, i32 1
|
||||
// CHECK-NEXT: store i32 %[[VAR6]], i32* %[[VAR8]]
|
||||
// CHECK-NEXT: store i32 %[[VAR7]], i32* %[[VAR9]]
|
||||
|
||||
_Complex short s = va_arg(ap, _Complex short);
|
||||
// CHECK: %[[VAR50:[A-Za-z0-9.]+]] = load i8** %[[VAR100:[A-Za-z0-9.]+]]
|
||||
// CHECK: %[[VAR50:[A-Za-z0-9.]+]] = load i8*, i8** %[[VAR100:[A-Za-z0-9.]+]]
|
||||
// CHECK-NEXT: %[[VAR51:[A-Za-z0-9.]+]] = getelementptr i8, i8* %[[VAR50]], i64 16
|
||||
// CHECK-NEXT: store i8* %[[VAR51]], i8** %[[VAR100]]
|
||||
// CHECK: %[[VAR11:[A-Za-z0-9.]+]] = ptrtoint i8* %{{[A-Za-z0-9.]+}} to i64
|
||||
// CHECK-NEXT: %[[VAR13:[A-Za-z0-9.]+]] = add i64 %[[VAR11]], 8
|
||||
// CHECK-NEXT: %[[VAR14:[A-Za-z0-9.]+]] = inttoptr i64 %[[VAR11]] to i16*
|
||||
// CHECK-NEXT: %[[VAR15:[A-Za-z0-9.]+]] = inttoptr i64 %[[VAR13]] to i16*
|
||||
// CHECK-NEXT: %[[VAR16:[A-Za-z0-9.]+]] = load i16* %[[VAR14]]
|
||||
// CHECK-NEXT: %[[VAR17:[A-Za-z0-9.]+]] = load i16* %[[VAR15]]
|
||||
// CHECK-NEXT: %[[VAR16:[A-Za-z0-9.]+]] = load i16, i16* %[[VAR14]]
|
||||
// CHECK-NEXT: %[[VAR17:[A-Za-z0-9.]+]] = load i16, i16* %[[VAR15]]
|
||||
// CHECK-NEXT: %[[VAR18:[A-Za-z0-9.]+]] = getelementptr inbounds { i16, i16 }, { i16, i16 }* %[[VAR10:[A-Za-z0-9.]+]], i32 0, i32 0
|
||||
// CHECK-NEXT: %[[VAR19:[A-Za-z0-9.]+]] = getelementptr inbounds { i16, i16 }, { i16, i16 }* %[[VAR10]], i32 0, i32 1
|
||||
// CHECK-NEXT: store i16 %[[VAR16]], i16* %[[VAR18]]
|
||||
// CHECK-NEXT: store i16 %[[VAR17]], i16* %[[VAR19]]
|
||||
|
||||
_Complex char c = va_arg(ap, _Complex char);
|
||||
// CHECK: %[[VAR60:[A-Za-z0-9.]+]] = load i8** %[[VAR100:[A-Za-z0-9.]+]]
|
||||
// CHECK: %[[VAR60:[A-Za-z0-9.]+]] = load i8*, i8** %[[VAR100:[A-Za-z0-9.]+]]
|
||||
// CHECK-NEXT: %[[VAR61:[A-Za-z0-9.]+]] = getelementptr i8, i8* %[[VAR60]], i64 16
|
||||
// CHECK-NEXT: store i8* %[[VAR61]], i8** %[[VAR100]]
|
||||
// CHECK: %[[VAR21:[A-Za-z0-9.]+]] = ptrtoint i8* %{{[A-Za-z0-9.]+}} to i64
|
||||
// CHECK-NEXT: %[[VAR23:[A-Za-z0-9.]+]] = add i64 %[[VAR21]], 8
|
||||
// CHECK-NEXT: %[[VAR24:[A-Za-z0-9.]+]] = inttoptr i64 %[[VAR21]] to i8*
|
||||
// CHECK-NEXT: %[[VAR25:[A-Za-z0-9.]+]] = inttoptr i64 %[[VAR23]] to i8*
|
||||
// CHECK-NEXT: %[[VAR26:[A-Za-z0-9.]+]] = load i8* %[[VAR24]]
|
||||
// CHECK-NEXT: %[[VAR27:[A-Za-z0-9.]+]] = load i8* %[[VAR25]]
|
||||
// CHECK-NEXT: %[[VAR26:[A-Za-z0-9.]+]] = load i8, i8* %[[VAR24]]
|
||||
// CHECK-NEXT: %[[VAR27:[A-Za-z0-9.]+]] = load i8, i8* %[[VAR25]]
|
||||
// CHECK-NEXT: %[[VAR28:[A-Za-z0-9.]+]] = getelementptr inbounds { i8, i8 }, { i8, i8 }* %[[VAR20:[A-Za-z0-9.]+]], i32 0, i32 0
|
||||
// CHECK-NEXT: %[[VAR29:[A-Za-z0-9.]+]] = getelementptr inbounds { i8, i8 }, { i8, i8 }* %[[VAR20]], i32 0, i32 1
|
||||
// CHECK-NEXT: store i8 %[[VAR26]], i8* %[[VAR28]]
|
||||
// CHECK-NEXT: store i8 %[[VAR27]], i8* %[[VAR29]]
|
||||
|
||||
_Complex float f = va_arg(ap, _Complex float);
|
||||
// CHECK: %[[VAR70:[A-Za-z0-9.]+]] = load i8** %[[VAR100:[A-Za-z0-9.]+]]
|
||||
// CHECK: %[[VAR70:[A-Za-z0-9.]+]] = load i8*, i8** %[[VAR100:[A-Za-z0-9.]+]]
|
||||
// CHECK-NEXT: %[[VAR71:[A-Za-z0-9.]+]] = getelementptr i8, i8* %[[VAR70]], i64 16
|
||||
// CHECK-NEXT: store i8* %[[VAR71]], i8** %[[VAR100]]
|
||||
// CHECK: %[[VAR31:[A-Za-z0-9.]+]] = ptrtoint i8* %{{[A-Za-z0-9.]+}} to i64
|
||||
// CHECK-NEXT: %[[VAR33:[A-Za-z0-9.]+]] = add i64 %[[VAR31]], 8
|
||||
// CHECK-NEXT: %[[VAR34:[A-Za-z0-9.]+]] = inttoptr i64 %[[VAR31]] to float*
|
||||
// CHECK-NEXT: %[[VAR35:[A-Za-z0-9.]+]] = inttoptr i64 %[[VAR33]] to float*
|
||||
// CHECK-NEXT: %[[VAR36:[A-Za-z0-9.]+]] = load float* %[[VAR34]]
|
||||
// CHECK-NEXT: %[[VAR37:[A-Za-z0-9.]+]] = load float* %[[VAR35]]
|
||||
// CHECK-NEXT: %[[VAR36:[A-Za-z0-9.]+]] = load float, float* %[[VAR34]]
|
||||
// CHECK-NEXT: %[[VAR37:[A-Za-z0-9.]+]] = load float, float* %[[VAR35]]
|
||||
// CHECK-NEXT: %[[VAR38:[A-Za-z0-9.]+]] = getelementptr inbounds { float, float }, { float, float }* %[[VAR30:[A-Za-z0-9.]+]], i32 0, i32 0
|
||||
// CHECK-NEXT: %[[VAR39:[A-Za-z0-9.]+]] = getelementptr inbounds { float, float }, { float, float }* %[[VAR30]], i32 0, i32 1
|
||||
// CHECK-NEXT: store float %[[VAR36]], float* %[[VAR38]]
|
||||
|
|
|
@ -6,6 +6,6 @@ enum e1 g1(enum e1 *x) {
|
|||
}
|
||||
|
||||
// CHECK-LABEL: define i32 @g1
|
||||
// CHECK: load i32* %x, align 4
|
||||
// CHECK: load i32, i32* %x, align 4
|
||||
// CHECK-NOT: range
|
||||
// CHECK: ret
|
||||
|
|
|
@ -12,4 +12,4 @@ int fish() { return fake() + __PRAGMA_REDEFINE_EXTNAME + name; }
|
|||
// Check that the call to fake() is emitted as a call to real()
|
||||
// CHECK: call i32 @real()
|
||||
// Check that this also works with variables names
|
||||
// CHECK: load i32* @alias
|
||||
// CHECK: load i32, i32* @alias
|
||||
|
|
|
@ -131,28 +131,28 @@ int f_variable(char *f, ...) {
|
|||
va_start(ap, f);
|
||||
while ((c = *f++)) switch (c) {
|
||||
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8** %ap
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8*, i8** %ap
|
||||
// CHECK-DAG: %[[NXT:[^ ]+]] = getelementptr i8, i8* %[[CUR]], i32 8
|
||||
// CHECK-DAG: store i8* %[[NXT]], i8** %ap
|
||||
// CHECK-DAG: %[[EXT:[^ ]+]] = getelementptr i8, i8* %[[CUR]], i32 4
|
||||
// CHECK-DAG: %[[ADR:[^ ]+]] = bitcast i8* %[[EXT]] to i32*
|
||||
// CHECK-DAG: load i32* %[[ADR]]
|
||||
// CHECK-DAG: load i32, i32* %[[ADR]]
|
||||
// CHECK: br
|
||||
case 'i':
|
||||
s += va_arg(ap, int);
|
||||
break;
|
||||
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8** %ap
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8*, i8** %ap
|
||||
// CHECK-DAG: %[[NXT:[^ ]+]] = getelementptr i8, i8* %[[CUR]], i32 8
|
||||
// CHECK-DAG: store i8* %[[NXT]], i8** %ap
|
||||
// CHECK-DAG: %[[ADR:[^ ]+]] = bitcast i8* %[[CUR]] to i64*
|
||||
// CHECK-DAG: load i64* %[[ADR]]
|
||||
// CHECK-DAG: load i64, i64* %[[ADR]]
|
||||
// CHECK: br
|
||||
case 'l':
|
||||
s += va_arg(ap, long);
|
||||
break;
|
||||
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8** %ap
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8*, i8** %ap
|
||||
// CHECK-DAG: %[[NXT:[^ ]+]] = getelementptr i8, i8* %[[CUR]], i32 8
|
||||
// CHECK-DAG: store i8* %[[NXT]], i8** %ap
|
||||
// CHECK-DAG: %[[ADR:[^ ]+]] = bitcast i8* %[[CUR]] to %struct.tiny*
|
||||
|
@ -161,7 +161,7 @@ int f_variable(char *f, ...) {
|
|||
s += va_arg(ap, struct tiny).a;
|
||||
break;
|
||||
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8** %ap
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8*, i8** %ap
|
||||
// CHECK-DAG: %[[NXT:[^ ]+]] = getelementptr i8, i8* %[[CUR]], i32 16
|
||||
// CHECK-DAG: store i8* %[[NXT]], i8** %ap
|
||||
// CHECK-DAG: %[[ADR:[^ ]+]] = bitcast i8* %[[CUR]] to %struct.small*
|
||||
|
@ -170,11 +170,11 @@ int f_variable(char *f, ...) {
|
|||
s += *va_arg(ap, struct small).a;
|
||||
break;
|
||||
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8** %ap
|
||||
// CHECK: %[[CUR:[^ ]+]] = load i8*, i8** %ap
|
||||
// CHECK-DAG: %[[NXT:[^ ]+]] = getelementptr i8, i8* %[[CUR]], i32 8
|
||||
// CHECK-DAG: store i8* %[[NXT]], i8** %ap
|
||||
// CHECK-DAG: %[[IND:[^ ]+]] = bitcast i8* %[[CUR]] to %struct.medium**
|
||||
// CHECK-DAG: %[[ADR:[^ ]+]] = load %struct.medium** %[[IND]]
|
||||
// CHECK-DAG: %[[ADR:[^ ]+]] = load %struct.medium*, %struct.medium** %[[IND]]
|
||||
// CHECK: br
|
||||
case 'm':
|
||||
s += *va_arg(ap, struct medium).a;
|
||||
|
|
|
@ -36,7 +36,7 @@ __m128 test_sqrt_ss(__m128 x) {
|
|||
|
||||
__m128 test_loadl_pi(__m128 x, void* y) {
|
||||
// CHECK: define {{.*}} @test_loadl_pi
|
||||
// CHECK: load <2 x float>* {{.*}}, align 1{{$}}
|
||||
// CHECK: load <2 x float>, <2 x float>* {{.*}}, align 1{{$}}
|
||||
// CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1
|
||||
// CHECK: shufflevector {{.*}} <4 x i32> <i32 4, i32 5, i32 2, i32 3>
|
||||
return _mm_loadl_pi(x,y);
|
||||
|
@ -44,7 +44,7 @@ __m128 test_loadl_pi(__m128 x, void* y) {
|
|||
|
||||
__m128 test_loadh_pi(__m128 x, void* y) {
|
||||
// CHECK: define {{.*}} @test_loadh_pi
|
||||
// CHECK: load <2 x float>* {{.*}}, align 1{{$}}
|
||||
// CHECK: load <2 x float>, <2 x float>* {{.*}}, align 1{{$}}
|
||||
// CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1
|
||||
// CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1, i32 4, i32 5>
|
||||
return _mm_loadh_pi(x,y);
|
||||
|
@ -52,13 +52,13 @@ __m128 test_loadh_pi(__m128 x, void* y) {
|
|||
|
||||
__m128 test_load_ss(void* y) {
|
||||
// CHECK: define {{.*}} @test_load_ss
|
||||
// CHECK: load float* {{.*}}, align 1{{$}}
|
||||
// CHECK: load float, float* {{.*}}, align 1{{$}}
|
||||
return _mm_load_ss(y);
|
||||
}
|
||||
|
||||
__m128 test_load1_ps(void* y) {
|
||||
// CHECK: define {{.*}} @test_load1_ps
|
||||
// CHECK: load float* {{.*}}, align 1{{$}}
|
||||
// CHECK: load float, float* {{.*}}, align 1{{$}}
|
||||
return _mm_load1_ps(y);
|
||||
}
|
||||
|
||||
|
@ -70,31 +70,31 @@ void test_store_ss(__m128 x, void* y) {
|
|||
|
||||
__m128d test_load1_pd(__m128 x, void* y) {
|
||||
// CHECK: define {{.*}} @test_load1_pd
|
||||
// CHECK: load double* {{.*}}, align 1{{$}}
|
||||
// CHECK: load double, double* {{.*}}, align 1{{$}}
|
||||
return _mm_load1_pd(y);
|
||||
}
|
||||
|
||||
__m128d test_loadr_pd(__m128 x, void* y) {
|
||||
// CHECK: define {{.*}} @test_loadr_pd
|
||||
// CHECK: load <2 x double>* {{.*}}, align 16{{$}}
|
||||
// CHECK: load <2 x double>, <2 x double>* {{.*}}, align 16{{$}}
|
||||
return _mm_loadr_pd(y);
|
||||
}
|
||||
|
||||
__m128d test_load_sd(void* y) {
|
||||
// CHECK: define {{.*}} @test_load_sd
|
||||
// CHECK: load double* {{.*}}, align 1{{$}}
|
||||
// CHECK: load double, double* {{.*}}, align 1{{$}}
|
||||
return _mm_load_sd(y);
|
||||
}
|
||||
|
||||
__m128d test_loadh_pd(__m128d x, void* y) {
|
||||
// CHECK: define {{.*}} @test_loadh_pd
|
||||
// CHECK: load double* {{.*}}, align 1{{$}}
|
||||
// CHECK: load double, double* {{.*}}, align 1{{$}}
|
||||
return _mm_loadh_pd(x, y);
|
||||
}
|
||||
|
||||
__m128d test_loadl_pd(__m128d x, void* y) {
|
||||
// CHECK: define {{.*}} @test_loadl_pd
|
||||
// CHECK: load double* {{.*}}, align 1{{$}}
|
||||
// CHECK: load double, double* {{.*}}, align 1{{$}}
|
||||
return _mm_loadl_pd(x, y);
|
||||
}
|
||||
|
||||
|
@ -131,7 +131,7 @@ void test_storel_pd(__m128d x, void* y) {
|
|||
|
||||
__m128i test_loadl_epi64(void* y) {
|
||||
// CHECK: define {{.*}} @test_loadl_epi64
|
||||
// CHECK: load i64* {{.*}}, align 1{{$}}
|
||||
// CHECK: load i64, i64* {{.*}}, align 1{{$}}
|
||||
return _mm_loadl_epi64(y);
|
||||
}
|
||||
|
||||
|
|
|
@ -124,8 +124,8 @@ long double test_f128(long double f, long double g) {
|
|||
asm("axbr %0, %2" : "=f" (f) : "0" (f), "f" (g));
|
||||
return f;
|
||||
// CHECK: define void @test_f128(fp128* noalias nocapture sret [[DEST:%.*]], fp128* nocapture readonly, fp128* nocapture readonly)
|
||||
// CHECK: %f = load fp128* %0
|
||||
// CHECK: %g = load fp128* %1
|
||||
// CHECK: %f = load fp128, fp128* %0
|
||||
// CHECK: %g = load fp128, fp128* %1
|
||||
// CHECK: [[RESULT:%.*]] = tail call fp128 asm "axbr $0, $2", "=f,0,f"(fp128 %f, fp128 %g)
|
||||
// CHECK: store fp128 [[RESULT]], fp128* [[DEST]]
|
||||
}
|
||||
|
|
|
@ -203,9 +203,9 @@ struct five {
|
|||
char g13(struct five *a, struct five *b) {
|
||||
return a->b;
|
||||
// CHECK: define signext i8 @{{.*}}(
|
||||
// CHECK: load i8* %{{.*}}, align 1, !tbaa [[TAG_char:!.*]]
|
||||
// CHECK: load i8, i8* %{{.*}}, align 1, !tbaa [[TAG_char:!.*]]
|
||||
// PATH: define signext i8 @{{.*}}(
|
||||
// PATH: load i8* %{{.*}}, align 1, !tbaa [[TAG_five_b:!.*]]
|
||||
// PATH: load i8, i8* %{{.*}}, align 1, !tbaa [[TAG_five_b:!.*]]
|
||||
}
|
||||
|
||||
struct six {
|
||||
|
@ -216,9 +216,9 @@ struct six {
|
|||
};
|
||||
char g14(struct six *a, struct six *b) {
|
||||
// CHECK: define signext i8 @{{.*}}(
|
||||
// CHECK: load i8* %{{.*}}, align 1, !tbaa [[TAG_char]]
|
||||
// CHECK: load i8, i8* %{{.*}}, align 1, !tbaa [[TAG_char]]
|
||||
// PATH: define signext i8 @{{.*}}(
|
||||
// PATH: load i8* %{{.*}}, align 1, !tbaa [[TAG_six_b:!.*]]
|
||||
// PATH: load i8, i8* %{{.*}}, align 1, !tbaa [[TAG_six_b:!.*]]
|
||||
return a->b;
|
||||
}
|
||||
|
||||
|
|
|
@ -6,14 +6,14 @@ int i, j, k;
|
|||
// CHECK-LABEL: define void @test0()
|
||||
void test0() {
|
||||
// -ftrapv doesn't affect unsigned arithmetic.
|
||||
// CHECK: [[T1:%.*]] = load i32* @uj
|
||||
// CHECK-NEXT: [[T2:%.*]] = load i32* @uk
|
||||
// CHECK: [[T1:%.*]] = load i32, i32* @uj
|
||||
// CHECK-NEXT: [[T2:%.*]] = load i32, i32* @uk
|
||||
// CHECK-NEXT: [[T3:%.*]] = add i32 [[T1]], [[T2]]
|
||||
// CHECK-NEXT: store i32 [[T3]], i32* @ui
|
||||
ui = uj + uk;
|
||||
|
||||
// CHECK: [[T1:%.*]] = load i32* @j
|
||||
// CHECK-NEXT: [[T2:%.*]] = load i32* @k
|
||||
// CHECK: [[T1:%.*]] = load i32, i32* @j
|
||||
// CHECK-NEXT: [[T2:%.*]] = load i32, i32* @k
|
||||
// CHECK-NEXT: [[T3:%.*]] = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 [[T1]], i32 [[T2]])
|
||||
// CHECK-NEXT: [[T4:%.*]] = extractvalue { i32, i1 } [[T3]], 0
|
||||
// CHECK-NEXT: [[T5:%.*]] = extractvalue { i32, i1 } [[T3]], 1
|
||||
|
@ -28,7 +28,7 @@ void test1() {
|
|||
extern void opaque(int);
|
||||
opaque(i++);
|
||||
|
||||
// CHECK: [[T1:%.*]] = load i32* @i
|
||||
// CHECK: [[T1:%.*]] = load i32, i32* @i
|
||||
// CHECK-NEXT: [[T2:%.*]] = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 [[T1]], i32 1)
|
||||
// CHECK-NEXT: [[T3:%.*]] = extractvalue { i32, i1 } [[T2]], 0
|
||||
// CHECK-NEXT: [[T4:%.*]] = extractvalue { i32, i1 } [[T2]], 1
|
||||
|
@ -42,7 +42,7 @@ void test2() {
|
|||
extern void opaque(int);
|
||||
opaque(++i);
|
||||
|
||||
// CHECK: [[T1:%.*]] = load i32* @i
|
||||
// CHECK: [[T1:%.*]] = load i32, i32* @i
|
||||
// CHECK-NEXT: [[T2:%.*]] = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 [[T1]], i32 1)
|
||||
// CHECK-NEXT: [[T3:%.*]] = extractvalue { i32, i1 } [[T2]], 0
|
||||
// CHECK-NEXT: [[T4:%.*]] = extractvalue { i32, i1 } [[T2]], 1
|
||||
|
|
|
@ -11,8 +11,8 @@ extern void opaqueint(unsigned int);
|
|||
// CHECK-LABEL: define void @testlongadd()
|
||||
void testlongadd() {
|
||||
|
||||
// CHECK: [[T1:%.*]] = load i64* @lj
|
||||
// CHECK-NEXT: [[T2:%.*]] = load i64* @lk
|
||||
// CHECK: [[T1:%.*]] = load i64, i64* @lj
|
||||
// CHECK-NEXT: [[T2:%.*]] = load i64, i64* @lk
|
||||
// CHECK-NEXT: [[T3:%.*]] = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 [[T1]], i64 [[T2]])
|
||||
// CHECK-NEXT: [[T4:%.*]] = extractvalue { i64, i1 } [[T3]], 0
|
||||
// CHECK-NEXT: [[T5:%.*]] = extractvalue { i64, i1 } [[T3]], 1
|
||||
|
@ -23,8 +23,8 @@ void testlongadd() {
|
|||
// CHECK-LABEL: define void @testlongsub()
|
||||
void testlongsub() {
|
||||
|
||||
// CHECK: [[T1:%.*]] = load i64* @lj
|
||||
// CHECK-NEXT: [[T2:%.*]] = load i64* @lk
|
||||
// CHECK: [[T1:%.*]] = load i64, i64* @lj
|
||||
// CHECK-NEXT: [[T2:%.*]] = load i64, i64* @lk
|
||||
// CHECK-NEXT: [[T3:%.*]] = call { i64, i1 } @llvm.usub.with.overflow.i64(i64 [[T1]], i64 [[T2]])
|
||||
// CHECK-NEXT: [[T4:%.*]] = extractvalue { i64, i1 } [[T3]], 0
|
||||
// CHECK-NEXT: [[T5:%.*]] = extractvalue { i64, i1 } [[T3]], 1
|
||||
|
@ -35,8 +35,8 @@ void testlongsub() {
|
|||
// CHECK-LABEL: define void @testlongmul()
|
||||
void testlongmul() {
|
||||
|
||||
// CHECK: [[T1:%.*]] = load i64* @lj
|
||||
// CHECK-NEXT: [[T2:%.*]] = load i64* @lk
|
||||
// CHECK: [[T1:%.*]] = load i64, i64* @lj
|
||||
// CHECK-NEXT: [[T2:%.*]] = load i64, i64* @lk
|
||||
// CHECK-NEXT: [[T3:%.*]] = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 [[T1]], i64 [[T2]])
|
||||
// CHECK-NEXT: [[T4:%.*]] = extractvalue { i64, i1 } [[T3]], 0
|
||||
// CHECK-NEXT: [[T5:%.*]] = extractvalue { i64, i1 } [[T3]], 1
|
||||
|
@ -48,7 +48,7 @@ void testlongmul() {
|
|||
void testlongpostinc() {
|
||||
opaquelong(li++);
|
||||
|
||||
// CHECK: [[T1:%.*]] = load i64* @li
|
||||
// CHECK: [[T1:%.*]] = load i64, i64* @li
|
||||
// CHECK-NEXT: [[T2:%.*]] = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 [[T1]], i64 1)
|
||||
// CHECK-NEXT: [[T3:%.*]] = extractvalue { i64, i1 } [[T2]], 0
|
||||
// CHECK-NEXT: [[T4:%.*]] = extractvalue { i64, i1 } [[T2]], 1
|
||||
|
@ -59,7 +59,7 @@ void testlongpostinc() {
|
|||
void testlongpreinc() {
|
||||
opaquelong(++li);
|
||||
|
||||
// CHECK: [[T1:%.*]] = load i64* @li
|
||||
// CHECK: [[T1:%.*]] = load i64, i64* @li
|
||||
// CHECK-NEXT: [[T2:%.*]] = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 [[T1]], i64 1)
|
||||
// CHECK-NEXT: [[T3:%.*]] = extractvalue { i64, i1 } [[T2]], 0
|
||||
// CHECK-NEXT: [[T4:%.*]] = extractvalue { i64, i1 } [[T2]], 1
|
||||
|
@ -69,8 +69,8 @@ void testlongpreinc() {
|
|||
// CHECK-LABEL: define void @testintadd()
|
||||
void testintadd() {
|
||||
|
||||
// CHECK: [[T1:%.*]] = load i32* @ij
|
||||
// CHECK-NEXT: [[T2:%.*]] = load i32* @ik
|
||||
// CHECK: [[T1:%.*]] = load i32, i32* @ij
|
||||
// CHECK-NEXT: [[T2:%.*]] = load i32, i32* @ik
|
||||
// CHECK-NEXT: [[T3:%.*]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[T1]], i32 [[T2]])
|
||||
// CHECK-NEXT: [[T4:%.*]] = extractvalue { i32, i1 } [[T3]], 0
|
||||
// CHECK-NEXT: [[T5:%.*]] = extractvalue { i32, i1 } [[T3]], 1
|
||||
|
@ -81,8 +81,8 @@ void testintadd() {
|
|||
// CHECK-LABEL: define void @testintsub()
|
||||
void testintsub() {
|
||||
|
||||
// CHECK: [[T1:%.*]] = load i32* @ij
|
||||
// CHECK-NEXT: [[T2:%.*]] = load i32* @ik
|
||||
// CHECK: [[T1:%.*]] = load i32, i32* @ij
|
||||
// CHECK-NEXT: [[T2:%.*]] = load i32, i32* @ik
|
||||
// CHECK-NEXT: [[T3:%.*]] = call { i32, i1 } @llvm.usub.with.overflow.i32(i32 [[T1]], i32 [[T2]])
|
||||
// CHECK-NEXT: [[T4:%.*]] = extractvalue { i32, i1 } [[T3]], 0
|
||||
// CHECK-NEXT: [[T5:%.*]] = extractvalue { i32, i1 } [[T3]], 1
|
||||
|
@ -93,8 +93,8 @@ void testintsub() {
|
|||
// CHECK-LABEL: define void @testintmul()
|
||||
void testintmul() {
|
||||
|
||||
// CHECK: [[T1:%.*]] = load i32* @ij
|
||||
// CHECK-NEXT: [[T2:%.*]] = load i32* @ik
|
||||
// CHECK: [[T1:%.*]] = load i32, i32* @ij
|
||||
// CHECK-NEXT: [[T2:%.*]] = load i32, i32* @ik
|
||||
// CHECK-NEXT: [[T3:%.*]] = call { i32, i1 } @llvm.umul.with.overflow.i32(i32 [[T1]], i32 [[T2]])
|
||||
// CHECK-NEXT: [[T4:%.*]] = extractvalue { i32, i1 } [[T3]], 0
|
||||
// CHECK-NEXT: [[T5:%.*]] = extractvalue { i32, i1 } [[T3]], 1
|
||||
|
@ -106,7 +106,7 @@ void testintmul() {
|
|||
void testintpostinc() {
|
||||
opaqueint(ii++);
|
||||
|
||||
// CHECK: [[T1:%.*]] = load i32* @ii
|
||||
// CHECK: [[T1:%.*]] = load i32, i32* @ii
|
||||
// CHECK-NEXT: [[T2:%.*]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[T1]], i32 1)
|
||||
// CHECK-NEXT: [[T3:%.*]] = extractvalue { i32, i1 } [[T2]], 0
|
||||
// CHECK-NEXT: [[T4:%.*]] = extractvalue { i32, i1 } [[T2]], 1
|
||||
|
@ -117,7 +117,7 @@ void testintpostinc() {
|
|||
void testintpreinc() {
|
||||
opaqueint(++ii);
|
||||
|
||||
// CHECK: [[T1:%.*]] = load i32* @ii
|
||||
// CHECK: [[T1:%.*]] = load i32, i32* @ii
|
||||
// CHECK-NEXT: [[T2:%.*]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[T1]], i32 1)
|
||||
// CHECK-NEXT: [[T3:%.*]] = extractvalue { i32, i1 } [[T2]], 0
|
||||
// CHECK-NEXT: [[T4:%.*]] = extractvalue { i32, i1 } [[T2]], 1
|
||||
|
|
|
@ -15,16 +15,16 @@ extern void opaquechar(unsigned char);
|
|||
// CHECKS-LABEL: define void @testshortadd()
|
||||
// CHECKU-LABEL: define void @testshortadd()
|
||||
void testshortadd() {
|
||||
// CHECKS: load i16* @sj
|
||||
// CHECKS: load i16* @sk
|
||||
// CHECKS: load i16, i16* @sj
|
||||
// CHECKS: load i16, i16* @sk
|
||||
// CHECKS: [[T1:%.*]] = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 [[T2:%.*]], i32 [[T3:%.*]])
|
||||
// CHECKS-NEXT: [[T4:%.*]] = extractvalue { i32, i1 } [[T1]], 0
|
||||
// CHECKS-NEXT: [[T5:%.*]] = extractvalue { i32, i1 } [[T1]], 1
|
||||
// CHECKS: call void @__ubsan_handle_add_overflow
|
||||
//
|
||||
// CHECKU: [[T1:%.*]] = load i16* @sj
|
||||
// CHECKU: [[T1:%.*]] = load i16, i16* @sj
|
||||
// CHECKU: [[T2:%.*]] = zext i16 [[T1]]
|
||||
// CHECKU: [[T3:%.*]] = load i16* @sk
|
||||
// CHECKU: [[T3:%.*]] = load i16, i16* @sk
|
||||
// CHECKU: [[T4:%.*]] = zext i16 [[T3]]
|
||||
// CHECKU-NOT: llvm.sadd
|
||||
// CHECKU-NOT: llvm.uadd
|
||||
|
@ -37,16 +37,16 @@ void testshortadd() {
|
|||
// CHECKU-LABEL: define void @testshortsub()
|
||||
void testshortsub() {
|
||||
|
||||
// CHECKS: load i16* @sj
|
||||
// CHECKS: load i16* @sk
|
||||
// CHECKS: load i16, i16* @sj
|
||||
// CHECKS: load i16, i16* @sk
|
||||
// CHECKS: [[T1:%.*]] = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 [[T2:%.*]], i32 [[T3:%.*]])
|
||||
// CHECKS-NEXT: [[T4:%.*]] = extractvalue { i32, i1 } [[T1]], 0
|
||||
// CHECKS-NEXT: [[T5:%.*]] = extractvalue { i32, i1 } [[T1]], 1
|
||||
// CHECKS: call void @__ubsan_handle_sub_overflow
|
||||
//
|
||||
// CHECKU: [[T1:%.*]] = load i16* @sj
|
||||
// CHECKU: [[T1:%.*]] = load i16, i16* @sj
|
||||
// CHECKU: [[T2:%.*]] = zext i16 [[T1]]
|
||||
// CHECKU: [[T3:%.*]] = load i16* @sk
|
||||
// CHECKU: [[T3:%.*]] = load i16, i16* @sk
|
||||
// CHECKU: [[T4:%.*]] = zext i16 [[T3]]
|
||||
// CHECKU-NOT: llvm.ssub
|
||||
// CHECKU-NOT: llvm.usub
|
||||
|
@ -59,16 +59,16 @@ void testshortsub() {
|
|||
// CHECKU-LABEL: define void @testshortmul()
|
||||
void testshortmul() {
|
||||
|
||||
// CHECKS: load i16* @sj
|
||||
// CHECKS: load i16* @sk
|
||||
// CHECKS: load i16, i16* @sj
|
||||
// CHECKS: load i16, i16* @sk
|
||||
// CHECKS: [[T1:%.*]] = call { i32, i1 } @llvm.smul.with.overflow.i32(i32 [[T2:%.*]], i32 [[T3:%.*]])
|
||||
// CHECKS-NEXT: [[T4:%.*]] = extractvalue { i32, i1 } [[T1]], 0
|
||||
// CHECKS-NEXT: [[T5:%.*]] = extractvalue { i32, i1 } [[T1]], 1
|
||||
// CHECKS: call void @__ubsan_handle_mul_overflow
|
||||
//
|
||||
// CHECKU: [[T1:%.*]] = load i16* @sj
|
||||
// CHECKU: [[T1:%.*]] = load i16, i16* @sj
|
||||
// CHECKU: [[T2:%.*]] = zext i16 [[T1]]
|
||||
// CHECKU: [[T3:%.*]] = load i16* @sk
|
||||
// CHECKU: [[T3:%.*]] = load i16, i16* @sk
|
||||
// CHECKU: [[T4:%.*]] = zext i16 [[T3]]
|
||||
// CHECKU-NOT: llvm.smul
|
||||
// CHECKU-NOT: llvm.umul
|
||||
|
@ -80,16 +80,16 @@ void testshortmul() {
|
|||
// CHECKU-LABEL: define void @testcharadd()
|
||||
void testcharadd() {
|
||||
|
||||
// CHECKS: load i8* @cj
|
||||
// CHECKS: load i8* @ck
|
||||
// CHECKS: load i8, i8* @cj
|
||||
// CHECKS: load i8, i8* @ck
|
||||
// CHECKS: [[T1:%.*]] = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 [[T2:%.*]], i32 [[T3:%.*]])
|
||||
// CHECKS-NEXT: [[T4:%.*]] = extractvalue { i32, i1 } [[T1]], 0
|
||||
// CHECKS-NEXT: [[T5:%.*]] = extractvalue { i32, i1 } [[T1]], 1
|
||||
// CHECKS: call void @__ubsan_handle_add_overflow
|
||||
//
|
||||
// CHECKU: [[T1:%.*]] = load i8* @cj
|
||||
// CHECKU: [[T1:%.*]] = load i8, i8* @cj
|
||||
// CHECKU: [[T2:%.*]] = zext i8 [[T1]]
|
||||
// CHECKU: [[T3:%.*]] = load i8* @ck
|
||||
// CHECKU: [[T3:%.*]] = load i8, i8* @ck
|
||||
// CHECKU: [[T4:%.*]] = zext i8 [[T3]]
|
||||
// CHECKU-NOT: llvm.sadd
|
||||
// CHECKU-NOT: llvm.uadd
|
||||
|
@ -102,16 +102,16 @@ void testcharadd() {
|
|||
// CHECKU-LABEL: define void @testcharsub()
|
||||
void testcharsub() {
|
||||
|
||||
// CHECKS: load i8* @cj
|
||||
// CHECKS: load i8* @ck
|
||||
// CHECKS: load i8, i8* @cj
|
||||
// CHECKS: load i8, i8* @ck
|
||||
// CHECKS: [[T1:%.*]] = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 [[T2:%.*]], i32 [[T3:%.*]])
|
||||
// CHECKS-NEXT: [[T4:%.*]] = extractvalue { i32, i1 } [[T1]], 0
|
||||
// CHECKS-NEXT: [[T5:%.*]] = extractvalue { i32, i1 } [[T1]], 1
|
||||
// CHECKS: call void @__ubsan_handle_sub_overflow
|
||||
//
|
||||
// CHECKU: [[T1:%.*]] = load i8* @cj
|
||||
// CHECKU: [[T1:%.*]] = load i8, i8* @cj
|
||||
// CHECKU: [[T2:%.*]] = zext i8 [[T1]]
|
||||
// CHECKU: [[T3:%.*]] = load i8* @ck
|
||||
// CHECKU: [[T3:%.*]] = load i8, i8* @ck
|
||||
// CHECKU: [[T4:%.*]] = zext i8 [[T3]]
|
||||
// CHECKU-NOT: llvm.ssub
|
||||
// CHECKU-NOT: llvm.usub
|
||||
|
@ -124,16 +124,16 @@ void testcharsub() {
|
|||
// CHECKU-LABEL: define void @testcharmul()
|
||||
void testcharmul() {
|
||||
|
||||
// CHECKS: load i8* @cj
|
||||
// CHECKS: load i8* @ck
|
||||
// CHECKS: load i8, i8* @cj
|
||||
// CHECKS: load i8, i8* @ck
|
||||
// CHECKS: [[T1:%.*]] = call { i32, i1 } @llvm.smul.with.overflow.i32(i32 [[T2:%.*]], i32 [[T3:%.*]])
|
||||
// CHECKS-NEXT: [[T4:%.*]] = extractvalue { i32, i1 } [[T1]], 0
|
||||
// CHECKS-NEXT: [[T5:%.*]] = extractvalue { i32, i1 } [[T1]], 1
|
||||
// CHECKS: call void @__ubsan_handle_mul_overflow
|
||||
//
|
||||
// CHECKU: [[T1:%.*]] = load i8* @cj
|
||||
// CHECKU: [[T1:%.*]] = load i8, i8* @cj
|
||||
// CHECKU: [[T2:%.*]] = zext i8 [[T1]]
|
||||
// CHECKU: [[T3:%.*]] = load i8* @ck
|
||||
// CHECKU: [[T3:%.*]] = load i8, i8* @ck
|
||||
// CHECKU: [[T4:%.*]] = zext i8 [[T3]]
|
||||
// CHECKU-NOT: llvm.smul
|
||||
// CHECKU-NOT: llvm.umul
|
||||
|
|
|
@ -9,7 +9,7 @@ struct Bar {
|
|||
struct Bar foo(__builtin_va_list ap) {
|
||||
return __builtin_va_arg(ap, struct Bar);
|
||||
// CHECK: [[FPOP:%.*]] = getelementptr inbounds %struct.__va_list_tag, %struct.__va_list_tag* {{.*}}, i32 0, i32 1
|
||||
// CHECK: [[FPO:%.*]] = load i32* [[FPOP]]
|
||||
// CHECK: [[FPO:%.*]] = load i32, i32* [[FPOP]]
|
||||
// CHECK: [[FPVEC:%.*]] = getelementptr i8, i8* {{.*}}, i32 [[FPO]]
|
||||
// CHECK: bitcast i8* [[FPVEC]] to <2 x float>*
|
||||
}
|
||||
|
|
|
@ -79,7 +79,7 @@ int test2(int n)
|
|||
{
|
||||
GLOB = 0;
|
||||
char b[1][n+3]; /* Variable length array. */
|
||||
// CHECK: [[tmp_1:%.*]] = load i32* @GLOB, align 4
|
||||
// CHECK: [[tmp_1:%.*]] = load i32, i32* @GLOB, align 4
|
||||
// CHECK-NEXT: add nsw i32 [[tmp_1]], 1
|
||||
__typeof__(b[GLOB++]) c;
|
||||
return GLOB;
|
||||
|
@ -92,13 +92,13 @@ double test_PR8567(int n, double (*p)[n][5]) {
|
|||
// CHECK-NEXT: [[PV:%.*]] = alloca [5 x double]*, align 4
|
||||
// CHECK-NEXT: store
|
||||
// CHECK-NEXT: store
|
||||
// CHECK-NEXT: [[N:%.*]] = load i32* [[NV]], align 4
|
||||
// CHECK-NEXT: [[P:%.*]] = load [5 x double]** [[PV]], align 4
|
||||
// CHECK-NEXT: [[N:%.*]] = load i32, i32* [[NV]], align 4
|
||||
// CHECK-NEXT: [[P:%.*]] = load [5 x double]*, [5 x double]** [[PV]], align 4
|
||||
// CHECK-NEXT: [[T0:%.*]] = mul nsw i32 1, [[N]]
|
||||
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [5 x double], [5 x double]* [[P]], i32 [[T0]]
|
||||
// CHECK-NEXT: [[T2:%.*]] = getelementptr inbounds [5 x double], [5 x double]* [[T1]], i32 2
|
||||
// CHECK-NEXT: [[T3:%.*]] = getelementptr inbounds [5 x double], [5 x double]* [[T2]], i32 0, i32 3
|
||||
// CHECK-NEXT: [[T4:%.*]] = load double* [[T3]]
|
||||
// CHECK-NEXT: [[T4:%.*]] = load double, double* [[T3]]
|
||||
// CHECK-NEXT: ret double [[T4]]
|
||||
return p[1][2][3];
|
||||
}
|
||||
|
@ -112,17 +112,17 @@ int test4(unsigned n, char (*p)[n][n+1][6]) {
|
|||
// CHECK-NEXT: store [6 x i8]*
|
||||
|
||||
// VLA captures.
|
||||
// CHECK-NEXT: [[DIM0:%.*]] = load i32* [[N]], align 4
|
||||
// CHECK-NEXT: [[T0:%.*]] = load i32* [[N]], align 4
|
||||
// CHECK-NEXT: [[DIM0:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK-NEXT: [[T0:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK-NEXT: [[DIM1:%.*]] = add i32 [[T0]], 1
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [6 x i8]** [[P]], align 4
|
||||
// CHECK-NEXT: [[T1:%.*]] = load i32* [[N]], align 4
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [6 x i8]*, [6 x i8]** [[P]], align 4
|
||||
// CHECK-NEXT: [[T1:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK-NEXT: [[T2:%.*]] = udiv i32 [[T1]], 2
|
||||
// CHECK-NEXT: [[T3:%.*]] = mul nuw i32 [[DIM0]], [[DIM1]]
|
||||
// CHECK-NEXT: [[T4:%.*]] = mul nsw i32 [[T2]], [[T3]]
|
||||
// CHECK-NEXT: [[T5:%.*]] = getelementptr inbounds [6 x i8], [6 x i8]* [[T0]], i32 [[T4]]
|
||||
// CHECK-NEXT: [[T6:%.*]] = load i32* [[N]], align 4
|
||||
// CHECK-NEXT: [[T6:%.*]] = load i32, i32* [[N]], align 4
|
||||
// CHECK-NEXT: [[T7:%.*]] = udiv i32 [[T6]], 4
|
||||
// CHECK-NEXT: [[T8:%.*]] = sub i32 0, [[T7]]
|
||||
// CHECK-NEXT: [[T9:%.*]] = mul nuw i32 [[DIM0]], [[DIM1]]
|
||||
|
@ -131,8 +131,8 @@ int test4(unsigned n, char (*p)[n][n+1][6]) {
|
|||
// CHECK-NEXT: store [6 x i8]* [[T11]], [6 x i8]** [[P2]], align 4
|
||||
__typeof(p) p2 = (p + n/2) - n/4;
|
||||
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [6 x i8]** [[P2]], align 4
|
||||
// CHECK-NEXT: [[T1:%.*]] = load [6 x i8]** [[P]], align 4
|
||||
// CHECK-NEXT: [[T0:%.*]] = load [6 x i8]*, [6 x i8]** [[P2]], align 4
|
||||
// CHECK-NEXT: [[T1:%.*]] = load [6 x i8]*, [6 x i8]** [[P]], align 4
|
||||
// CHECK-NEXT: [[T2:%.*]] = ptrtoint [6 x i8]* [[T0]] to i32
|
||||
// CHECK-NEXT: [[T3:%.*]] = ptrtoint [6 x i8]* [[T1]] to i32
|
||||
// CHECK-NEXT: [[T4:%.*]] = sub i32 [[T2]], [[T3]]
|
||||
|
@ -154,14 +154,14 @@ void test5(void)
|
|||
// CHECK-NEXT: store i32 0, i32* [[I]], align 4
|
||||
|
||||
(typeof(++i, (int (*)[i])a)){&a} += 0;
|
||||
// CHECK-NEXT: [[Z:%.*]] = load i32* [[I]], align 4
|
||||
// CHECK-NEXT: [[Z:%.*]] = load i32, i32* [[I]], align 4
|
||||
// CHECK-NEXT: [[INC:%.*]] = add nsw i32 [[Z]], 1
|
||||
// CHECK-NEXT: store i32 [[INC]], i32* [[I]], align 4
|
||||
// CHECK-NEXT: [[O:%.*]] = load i32* [[I]], align 4
|
||||
// CHECK-NEXT: [[O:%.*]] = load i32, i32* [[I]], align 4
|
||||
// CHECK-NEXT: [[AR:%.*]] = getelementptr inbounds [5 x i32], [5 x i32]* [[A]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[T:%.*]] = bitcast [5 x i32]* [[A]] to i32*
|
||||
// CHECK-NEXT: store i32* [[T]], i32** [[CL]]
|
||||
// CHECK-NEXT: [[TH:%.*]] = load i32** [[CL]]
|
||||
// CHECK-NEXT: [[TH:%.*]] = load i32*, i32** [[CL]]
|
||||
// CHECK-NEXT: [[VLAIX:%.*]] = mul nsw i32 0, [[O]]
|
||||
// CHECK-NEXT: [[ADDPTR:%.*]] = getelementptr inbounds i32, i32* [[TH]], i32 [[VLAIX]]
|
||||
// CHECK-NEXT: store i32* [[ADDPTR]], i32** [[CL]]
|
||||
|
@ -178,12 +178,12 @@ void test6(void)
|
|||
// CHECK-NEXT: [[CL:%.*]] = alloca i32**, align 4
|
||||
// CHECK-NEXT: store i32 20, i32* [[N]], align 4
|
||||
// CHECK-NEXT: store i32 0, i32* [[I]], align 4
|
||||
// CHECK-NEXT: [[Z:%.*]] = load i32* [[I]], align 4
|
||||
// CHECK-NEXT: [[Z:%.*]] = load i32, i32* [[I]], align 4
|
||||
// CHECK-NEXT: [[O:%.*]] = bitcast i32*** [[A]] to i32**
|
||||
// CHECK-NEXT: store i32** [[O]], i32*** [[CL]]
|
||||
// CHECK-NEXT: [[T:%.*]] = load i32*** [[CL]]
|
||||
// CHECK-NEXT: [[T:%.*]] = load i32**, i32*** [[CL]]
|
||||
// CHECK-NEXT: [[IX:%.*]] = getelementptr inbounds i32*, i32** [[T]], i32 0
|
||||
// CHECK-NEXT: [[TH:%.*]] = load i32** [[IX]], align 4
|
||||
// CHECK-NEXT: [[TH:%.*]] = load i32*, i32** [[IX]], align 4
|
||||
// CHECK-NEXT: [[F:%.*]] = mul nsw i32 1, [[Z]]
|
||||
// CHECK-NEXT: [[IX1:%.*]] = getelementptr inbounds i32, i32* [[TH]], i32 [[F]]
|
||||
// CHECK-NEXT: [[IX2:%.*]] = getelementptr inbounds i32, i32* [[IX1]], i32 5
|
||||
|
|
|
@ -24,30 +24,30 @@ int printf(const char *, ...);
|
|||
|
||||
// CHECK-LABEL: define void @test()
|
||||
void test() {
|
||||
// CHECK: load volatile [[INT]]* @i
|
||||
// CHECK: load volatile [[INT]], [[INT]]* @i
|
||||
i;
|
||||
// CHECK-NEXT: load volatile [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: load volatile [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: load volatile [[INT]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: load volatile [[INT]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: sitofp [[INT]]
|
||||
(float)(ci);
|
||||
// CHECK-NEXT: load volatile [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: load volatile [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: load volatile [[INT]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: load volatile [[INT]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1), align 4
|
||||
(void)ci;
|
||||
// CHECK-NEXT: bitcast
|
||||
// CHECK-NEXT: memcpy
|
||||
(void)a;
|
||||
// CHECK-NEXT: [[R:%.*]] = load volatile [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: [[I:%.*]] = load volatile [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: [[R:%.*]] = load volatile [[INT]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: [[I:%.*]] = load volatile [[INT]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: store volatile [[INT]] [[R]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: store volatile [[INT]] [[I]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1), align 4
|
||||
(void)(ci=ci);
|
||||
// CHECK-NEXT: [[T:%.*]] = load volatile [[INT]]* @j
|
||||
// CHECK-NEXT: [[T:%.*]] = load volatile [[INT]], [[INT]]* @j
|
||||
// CHECK-NEXT: store volatile [[INT]] [[T]], [[INT]]* @i
|
||||
(void)(i=j);
|
||||
// CHECK-NEXT: [[R1:%.*]] = load volatile [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: [[I1:%.*]] = load volatile [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: [[R1:%.*]] = load volatile [[INT]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: [[I1:%.*]] = load volatile [[INT]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1), align 4
|
||||
// Not sure why they're ordered this way.
|
||||
// CHECK-NEXT: [[R:%.*]] = add [[INT]] [[R2]], [[R1]]
|
||||
// CHECK-NEXT: [[I:%.*]] = add [[INT]] [[I2]], [[I1]]
|
||||
|
@ -55,16 +55,16 @@ void test() {
|
|||
// CHECK-NEXT: store volatile [[INT]] [[I]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1), align 4
|
||||
ci+=ci;
|
||||
|
||||
// CHECK-NEXT: [[R1:%.*]] = load volatile [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: [[I1:%.*]] = load volatile [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: [[R1:%.*]] = load volatile [[INT]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: [[I1:%.*]] = load volatile [[INT]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: [[R:%.*]] = add [[INT]] [[R2]], [[R1]]
|
||||
// CHECK-NEXT: [[I:%.*]] = add [[INT]] [[I2]], [[I1]]
|
||||
// CHECK-NEXT: store volatile [[INT]] [[R]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: store volatile [[INT]] [[I]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1), align 4
|
||||
// These additions can be elided
|
||||
// CHECK-NEXT: add [[INT]] [[R]], [[R2]]
|
||||
// CHECK-NEXT: add [[INT]] [[I]], [[I2]]
|
||||
|
@ -192,7 +192,7 @@ void test() {
|
|||
// CHECK-NEXT: store volatile
|
||||
// CHECK-NEXT: store volatile
|
||||
ci=ci=ci;
|
||||
// CHECK-NEXT: [[T:%.*]] = load volatile [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1)
|
||||
// CHECK-NEXT: [[T:%.*]] = load volatile [[INT]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1)
|
||||
// CHECK-NEXT: store volatile [[INT]] [[T]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1)
|
||||
// CHECK-NEXT: store volatile [[INT]] [[T]], [[INT]]* getelementptr inbounds ([[CINT]]* @ci, i32 0, i32 1)
|
||||
__imag ci = __imag ci = __imag ci;
|
||||
|
@ -316,9 +316,9 @@ void test1() {
|
|||
|
||||
// CHECK: define {{.*}} @test2()
|
||||
int test2() {
|
||||
// CHECK: load volatile i32*
|
||||
// CHECK-NEXT: load volatile i32*
|
||||
// CHECK-NEXT: load volatile i32*
|
||||
// CHECK: load volatile i32, i32*
|
||||
// CHECK-NEXT: load volatile i32, i32*
|
||||
// CHECK-NEXT: load volatile i32, i32*
|
||||
// CHECK-NEXT: add i32
|
||||
// CHECK-NEXT: add i32
|
||||
// CHECK-NEXT: store volatile i32
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
void test0() {
|
||||
// CHECK-LABEL: define void @test0()
|
||||
// CHECK: [[F:%.*]] = alloca float
|
||||
// CHECK-NEXT: [[REAL:%.*]] = load volatile float* getelementptr inbounds ({ float, float }* @test0_v, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: load volatile float* getelementptr inbounds ({{.*}} @test0_v, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: [[REAL:%.*]] = load volatile float, float* getelementptr inbounds ({ float, float }* @test0_v, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: load volatile float, float* getelementptr inbounds ({{.*}} @test0_v, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: store float [[REAL]], float* [[F]], align 4
|
||||
// CHECK-NEXT: ret void
|
||||
extern volatile _Complex float test0_v;
|
||||
|
@ -13,8 +13,8 @@ void test0() {
|
|||
|
||||
void test1() {
|
||||
// CHECK-LABEL: define void @test1()
|
||||
// CHECK: [[REAL:%.*]] = load volatile float* getelementptr inbounds ({{.*}} @test1_v, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: [[IMAG:%.*]] = load volatile float* getelementptr inbounds ({{.*}} @test1_v, i32 0, i32 1), align 4
|
||||
// CHECK: [[REAL:%.*]] = load volatile float, float* getelementptr inbounds ({{.*}} @test1_v, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: [[IMAG:%.*]] = load volatile float, float* getelementptr inbounds ({{.*}} @test1_v, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: store volatile float [[REAL]], float* getelementptr inbounds ({{.*}} @test1_v, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: store volatile float [[IMAG]], float* getelementptr inbounds ({{.*}} @test1_v, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: ret void
|
||||
|
|
|
@ -14,11 +14,11 @@ volatile _Complex double cd32 __attribute__((aligned(32)));
|
|||
|
||||
// CHECK-LABEL: define void @test_cf()
|
||||
void test_cf() {
|
||||
// CHECK: load volatile float* getelementptr inbounds ({ float, float }* @cf, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: load volatile float* getelementptr inbounds ({ float, float }* @cf, i32 0, i32 1), align 4
|
||||
// CHECK: load volatile float, float* getelementptr inbounds ({ float, float }* @cf, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: load volatile float, float* getelementptr inbounds ({ float, float }* @cf, i32 0, i32 1), align 4
|
||||
(void)(cf);
|
||||
// CHECK-NEXT: [[R:%.*]] = load volatile float* getelementptr inbounds ({ float, float }* @cf, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: [[I:%.*]] = load volatile float* getelementptr inbounds ({ float, float }* @cf, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: [[R:%.*]] = load volatile float, float* getelementptr inbounds ({ float, float }* @cf, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: [[I:%.*]] = load volatile float, float* getelementptr inbounds ({ float, float }* @cf, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: store volatile float [[R]], float* getelementptr inbounds ({ float, float }* @cf, i32 0, i32 0), align 4
|
||||
// CHECK-NEXT: store volatile float [[I]], float* getelementptr inbounds ({ float, float }* @cf, i32 0, i32 1), align 4
|
||||
(void)(cf=cf);
|
||||
|
@ -27,11 +27,11 @@ void test_cf() {
|
|||
|
||||
// CHECK-LABEL: define void @test_cd()
|
||||
void test_cd() {
|
||||
// CHECK: load volatile double* getelementptr inbounds ({ double, double }* @cd, i32 0, i32 0), align 8
|
||||
// CHECK-NEXT: load volatile double* getelementptr inbounds ({ double, double }* @cd, i32 0, i32 1), align 8
|
||||
// CHECK: load volatile double, double* getelementptr inbounds ({ double, double }* @cd, i32 0, i32 0), align 8
|
||||
// CHECK-NEXT: load volatile double, double* getelementptr inbounds ({ double, double }* @cd, i32 0, i32 1), align 8
|
||||
(void)(cd);
|
||||
// CHECK-NEXT: [[R:%.*]] = load volatile double* getelementptr inbounds ({ double, double }* @cd, i32 0, i32 0), align 8
|
||||
// CHECK-NEXT: [[I:%.*]] = load volatile double* getelementptr inbounds ({ double, double }* @cd, i32 0, i32 1), align 8
|
||||
// CHECK-NEXT: [[R:%.*]] = load volatile double, double* getelementptr inbounds ({ double, double }* @cd, i32 0, i32 0), align 8
|
||||
// CHECK-NEXT: [[I:%.*]] = load volatile double, double* getelementptr inbounds ({ double, double }* @cd, i32 0, i32 1), align 8
|
||||
// CHECK-NEXT: store volatile double [[R]], double* getelementptr inbounds ({ double, double }* @cd, i32 0, i32 0), align 8
|
||||
// CHECK-NEXT: store volatile double [[I]], double* getelementptr inbounds ({ double, double }* @cd, i32 0, i32 1), align 8
|
||||
(void)(cd=cd);
|
||||
|
@ -40,11 +40,11 @@ void test_cd() {
|
|||
|
||||
// CHECK-LABEL: define void @test_cf32()
|
||||
void test_cf32() {
|
||||
// CHECK: load volatile float* getelementptr inbounds ({ float, float }* @cf32, i32 0, i32 0), align 32
|
||||
// CHECK-NEXT: load volatile float* getelementptr inbounds ({ float, float }* @cf32, i32 0, i32 1), align 4
|
||||
// CHECK: load volatile float, float* getelementptr inbounds ({ float, float }* @cf32, i32 0, i32 0), align 32
|
||||
// CHECK-NEXT: load volatile float, float* getelementptr inbounds ({ float, float }* @cf32, i32 0, i32 1), align 4
|
||||
(void)(cf32);
|
||||
// CHECK-NEXT: [[R:%.*]] = load volatile float* getelementptr inbounds ({ float, float }* @cf32, i32 0, i32 0), align 32
|
||||
// CHECK-NEXT: [[I:%.*]] = load volatile float* getelementptr inbounds ({ float, float }* @cf32, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: [[R:%.*]] = load volatile float, float* getelementptr inbounds ({ float, float }* @cf32, i32 0, i32 0), align 32
|
||||
// CHECK-NEXT: [[I:%.*]] = load volatile float, float* getelementptr inbounds ({ float, float }* @cf32, i32 0, i32 1), align 4
|
||||
// CHECK-NEXT: store volatile float [[R]], float* getelementptr inbounds ({ float, float }* @cf32, i32 0, i32 0), align 32
|
||||
// CHECK-NEXT: store volatile float [[I]], float* getelementptr inbounds ({ float, float }* @cf32, i32 0, i32 1), align 4
|
||||
(void)(cf32=cf32);
|
||||
|
@ -53,11 +53,11 @@ void test_cf32() {
|
|||
|
||||
// CHECK-LABEL: define void @test_cd32()
|
||||
void test_cd32() {
|
||||
// CHECK: load volatile double* getelementptr inbounds ({ double, double }* @cd32, i32 0, i32 0), align 32
|
||||
// CHECK-NEXT: load volatile double* getelementptr inbounds ({ double, double }* @cd32, i32 0, i32 1), align 8
|
||||
// CHECK: load volatile double, double* getelementptr inbounds ({ double, double }* @cd32, i32 0, i32 0), align 32
|
||||
// CHECK-NEXT: load volatile double, double* getelementptr inbounds ({ double, double }* @cd32, i32 0, i32 1), align 8
|
||||
(void)(cd32);
|
||||
// CHECK-NEXT: [[R:%.*]] = load volatile double* getelementptr inbounds ({ double, double }* @cd32, i32 0, i32 0), align 32
|
||||
// CHECK-NEXT: [[I:%.*]] = load volatile double* getelementptr inbounds ({ double, double }* @cd32, i32 0, i32 1), align 8
|
||||
// CHECK-NEXT: [[R:%.*]] = load volatile double, double* getelementptr inbounds ({ double, double }* @cd32, i32 0, i32 0), align 32
|
||||
// CHECK-NEXT: [[I:%.*]] = load volatile double, double* getelementptr inbounds ({ double, double }* @cd32, i32 0, i32 1), align 8
|
||||
// CHECK-NEXT: store volatile double [[R]], double* getelementptr inbounds ({ double, double }* @cd32, i32 0, i32 0), align 32
|
||||
// CHECK-NEXT: store volatile double [[I]], double* getelementptr inbounds ({ double, double }* @cd32, i32 0, i32 1), align 8
|
||||
(void)(cd32=cd32);
|
||||
|
|
|
@ -41,67 +41,67 @@ int main() {
|
|||
// CHECK: [[I:%[a-zA-Z0-9_.]+]] = alloca i32
|
||||
// load
|
||||
i=S;
|
||||
// CHECK: load i32* @S
|
||||
// CHECK: load i32, i32* @S
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i=vS;
|
||||
// CHECK: load volatile i32* @vS
|
||||
// CHECK: load volatile i32, i32* @vS
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i=*pS;
|
||||
// CHECK: [[PS_VAL:%[a-zA-Z0-9_.]+]] = load i32** @pS
|
||||
// CHECK: load i32* [[PS_VAL]]
|
||||
// CHECK: [[PS_VAL:%[a-zA-Z0-9_.]+]] = load i32*, i32** @pS
|
||||
// CHECK: load i32, i32* [[PS_VAL]]
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i=*pvS;
|
||||
// CHECK: [[PVS_VAL:%[a-zA-Z0-9_.]+]] = load i32** @pvS
|
||||
// CHECK: load volatile i32* [[PVS_VAL]]
|
||||
// CHECK: [[PVS_VAL:%[a-zA-Z0-9_.]+]] = load i32*, i32** @pvS
|
||||
// CHECK: load volatile i32, i32* [[PVS_VAL]]
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i=A[2];
|
||||
// CHECK: load i32* getelementptr {{.*}} @A
|
||||
// CHECK: load i32, i32* getelementptr {{.*}} @A
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i=vA[2];
|
||||
// CHECK: load volatile i32* getelementptr {{.*}} @vA
|
||||
// CHECK: load volatile i32, i32* getelementptr {{.*}} @vA
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i=F.x;
|
||||
// CHECK: load i32* getelementptr {{.*}} @F
|
||||
// CHECK: load i32, i32* getelementptr {{.*}} @F
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i=vF.x;
|
||||
// CHECK: load volatile i32* getelementptr {{.*}} @vF
|
||||
// CHECK: load volatile i32, i32* getelementptr {{.*}} @vF
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i=F2.x;
|
||||
// CHECK: load i32* getelementptr {{.*}} @F2
|
||||
// CHECK: load i32, i32* getelementptr {{.*}} @F2
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i=vF2.x;
|
||||
// CHECK: load volatile i32* getelementptr {{.*}} @vF2
|
||||
// CHECK: load volatile i32, i32* getelementptr {{.*}} @vF2
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i=vpF2->x;
|
||||
// CHECK: [[VPF2_VAL:%[a-zA-Z0-9_.]+]] = load {{%[a-zA-Z0-9_.]+}}** @vpF2
|
||||
// CHECK: [[VPF2_VAL:%[a-zA-Z0-9_.]+]] = load {{%[a-zA-Z0-9_.]+}}*, {{%[a-zA-Z0-9_.]+}}** @vpF2
|
||||
// CHECK: [[ELT:%[a-zA-Z0-9_.]+]] = getelementptr {{.*}} [[VPF2_VAL]]
|
||||
// CHECK: load volatile i32* [[ELT]]
|
||||
// CHECK: load volatile i32, i32* [[ELT]]
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i=F3.x.y;
|
||||
// CHECK: load i32* getelementptr {{.*}} @F3
|
||||
// CHECK: load i32, i32* getelementptr {{.*}} @F3
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i=vF3.x.y;
|
||||
// CHECK: load volatile i32* getelementptr {{.*}} @vF3
|
||||
// CHECK: load volatile i32, i32* getelementptr {{.*}} @vF3
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i=BF.x;
|
||||
// CHECK-IT: load i8* getelementptr {{.*}} @BF
|
||||
// CHECK-MS: load i32* getelementptr {{.*}} @BF
|
||||
// CHECK-IT: load i8, i8* getelementptr {{.*}} @BF
|
||||
// CHECK-MS: load i32, i32* getelementptr {{.*}} @BF
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i=vBF.x;
|
||||
// CHECK-IT: load volatile i8* getelementptr {{.*}} @vBF
|
||||
// CHECK-MS: load volatile i32* getelementptr {{.*}} @vBF
|
||||
// CHECK-IT: load volatile i8, i8* getelementptr {{.*}} @vBF
|
||||
// CHECK-MS: load volatile i32, i32* getelementptr {{.*}} @vBF
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i=V[3];
|
||||
// CHECK: load <4 x i32>* @V
|
||||
// CHECK: load <4 x i32>, <4 x i32>* @V
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i=vV[3];
|
||||
// CHECK: load volatile <4 x i32>* @vV
|
||||
// CHECK: load volatile <4 x i32>, <4 x i32>* @vV
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i=VE.yx[1];
|
||||
// CHECK: load <4 x i32>* @VE
|
||||
// CHECK: load <4 x i32>, <4 x i32>* @VE
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i=vVE.zy[1];
|
||||
// CHECK: load volatile <4 x i32>* @vVE
|
||||
// CHECK: load volatile <4 x i32>, <4 x i32>* @vVE
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i = aggFct().x; // Note: not volatile
|
||||
// N.b. Aggregate return is extremely target specific, all we can
|
||||
|
@ -110,92 +110,92 @@ int main() {
|
|||
// CHECK-NOT: load volatile
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i=vtS;
|
||||
// CHECK: load volatile i32* @vtS
|
||||
// CHECK: load volatile i32, i32* @vtS
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
|
||||
|
||||
// store
|
||||
S=i;
|
||||
// CHECK: load i32* [[I]]
|
||||
// CHECK: load i32, i32* [[I]]
|
||||
// CHECK: store i32 {{.*}}, i32* @S
|
||||
vS=i;
|
||||
// CHECK: load i32* [[I]]
|
||||
// CHECK: load i32, i32* [[I]]
|
||||
// CHECK: store volatile i32 {{.*}}, i32* @vS
|
||||
*pS=i;
|
||||
// CHECK: load i32* [[I]]
|
||||
// CHECK: [[PS_VAL:%[a-zA-Z0-9_.]+]] = load i32** @pS
|
||||
// CHECK: load i32, i32* [[I]]
|
||||
// CHECK: [[PS_VAL:%[a-zA-Z0-9_.]+]] = load i32*, i32** @pS
|
||||
// CHECK: store i32 {{.*}}, i32* [[PS_VAL]]
|
||||
*pvS=i;
|
||||
// CHECK: load i32* [[I]]
|
||||
// CHECK: [[PVS_VAL:%[a-zA-Z0-9_.]+]] = load i32** @pvS
|
||||
// CHECK: load i32, i32* [[I]]
|
||||
// CHECK: [[PVS_VAL:%[a-zA-Z0-9_.]+]] = load i32*, i32** @pvS
|
||||
// CHECK: store volatile i32 {{.*}}, i32* [[PVS_VAL]]
|
||||
A[2]=i;
|
||||
// CHECK: load i32* [[I]]
|
||||
// CHECK: load i32, i32* [[I]]
|
||||
// CHECK: store i32 {{.*}}, i32* getelementptr {{.*}} @A
|
||||
vA[2]=i;
|
||||
// CHECK: load i32* [[I]]
|
||||
// CHECK: load i32, i32* [[I]]
|
||||
// CHECK: store volatile i32 {{.*}}, i32* getelementptr {{.*}} @vA
|
||||
F.x=i;
|
||||
// CHECK: load i32* [[I]]
|
||||
// CHECK: load i32, i32* [[I]]
|
||||
// CHECK: store i32 {{.*}}, i32* getelementptr {{.*}} @F
|
||||
vF.x=i;
|
||||
// CHECK: load i32* [[I]]
|
||||
// CHECK: load i32, i32* [[I]]
|
||||
// CHECK: store volatile i32 {{.*}}, i32* getelementptr {{.*}} @vF
|
||||
F2.x=i;
|
||||
// CHECK: load i32* [[I]]
|
||||
// CHECK: load i32, i32* [[I]]
|
||||
// CHECK: store i32 {{.*}}, i32* getelementptr {{.*}} @F2
|
||||
vF2.x=i;
|
||||
// CHECK: load i32* [[I]]
|
||||
// CHECK: load i32, i32* [[I]]
|
||||
// CHECK: store volatile i32 {{.*}}, i32* getelementptr {{.*}} @vF2
|
||||
vpF2->x=i;
|
||||
// CHECK: load i32* [[I]]
|
||||
// CHECK: [[VPF2_VAL:%[a-zA-Z0-9_.]+]] = load {{%[a-zA-Z0-9._]+}}** @vpF2
|
||||
// CHECK: load i32, i32* [[I]]
|
||||
// CHECK: [[VPF2_VAL:%[a-zA-Z0-9_.]+]] = load {{%[a-zA-Z0-9._]+}}*, {{%[a-zA-Z0-9._]+}}** @vpF2
|
||||
// CHECK: [[ELT:%[a-zA-Z0-9_.]+]] = getelementptr {{.*}} [[VPF2_VAL]]
|
||||
// CHECK: store volatile i32 {{.*}}, i32* [[ELT]]
|
||||
vF3.x.y=i;
|
||||
// CHECK: load i32* [[I]]
|
||||
// CHECK: load i32, i32* [[I]]
|
||||
// CHECK: store volatile i32 {{.*}}, i32* getelementptr {{.*}} @vF3
|
||||
BF.x=i;
|
||||
// CHECK: load i32* [[I]]
|
||||
// CHECK-IT: load i8* getelementptr {{.*}} @BF
|
||||
// CHECK-MS: load i32* getelementptr {{.*}} @BF
|
||||
// CHECK: load i32, i32* [[I]]
|
||||
// CHECK-IT: load i8, i8* getelementptr {{.*}} @BF
|
||||
// CHECK-MS: load i32, i32* getelementptr {{.*}} @BF
|
||||
// CHECK-IT: store i8 {{.*}}, i8* getelementptr {{.*}} @BF
|
||||
// CHECK-MS: store i32 {{.*}}, i32* getelementptr {{.*}} @BF
|
||||
vBF.x=i;
|
||||
// CHECK: load i32* [[I]]
|
||||
// CHECK-IT: load volatile i8* getelementptr {{.*}} @vBF
|
||||
// CHECK-MS: load volatile i32* getelementptr {{.*}} @vBF
|
||||
// CHECK: load i32, i32* [[I]]
|
||||
// CHECK-IT: load volatile i8, i8* getelementptr {{.*}} @vBF
|
||||
// CHECK-MS: load volatile i32, i32* getelementptr {{.*}} @vBF
|
||||
// CHECK-IT: store volatile i8 {{.*}}, i8* getelementptr {{.*}} @vBF
|
||||
// CHECK-MS: store volatile i32 {{.*}}, i32* getelementptr {{.*}} @vBF
|
||||
V[3]=i;
|
||||
// CHECK: load i32* [[I]]
|
||||
// CHECK: load <4 x i32>* @V
|
||||
// CHECK: load i32, i32* [[I]]
|
||||
// CHECK: load <4 x i32>, <4 x i32>* @V
|
||||
// CHECK: store <4 x i32> {{.*}}, <4 x i32>* @V
|
||||
vV[3]=i;
|
||||
// CHECK: load i32* [[I]]
|
||||
// CHECK: load volatile <4 x i32>* @vV
|
||||
// CHECK: load i32, i32* [[I]]
|
||||
// CHECK: load volatile <4 x i32>, <4 x i32>* @vV
|
||||
// CHECK: store volatile <4 x i32> {{.*}}, <4 x i32>* @vV
|
||||
vtS=i;
|
||||
// CHECK: load i32* [[I]]
|
||||
// CHECK: load i32, i32* [[I]]
|
||||
// CHECK: store volatile i32 {{.*}}, i32* @vtS
|
||||
|
||||
// other ops:
|
||||
++S;
|
||||
// CHECK: load i32* @S
|
||||
// CHECK: load i32, i32* @S
|
||||
// CHECK: store i32 {{.*}}, i32* @S
|
||||
++vS;
|
||||
// CHECK: load volatile i32* @vS
|
||||
// CHECK: load volatile i32, i32* @vS
|
||||
// CHECK: store volatile i32 {{.*}}, i32* @vS
|
||||
i+=S;
|
||||
// CHECK: load i32* @S
|
||||
// CHECK: load i32* [[I]]
|
||||
// CHECK: load i32, i32* @S
|
||||
// CHECK: load i32, i32* [[I]]
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
i+=vS;
|
||||
// CHECK: load volatile i32* @vS
|
||||
// CHECK: load i32* [[I]]
|
||||
// CHECK: load volatile i32, i32* @vS
|
||||
// CHECK: load i32, i32* [[I]]
|
||||
// CHECK: store i32 {{.*}}, i32* [[I]]
|
||||
++vtS;
|
||||
// CHECK: load volatile i32* @vtS
|
||||
// CHECK: load volatile i32, i32* @vtS
|
||||
// CHECK: store volatile i32 {{.*}}, i32* @vtS
|
||||
(void)vF2;
|
||||
// From vF2 to a temporary
|
||||
|
|
|
@ -4,12 +4,12 @@
|
|||
long double testinc(_Atomic long double *addr) {
|
||||
// CHECK-LABEL: @testinc
|
||||
// CHECK: store x86_fp80* %{{.+}}, x86_fp80** [[ADDR_ADDR:%.+]], align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80** [[ADDR_ADDR]], align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** [[ADDR_ADDR]], align 8
|
||||
// CHECK: [[INT_ADDR:%.+]] = bitcast x86_fp80* [[ADDR]] to i128*
|
||||
// CHECK: [[INT_VALUE:%.+]] = load atomic i128* [[INT_ADDR]] seq_cst, align 16
|
||||
// CHECK: [[INT_VALUE:%.+]] = load atomic i128, i128* [[INT_ADDR]] seq_cst, align 16
|
||||
// CHECK: [[INT_LOAD_ADDR:%.+]] = bitcast x86_fp80* [[LD_ADDR:%.+]] to i128*
|
||||
// CHECK: store i128 [[INT_VALUE]], i128* [[INT_LOAD_ADDR]], align 16
|
||||
// CHECK: [[LD_VALUE:%.+]] = load x86_fp80* [[LD_ADDR]], align 16
|
||||
// CHECK: [[LD_VALUE:%.+]] = load x86_fp80, x86_fp80* [[LD_ADDR]], align 16
|
||||
// CHECK: br label %[[ATOMIC_OP:.+]]
|
||||
// CHECK: [[ATOMIC_OP]]
|
||||
// CHECK: [[OLD_VALUE:%.+]] = phi x86_fp80 [ [[LD_VALUE]], %{{.+}} ], [ [[LD_VALUE:%.+]], %[[ATOMIC_OP]] ]
|
||||
|
@ -18,29 +18,29 @@ long double testinc(_Atomic long double *addr) {
|
|||
// CHECK: call void @llvm.memset.p0i8.i64(i8* [[OLD_VALUE_VOID_ADDR]], i8 0, i64 16, i32 16, i1 false)
|
||||
// CHECK: store x86_fp80 [[OLD_VALUE]], x86_fp80* [[OLD_VALUE_ADDR]], align 16
|
||||
// CHECK: [[OLD_INT_ADDR:%.+]] = bitcast x86_fp80* [[OLD_VALUE_ADDR]] to i128*
|
||||
// CHECK: [[OLD_INT:%.+]] = load i128* [[OLD_INT_ADDR]], align 16
|
||||
// CHECK: [[OLD_INT:%.+]] = load i128, i128* [[OLD_INT_ADDR]], align 16
|
||||
// CHECK: [[NEW_VALUE_VOID_ADDR:%.+]] = bitcast x86_fp80* [[NEW_VALUE_ADDR:%.+]] to i8*
|
||||
// CHECK: call void @llvm.memset.p0i8.i64(i8* [[NEW_VALUE_VOID_ADDR]], i8 0, i64 16, i32 16, i1 false)
|
||||
// CHECK: store x86_fp80 [[INC_VALUE]], x86_fp80* [[NEW_VALUE_ADDR]], align 16
|
||||
// CHECK: [[NEW_INT_ADDR:%.+]] = bitcast x86_fp80* [[NEW_VALUE_ADDR]] to i128*
|
||||
// CHECK: [[NEW_INT:%.+]] = load i128* [[NEW_INT_ADDR]], align 16
|
||||
// CHECK: [[NEW_INT:%.+]] = load i128, i128* [[NEW_INT_ADDR]], align 16
|
||||
// CHECK: [[OBJ_INT_ADDR:%.+]] = bitcast x86_fp80* [[ADDR]] to i128*
|
||||
// CHECK: [[RES:%.+]] = cmpxchg i128* [[OBJ_INT_ADDR]], i128 [[OLD_INT]], i128 [[NEW_INT]] seq_cst seq_cst
|
||||
// CHECK: [[OLD_VALUE:%.+]] = extractvalue { i128, i1 } [[RES]], 0
|
||||
// CHECK: [[FAIL_SUCCESS:%.+]] = extractvalue { i128, i1 } [[RES]], 1
|
||||
// CHECK: [[OLD_VALUE_RES_INT_PTR:%.+]] = bitcast x86_fp80* [[OLD_VALUE_RES_PTR:%.+]] to i128*
|
||||
// CHECK: store i128 [[OLD_VALUE]], i128* [[OLD_VALUE_RES_INT_PTR]], align 16
|
||||
// CHECK: [[LD_VALUE]] = load x86_fp80* [[OLD_VALUE_RES_PTR]], align 16
|
||||
// CHECK: [[LD_VALUE]] = load x86_fp80, x86_fp80* [[OLD_VALUE_RES_PTR]], align 16
|
||||
// CHECK: br i1 [[FAIL_SUCCESS]], label %[[ATOMIC_CONT:.+]], label %[[ATOMIC_OP]]
|
||||
// CHECK: [[ATOMIC_CONT]]
|
||||
// CHECK: ret x86_fp80 [[INC_VALUE]]
|
||||
// CHECK32-LABEL: @testinc
|
||||
// CHECK32: store x86_fp80* %{{.+}}, x86_fp80** [[ADDR_ADDR:%.+]], align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80** [[ADDR_ADDR]], align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** [[ADDR_ADDR]], align 4
|
||||
// CHECK32: [[VOID_PTR:%.+]] = bitcast x86_fp80* [[ADDR]] to i8*
|
||||
// CHECK32: [[TEMP_LD_PTR:%.+]] = bitcast x86_fp80* [[TEMP_LD_ADDR:%.+]] to i8*
|
||||
// CHECK32: call void @__atomic_load(i32 12, i8* [[VOID_PTR]], i8* [[TEMP_LD_PTR]], i32 5)
|
||||
// CHECK32: [[LD_VALUE:%.+]] = load x86_fp80* [[TEMP_LD_ADDR]], align 4
|
||||
// CHECK32: [[LD_VALUE:%.+]] = load x86_fp80, x86_fp80* [[TEMP_LD_ADDR]], align 4
|
||||
// CHECK32: br label %[[ATOMIC_OP:.+]]
|
||||
// CHECK32: [[ATOMIC_OP]]
|
||||
// CHECK32: [[OLD_VALUE:%.+]] = phi x86_fp80 [ [[LD_VALUE]], %{{.+}} ], [ [[LD_VALUE:%.+]], %[[ATOMIC_OP]] ]
|
||||
|
@ -55,7 +55,7 @@ long double testinc(_Atomic long double *addr) {
|
|||
// CHECK32: [[EXPECTED:%.+]] = bitcast x86_fp80* [[OLD_VALUE_ADDR]] to i8*
|
||||
// CHECK32: [[DESIRED:%.+]] = bitcast x86_fp80* [[DESIRED_VALUE_ADDR]] to i8*
|
||||
// CHECK32: [[FAIL_SUCCESS:%.+]] = call zeroext i1 @__atomic_compare_exchange(i32 12, i8* [[OBJ]], i8* [[EXPECTED]], i8* [[DESIRED]], i32 5, i32 5)
|
||||
// CHECK32: [[LD_VALUE:%.+]] = load x86_fp80* [[OLD_VALUE_ADDR]], align 4
|
||||
// CHECK32: [[LD_VALUE:%.+]] = load x86_fp80, x86_fp80* [[OLD_VALUE_ADDR]], align 4
|
||||
// CHECK32: br i1 [[FAIL_SUCCESS]], label %[[ATOMIC_CONT:.+]], label %[[ATOMIC_OP]]
|
||||
// CHECK32: [[ATOMIC_CONT]]
|
||||
// CHECK32: ret x86_fp80 [[INC_VALUE]]
|
||||
|
@ -66,12 +66,12 @@ long double testinc(_Atomic long double *addr) {
|
|||
long double testdec(_Atomic long double *addr) {
|
||||
// CHECK-LABEL: @testdec
|
||||
// CHECK: store x86_fp80* %{{.+}}, x86_fp80** [[ADDR_ADDR:%.+]], align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80** [[ADDR_ADDR]], align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** [[ADDR_ADDR]], align 8
|
||||
// CHECK: [[INT_ADDR:%.+]] = bitcast x86_fp80* [[ADDR]] to i128*
|
||||
// CHECK: [[INT_VALUE:%.+]] = load atomic i128* [[INT_ADDR]] seq_cst, align 16
|
||||
// CHECK: [[INT_VALUE:%.+]] = load atomic i128, i128* [[INT_ADDR]] seq_cst, align 16
|
||||
// CHECK: [[INT_LOAD_ADDR:%.+]] = bitcast x86_fp80* [[LD_ADDR:%.+]] to i128*
|
||||
// CHECK: store i128 [[INT_VALUE]], i128* [[INT_LOAD_ADDR]], align 16
|
||||
// CHECK: [[ORIG_LD_VALUE:%.+]] = load x86_fp80* [[LD_ADDR]], align 16
|
||||
// CHECK: [[ORIG_LD_VALUE:%.+]] = load x86_fp80, x86_fp80* [[LD_ADDR]], align 16
|
||||
// CHECK: br label %[[ATOMIC_OP:.+]]
|
||||
// CHECK: [[ATOMIC_OP]]
|
||||
// CHECK: [[OLD_VALUE:%.+]] = phi x86_fp80 [ [[ORIG_LD_VALUE]], %{{.+}} ], [ [[LD_VALUE:%.+]], %[[ATOMIC_OP]] ]
|
||||
|
@ -80,29 +80,29 @@ long double testdec(_Atomic long double *addr) {
|
|||
// CHECK: call void @llvm.memset.p0i8.i64(i8* [[OLD_VALUE_VOID_ADDR]], i8 0, i64 16, i32 16, i1 false)
|
||||
// CHECK: store x86_fp80 [[OLD_VALUE]], x86_fp80* [[OLD_VALUE_ADDR]], align 16
|
||||
// CHECK: [[OLD_INT_ADDR:%.+]] = bitcast x86_fp80* [[OLD_VALUE_ADDR]] to i128*
|
||||
// CHECK: [[OLD_INT:%.+]] = load i128* [[OLD_INT_ADDR]], align 16
|
||||
// CHECK: [[OLD_INT:%.+]] = load i128, i128* [[OLD_INT_ADDR]], align 16
|
||||
// CHECK: [[NEW_VALUE_VOID_ADDR:%.+]] = bitcast x86_fp80* [[NEW_VALUE_ADDR:%.+]] to i8*
|
||||
// CHECK: call void @llvm.memset.p0i8.i64(i8* [[NEW_VALUE_VOID_ADDR]], i8 0, i64 16, i32 16, i1 false)
|
||||
// CHECK: store x86_fp80 [[DEC_VALUE]], x86_fp80* [[NEW_VALUE_ADDR]], align 16
|
||||
// CHECK: [[NEW_INT_ADDR:%.+]] = bitcast x86_fp80* [[NEW_VALUE_ADDR]] to i128*
|
||||
// CHECK: [[NEW_INT:%.+]] = load i128* [[NEW_INT_ADDR]], align 16
|
||||
// CHECK: [[NEW_INT:%.+]] = load i128, i128* [[NEW_INT_ADDR]], align 16
|
||||
// CHECK: [[OBJ_INT_ADDR:%.+]] = bitcast x86_fp80* [[ADDR]] to i128*
|
||||
// CHECK: [[RES:%.+]] = cmpxchg i128* [[OBJ_INT_ADDR]], i128 [[OLD_INT]], i128 [[NEW_INT]] seq_cst seq_cst
|
||||
// CHECK: [[OLD_VALUE:%.+]] = extractvalue { i128, i1 } [[RES]], 0
|
||||
// CHECK: [[FAIL_SUCCESS:%.+]] = extractvalue { i128, i1 } [[RES]], 1
|
||||
// CHECK: [[OLD_VALUE_RES_INT_PTR:%.+]] = bitcast x86_fp80* [[OLD_VALUE_RES_PTR:%.+]] to i128*
|
||||
// CHECK: store i128 [[OLD_VALUE]], i128* [[OLD_VALUE_RES_INT_PTR]], align 16
|
||||
// CHECK: [[LD_VALUE]] = load x86_fp80* [[OLD_VALUE_RES_PTR]], align 16
|
||||
// CHECK: [[LD_VALUE]] = load x86_fp80, x86_fp80* [[OLD_VALUE_RES_PTR]], align 16
|
||||
// CHECK: br i1 [[FAIL_SUCCESS]], label %[[ATOMIC_CONT:.+]], label %[[ATOMIC_OP]]
|
||||
// CHECK: [[ATOMIC_CONT]]
|
||||
// CHECK: ret x86_fp80 [[ORIG_LD_VALUE]]
|
||||
// CHECK32-LABEL: @testdec
|
||||
// CHECK32: store x86_fp80* %{{.+}}, x86_fp80** [[ADDR_ADDR:%.+]], align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80** [[ADDR_ADDR]], align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** [[ADDR_ADDR]], align 4
|
||||
// CHECK32: [[VOID_PTR:%.+]] = bitcast x86_fp80* [[ADDR]] to i8*
|
||||
// CHECK32: [[TEMP_LD_PTR:%.+]] = bitcast x86_fp80* [[TEMP_LD_ADDR:%.+]] to i8*
|
||||
// CHECK32: call void @__atomic_load(i32 12, i8* [[VOID_PTR]], i8* [[TEMP_LD_PTR]], i32 5)
|
||||
// CHECK32: [[ORIG_LD_VALUE:%.+]] = load x86_fp80* [[TEMP_LD_ADDR]], align 4
|
||||
// CHECK32: [[ORIG_LD_VALUE:%.+]] = load x86_fp80, x86_fp80* [[TEMP_LD_ADDR]], align 4
|
||||
// CHECK32: br label %[[ATOMIC_OP:.+]]
|
||||
// CHECK32: [[ATOMIC_OP]]
|
||||
// CHECK32: [[OLD_VALUE:%.+]] = phi x86_fp80 [ [[ORIG_LD_VALUE]], %{{.+}} ], [ [[LD_VALUE:%.+]], %[[ATOMIC_OP]] ]
|
||||
|
@ -117,7 +117,7 @@ long double testdec(_Atomic long double *addr) {
|
|||
// CHECK32: [[EXPECTED:%.+]] = bitcast x86_fp80* [[OLD_VALUE_ADDR]] to i8*
|
||||
// CHECK32: [[DESIRED:%.+]] = bitcast x86_fp80* [[DESIRED_VALUE_ADDR]] to i8*
|
||||
// CHECK32: [[FAIL_SUCCESS:%.+]] = call zeroext i1 @__atomic_compare_exchange(i32 12, i8* [[OBJ]], i8* [[EXPECTED]], i8* [[DESIRED]], i32 5, i32 5)
|
||||
// CHECK32: [[LD_VALUE]] = load x86_fp80* [[OLD_VALUE_ADDR]], align 4
|
||||
// CHECK32: [[LD_VALUE]] = load x86_fp80, x86_fp80* [[OLD_VALUE_ADDR]], align 4
|
||||
// CHECK32: br i1 [[FAIL_SUCCESS]], label %[[ATOMIC_CONT:.+]], label %[[ATOMIC_OP]]
|
||||
// CHECK32: [[ATOMIC_CONT]]
|
||||
// CHECK32: ret x86_fp80 [[ORIG_LD_VALUE]]
|
||||
|
@ -129,12 +129,12 @@ long double testcompassign(_Atomic long double *addr) {
|
|||
*addr -= 25;
|
||||
// CHECK-LABEL: @testcompassign
|
||||
// CHECK: store x86_fp80* %{{.+}}, x86_fp80** [[ADDR_ADDR:%.+]], align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80** [[ADDR_ADDR]], align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** [[ADDR_ADDR]], align 8
|
||||
// CHECK: [[INT_ADDR:%.+]] = bitcast x86_fp80* [[ADDR]] to i128*
|
||||
// CHECK: [[INT_VALUE:%.+]] = load atomic i128* [[INT_ADDR]] seq_cst, align 16
|
||||
// CHECK: [[INT_VALUE:%.+]] = load atomic i128, i128* [[INT_ADDR]] seq_cst, align 16
|
||||
// CHECK: [[INT_LOAD_ADDR:%.+]] = bitcast x86_fp80* [[LD_ADDR:%.+]] to i128*
|
||||
// CHECK: store i128 [[INT_VALUE]], i128* [[INT_LOAD_ADDR]], align 16
|
||||
// CHECK: [[LD_VALUE:%.+]] = load x86_fp80* [[LD_ADDR]], align 16
|
||||
// CHECK: [[LD_VALUE:%.+]] = load x86_fp80, x86_fp80* [[LD_ADDR]], align 16
|
||||
// CHECK: br label %[[ATOMIC_OP:.+]]
|
||||
// CHECK: [[ATOMIC_OP]]
|
||||
// CHECK: [[OLD_VALUE:%.+]] = phi x86_fp80 [ [[LD_VALUE]], %{{.+}} ], [ [[LD_VALUE:%.+]], %[[ATOMIC_OP]] ]
|
||||
|
@ -143,35 +143,35 @@ long double testcompassign(_Atomic long double *addr) {
|
|||
// CHECK: call void @llvm.memset.p0i8.i64(i8* [[OLD_VALUE_VOID_ADDR]], i8 0, i64 16, i32 16, i1 false)
|
||||
// CHECK: store x86_fp80 [[OLD_VALUE]], x86_fp80* [[OLD_VALUE_ADDR]], align 16
|
||||
// CHECK: [[OLD_INT_ADDR:%.+]] = bitcast x86_fp80* [[OLD_VALUE_ADDR]] to i128*
|
||||
// CHECK: [[OLD_INT:%.+]] = load i128* [[OLD_INT_ADDR]], align 16
|
||||
// CHECK: [[OLD_INT:%.+]] = load i128, i128* [[OLD_INT_ADDR]], align 16
|
||||
// CHECK: [[NEW_VALUE_VOID_ADDR:%.+]] = bitcast x86_fp80* [[NEW_VALUE_ADDR:%.+]] to i8*
|
||||
// CHECK: call void @llvm.memset.p0i8.i64(i8* [[NEW_VALUE_VOID_ADDR]], i8 0, i64 16, i32 16, i1 false)
|
||||
// CHECK: store x86_fp80 [[SUB_VALUE]], x86_fp80* [[NEW_VALUE_ADDR]], align 16
|
||||
// CHECK: [[NEW_INT_ADDR:%.+]] = bitcast x86_fp80* [[NEW_VALUE_ADDR]] to i128*
|
||||
// CHECK: [[NEW_INT:%.+]] = load i128* [[NEW_INT_ADDR]], align 16
|
||||
// CHECK: [[NEW_INT:%.+]] = load i128, i128* [[NEW_INT_ADDR]], align 16
|
||||
// CHECK: [[OBJ_INT_ADDR:%.+]] = bitcast x86_fp80* [[ADDR]] to i128*
|
||||
// CHECK: [[RES:%.+]] = cmpxchg i128* [[OBJ_INT_ADDR]], i128 [[OLD_INT]], i128 [[NEW_INT]] seq_cst seq_cst
|
||||
// CHECK: [[OLD_VALUE:%.+]] = extractvalue { i128, i1 } [[RES]], 0
|
||||
// CHECK: [[FAIL_SUCCESS:%.+]] = extractvalue { i128, i1 } [[RES]], 1
|
||||
// CHECK: [[OLD_VALUE_RES_INT_PTR:%.+]] = bitcast x86_fp80* [[OLD_VALUE_RES_PTR:%.+]] to i128*
|
||||
// CHECK: store i128 [[OLD_VALUE]], i128* [[OLD_VALUE_RES_INT_PTR]], align 16
|
||||
// CHECK: [[LD_VALUE]] = load x86_fp80* [[OLD_VALUE_RES_PTR]], align 16
|
||||
// CHECK: [[LD_VALUE]] = load x86_fp80, x86_fp80* [[OLD_VALUE_RES_PTR]], align 16
|
||||
// CHECK: br i1 [[FAIL_SUCCESS]], label %[[ATOMIC_CONT:.+]], label %[[ATOMIC_OP]]
|
||||
// CHECK: [[ATOMIC_CONT]]
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80** %{{.+}}, align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** %{{.+}}, align 8
|
||||
// CHECK: [[ADDR_INT:%.+]] = bitcast x86_fp80* [[ADDR]] to i128*
|
||||
// CHECK: [[INT_VAL:%.+]] = load atomic i128* [[ADDR_INT]] seq_cst, align 16
|
||||
// CHECK: [[INT_VAL:%.+]] = load atomic i128, i128* [[ADDR_INT]] seq_cst, align 16
|
||||
// CHECK: [[INT_LD_TEMP:%.+]] = bitcast x86_fp80* [[LD_TEMP:%.+]] to i128*
|
||||
// CHECK: store i128 [[INT_VAL]], i128* [[INT_LD_TEMP:%.+]], align 16
|
||||
// CHECK: [[RET_VAL:%.+]] = load x86_fp80* [[LD_TEMP]], align 16
|
||||
// CHECK: [[RET_VAL:%.+]] = load x86_fp80, x86_fp80* [[LD_TEMP]], align 16
|
||||
// CHECK: ret x86_fp80 [[RET_VAL]]
|
||||
// CHECK32-LABEL: @testcompassign
|
||||
// CHECK32: store x86_fp80* %{{.+}}, x86_fp80** [[ADDR_ADDR:%.+]], align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80** [[ADDR_ADDR]], align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** [[ADDR_ADDR]], align 4
|
||||
// CHECK32: [[VOID_PTR:%.+]] = bitcast x86_fp80* [[ADDR]] to i8*
|
||||
// CHECK32: [[TEMP_LD_PTR:%.+]] = bitcast x86_fp80* [[TEMP_LD_ADDR:%.+]] to i8*
|
||||
// CHECK32: call void @__atomic_load(i32 12, i8* [[VOID_PTR]], i8* [[TEMP_LD_PTR]], i32 5)
|
||||
// CHECK32: [[LD_VALUE:%.+]] = load x86_fp80* [[TEMP_LD_ADDR]], align 4
|
||||
// CHECK32: [[LD_VALUE:%.+]] = load x86_fp80, x86_fp80* [[TEMP_LD_ADDR]], align 4
|
||||
// CHECK32: br label %[[ATOMIC_OP:.+]]
|
||||
// CHECK32: [[ATOMIC_OP]]
|
||||
// CHECK32: [[OLD_VALUE:%.+]] = phi x86_fp80 [ [[LD_VALUE]], %{{.+}} ], [ [[LD_VALUE:%.+]], %[[ATOMIC_OP]] ]
|
||||
|
@ -186,14 +186,14 @@ long double testcompassign(_Atomic long double *addr) {
|
|||
// CHECK32: [[EXPECTED:%.+]] = bitcast x86_fp80* [[OLD_VALUE_ADDR]] to i8*
|
||||
// CHECK32: [[DESIRED:%.+]] = bitcast x86_fp80* [[DESIRED_VALUE_ADDR]] to i8*
|
||||
// CHECK32: [[FAIL_SUCCESS:%.+]] = call zeroext i1 @__atomic_compare_exchange(i32 12, i8* [[OBJ]], i8* [[EXPECTED]], i8* [[DESIRED]], i32 5, i32 5)
|
||||
// CHECK32: [[LD_VALUE]] = load x86_fp80* [[OLD_VALUE_ADDR]], align 4
|
||||
// CHECK32: [[LD_VALUE]] = load x86_fp80, x86_fp80* [[OLD_VALUE_ADDR]], align 4
|
||||
// CHECK32: br i1 [[FAIL_SUCCESS]], label %[[ATOMIC_CONT:.+]], label %[[ATOMIC_OP]]
|
||||
// CHECK32: [[ATOMIC_CONT]]
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80** %{{.+}}, align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** %{{.+}}, align 4
|
||||
// CHECK32: [[VOID_ADDR:%.+]] = bitcast x86_fp80* [[ADDR]] to i8*
|
||||
// CHECK32: [[VOID_GET_ADDR:%.+]] = bitcast x86_fp80* [[GET_ADDR:%.+]] to i8*
|
||||
// CHECK32: call void @__atomic_load(i32 12, i8* [[VOID_ADDR]], i8* [[VOID_GET_ADDR]], i32 5)
|
||||
// CHECK32: [[RET_VAL:%.+]] = load x86_fp80* [[GET_ADDR]], align 4
|
||||
// CHECK32: [[RET_VAL:%.+]] = load x86_fp80, x86_fp80* [[GET_ADDR]], align 4
|
||||
// CHECK32: ret x86_fp80 [[RET_VAL]]
|
||||
return *addr;
|
||||
}
|
||||
|
@ -201,17 +201,17 @@ long double testcompassign(_Atomic long double *addr) {
|
|||
long double testassign(_Atomic long double *addr) {
|
||||
// CHECK-LABEL: @testassign
|
||||
// CHECK: store x86_fp80* %{{.+}}, x86_fp80** [[ADDR_ADDR:%.+]], align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80** [[ADDR_ADDR]], align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** [[ADDR_ADDR]], align 8
|
||||
// CHECK: [[STORE_TEMP_VOID_PTR:%.+]] = bitcast x86_fp80* [[STORE_TEMP_PTR:%.+]] to i8*
|
||||
// CHECK: call void @llvm.memset.p0i8.i64(i8* [[STORE_TEMP_VOID_PTR]], i8 0, i64 16, i32 16, i1 false)
|
||||
// CHECK: store x86_fp80 {{.+}}, x86_fp80* [[STORE_TEMP_PTR]], align 16
|
||||
// CHECK: [[STORE_TEMP_INT_PTR:%.+]] = bitcast x86_fp80* [[STORE_TEMP_PTR]] to i128*
|
||||
// CHECK: [[STORE_TEMP_INT:%.+]] = load i128* [[STORE_TEMP_INT_PTR]], align 16
|
||||
// CHECK: [[STORE_TEMP_INT:%.+]] = load i128, i128* [[STORE_TEMP_INT_PTR]], align 16
|
||||
// CHECK: [[ADDR_INT:%.+]] = bitcast x86_fp80* [[ADDR]] to i128*
|
||||
// CHECK: store atomic i128 [[STORE_TEMP_INT]], i128* [[ADDR_INT]] seq_cst, align 16
|
||||
// CHECK32-LABEL: @testassign
|
||||
// CHECK32: store x86_fp80* %{{.+}}, x86_fp80** [[ADDR_ADDR:%.+]], align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80** [[ADDR_ADDR]], align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** [[ADDR_ADDR]], align 4
|
||||
// CHECK32: [[STORE_TEMP_VOID_PTR:%.+]] = bitcast x86_fp80* [[STORE_TEMP_PTR:%.+]] to i8*
|
||||
// CHECK32: call void @llvm.memset.p0i8.i64(i8* [[STORE_TEMP_VOID_PTR]], i8 0, i64 12, i32 4, i1 false)
|
||||
// CHECK32: store x86_fp80 {{.+}}, x86_fp80* [[STORE_TEMP_PTR]], align 4
|
||||
|
@ -219,18 +219,18 @@ long double testassign(_Atomic long double *addr) {
|
|||
// CHECK32: [[STORE_TEMP_VOID_PTR:%.+]] = bitcast x86_fp80* [[STORE_TEMP_PTR]] to i8*
|
||||
// CHECK32: call void @__atomic_store(i32 12, i8* [[ADDR_VOID]], i8* [[STORE_TEMP_VOID_PTR]], i32 5)
|
||||
*addr = 115;
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80** %{{.+}}, align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** %{{.+}}, align 8
|
||||
// CHECK: [[ADDR_INT:%.+]] = bitcast x86_fp80* [[ADDR]] to i128*
|
||||
// CHECK: [[INT_VAL:%.+]] = load atomic i128* [[ADDR_INT]] seq_cst, align 16
|
||||
// CHECK: [[INT_VAL:%.+]] = load atomic i128, i128* [[ADDR_INT]] seq_cst, align 16
|
||||
// CHECK: [[INT_LD_TEMP:%.+]] = bitcast x86_fp80* [[LD_TEMP:%.+]] to i128*
|
||||
// CHECK: store i128 [[INT_VAL]], i128* [[INT_LD_TEMP:%.+]], align 16
|
||||
// CHECK: [[RET_VAL:%.+]] = load x86_fp80* [[LD_TEMP]], align 16
|
||||
// CHECK: [[RET_VAL:%.+]] = load x86_fp80, x86_fp80* [[LD_TEMP]], align 16
|
||||
// CHECK: ret x86_fp80 [[RET_VAL]]
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80** %{{.+}}, align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** %{{.+}}, align 4
|
||||
// CHECK32: [[VOID_ADDR:%.+]] = bitcast x86_fp80* [[ADDR]] to i8*
|
||||
// CHECK32: [[VOID_LD_TEMP:%.+]] = bitcast x86_fp80* [[LD_TEMP:%.+]] to i8*
|
||||
// CHECK32: call void @__atomic_load(i32 12, i8* [[VOID_ADDR]], i8* [[VOID_LD_TEMP]], i32 5)
|
||||
// CHECK32: [[RET_VAL:%.+]] = load x86_fp80* [[LD_TEMP]], align 4
|
||||
// CHECK32: [[RET_VAL:%.+]] = load x86_fp80, x86_fp80* [[LD_TEMP]], align 4
|
||||
// CHECK32: ret x86_fp80 [[RET_VAL]]
|
||||
|
||||
return *addr;
|
||||
|
@ -239,12 +239,12 @@ long double testassign(_Atomic long double *addr) {
|
|||
long double test_volatile_inc(volatile _Atomic long double *addr) {
|
||||
// CHECK-LABEL: @test_volatile_inc
|
||||
// CHECK: store x86_fp80* %{{.+}}, x86_fp80** [[ADDR_ADDR:%.+]], align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80** [[ADDR_ADDR]], align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** [[ADDR_ADDR]], align 8
|
||||
// CHECK: [[INT_ADDR:%.+]] = bitcast x86_fp80* [[ADDR]] to i128*
|
||||
// CHECK: [[INT_VALUE:%.+]] = load atomic volatile i128* [[INT_ADDR]] seq_cst, align 16
|
||||
// CHECK: [[INT_VALUE:%.+]] = load atomic volatile i128, i128* [[INT_ADDR]] seq_cst, align 16
|
||||
// CHECK: [[INT_LOAD_ADDR:%.+]] = bitcast x86_fp80* [[LD_ADDR:%.+]] to i128*
|
||||
// CHECK: store i128 [[INT_VALUE]], i128* [[INT_LOAD_ADDR]], align 16
|
||||
// CHECK: [[LD_VALUE:%.+]] = load x86_fp80* [[LD_ADDR]], align 16
|
||||
// CHECK: [[LD_VALUE:%.+]] = load x86_fp80, x86_fp80* [[LD_ADDR]], align 16
|
||||
// CHECK: br label %[[ATOMIC_OP:.+]]
|
||||
// CHECK: [[ATOMIC_OP]]
|
||||
// CHECK: [[OLD_VALUE:%.+]] = phi x86_fp80 [ [[LD_VALUE]], %{{.+}} ], [ [[LD_VALUE:%.+]], %[[ATOMIC_OP]] ]
|
||||
|
@ -253,29 +253,29 @@ long double test_volatile_inc(volatile _Atomic long double *addr) {
|
|||
// CHECK: call void @llvm.memset.p0i8.i64(i8* [[OLD_VALUE_VOID_ADDR]], i8 0, i64 16, i32 16, i1 false)
|
||||
// CHECK: store x86_fp80 [[OLD_VALUE]], x86_fp80* [[OLD_VALUE_ADDR]], align 16
|
||||
// CHECK: [[OLD_INT_ADDR:%.+]] = bitcast x86_fp80* [[OLD_VALUE_ADDR]] to i128*
|
||||
// CHECK: [[OLD_INT:%.+]] = load i128* [[OLD_INT_ADDR]], align 16
|
||||
// CHECK: [[OLD_INT:%.+]] = load i128, i128* [[OLD_INT_ADDR]], align 16
|
||||
// CHECK: [[NEW_VALUE_VOID_ADDR:%.+]] = bitcast x86_fp80* [[NEW_VALUE_ADDR:%.+]] to i8*
|
||||
// CHECK: call void @llvm.memset.p0i8.i64(i8* [[NEW_VALUE_VOID_ADDR]], i8 0, i64 16, i32 16, i1 false)
|
||||
// CHECK: store x86_fp80 [[INC_VALUE]], x86_fp80* [[NEW_VALUE_ADDR]], align 16
|
||||
// CHECK: [[NEW_INT_ADDR:%.+]] = bitcast x86_fp80* [[NEW_VALUE_ADDR]] to i128*
|
||||
// CHECK: [[NEW_INT:%.+]] = load i128* [[NEW_INT_ADDR]], align 16
|
||||
// CHECK: [[NEW_INT:%.+]] = load i128, i128* [[NEW_INT_ADDR]], align 16
|
||||
// CHECK: [[OBJ_INT_ADDR:%.+]] = bitcast x86_fp80* [[ADDR]] to i128*
|
||||
// CHECK: [[RES:%.+]] = cmpxchg volatile i128* [[OBJ_INT_ADDR]], i128 [[OLD_INT]], i128 [[NEW_INT]] seq_cst seq_cst
|
||||
// CHECK: [[OLD_VALUE:%.+]] = extractvalue { i128, i1 } [[RES]], 0
|
||||
// CHECK: [[FAIL_SUCCESS:%.+]] = extractvalue { i128, i1 } [[RES]], 1
|
||||
// CHECK: [[OLD_VALUE_RES_INT_PTR:%.+]] = bitcast x86_fp80* [[OLD_VALUE_RES_PTR:%.+]] to i128*
|
||||
// CHECK: store i128 [[OLD_VALUE]], i128* [[OLD_VALUE_RES_INT_PTR]], align 16
|
||||
// CHECK: [[LD_VALUE]] = load x86_fp80* [[OLD_VALUE_RES_PTR]], align 16
|
||||
// CHECK: [[LD_VALUE]] = load x86_fp80, x86_fp80* [[OLD_VALUE_RES_PTR]], align 16
|
||||
// CHECK: br i1 [[FAIL_SUCCESS]], label %[[ATOMIC_CONT:.+]], label %[[ATOMIC_OP]]
|
||||
// CHECK: [[ATOMIC_CONT]]
|
||||
// CHECK: ret x86_fp80 [[INC_VALUE]]
|
||||
// CHECK32-LABEL: @test_volatile_inc
|
||||
// CHECK32: store x86_fp80* %{{.+}}, x86_fp80** [[ADDR_ADDR:%.+]], align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80** [[ADDR_ADDR]], align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** [[ADDR_ADDR]], align 4
|
||||
// CHECK32: [[VOID_PTR:%.+]] = bitcast x86_fp80* [[ADDR]] to i8*
|
||||
// CHECK32: [[TEMP_LD_PTR:%.+]] = bitcast x86_fp80* [[TEMP_LD_ADDR:%.+]] to i8*
|
||||
// CHECK32: call void @__atomic_load(i32 12, i8* [[VOID_PTR]], i8* [[TEMP_LD_PTR]], i32 5)
|
||||
// CHECK32: [[LD_VALUE:%.+]] = load x86_fp80* [[TEMP_LD_ADDR]], align 4
|
||||
// CHECK32: [[LD_VALUE:%.+]] = load x86_fp80, x86_fp80* [[TEMP_LD_ADDR]], align 4
|
||||
// CHECK32: br label %[[ATOMIC_OP:.+]]
|
||||
// CHECK32: [[ATOMIC_OP]]
|
||||
// CHECK32: [[OLD_VALUE:%.+]] = phi x86_fp80 [ [[LD_VALUE]], %{{.+}} ], [ [[LD_VALUE:%.+]], %[[ATOMIC_OP]] ]
|
||||
|
@ -290,7 +290,7 @@ long double test_volatile_inc(volatile _Atomic long double *addr) {
|
|||
// CHECK32: [[EXPECTED:%.+]] = bitcast x86_fp80* [[OLD_VALUE_ADDR]] to i8*
|
||||
// CHECK32: [[DESIRED:%.+]] = bitcast x86_fp80* [[DESIRED_VALUE_ADDR]] to i8*
|
||||
// CHECK32: [[FAIL_SUCCESS:%.+]] = call zeroext i1 @__atomic_compare_exchange(i32 12, i8* [[OBJ]], i8* [[EXPECTED]], i8* [[DESIRED]], i32 5, i32 5)
|
||||
// CHECK32: [[LD_VALUE]] = load x86_fp80* [[OLD_VALUE_ADDR]], align 4
|
||||
// CHECK32: [[LD_VALUE]] = load x86_fp80, x86_fp80* [[OLD_VALUE_ADDR]], align 4
|
||||
// CHECK32: br i1 [[FAIL_SUCCESS]], label %[[ATOMIC_CONT:.+]], label %[[ATOMIC_OP]]
|
||||
// CHECK32: [[ATOMIC_CONT]]
|
||||
// CHECK32: ret x86_fp80 [[INC_VALUE]]
|
||||
|
@ -300,12 +300,12 @@ long double test_volatile_inc(volatile _Atomic long double *addr) {
|
|||
long double test_volatile_dec(volatile _Atomic long double *addr) {
|
||||
// CHECK-LABEL: @test_volatile_dec
|
||||
// CHECK: store x86_fp80* %{{.+}}, x86_fp80** [[ADDR_ADDR:%.+]], align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80** [[ADDR_ADDR]], align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** [[ADDR_ADDR]], align 8
|
||||
// CHECK: [[INT_ADDR:%.+]] = bitcast x86_fp80* [[ADDR]] to i128*
|
||||
// CHECK: [[INT_VALUE:%.+]] = load atomic volatile i128* [[INT_ADDR]] seq_cst, align 16
|
||||
// CHECK: [[INT_VALUE:%.+]] = load atomic volatile i128, i128* [[INT_ADDR]] seq_cst, align 16
|
||||
// CHECK: [[INT_LOAD_ADDR:%.+]] = bitcast x86_fp80* [[LD_ADDR:%.+]] to i128*
|
||||
// CHECK: store i128 [[INT_VALUE]], i128* [[INT_LOAD_ADDR]], align 16
|
||||
// CHECK: [[ORIG_LD_VALUE:%.+]] = load x86_fp80* [[LD_ADDR]], align 16
|
||||
// CHECK: [[ORIG_LD_VALUE:%.+]] = load x86_fp80, x86_fp80* [[LD_ADDR]], align 16
|
||||
// CHECK: br label %[[ATOMIC_OP:.+]]
|
||||
// CHECK: [[ATOMIC_OP]]
|
||||
// CHECK: [[OLD_VALUE:%.+]] = phi x86_fp80 [ [[ORIG_LD_VALUE]], %{{.+}} ], [ [[LD_VALUE:%.+]], %[[ATOMIC_OP]] ]
|
||||
|
@ -314,29 +314,29 @@ long double test_volatile_dec(volatile _Atomic long double *addr) {
|
|||
// CHECK: call void @llvm.memset.p0i8.i64(i8* [[OLD_VALUE_VOID_ADDR]], i8 0, i64 16, i32 16, i1 false)
|
||||
// CHECK: store x86_fp80 [[OLD_VALUE]], x86_fp80* [[OLD_VALUE_ADDR]], align 16
|
||||
// CHECK: [[OLD_INT_ADDR:%.+]] = bitcast x86_fp80* [[OLD_VALUE_ADDR]] to i128*
|
||||
// CHECK: [[OLD_INT:%.+]] = load i128* [[OLD_INT_ADDR]], align 16
|
||||
// CHECK: [[OLD_INT:%.+]] = load i128, i128* [[OLD_INT_ADDR]], align 16
|
||||
// CHECK: [[NEW_VALUE_VOID_ADDR:%.+]] = bitcast x86_fp80* [[NEW_VALUE_ADDR:%.+]] to i8*
|
||||
// CHECK: call void @llvm.memset.p0i8.i64(i8* [[NEW_VALUE_VOID_ADDR]], i8 0, i64 16, i32 16, i1 false)
|
||||
// CHECK: store x86_fp80 [[DEC_VALUE]], x86_fp80* [[NEW_VALUE_ADDR]], align 16
|
||||
// CHECK: [[NEW_INT_ADDR:%.+]] = bitcast x86_fp80* [[NEW_VALUE_ADDR]] to i128*
|
||||
// CHECK: [[NEW_INT:%.+]] = load i128* [[NEW_INT_ADDR]], align 16
|
||||
// CHECK: [[NEW_INT:%.+]] = load i128, i128* [[NEW_INT_ADDR]], align 16
|
||||
// CHECK: [[OBJ_INT_ADDR:%.+]] = bitcast x86_fp80* [[ADDR]] to i128*
|
||||
// CHECK: [[RES:%.+]] = cmpxchg volatile i128* [[OBJ_INT_ADDR]], i128 [[OLD_INT]], i128 [[NEW_INT]] seq_cst seq_cst
|
||||
// CHECK: [[OLD_VALUE:%.+]] = extractvalue { i128, i1 } [[RES]], 0
|
||||
// CHECK: [[FAIL_SUCCESS:%.+]] = extractvalue { i128, i1 } [[RES]], 1
|
||||
// CHECK: [[OLD_VALUE_RES_INT_PTR:%.+]] = bitcast x86_fp80* [[OLD_VALUE_RES_PTR:%.+]] to i128*
|
||||
// CHECK: store i128 [[OLD_VALUE]], i128* [[OLD_VALUE_RES_INT_PTR]], align 16
|
||||
// CHECK: [[LD_VALUE]] = load x86_fp80* [[OLD_VALUE_RES_PTR]], align 16
|
||||
// CHECK: [[LD_VALUE]] = load x86_fp80, x86_fp80* [[OLD_VALUE_RES_PTR]], align 16
|
||||
// CHECK: br i1 [[FAIL_SUCCESS]], label %[[ATOMIC_CONT:.+]], label %[[ATOMIC_OP]]
|
||||
// CHECK: [[ATOMIC_CONT]]
|
||||
// CHECK: ret x86_fp80 [[ORIG_LD_VALUE]]
|
||||
// CHECK32-LABEL: @test_volatile_dec
|
||||
// CHECK32: store x86_fp80* %{{.+}}, x86_fp80** [[ADDR_ADDR:%.+]], align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80** [[ADDR_ADDR]], align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** [[ADDR_ADDR]], align 4
|
||||
// CHECK32: [[VOID_PTR:%.+]] = bitcast x86_fp80* [[ADDR]] to i8*
|
||||
// CHECK32: [[TEMP_LD_PTR:%.+]] = bitcast x86_fp80* [[TEMP_LD_ADDR:%.+]] to i8*
|
||||
// CHECK32: call void @__atomic_load(i32 12, i8* [[VOID_PTR]], i8* [[TEMP_LD_PTR]], i32 5)
|
||||
// CHECK32: [[ORIG_LD_VALUE:%.+]] = load x86_fp80* [[TEMP_LD_ADDR]], align 4
|
||||
// CHECK32: [[ORIG_LD_VALUE:%.+]] = load x86_fp80, x86_fp80* [[TEMP_LD_ADDR]], align 4
|
||||
// CHECK32: br label %[[ATOMIC_OP:.+]]
|
||||
// CHECK32: [[ATOMIC_OP]]
|
||||
// CHECK32: [[OLD_VALUE:%.+]] = phi x86_fp80 [ [[ORIG_LD_VALUE]], %{{.+}} ], [ [[LD_VALUE:%.+]], %[[ATOMIC_OP]] ]
|
||||
|
@ -351,7 +351,7 @@ long double test_volatile_dec(volatile _Atomic long double *addr) {
|
|||
// CHECK32: [[EXPECTED:%.+]] = bitcast x86_fp80* [[OLD_VALUE_ADDR]] to i8*
|
||||
// CHECK32: [[DESIRED:%.+]] = bitcast x86_fp80* [[DESIRED_VALUE_ADDR]] to i8*
|
||||
// CHECK32: [[FAIL_SUCCESS:%.+]] = call zeroext i1 @__atomic_compare_exchange(i32 12, i8* [[OBJ]], i8* [[EXPECTED]], i8* [[DESIRED]], i32 5, i32 5)
|
||||
// CHECK32: [[LD_VALUE]] = load x86_fp80* [[OLD_VALUE_ADDR]], align 4
|
||||
// CHECK32: [[LD_VALUE]] = load x86_fp80, x86_fp80* [[OLD_VALUE_ADDR]], align 4
|
||||
// CHECK32: br i1 [[FAIL_SUCCESS]], label %[[ATOMIC_CONT:.+]], label %[[ATOMIC_OP]]
|
||||
// CHECK32: [[ATOMIC_CONT]]
|
||||
// CHECK32: ret x86_fp80 [[ORIG_LD_VALUE]]
|
||||
|
@ -362,12 +362,12 @@ long double test_volatile_compassign(volatile _Atomic long double *addr) {
|
|||
*addr -= 25;
|
||||
// CHECK-LABEL: @test_volatile_compassign
|
||||
// CHECK: store x86_fp80* %{{.+}}, x86_fp80** [[ADDR_ADDR:%.+]], align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80** [[ADDR_ADDR]], align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** [[ADDR_ADDR]], align 8
|
||||
// CHECK: [[INT_ADDR:%.+]] = bitcast x86_fp80* [[ADDR]] to i128*
|
||||
// CHECK: [[INT_VALUE:%.+]] = load atomic volatile i128* [[INT_ADDR]] seq_cst, align 16
|
||||
// CHECK: [[INT_VALUE:%.+]] = load atomic volatile i128, i128* [[INT_ADDR]] seq_cst, align 16
|
||||
// CHECK: [[INT_LOAD_ADDR:%.+]] = bitcast x86_fp80* [[LD_ADDR:%.+]] to i128*
|
||||
// CHECK: store i128 [[INT_VALUE]], i128* [[INT_LOAD_ADDR]], align 16
|
||||
// CHECK: [[LD_VALUE:%.+]] = load x86_fp80* [[LD_ADDR]], align 16
|
||||
// CHECK: [[LD_VALUE:%.+]] = load x86_fp80, x86_fp80* [[LD_ADDR]], align 16
|
||||
// CHECK: br label %[[ATOMIC_OP:.+]]
|
||||
// CHECK: [[ATOMIC_OP]]
|
||||
// CHECK: [[OLD_VALUE:%.+]] = phi x86_fp80 [ [[LD_VALUE]], %{{.+}} ], [ [[LD_VALUE:%.+]], %[[ATOMIC_OP]] ]
|
||||
|
@ -376,34 +376,34 @@ long double test_volatile_compassign(volatile _Atomic long double *addr) {
|
|||
// CHECK: call void @llvm.memset.p0i8.i64(i8* [[OLD_VALUE_VOID_ADDR]], i8 0, i64 16, i32 16, i1 false)
|
||||
// CHECK: store x86_fp80 [[OLD_VALUE]], x86_fp80* [[OLD_VALUE_ADDR]], align 16
|
||||
// CHECK: [[OLD_INT_ADDR:%.+]] = bitcast x86_fp80* [[OLD_VALUE_ADDR]] to i128*
|
||||
// CHECK: [[OLD_INT:%.+]] = load i128* [[OLD_INT_ADDR]], align 16
|
||||
// CHECK: [[OLD_INT:%.+]] = load i128, i128* [[OLD_INT_ADDR]], align 16
|
||||
// CHECK: [[NEW_VALUE_VOID_ADDR:%.+]] = bitcast x86_fp80* [[NEW_VALUE_ADDR:%.+]] to i8*
|
||||
// CHECK: call void @llvm.memset.p0i8.i64(i8* [[NEW_VALUE_VOID_ADDR]], i8 0, i64 16, i32 16, i1 false)
|
||||
// CHECK: store x86_fp80 [[SUB_VALUE]], x86_fp80* [[NEW_VALUE_ADDR]], align 16
|
||||
// CHECK: [[NEW_INT_ADDR:%.+]] = bitcast x86_fp80* [[NEW_VALUE_ADDR]] to i128*
|
||||
// CHECK: [[NEW_INT:%.+]] = load i128* [[NEW_INT_ADDR]], align 16
|
||||
// CHECK: [[NEW_INT:%.+]] = load i128, i128* [[NEW_INT_ADDR]], align 16
|
||||
// CHECK: [[OBJ_INT_ADDR:%.+]] = bitcast x86_fp80* [[ADDR]] to i128*
|
||||
// CHECK: [[RES:%.+]] = cmpxchg volatile i128* [[OBJ_INT_ADDR]], i128 [[OLD_INT]], i128 [[NEW_INT]] seq_cst seq_cst
|
||||
// CHECK: [[OLD_VALUE:%.+]] = extractvalue { i128, i1 } [[RES]], 0
|
||||
// CHECK: [[FAIL_SUCCESS:%.+]] = extractvalue { i128, i1 } [[RES]], 1
|
||||
// CHECK: [[OLD_VALUE_RES_INT_PTR:%.+]] = bitcast x86_fp80* [[OLD_VALUE_RES_PTR:%.+]] to i128*
|
||||
// CHECK: store i128 [[OLD_VALUE]], i128* [[OLD_VALUE_RES_INT_PTR]], align 16
|
||||
// CHECK: [[LD_VALUE]] = load x86_fp80* [[OLD_VALUE_RES_PTR]], align 16
|
||||
// CHECK: [[LD_VALUE]] = load x86_fp80, x86_fp80* [[OLD_VALUE_RES_PTR]], align 16
|
||||
// CHECK: br i1 [[FAIL_SUCCESS]], label %[[ATOMIC_CONT:.+]], label %[[ATOMIC_OP]]
|
||||
// CHECK: [[ATOMIC_CONT]]
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80** %{{.+}}, align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** %{{.+}}, align 8
|
||||
// CHECK: [[ADDR_INT:%.+]] = bitcast x86_fp80* [[ADDR]] to i128*
|
||||
// CHECK: [[INT_VAL:%.+]] = load atomic volatile i128* [[ADDR_INT]] seq_cst, align 16
|
||||
// CHECK: [[INT_VAL:%.+]] = load atomic volatile i128, i128* [[ADDR_INT]] seq_cst, align 16
|
||||
// CHECK: [[INT_LD_TEMP:%.+]] = bitcast x86_fp80* [[LD_TEMP:%.+]] to i128*
|
||||
// CHECK: store i128 [[INT_VAL]], i128* [[INT_LD_TEMP:%.+]], align 16
|
||||
// CHECK: [[RET_VAL:%.+]] = load x86_fp80* [[LD_TEMP]], align 16
|
||||
// CHECK: [[RET_VAL:%.+]] = load x86_fp80, x86_fp80* [[LD_TEMP]], align 16
|
||||
// CHECK32-LABEL: @test_volatile_compassign
|
||||
// CHECK32: store x86_fp80* %{{.+}}, x86_fp80** [[ADDR_ADDR:%.+]], align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80** [[ADDR_ADDR]], align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** [[ADDR_ADDR]], align 4
|
||||
// CHECK32: [[VOID_PTR:%.+]] = bitcast x86_fp80* [[ADDR]] to i8*
|
||||
// CHECK32: [[TEMP_LD_PTR:%.+]] = bitcast x86_fp80* [[TEMP_LD_ADDR:%.+]] to i8*
|
||||
// CHECK32: call void @__atomic_load(i32 12, i8* [[VOID_PTR]], i8* [[TEMP_LD_PTR]], i32 5)
|
||||
// CHECK32: [[LD_VALUE:%.+]] = load x86_fp80* [[TEMP_LD_ADDR]], align 4
|
||||
// CHECK32: [[LD_VALUE:%.+]] = load x86_fp80, x86_fp80* [[TEMP_LD_ADDR]], align 4
|
||||
// CHECK32: br label %[[ATOMIC_OP:.+]]
|
||||
// CHECK32: [[ATOMIC_OP]]
|
||||
// CHECK32: [[OLD_VALUE:%.+]] = phi x86_fp80 [ [[LD_VALUE]], %{{.+}} ], [ [[LD_VALUE:%.+]], %[[ATOMIC_OP]] ]
|
||||
|
@ -418,14 +418,14 @@ long double test_volatile_compassign(volatile _Atomic long double *addr) {
|
|||
// CHECK32: [[EXPECTED:%.+]] = bitcast x86_fp80* [[OLD_VALUE_ADDR]] to i8*
|
||||
// CHECK32: [[DESIRED:%.+]] = bitcast x86_fp80* [[DESIRED_VALUE_ADDR]] to i8*
|
||||
// CHECK32: [[FAIL_SUCCESS:%.+]] = call zeroext i1 @__atomic_compare_exchange(i32 12, i8* [[OBJ]], i8* [[EXPECTED]], i8* [[DESIRED]], i32 5, i32 5)
|
||||
// CHECK32: [[LD_VALUE]] = load x86_fp80* [[OLD_VALUE_ADDR]], align 4
|
||||
// CHECK32: [[LD_VALUE]] = load x86_fp80, x86_fp80* [[OLD_VALUE_ADDR]], align 4
|
||||
// CHECK32: br i1 [[FAIL_SUCCESS]], label %[[ATOMIC_CONT:.+]], label %[[ATOMIC_OP]]
|
||||
// CHECK32: [[ATOMIC_CONT]]
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80** %{{.+}}, align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** %{{.+}}, align 4
|
||||
// CHECK32: [[VOID_ADDR:%.+]] = bitcast x86_fp80* [[ADDR]] to i8*
|
||||
// CHECK32: [[VOID_GET_ADDR:%.+]] = bitcast x86_fp80* [[GET_ADDR:%.+]] to i8*
|
||||
// CHECK32: call void @__atomic_load(i32 12, i8* [[VOID_ADDR]], i8* [[VOID_GET_ADDR]], i32 5)
|
||||
// CHECK32: [[RET_VAL:%.+]] = load x86_fp80* [[GET_ADDR]], align 4
|
||||
// CHECK32: [[RET_VAL:%.+]] = load x86_fp80, x86_fp80* [[GET_ADDR]], align 4
|
||||
// CHECK32: ret x86_fp80 [[RET_VAL]]
|
||||
return *addr;
|
||||
}
|
||||
|
@ -433,17 +433,17 @@ long double test_volatile_compassign(volatile _Atomic long double *addr) {
|
|||
long double test_volatile_assign(volatile _Atomic long double *addr) {
|
||||
// CHECK-LABEL: @test_volatile_assign
|
||||
// CHECK: store x86_fp80* %{{.+}}, x86_fp80** [[ADDR_ADDR:%.+]], align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80** [[ADDR_ADDR]], align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** [[ADDR_ADDR]], align 8
|
||||
// CHECK: [[STORE_TEMP_VOID_PTR:%.+]] = bitcast x86_fp80* [[STORE_TEMP_PTR:%.+]] to i8*
|
||||
// CHECK: call void @llvm.memset.p0i8.i64(i8* [[STORE_TEMP_VOID_PTR]], i8 0, i64 16, i32 16, i1 false)
|
||||
// CHECK: store x86_fp80 {{.+}}, x86_fp80* [[STORE_TEMP_PTR]], align 16
|
||||
// CHECK: [[STORE_TEMP_INT_PTR:%.+]] = bitcast x86_fp80* [[STORE_TEMP_PTR]] to i128*
|
||||
// CHECK: [[STORE_TEMP_INT:%.+]] = load i128* [[STORE_TEMP_INT_PTR]], align 16
|
||||
// CHECK: [[STORE_TEMP_INT:%.+]] = load i128, i128* [[STORE_TEMP_INT_PTR]], align 16
|
||||
// CHECK: [[ADDR_INT:%.+]] = bitcast x86_fp80* [[ADDR]] to i128*
|
||||
// CHECK: store atomic volatile i128 [[STORE_TEMP_INT]], i128* [[ADDR_INT]] seq_cst, align 16
|
||||
// CHECK32-LABEL: @test_volatile_assign
|
||||
// CHECK32: store x86_fp80* %{{.+}}, x86_fp80** [[ADDR_ADDR:%.+]], align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80** [[ADDR_ADDR]], align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** [[ADDR_ADDR]], align 4
|
||||
// CHECK32: [[STORE_TEMP_VOID_PTR:%.+]] = bitcast x86_fp80* [[STORE_TEMP_PTR:%.+]] to i8*
|
||||
// CHECK32: call void @llvm.memset.p0i8.i64(i8* [[STORE_TEMP_VOID_PTR]], i8 0, i64 12, i32 4, i1 false)
|
||||
// CHECK32: store x86_fp80 {{.+}}, x86_fp80* [[STORE_TEMP_PTR]], align 4
|
||||
|
@ -451,18 +451,18 @@ long double test_volatile_assign(volatile _Atomic long double *addr) {
|
|||
// CHECK32: [[STORE_TEMP_VOID_PTR:%.+]] = bitcast x86_fp80* [[STORE_TEMP_PTR]] to i8*
|
||||
// CHECK32: call void @__atomic_store(i32 12, i8* [[ADDR_VOID]], i8* [[STORE_TEMP_VOID_PTR]], i32 5)
|
||||
*addr = 115;
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80** %{{.+}}, align 8
|
||||
// CHECK: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** %{{.+}}, align 8
|
||||
// CHECK: [[ADDR_INT:%.+]] = bitcast x86_fp80* [[ADDR]] to i128*
|
||||
// CHECK: [[INT_VAL:%.+]] = load atomic volatile i128* [[ADDR_INT]] seq_cst, align 16
|
||||
// CHECK: [[INT_VAL:%.+]] = load atomic volatile i128, i128* [[ADDR_INT]] seq_cst, align 16
|
||||
// CHECK: [[INT_LD_TEMP:%.+]] = bitcast x86_fp80* [[LD_TEMP:%.+]] to i128*
|
||||
// CHECK: store i128 [[INT_VAL]], i128* [[INT_LD_TEMP:%.+]], align 16
|
||||
// CHECK: [[RET_VAL:%.+]] = load x86_fp80* [[LD_TEMP]], align 16
|
||||
// CHECK: [[RET_VAL:%.+]] = load x86_fp80, x86_fp80* [[LD_TEMP]], align 16
|
||||
// CHECK: ret x86_fp80 [[RET_VAL]]
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80** %{{.+}}, align 4
|
||||
// CHECK32: [[ADDR:%.+]] = load x86_fp80*, x86_fp80** %{{.+}}, align 4
|
||||
// CHECK32: [[VOID_ADDR:%.+]] = bitcast x86_fp80* [[ADDR]] to i8*
|
||||
// CHECK32: [[VOID_LD_TEMP:%.+]] = bitcast x86_fp80* [[LD_TEMP:%.+]] to i8*
|
||||
// CHECK32: call void @__atomic_load(i32 12, i8* [[VOID_ADDR]], i8* [[VOID_LD_TEMP]], i32 5)
|
||||
// CHECK32: [[RET_VAL:%.+]] = load x86_fp80* [[LD_TEMP]], align 4
|
||||
// CHECK32: [[RET_VAL:%.+]] = load x86_fp80, x86_fp80* [[LD_TEMP]], align 4
|
||||
// CHECK32: ret x86_fp80 [[RET_VAL]]
|
||||
|
||||
return *addr;
|
||||
|
|
|
@ -402,8 +402,8 @@ void test49(double d, double e) {
|
|||
test49_helper(d, e);
|
||||
}
|
||||
// CHECK-LABEL: define void @test49(
|
||||
// CHECK: [[T0:%.*]] = load double*
|
||||
// CHECK-NEXT: [[T1:%.*]] = load double*
|
||||
// CHECK: [[T0:%.*]] = load double, double*
|
||||
// CHECK-NEXT: [[T1:%.*]] = load double, double*
|
||||
// CHECK-NEXT: call void (double, ...)* @test49_helper(double [[T0]], double [[T1]])
|
||||
|
||||
void test50_helper();
|
||||
|
@ -411,8 +411,8 @@ void test50(double d, double e) {
|
|||
test50_helper(d, e);
|
||||
}
|
||||
// CHECK-LABEL: define void @test50(
|
||||
// CHECK: [[T0:%.*]] = load double*
|
||||
// CHECK-NEXT: [[T1:%.*]] = load double*
|
||||
// CHECK: [[T0:%.*]] = load double, double*
|
||||
// CHECK-NEXT: [[T1:%.*]] = load double, double*
|
||||
// CHECK-NEXT: call void (double, double, ...)* bitcast (void (...)* @test50_helper to void (double, double, ...)*)(double [[T0]], double [[T1]])
|
||||
|
||||
struct test51_s { __uint128_t intval; };
|
||||
|
@ -424,7 +424,7 @@ void test51(struct test51_s *s, __builtin_va_list argList) {
|
|||
// CHECK: [[TMP_ADDR:%.*]] = alloca [[STRUCT_TEST51:%.*]], align 16
|
||||
// CHECK: br i1
|
||||
// CHECK: [[REG_SAVE_AREA_PTR:%.*]] = getelementptr inbounds {{.*}}, i32 0, i32 3
|
||||
// CHECK-NEXT: [[REG_SAVE_AREA:%.*]] = load i8** [[REG_SAVE_AREA_PTR]]
|
||||
// CHECK-NEXT: [[REG_SAVE_AREA:%.*]] = load i8*, i8** [[REG_SAVE_AREA_PTR]]
|
||||
// CHECK-NEXT: [[VALUE_ADDR:%.*]] = getelementptr i8, i8* [[REG_SAVE_AREA]], i32 {{.*}}
|
||||
// CHECK-NEXT: [[CASTED_VALUE_ADDR:%.*]] = bitcast i8* [[VALUE_ADDR]] to [[STRUCT_TEST51]]
|
||||
// CHECK-NEXT: [[CASTED_TMP_ADDR:%.*]] = bitcast [[STRUCT_TEST51]]* [[TMP_ADDR]] to i8*
|
||||
|
|
|
@ -31,51 +31,51 @@ void testva (int n, ...) {
|
|||
|
||||
char* v1 = va_arg (ap, char*);
|
||||
f(v1);
|
||||
// CHECK: [[I:%[a-z0-9]+]] = load i8** [[AP]]
|
||||
// CHECK: [[I:%[a-z0-9]+]] = load i8*, i8** [[AP]]
|
||||
// CHECK: [[P:%[a-z0-9]+]] = bitcast i8* [[I]] to i8**
|
||||
// CHECK: [[IN:%[a-z0-9]+]] = getelementptr i8, i8* [[I]], i32 4
|
||||
// CHECK: store i8* [[IN]], i8** [[AP]]
|
||||
// CHECK: [[V1:%[a-z0-9]+]] = load i8** [[P]]
|
||||
// CHECK: [[V1:%[a-z0-9]+]] = load i8*, i8** [[P]]
|
||||
// CHECK: store i8* [[V1]], i8** [[V:%[a-z0-9]+]], align 4
|
||||
// CHECK: [[V2:%[a-z0-9]+]] = load i8** [[V]], align 4
|
||||
// CHECK: [[V2:%[a-z0-9]+]] = load i8*, i8** [[V]], align 4
|
||||
// CHECK: call void @f(i8* [[V2]])
|
||||
|
||||
char v2 = va_arg (ap, char); // expected-warning{{second argument to 'va_arg' is of promotable type 'char'}}
|
||||
f(&v2);
|
||||
// CHECK: [[I:%[a-z0-9]+]] = load i8** [[AP]]
|
||||
// CHECK: [[I:%[a-z0-9]+]] = load i8*, i8** [[AP]]
|
||||
// CHECK: [[IN:%[a-z0-9]+]] = getelementptr i8, i8* [[I]], i32 4
|
||||
// CHECK: store i8* [[IN]], i8** [[AP]]
|
||||
// CHECK: [[V1:%[a-z0-9]+]] = load i8* [[I]]
|
||||
// CHECK: [[V1:%[a-z0-9]+]] = load i8, i8* [[I]]
|
||||
// CHECK: store i8 [[V1]], i8* [[V:%[a-z0-9]+]], align 1
|
||||
// CHECK: call void @f(i8* [[V]])
|
||||
|
||||
int v3 = va_arg (ap, int);
|
||||
f(&v3);
|
||||
// CHECK: [[I:%[a-z0-9]+]] = load i8** [[AP]]
|
||||
// CHECK: [[I:%[a-z0-9]+]] = load i8*, i8** [[AP]]
|
||||
// CHECK: [[P:%[a-z0-9]+]] = bitcast i8* [[I]] to i32*
|
||||
// CHECK: [[IN:%[a-z0-9]+]] = getelementptr i8, i8* [[I]], i32 4
|
||||
// CHECK: store i8* [[IN]], i8** [[AP]]
|
||||
// CHECK: [[V1:%[a-z0-9]+]] = load i32* [[P]]
|
||||
// CHECK: [[V1:%[a-z0-9]+]] = load i32, i32* [[P]]
|
||||
// CHECK: store i32 [[V1]], i32* [[V:%[a-z0-9]+]], align 4
|
||||
// CHECK: [[V2:%[a-z0-9]+]] = bitcast i32* [[V]] to i8*
|
||||
// CHECK: call void @f(i8* [[V2]])
|
||||
|
||||
long long int v4 = va_arg (ap, long long int);
|
||||
f(&v4);
|
||||
// CHECK: [[I:%[a-z0-9]+]] = load i8** [[AP]]
|
||||
// CHECK: [[I:%[a-z0-9]+]] = load i8*, i8** [[AP]]
|
||||
// CHECK: [[P:%[a-z0-9]+]] = bitcast i8* [[I]] to i64*
|
||||
// CHECK: [[IN:%[a-z0-9]+]] = getelementptr i8, i8* [[I]], i32 8
|
||||
// CHECK: store i8* [[IN]], i8** [[AP]]
|
||||
// CHECK: [[V1:%[a-z0-9]+]] = load i64* [[P]]
|
||||
// CHECK: [[V1:%[a-z0-9]+]] = load i64, i64* [[P]]
|
||||
// CHECK: store i64 [[V1]], i64* [[V:%[a-z0-9]+]], align 4
|
||||
// CHECK:[[V2:%[a-z0-9]+]] = bitcast i64* [[V]] to i8*
|
||||
// CHECK: call void @f(i8* [[V2]])
|
||||
|
||||
struct x v5 = va_arg (ap, struct x); // typical aggregate type
|
||||
f(&v5);
|
||||
// CHECK: [[I:%[a-z0-9]+]] = load i8** [[AP]]
|
||||
// CHECK: [[I:%[a-z0-9]+]] = load i8*, i8** [[AP]]
|
||||
// CHECK: [[I2:%[a-z0-9]+]] = bitcast i8* [[I]] to %struct.x**
|
||||
// CHECK: [[P:%[a-z0-9]+]] = load %struct.x** [[I2]]
|
||||
// CHECK: [[P:%[a-z0-9]+]] = load %struct.x*, %struct.x** [[I2]]
|
||||
// CHECK: [[IN:%[a-z0-9]+]] = getelementptr i8, i8* [[I]], i32 4
|
||||
// CHECK: store i8* [[IN]], i8** [[AP]]
|
||||
// CHECK: [[V1:%[a-z0-9]+]] = bitcast %struct.x* [[V:%[a-z0-9]+]] to i8*
|
||||
|
@ -86,9 +86,9 @@ void testva (int n, ...) {
|
|||
|
||||
int* v6 = va_arg (ap, int[4]); // an unusual aggregate type
|
||||
f(v6);
|
||||
// CHECK: [[I:%[a-z0-9]+]] = load i8** [[AP]]
|
||||
// CHECK: [[I:%[a-z0-9]+]] = load i8*, i8** [[AP]]
|
||||
// CHECK: [[I2:%[a-z0-9]+]] = bitcast i8* [[I]] to [4 x i32]**
|
||||
// CHECK: [[P:%[a-z0-9]+]] = load [4 x i32]** [[I2]]
|
||||
// CHECK: [[P:%[a-z0-9]+]] = load [4 x i32]*, [4 x i32]** [[I2]]
|
||||
// CHECK: [[IN:%[a-z0-9]+]] = getelementptr i8, i8* [[I]], i32 4
|
||||
// CHECK: store i8* [[IN]], i8** [[AP]]
|
||||
// CHECK: [[V1:%[a-z0-9]+]] = bitcast [4 x i32]* [[V0:%[a-z0-9]+]] to i8*
|
||||
|
@ -96,17 +96,17 @@ void testva (int n, ...) {
|
|||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i32(i8* [[V1]], i8* [[P1]], i32 16, i32 4, i1 false)
|
||||
// CHECK: [[V2:%[a-z0-9]+]] = getelementptr inbounds [4 x i32], [4 x i32]* [[V0]], i32 0, i32 0
|
||||
// CHECK: store i32* [[V2]], i32** [[V:%[a-z0-9]+]], align 4
|
||||
// CHECK: [[V3:%[a-z0-9]+]] = load i32** [[V]], align 4
|
||||
// CHECK: [[V3:%[a-z0-9]+]] = load i32*, i32** [[V]], align 4
|
||||
// CHECK: [[V4:%[a-z0-9]+]] = bitcast i32* [[V3]] to i8*
|
||||
// CHECK: call void @f(i8* [[V4]])
|
||||
|
||||
double v7 = va_arg (ap, double);
|
||||
f(&v7);
|
||||
// CHECK: [[I:%[a-z0-9]+]] = load i8** [[AP]]
|
||||
// CHECK: [[I:%[a-z0-9]+]] = load i8*, i8** [[AP]]
|
||||
// CHECK: [[P:%[a-z0-9]+]] = bitcast i8* [[I]] to double*
|
||||
// CHECK: [[IN:%[a-z0-9]+]] = getelementptr i8, i8* [[I]], i32 8
|
||||
// CHECK: store i8* [[IN]], i8** [[AP]]
|
||||
// CHECK: [[V1:%[a-z0-9]+]] = load double* [[P]]
|
||||
// CHECK: [[V1:%[a-z0-9]+]] = load double, double* [[P]]
|
||||
// CHECK: store double [[V1]], double* [[V:%[a-z0-9]+]], align 4
|
||||
// CHECK: [[V2:%[a-z0-9]+]] = bitcast double* [[V]] to i8*
|
||||
// CHECK: call void @f(i8* [[V2]])
|
||||
|
|
|
@ -27,25 +27,25 @@ struct MyStruct {
|
|||
// CHECK: @b = addrspace(3) global float 0.000000e+00
|
||||
|
||||
__device__ void foo() {
|
||||
// CHECK: load i32* addrspacecast (i32 addrspace(1)* @i to i32*)
|
||||
// CHECK: load i32, i32* addrspacecast (i32 addrspace(1)* @i to i32*)
|
||||
i++;
|
||||
|
||||
// CHECK: load i32* addrspacecast (i32 addrspace(4)* @j to i32*)
|
||||
// CHECK: load i32, i32* addrspacecast (i32 addrspace(4)* @j to i32*)
|
||||
j++;
|
||||
|
||||
// CHECK: load i32* addrspacecast (i32 addrspace(3)* @k to i32*)
|
||||
// CHECK: load i32, i32* addrspacecast (i32 addrspace(3)* @k to i32*)
|
||||
k++;
|
||||
|
||||
static int li;
|
||||
// CHECK: load i32* addrspacecast (i32 addrspace(1)* @_ZZ3foovE2li to i32*)
|
||||
// CHECK: load i32, i32* addrspacecast (i32 addrspace(1)* @_ZZ3foovE2li to i32*)
|
||||
li++;
|
||||
|
||||
__constant__ int lj;
|
||||
// CHECK: load i32* addrspacecast (i32 addrspace(4)* @_ZZ3foovE2lj to i32*)
|
||||
// CHECK: load i32, i32* addrspacecast (i32 addrspace(4)* @_ZZ3foovE2lj to i32*)
|
||||
lj++;
|
||||
|
||||
__shared__ int lk;
|
||||
// CHECK: load i32* addrspacecast (i32 addrspace(3)* @_ZZ3foovE2lk to i32*)
|
||||
// CHECK: load i32, i32* addrspacecast (i32 addrspace(3)* @_ZZ3foovE2lk to i32*)
|
||||
lk++;
|
||||
}
|
||||
|
||||
|
|
|
@ -8,11 +8,11 @@ struct foo {
|
|||
};
|
||||
int bar(struct foo p, int x) {
|
||||
// CHECK: bar
|
||||
// CHECK: %[[val:.*]] = load i32* {{.*}}
|
||||
// CHECK: %[[val:.*]] = load i32, i32* {{.*}}
|
||||
// CHECK-NEXT: ashr i32 %[[val]]
|
||||
// CHECK: = load i32* {{.*}}
|
||||
// CHECK: = load i32* {{.*}}
|
||||
// CHECK: %[[val:.*]] = load i32* {{.*}}
|
||||
// CHECK: = load i32, i32* {{.*}}
|
||||
// CHECK: = load i32, i32* {{.*}}
|
||||
// CHECK: %[[val:.*]] = load i32, i32* {{.*}}
|
||||
// CHECK-NEXT: ashr i32 %[[val]]
|
||||
x = (p.y > x ? x : p.y);
|
||||
return x;
|
||||
|
|
|
@ -16,14 +16,14 @@ volatile float TestAlign(void)
|
|||
// CHECK-NEXT: [[CALL:%.*]] = call noalias i8* @_Znwm(i64 32)
|
||||
// CHECK-NEXT: [[ZERO:%.*]] = bitcast i8* [[CALL]] to <8 x float>*
|
||||
// CHECK-NEXT: store <8 x float>* [[ZERO]], <8 x float>** [[P:%.*]], align 8
|
||||
// CHECK-NEXT: [[ONE:%.*]] = load <8 x float>** [[P]], align 8
|
||||
// CHECK-NEXT: [[TWO:%.*]] = load volatile <8 x float>* [[ONE]], align 16
|
||||
// CHECK-NEXT: [[THREE:%.*]] = load <8 x float>** [[P]], align 8
|
||||
// CHECK-NEXT: [[ONE:%.*]] = load <8 x float>*, <8 x float>** [[P]], align 8
|
||||
// CHECK-NEXT: [[TWO:%.*]] = load volatile <8 x float>, <8 x float>* [[ONE]], align 16
|
||||
// CHECK-NEXT: [[THREE:%.*]] = load <8 x float>*, <8 x float>** [[P]], align 8
|
||||
// CHECK-NEXT: store volatile <8 x float> [[TWO]], <8 x float>* [[THREE]], align 16
|
||||
// CHECK-NEXT: [[FOUR:%.*]] = load <8 x float>** [[P]], align 8
|
||||
// CHECK-NEXT: [[FIVE:%.*]] = load volatile <8 x float>* [[FOUR]], align 16
|
||||
// CHECK-NEXT: [[FOUR:%.*]] = load <8 x float>*, <8 x float>** [[P]], align 8
|
||||
// CHECK-NEXT: [[FIVE:%.*]] = load volatile <8 x float>, <8 x float>* [[FOUR]], align 16
|
||||
// CHECK-NEXT: store <8 x float> [[FIVE]], <8 x float>* [[R]], align 32
|
||||
// CHECK-NEXT: [[SIX:%.*]] = load <8 x float>* [[R]], align 32
|
||||
// CHECK-NEXT: [[SIX:%.*]] = load <8 x float>, <8 x float>* [[R]], align 32
|
||||
// CHECK-NEXT: [[VECEXT:%.*]] = extractelement <8 x float> [[SIX]], i32 0
|
||||
// CHECK-NEXT: ret float [[VECEXT]]
|
||||
|
||||
|
@ -45,13 +45,13 @@ volatile float TestAlign2(void)
|
|||
// CHECK-NEXT: [[CALL:%.*]] = call noalias i8* @_Znwm(i64 32)
|
||||
// CHECK-NEXT: [[ZERO:%.*]] = bitcast i8* [[CALL]] to <8 x float>*
|
||||
// CHECK-NEXT: store <8 x float>* [[ZERO]], <8 x float>** [[P:%.*]], align 8
|
||||
// CHECK-NEXT: [[ONE:%.*]] = load <8 x float>** [[P]], align 8
|
||||
// CHECK-NEXT: [[TWO:%.*]] = load volatile <8 x float>* [[ONE]], align 32
|
||||
// CHECK-NEXT: [[THREE:%.*]] = load <8 x float>** [[P]], align 8
|
||||
// CHECK-NEXT: [[ONE:%.*]] = load <8 x float>*, <8 x float>** [[P]], align 8
|
||||
// CHECK-NEXT: [[TWO:%.*]] = load volatile <8 x float>, <8 x float>* [[ONE]], align 32
|
||||
// CHECK-NEXT: [[THREE:%.*]] = load <8 x float>*, <8 x float>** [[P]], align 8
|
||||
// CHECK-NEXT: store volatile <8 x float> [[TWO]], <8 x float>* [[THREE]], align 32
|
||||
// CHECK-NEXT: [[FOUR:%.*]] = load <8 x float>** [[P]], align 8
|
||||
// CHECK-NEXT: [[FIVE:%.*]] = load volatile <8 x float>* [[FOUR]], align 32
|
||||
// CHECK-NEXT: [[FOUR:%.*]] = load <8 x float>*, <8 x float>** [[P]], align 8
|
||||
// CHECK-NEXT: [[FIVE:%.*]] = load volatile <8 x float>, <8 x float>* [[FOUR]], align 32
|
||||
// CHECK-NEXT: store <8 x float> [[FIVE]], <8 x float>* [[R]], align 32
|
||||
// CHECK-NEXT: [[SIX:%.*]] = load <8 x float>* [[R]], align 32
|
||||
// CHECK-NEXT: [[SIX:%.*]] = load <8 x float>, <8 x float>* [[R]], align 32
|
||||
// CHECK-NEXT: [[VECEXT:%.*]] = extractelement <8 x float> [[SIX]], i32 0
|
||||
// CHECK-NEXT: ret float [[VECEXT]]
|
||||
|
|
|
@ -82,7 +82,7 @@ namespace PR10512 {
|
|||
// CHECK-LABEL: define void @_ZN7PR105121AC2Ev
|
||||
// CHECK: [[THISADDR:%[a-zA-z0-9.]+]] = alloca [[A:%"struct[A-Za-z0-9:.]+"]]
|
||||
// CHECK-NEXT: store [[A]]* [[THIS:%[a-zA-z0-9.]+]], [[A]]** [[THISADDR]]
|
||||
// CHECK-NEXT: [[THIS1:%[a-zA-z0-9.]+]] = load [[A]]** [[THISADDR]]
|
||||
// CHECK-NEXT: [[THIS1:%[a-zA-z0-9.]+]] = load [[A]]*, [[A]]** [[THISADDR]]
|
||||
// CHECK-NEXT: ret void
|
||||
A::A() {}
|
||||
|
||||
|
@ -91,11 +91,11 @@ namespace PR10512 {
|
|||
// CHECK-NEXT: [[XADDR:%[a-zA-z0-9.]+]] = alloca i32
|
||||
// CHECK-NEXT: store [[A]]* [[THIS:%[a-zA-z0-9.]+]], [[A]]** [[THISADDR]]
|
||||
// CHECK-NEXT: store i32 [[X:%[a-zA-z0-9.]+]], i32* [[XADDR]]
|
||||
// CHECK-NEXT: [[THIS1:%[a-zA-z0-9.]+]] = load [[A]]** [[THISADDR]]
|
||||
// CHECK-NEXT: [[THIS1:%[a-zA-z0-9.]+]] = load [[A]]*, [[A]]** [[THISADDR]]
|
||||
// CHECK-NEXT: {{getelementptr inbounds.*i32 0, i32 0}}
|
||||
// CHECK-NEXT: {{getelementptr inbounds.*i32 0, i32 0}}
|
||||
// CHECK-NEXT: {{getelementptr inbounds.*i32 0, i32 0}}
|
||||
// CHECK-NEXT: [[TMP:%[a-zA-z0-9.]+]] = load i32* [[XADDR]]
|
||||
// CHECK-NEXT: [[TMP:%[a-zA-z0-9.]+]] = load i32, i32* [[XADDR]]
|
||||
// CHECK-NEXT: store i32 [[TMP]]
|
||||
// CHECK-NEXT: ret void
|
||||
A::A(int x) : x(x) { }
|
||||
|
@ -105,11 +105,11 @@ namespace PR10512 {
|
|||
// CHECK-NEXT: [[XADDR:%[a-zA-z0-9.]+]] = alloca i64
|
||||
// CHECK-NEXT: store [[A]]* [[THIS:%[a-zA-z0-9.]+]], [[A]]** [[THISADDR]]
|
||||
// CHECK-NEXT: store i64 [[X:%[a-zA-z0-9.]+]], i64* [[XADDR]]
|
||||
// CHECK-NEXT: [[THIS1:%[a-zA-z0-9.]+]] = load [[A]]** [[THISADDR]]
|
||||
// CHECK-NEXT: [[THIS1:%[a-zA-z0-9.]+]] = load [[A]]*, [[A]]** [[THISADDR]]
|
||||
// CHECK-NEXT: {{getelementptr inbounds.*i32 0, i32 0}}
|
||||
// CHECK-NEXT: {{getelementptr inbounds.*i32 0, i32 1}}
|
||||
// CHECK-NEXT: {{getelementptr inbounds.*i32 0, i32 0}}
|
||||
// CHECK-NEXT: [[TMP:%[a-zA-z0-9.]+]] = load i64* [[XADDR]]
|
||||
// CHECK-NEXT: [[TMP:%[a-zA-z0-9.]+]] = load i64, i64* [[XADDR]]
|
||||
// CHECK-NEXT: [[CONV:%[a-zA-z0-9.]+]] = trunc i64 [[TMP]] to i32
|
||||
// CHECK-NEXT: store i32 [[CONV]]
|
||||
// CHECK-NEXT: ret void
|
||||
|
|
|
@ -18,7 +18,7 @@ struct B : virtual A {
|
|||
void B::VF() {}
|
||||
|
||||
void FUNC(B* p) {
|
||||
// CHECK: [[T1:%.*]] = load i8* (%struct.A*)** getelementptr inbounds (i8* (%struct.A*)** bitcast ([4 x i8*]* @_ZTV1A to i8* (%struct.A*)**), i64 2)
|
||||
// CHECK: [[T1:%.*]] = load i8* (%struct.A*)*, i8* (%struct.A*)** getelementptr inbounds (i8* (%struct.A*)** bitcast ([4 x i8*]* @_ZTV1A to i8* (%struct.A*)**), i64 2)
|
||||
// CHECK-NEXT: [[T2:%.*]] = call i8* [[T1]]
|
||||
const char* c = p->A::abc();
|
||||
}
|
||||
|
@ -33,7 +33,7 @@ struct Derived : public Base {
|
|||
};
|
||||
|
||||
void FUNC1(Derived* p) {
|
||||
// CHECK: [[U1:%.*]] = load i8* (%struct.Base*)** getelementptr inbounds (i8* (%struct.Base*)** bitcast ([4 x i8*]* @_ZTV4Base to i8* (%struct.Base*)**), i64 2)
|
||||
// CHECK: [[U1:%.*]] = load i8* (%struct.Base*)*, i8* (%struct.Base*)** getelementptr inbounds (i8* (%struct.Base*)** bitcast ([4 x i8*]* @_ZTV4Base to i8* (%struct.Base*)**), i64 2)
|
||||
// CHECK-NEXT: [[U2:%.*]] = call i8* [[U1]]
|
||||
char* c = p->Base::abc();
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ struct Derived2 : virtual Base2 {
|
|||
char* Derived2::efg(void) const { return 0; }
|
||||
|
||||
void FUNC2(Derived2* p) {
|
||||
// CHECK: [[V1:%.*]] = load i8* (%struct.Derived2*)** getelementptr inbounds (i8* (%struct.Derived2*)** bitcast ([5 x i8*]* @_ZTV8Derived2 to i8* (%struct.Derived2*)**), i64 3)
|
||||
// CHECK: [[V1:%.*]] = load i8* (%struct.Derived2*)*, i8* (%struct.Derived2*)** getelementptr inbounds (i8* (%struct.Derived2*)** bitcast ([5 x i8*]* @_ZTV8Derived2 to i8* (%struct.Derived2*)**), i64 3)
|
||||
// CHECK-NEXT: [[V2:%.*]] = call i8* [[V1]]
|
||||
char* c = p->Derived2::efg();
|
||||
}
|
||||
|
@ -70,7 +70,7 @@ struct Sub : D1, D2 {
|
|||
char* D2::abc(void) const { return 0; }
|
||||
|
||||
void FUNC3(Sub* p) {
|
||||
// CHECK: [[W1:%.*]] = load i8* (%struct.D2*)** getelementptr inbounds (i8* (%struct.D2*)** bitcast ([5 x i8*]* @_ZTV2D2 to i8* (%struct.D2*)**), i64 3)
|
||||
// CHECK: [[W1:%.*]] = load i8* (%struct.D2*)*, i8* (%struct.D2*)** getelementptr inbounds (i8* (%struct.D2*)** bitcast ([5 x i8*]* @_ZTV2D2 to i8* (%struct.D2*)**), i64 3)
|
||||
// CHECK-NEXT: [[W2:%.*]] = call i8* [[W1]]
|
||||
char* c = p->D2::abc();
|
||||
}
|
||||
|
|
|
@ -12,10 +12,10 @@ void DELETE(B1 *pb1) {
|
|||
pb1->B1::~B1();
|
||||
}
|
||||
// CHECK-LABEL: define void @_ZN2B1D0Ev
|
||||
// CHECK: [[T1:%.*]] = load void (%struct.B1*)** getelementptr inbounds (void (%struct.B1*)** bitcast ([5 x i8*]* @_ZTV2B1 to void (%struct.B1*)**), i64 2)
|
||||
// CHECK: [[T1:%.*]] = load void (%struct.B1*)*, void (%struct.B1*)** getelementptr inbounds (void (%struct.B1*)** bitcast ([5 x i8*]* @_ZTV2B1 to void (%struct.B1*)**), i64 2)
|
||||
// CHECK-NEXT: call void [[T1]](%struct.B1* [[T2:%.*]])
|
||||
// CHECK-LABEL: define void @_Z6DELETEP2B1
|
||||
// CHECK: [[T3:%.*]] = load void (%struct.B1*)** getelementptr inbounds (void (%struct.B1*)** bitcast ([5 x i8*]* @_ZTV2B1 to void (%struct.B1*)**), i64 2)
|
||||
// CHECK: [[T3:%.*]] = load void (%struct.B1*)*, void (%struct.B1*)** getelementptr inbounds (void (%struct.B1*)** bitcast ([5 x i8*]* @_ZTV2B1 to void (%struct.B1*)**), i64 2)
|
||||
// CHECK-NEXT: call void [[T3]](%struct.B1* [[T4:%.*]])
|
||||
|
||||
template<class T>
|
||||
|
|
|
@ -9,7 +9,7 @@ int take_args(int a, ...) {
|
|||
// CHECK: call void @llvm.va_start
|
||||
|
||||
emptyvar = __builtin_va_arg(l, Empty);
|
||||
// CHECK: load i8**
|
||||
// CHECK: load i8*, i8**
|
||||
// CHECK-NOT: getelementptr
|
||||
// CHECK: [[EMPTY_PTR:%[a-zA-Z0-9._]+]] = bitcast i8* {{%[a-zA-Z0-9._]+}} to %struct.Empty*
|
||||
|
||||
|
@ -17,10 +17,10 @@ int take_args(int a, ...) {
|
|||
// (e.g. it's at the very bottom of the stack and the next page is
|
||||
// invalid). This doesn't matter provided it's never loaded (there's no
|
||||
// well-defined way to tell), but it becomes a problem if we do try to use it.
|
||||
// CHECK-NOT: load %struct.Empty* [[EMPTY_PTR]]
|
||||
// CHECK-NOT: load %struct.Empty, %struct.Empty* [[EMPTY_PTR]]
|
||||
|
||||
int i = __builtin_va_arg(l, int);
|
||||
// CHECK: load i32*
|
||||
// CHECK: load i32, i32*
|
||||
|
||||
__builtin_va_end(l);
|
||||
return i;
|
||||
|
|
|
@ -56,14 +56,14 @@ namespace test1 {
|
|||
// CHECK: define linkonce_odr [[A]]* @_ZN5test11AC1Ei([[A]]* returned %this, i32 %i) unnamed_addr
|
||||
// CHECK: [[THIS:%.*]] = alloca [[A]]*, align 4
|
||||
// CHECK: store [[A]]* {{.*}}, [[A]]** [[THIS]]
|
||||
// CHECK: [[THIS1:%.*]] = load [[A]]** [[THIS]]
|
||||
// CHECK: [[THIS1:%.*]] = load [[A]]*, [[A]]** [[THIS]]
|
||||
// CHECK: {{%.*}} = call [[A]]* @_ZN5test11AC2Ei(
|
||||
// CHECK: ret [[A]]* [[THIS1]]
|
||||
|
||||
// CHECK: define linkonce_odr [[A]]* @_ZN5test11AD1Ev([[A]]* returned %this) unnamed_addr
|
||||
// CHECK: [[THIS:%.*]] = alloca [[A]]*, align 4
|
||||
// CHECK: store [[A]]* {{.*}}, [[A]]** [[THIS]]
|
||||
// CHECK: [[THIS1:%.*]] = load [[A]]** [[THIS]]
|
||||
// CHECK: [[THIS1:%.*]] = load [[A]]*, [[A]]** [[THIS]]
|
||||
// CHECK: {{%.*}} = call [[A]]* @_ZN5test11AD2Ev(
|
||||
// CHECK: ret [[A]]* [[THIS1]]
|
||||
}
|
||||
|
@ -117,7 +117,7 @@ namespace test3 {
|
|||
|
||||
void b(int n) {
|
||||
// CHECK-LABEL: define void @_ZN5test31bEi(
|
||||
// CHECK: [[N:%.*]] = load i32*
|
||||
// CHECK: [[N:%.*]] = load i32, i32*
|
||||
// CHECK: @llvm.umul.with.overflow.i32(i32 [[N]], i32 4)
|
||||
// CHECK: @llvm.uadd.with.overflow.i32(i32 {{.*}}, i32 8)
|
||||
// CHECK: [[OR:%.*]] = or i1
|
||||
|
@ -138,7 +138,7 @@ namespace test3 {
|
|||
|
||||
void d(int n) {
|
||||
// CHECK-LABEL: define void @_ZN5test31dEi(
|
||||
// CHECK: [[N:%.*]] = load i32*
|
||||
// CHECK: [[N:%.*]] = load i32, i32*
|
||||
// CHECK: @llvm.umul.with.overflow.i32(i32 [[N]], i32 80)
|
||||
// CHECK: [[NE:%.*]] = mul i32 [[N]], 20
|
||||
// CHECK: @llvm.uadd.with.overflow.i32(i32 {{.*}}, i32 8)
|
||||
|
@ -190,7 +190,7 @@ namespace test4 {
|
|||
|
||||
void b(int n) {
|
||||
// CHECK-LABEL: define void @_ZN5test41bEi(
|
||||
// CHECK: [[N:%.*]] = load i32*
|
||||
// CHECK: [[N:%.*]] = load i32, i32*
|
||||
// CHECK: @llvm.umul.with.overflow.i32(i32 [[N]], i32 4)
|
||||
// CHECK: @llvm.uadd.with.overflow.i32(i32 {{.*}}, i32 8)
|
||||
// CHECK: [[SZ:%.*]] = select
|
||||
|
@ -210,7 +210,7 @@ namespace test4 {
|
|||
|
||||
void d(int n) {
|
||||
// CHECK-LABEL: define void @_ZN5test41dEi(
|
||||
// CHECK: [[N:%.*]] = load i32*
|
||||
// CHECK: [[N:%.*]] = load i32, i32*
|
||||
// CHECK: @llvm.umul.with.overflow.i32(i32 [[N]], i32 80)
|
||||
// CHECK: [[NE:%.*]] = mul i32 [[N]], 20
|
||||
// CHECK: @llvm.uadd.with.overflow.i32(i32 {{.*}}, i32 8)
|
||||
|
@ -226,7 +226,7 @@ namespace test4 {
|
|||
// CHECK: [[ALLOC:%.*]] = getelementptr inbounds {{.*}}, i64 -8
|
||||
// CHECK: getelementptr inbounds {{.*}}, i64 4
|
||||
// CHECK: bitcast
|
||||
// CHECK: [[T0:%.*]] = load i32*
|
||||
// CHECK: [[T0:%.*]] = load i32, i32*
|
||||
// CHECK: [[T1:%.*]] = mul i32 4, [[T0]]
|
||||
// CHECK: [[T2:%.*]] = add i32 [[T1]], 8
|
||||
// CHECK: call void @_ZN5test41AdaEPvm(i8* [[ALLOC]], i32 [[T2]])
|
||||
|
@ -238,7 +238,7 @@ namespace test4 {
|
|||
// CHECK: [[ALLOC:%.*]] = getelementptr inbounds {{.*}}, i64 -8
|
||||
// CHECK: getelementptr inbounds {{.*}}, i64 4
|
||||
// CHECK: bitcast
|
||||
// CHECK: [[T0:%.*]] = load i32*
|
||||
// CHECK: [[T0:%.*]] = load i32, i32*
|
||||
// CHECK: [[T1:%.*]] = mul i32 4, [[T0]]
|
||||
// CHECK: [[T2:%.*]] = add i32 [[T1]], 8
|
||||
// CHECK: call void @_ZN5test41AdaEPvm(i8* [[ALLOC]], i32 [[T2]])
|
||||
|
@ -256,7 +256,7 @@ namespace test5 {
|
|||
void test(A *a) {
|
||||
// CHECK: [[PTR:%.*]] = alloca [[A:%.*]]*, align 4
|
||||
// CHECK-NEXT: store [[A]]* {{.*}}, [[A]]** [[PTR]], align 4
|
||||
// CHECK-NEXT: [[TMP:%.*]] = load [[A]]** [[PTR]], align 4
|
||||
// CHECK-NEXT: [[TMP:%.*]] = load [[A]]*, [[A]]** [[PTR]], align 4
|
||||
// CHECK-NEXT: call [[A]]* @_ZN5test51AD1Ev([[A]]* [[TMP]])
|
||||
// CHECK-NEXT: ret void
|
||||
a->~A();
|
||||
|
@ -272,13 +272,13 @@ namespace test6 {
|
|||
void test(A *a) {
|
||||
// CHECK: [[AVAR:%.*]] = alloca [[A:%.*]]*, align 4
|
||||
// CHECK-NEXT: store [[A]]* {{.*}}, [[A]]** [[AVAR]], align 4
|
||||
// CHECK-NEXT: [[V:%.*]] = load [[A]]** [[AVAR]], align 4
|
||||
// CHECK-NEXT: [[V:%.*]] = load [[A]]*, [[A]]** [[AVAR]], align 4
|
||||
// CHECK-NEXT: [[ISNULL:%.*]] = icmp eq [[A]]* [[V]], null
|
||||
// CHECK-NEXT: br i1 [[ISNULL]]
|
||||
// CHECK: [[T0:%.*]] = bitcast [[A]]* [[V]] to void ([[A]]*)***
|
||||
// CHECK-NEXT: [[T1:%.*]] = load void ([[A]]*)*** [[T0]]
|
||||
// CHECK-NEXT: [[T1:%.*]] = load void ([[A]]*)**, void ([[A]]*)*** [[T0]]
|
||||
// CHECK-NEXT: [[T2:%.*]] = getelementptr inbounds void ([[A]]*)*, void ([[A]]*)** [[T1]], i64 1
|
||||
// CHECK-NEXT: [[T3:%.*]] = load void ([[A]]*)** [[T2]]
|
||||
// CHECK-NEXT: [[T3:%.*]] = load void ([[A]]*)*, void ([[A]]*)** [[T2]]
|
||||
// CHECK-NEXT: call void [[T3]]([[A]]* [[V]])
|
||||
// CHECK-NEXT: br label
|
||||
// CHECK: ret void
|
||||
|
@ -293,7 +293,7 @@ namespace test7 {
|
|||
|
||||
// CHECK-LABEL: define void @_ZN5test74testEv()
|
||||
void test() {
|
||||
// CHECK: [[T0:%.*]] = load atomic i8* bitcast (i32* @_ZGVZN5test74testEvE1x to i8*) acquire, align 1
|
||||
// CHECK: [[T0:%.*]] = load atomic i8, i8* bitcast (i32* @_ZGVZN5test74testEvE1x to i8*) acquire, align 1
|
||||
// CHECK-NEXT: [[T1:%.*]] = and i8 [[T0]], 1
|
||||
// CHECK-NEXT: [[T2:%.*]] = icmp eq i8 [[T1]], 0
|
||||
// CHECK-NEXT: br i1 [[T2]]
|
||||
|
@ -328,7 +328,7 @@ namespace test8 {
|
|||
|
||||
// CHECK-LABEL: define void @_ZN5test84testEv()
|
||||
void test() {
|
||||
// CHECK: [[T0:%.*]] = load atomic i8* bitcast (i32* @_ZGVZN5test84testEvE1x to i8*) acquire, align 1
|
||||
// CHECK: [[T0:%.*]] = load atomic i8, i8* bitcast (i32* @_ZGVZN5test84testEvE1x to i8*) acquire, align 1
|
||||
// CHECK-NEXT: [[T1:%.*]] = and i8 [[T0]], 1
|
||||
// CHECK-NEXT: [[T2:%.*]] = icmp eq i8 [[T1]], 0
|
||||
// CHECK-NEXT: br i1 [[T2]]
|
||||
|
@ -374,7 +374,7 @@ namespace test9 {
|
|||
}
|
||||
// CHECK: define [[TEST9:%.*]]* @_ZN5test97testNewEj(i32
|
||||
// CHECK: [[N_VAR:%.*]] = alloca i32, align 4
|
||||
// CHECK: [[N:%.*]] = load i32* [[N_VAR]], align 4
|
||||
// CHECK: [[N:%.*]] = load i32, i32* [[N_VAR]], align 4
|
||||
// CHECK-NEXT: [[T0:%.*]] = call { i32, i1 } @llvm.umul.with.overflow.i32(i32 [[N]], i32 16)
|
||||
// CHECK-NEXT: [[O0:%.*]] = extractvalue { i32, i1 } [[T0]], 1
|
||||
// CHECK-NEXT: [[T1:%.*]] = extractvalue { i32, i1 } [[T0]], 0
|
||||
|
@ -396,14 +396,14 @@ namespace test9 {
|
|||
delete[] array;
|
||||
}
|
||||
// CHECK-LABEL: define void @_ZN5test910testDeleteEPNS_1AE(
|
||||
// CHECK: [[BEGIN:%.*]] = load [[TEST9]]**
|
||||
// CHECK: [[BEGIN:%.*]] = load [[TEST9]]*, [[TEST9]]**
|
||||
// CHECK-NEXT: [[T0:%.*]] = icmp eq [[TEST9]]* [[BEGIN]], null
|
||||
// CHECK-NEXT: br i1 [[T0]],
|
||||
// CHECK: [[T0:%.*]] = bitcast [[TEST9]]* [[BEGIN]] to i8*
|
||||
// CHECK-NEXT: [[ALLOC:%.*]] = getelementptr inbounds i8, i8* [[T0]], i64 -16
|
||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds i8, i8* [[ALLOC]], i64 4
|
||||
// CHECK-NEXT: [[T1:%.*]] = bitcast i8* [[T0]] to i32*
|
||||
// CHECK-NEXT: [[N:%.*]] = load i32* [[T1]]
|
||||
// CHECK-NEXT: [[N:%.*]] = load i32, i32* [[T1]]
|
||||
// CHECK-NEXT: [[END:%.*]] = getelementptr inbounds [[TEST9]], [[TEST9]]* [[BEGIN]], i32 [[N]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = icmp eq [[TEST9]]* [[BEGIN]], [[END]]
|
||||
// CHECK-NEXT: br i1 [[T0]],
|
||||
|
|
|
@ -15,5 +15,5 @@ S::S() {
|
|||
// CHECK: %struct.S* @_ZN1SC1Ev(%struct.S* returned %this)
|
||||
// CHECK: [[THISADDR:%[a-zA-z0-9.]+]] = alloca %struct.S*
|
||||
// CHECK: store %struct.S* %this, %struct.S** [[THISADDR]]
|
||||
// CHECK: [[THIS1:%.*]] = load %struct.S** [[THISADDR]]
|
||||
// CHECK: [[THIS1:%.*]] = load %struct.S*, %struct.S** [[THISADDR]]
|
||||
// CHECK: ret %struct.S* [[THIS1]]
|
||||
|
|
|
@ -9,7 +9,7 @@ int take_args(int a, ...) {
|
|||
// CHECK: call void @llvm.va_start
|
||||
|
||||
emptyvar = __builtin_va_arg(l, Empty);
|
||||
// CHECK: load i8**
|
||||
// CHECK: load i8*, i8**
|
||||
// CHECK-NOT: getelementptr
|
||||
// CHECK: [[EMPTY_PTR:%[a-zA-Z0-9._]+]] = bitcast i8* {{%[a-zA-Z0-9._]+}} to %struct.Empty*
|
||||
|
||||
|
@ -17,7 +17,7 @@ int take_args(int a, ...) {
|
|||
// (e.g. it's at the very bottom of the stack and the next page is
|
||||
// invalid). This doesn't matter provided it's never loaded (there's no
|
||||
// well-defined way to tell), but it becomes a problem if we do try to use it.
|
||||
// CHECK-NOT: load %struct.Empty* [[EMPTY_PTR]]
|
||||
// CHECK-NOT: load %struct.Empty, %struct.Empty* [[EMPTY_PTR]]
|
||||
|
||||
int i = __builtin_va_arg(l, int);
|
||||
// CHECK: va_arg i8** {{%[a-zA-Z0-9._]+}}, i32
|
||||
|
|
|
@ -22,13 +22,13 @@ namespace N0 {
|
|||
unsigned read00(S* s) {
|
||||
// CHECK-X86-64-LABEL: define i32 @_ZN2N06read00
|
||||
// CHECK-X86-64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i64*
|
||||
// CHECK-X86-64: %[[val:.*]] = load i64* %[[ptr]]
|
||||
// CHECK-X86-64: %[[val:.*]] = load i64, i64* %[[ptr]]
|
||||
// CHECK-X86-64: %[[and:.*]] = and i64 %[[val]], 16383
|
||||
// CHECK-X86-64: %[[trunc:.*]] = trunc i64 %[[and]] to i32
|
||||
// CHECK-X86-64: ret i32 %[[trunc]]
|
||||
// CHECK-PPC64-LABEL: define zeroext i32 @_ZN2N06read00
|
||||
// CHECK-PPC64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i64*
|
||||
// CHECK-PPC64: %[[val:.*]] = load i64* %[[ptr]]
|
||||
// CHECK-PPC64: %[[val:.*]] = load i64, i64* %[[ptr]]
|
||||
// CHECK-PPC64: %[[shr:.*]] = lshr i64 %[[val]], 50
|
||||
// CHECK-PPC64: %[[trunc:.*]] = trunc i64 %[[shr]] to i32
|
||||
// CHECK-PPC64: ret i32 %[[trunc]]
|
||||
|
@ -37,14 +37,14 @@ namespace N0 {
|
|||
unsigned read01(S* s) {
|
||||
// CHECK-X86-64-LABEL: define i32 @_ZN2N06read01
|
||||
// CHECK-X86-64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i64*
|
||||
// CHECK-X86-64: %[[val:.*]] = load i64* %[[ptr]]
|
||||
// CHECK-X86-64: %[[val:.*]] = load i64, i64* %[[ptr]]
|
||||
// CHECK-X86-64: %[[shr:.*]] = lshr i64 %[[val]], 14
|
||||
// CHECK-X86-64: %[[and:.*]] = and i64 %[[shr]], 3
|
||||
// CHECK-X86-64: %[[trunc:.*]] = trunc i64 %[[and]] to i32
|
||||
// CHECK-X86-64: ret i32 %[[trunc]]
|
||||
// CHECK-PPC64-LABEL: define zeroext i32 @_ZN2N06read01
|
||||
// CHECK-PPC64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i64*
|
||||
// CHECK-PPC64: %[[val:.*]] = load i64* %[[ptr]]
|
||||
// CHECK-PPC64: %[[val:.*]] = load i64, i64* %[[ptr]]
|
||||
// CHECK-PPC64: %[[shr:.*]] = lshr i64 %[[val]], 48
|
||||
// CHECK-PPC64: %[[and:.*]] = and i64 %[[shr]], 3
|
||||
// CHECK-PPC64: %[[trunc:.*]] = trunc i64 %[[and]] to i32
|
||||
|
@ -54,14 +54,14 @@ namespace N0 {
|
|||
unsigned read20(S* s) {
|
||||
// CHECK-X86-64-LABEL: define i32 @_ZN2N06read20
|
||||
// CHECK-X86-64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i64*
|
||||
// CHECK-X86-64: %[[val:.*]] = load i64* %[[ptr]]
|
||||
// CHECK-X86-64: %[[val:.*]] = load i64, i64* %[[ptr]]
|
||||
// CHECK-X86-64: %[[shr:.*]] = lshr i64 %[[val]], 16
|
||||
// CHECK-X86-64: %[[and:.*]] = and i64 %[[shr]], 63
|
||||
// CHECK-X86-64: %[[trunc:.*]] = trunc i64 %[[and]] to i32
|
||||
// CHECK-X86-64: ret i32 %[[trunc]]
|
||||
// CHECK-PPC64-LABEL: define zeroext i32 @_ZN2N06read20
|
||||
// CHECK-PPC64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i64*
|
||||
// CHECK-PPC64: %[[val:.*]] = load i64* %[[ptr]]
|
||||
// CHECK-PPC64: %[[val:.*]] = load i64, i64* %[[ptr]]
|
||||
// CHECK-PPC64: %[[shr:.*]] = lshr i64 %[[val]], 42
|
||||
// CHECK-PPC64: %[[and:.*]] = and i64 %[[shr]], 63
|
||||
// CHECK-PPC64: %[[trunc:.*]] = trunc i64 %[[and]] to i32
|
||||
|
@ -71,14 +71,14 @@ namespace N0 {
|
|||
unsigned read21(S* s) {
|
||||
// CHECK-X86-64-LABEL: define i32 @_ZN2N06read21
|
||||
// CHECK-X86-64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i64*
|
||||
// CHECK-X86-64: %[[val:.*]] = load i64* %[[ptr]]
|
||||
// CHECK-X86-64: %[[val:.*]] = load i64, i64* %[[ptr]]
|
||||
// CHECK-X86-64: %[[shr:.*]] = lshr i64 %[[val]], 22
|
||||
// CHECK-X86-64: %[[and:.*]] = and i64 %[[shr]], 3
|
||||
// CHECK-X86-64: %[[trunc:.*]] = trunc i64 %[[and]] to i32
|
||||
// CHECK-X86-64: ret i32 %[[trunc]]
|
||||
// CHECK-PPC64-LABEL: define zeroext i32 @_ZN2N06read21
|
||||
// CHECK-PPC64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i64*
|
||||
// CHECK-PPC64: %[[val:.*]] = load i64* %[[ptr]]
|
||||
// CHECK-PPC64: %[[val:.*]] = load i64, i64* %[[ptr]]
|
||||
// CHECK-PPC64: %[[shr:.*]] = lshr i64 %[[val]], 40
|
||||
// CHECK-PPC64: %[[and:.*]] = and i64 %[[shr]], 3
|
||||
// CHECK-PPC64: %[[trunc:.*]] = trunc i64 %[[and]] to i32
|
||||
|
@ -88,14 +88,14 @@ namespace N0 {
|
|||
unsigned read30(S* s) {
|
||||
// CHECK-X86-64-LABEL: define i32 @_ZN2N06read30
|
||||
// CHECK-X86-64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i64*
|
||||
// CHECK-X86-64: %[[val:.*]] = load i64* %[[ptr]]
|
||||
// CHECK-X86-64: %[[val:.*]] = load i64, i64* %[[ptr]]
|
||||
// CHECK-X86-64: %[[shr:.*]] = lshr i64 %[[val]], 24
|
||||
// CHECK-X86-64: %[[and:.*]] = and i64 %[[shr]], 1073741823
|
||||
// CHECK-X86-64: %[[trunc:.*]] = trunc i64 %[[and]] to i32
|
||||
// CHECK-X86-64: ret i32 %[[trunc]]
|
||||
// CHECK-PPC64-LABEL: define zeroext i32 @_ZN2N06read30
|
||||
// CHECK-PPC64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i64*
|
||||
// CHECK-PPC64: %[[val:.*]] = load i64* %[[ptr]]
|
||||
// CHECK-PPC64: %[[val:.*]] = load i64, i64* %[[ptr]]
|
||||
// CHECK-PPC64: %[[shr:.*]] = lshr i64 %[[val]], 10
|
||||
// CHECK-PPC64: %[[and:.*]] = and i64 %[[shr]], 1073741823
|
||||
// CHECK-PPC64: %[[trunc:.*]] = trunc i64 %[[and]] to i32
|
||||
|
@ -105,14 +105,14 @@ namespace N0 {
|
|||
unsigned read31(S* s) {
|
||||
// CHECK-X86-64-LABEL: define i32 @_ZN2N06read31
|
||||
// CHECK-X86-64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i64*
|
||||
// CHECK-X86-64: %[[val:.*]] = load i64* %[[ptr]]
|
||||
// CHECK-X86-64: %[[val:.*]] = load i64, i64* %[[ptr]]
|
||||
// CHECK-X86-64: %[[shr:.*]] = lshr i64 %[[val]], 54
|
||||
// CHECK-X86-64: %[[and:.*]] = and i64 %[[shr]], 3
|
||||
// CHECK-X86-64: %[[trunc:.*]] = trunc i64 %[[and]] to i32
|
||||
// CHECK-X86-64: ret i32 %[[trunc]]
|
||||
// CHECK-PPC64-LABEL: define zeroext i32 @_ZN2N06read31
|
||||
// CHECK-PPC64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i64*
|
||||
// CHECK-PPC64: %[[val:.*]] = load i64* %[[ptr]]
|
||||
// CHECK-PPC64: %[[val:.*]] = load i64, i64* %[[ptr]]
|
||||
// CHECK-PPC64: %[[shr:.*]] = lshr i64 %[[val]], 8
|
||||
// CHECK-PPC64: %[[and:.*]] = and i64 %[[shr]], 3
|
||||
// CHECK-PPC64: %[[trunc:.*]] = trunc i64 %[[and]] to i32
|
||||
|
@ -122,14 +122,14 @@ namespace N0 {
|
|||
unsigned read70(S* s) {
|
||||
// CHECK-X86-64-LABEL: define i32 @_ZN2N06read70
|
||||
// CHECK-X86-64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i64*
|
||||
// CHECK-X86-64: %[[val:.*]] = load i64* %[[ptr]]
|
||||
// CHECK-X86-64: %[[val:.*]] = load i64, i64* %[[ptr]]
|
||||
// CHECK-X86-64: %[[shr:.*]] = lshr i64 %[[val]], 56
|
||||
// CHECK-X86-64: %[[and:.*]] = and i64 %[[shr]], 63
|
||||
// CHECK-X86-64: %[[trunc:.*]] = trunc i64 %[[and]] to i32
|
||||
// CHECK-X86-64: ret i32 %[[trunc]]
|
||||
// CHECK-PPC64-LABEL: define zeroext i32 @_ZN2N06read70
|
||||
// CHECK-PPC64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i64*
|
||||
// CHECK-PPC64: %[[val:.*]] = load i64* %[[ptr]]
|
||||
// CHECK-PPC64: %[[val:.*]] = load i64, i64* %[[ptr]]
|
||||
// CHECK-PPC64: %[[shr:.*]] = lshr i64 %[[val]], 2
|
||||
// CHECK-PPC64: %[[and:.*]] = and i64 %[[shr]], 63
|
||||
// CHECK-PPC64: %[[trunc:.*]] = trunc i64 %[[and]] to i32
|
||||
|
@ -139,13 +139,13 @@ namespace N0 {
|
|||
unsigned read71(S* s) {
|
||||
// CHECK-X86-64-LABEL: define i32 @_ZN2N06read71
|
||||
// CHECK-X86-64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i64*
|
||||
// CHECK-X86-64: %[[val:.*]] = load i64* %[[ptr]]
|
||||
// CHECK-X86-64: %[[val:.*]] = load i64, i64* %[[ptr]]
|
||||
// CHECK-X86-64: %[[shr:.*]] = lshr i64 %[[val]], 62
|
||||
// CHECK-X86-64: %[[trunc:.*]] = trunc i64 %[[shr]] to i32
|
||||
// CHECK-X86-64: ret i32 %[[trunc]]
|
||||
// CHECK-PPC64-LABEL: define zeroext i32 @_ZN2N06read71
|
||||
// CHECK-PPC64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i64*
|
||||
// CHECK-PPC64: %[[val:.*]] = load i64* %[[ptr]]
|
||||
// CHECK-PPC64: %[[val:.*]] = load i64, i64* %[[ptr]]
|
||||
// CHECK-PPC64: %[[and:.*]] = and i64 %[[val]], 3
|
||||
// CHECK-PPC64: %[[trunc:.*]] = trunc i64 %[[and]] to i32
|
||||
// CHECK-PPC64: ret i32 %[[trunc]]
|
||||
|
@ -168,13 +168,13 @@ namespace N1 {
|
|||
unsigned read(S* s) {
|
||||
// CHECK-X86-64-LABEL: define i32 @_ZN2N14read
|
||||
// CHECK-X86-64: %[[ptr:.*]] = getelementptr inbounds %{{.*}}, %{{.*}}* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-X86-64: %[[val:.*]] = load i8* %[[ptr]]
|
||||
// CHECK-X86-64: %[[val:.*]] = load i8, i8* %[[ptr]]
|
||||
// CHECK-X86-64: %[[and:.*]] = and i8 %[[val]], 1
|
||||
// CHECK-X86-64: %[[ext:.*]] = zext i8 %[[and]] to i32
|
||||
// CHECK-X86-64: ret i32 %[[ext]]
|
||||
// CHECK-PPC64-LABEL: define zeroext i32 @_ZN2N14read
|
||||
// CHECK-PPC64: %[[ptr:.*]] = getelementptr inbounds %{{.*}}, %{{.*}}* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-PPC64: %[[val:.*]] = load i8* %[[ptr]]
|
||||
// CHECK-PPC64: %[[val:.*]] = load i8, i8* %[[ptr]]
|
||||
// CHECK-PPC64: %[[shr:.*]] = lshr i8 %[[val]], 7
|
||||
// CHECK-PPC64: %[[ext:.*]] = zext i8 %[[shr]] to i32
|
||||
// CHECK-PPC64: ret i32 %[[ext]]
|
||||
|
@ -184,7 +184,7 @@ namespace N1 {
|
|||
// CHECK-X86-64-LABEL: define void @_ZN2N15write
|
||||
// CHECK-X86-64: %[[ptr:.*]] = getelementptr inbounds %{{.*}}, %{{.*}}* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-X86-64: %[[x_trunc:.*]] = trunc i32 %{{.*}} to i8
|
||||
// CHECK-X86-64: %[[old:.*]] = load i8* %[[ptr]]
|
||||
// CHECK-X86-64: %[[old:.*]] = load i8, i8* %[[ptr]]
|
||||
// CHECK-X86-64: %[[x_and:.*]] = and i8 %[[x_trunc]], 1
|
||||
// CHECK-X86-64: %[[old_and:.*]] = and i8 %[[old]], -2
|
||||
// CHECK-X86-64: %[[new:.*]] = or i8 %[[old_and]], %[[x_and]]
|
||||
|
@ -192,7 +192,7 @@ namespace N1 {
|
|||
// CHECK-PPC64-LABEL: define void @_ZN2N15write
|
||||
// CHECK-PPC64: %[[ptr:.*]] = getelementptr inbounds %{{.*}}, %{{.*}}* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-PPC64: %[[x_trunc:.*]] = trunc i32 %{{.*}} to i8
|
||||
// CHECK-PPC64: %[[old:.*]] = load i8* %[[ptr]]
|
||||
// CHECK-PPC64: %[[old:.*]] = load i8, i8* %[[ptr]]
|
||||
// CHECK-PPC64: %[[x_and:.*]] = and i8 %[[x_trunc]], 1
|
||||
// CHECK-PPC64: %[[x_shl:.*]] = shl i8 %[[x_and]], 7
|
||||
// CHECK-PPC64: %[[old_and:.*]] = and i8 %[[old]], 127
|
||||
|
@ -212,12 +212,12 @@ namespace N2 {
|
|||
unsigned read(S* s) {
|
||||
// CHECK-X86-64-LABEL: define i32 @_ZN2N24read
|
||||
// CHECK-X86-64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i32*
|
||||
// CHECK-X86-64: %[[val:.*]] = load i32* %[[ptr]]
|
||||
// CHECK-X86-64: %[[val:.*]] = load i32, i32* %[[ptr]]
|
||||
// CHECK-X86-64: %[[and:.*]] = and i32 %[[val]], 16777215
|
||||
// CHECK-X86-64: ret i32 %[[and]]
|
||||
// CHECK-PPC64-LABEL: define zeroext i32 @_ZN2N24read
|
||||
// CHECK-PPC64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i32*
|
||||
// CHECK-PPC64: %[[val:.*]] = load i32* %[[ptr]]
|
||||
// CHECK-PPC64: %[[val:.*]] = load i32, i32* %[[ptr]]
|
||||
// CHECK-PPC64: %[[shr:.*]] = lshr i32 %[[val]], 8
|
||||
// CHECK-PPC64: ret i32 %[[shr]]
|
||||
return s->b;
|
||||
|
@ -225,14 +225,14 @@ namespace N2 {
|
|||
void write(S* s, unsigned x) {
|
||||
// CHECK-X86-64-LABEL: define void @_ZN2N25write
|
||||
// CHECK-X86-64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i32*
|
||||
// CHECK-X86-64: %[[old:.*]] = load i32* %[[ptr]]
|
||||
// CHECK-X86-64: %[[old:.*]] = load i32, i32* %[[ptr]]
|
||||
// CHECK-X86-64: %[[x_and:.*]] = and i32 %{{.*}}, 16777215
|
||||
// CHECK-X86-64: %[[old_and:.*]] = and i32 %[[old]], -16777216
|
||||
// CHECK-X86-64: %[[new:.*]] = or i32 %[[old_and]], %[[x_and]]
|
||||
// CHECK-X86-64: store i32 %[[new]], i32* %[[ptr]]
|
||||
// CHECK-PPC64-LABEL: define void @_ZN2N25write
|
||||
// CHECK-PPC64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i32*
|
||||
// CHECK-PPC64: %[[old:.*]] = load i32* %[[ptr]]
|
||||
// CHECK-PPC64: %[[old:.*]] = load i32, i32* %[[ptr]]
|
||||
// CHECK-PPC64: %[[x_and:.*]] = and i32 %{{.*}}, 16777215
|
||||
// CHECK-PPC64: %[[x_shl:.*]] = shl i32 %[[x_and]], 8
|
||||
// CHECK-PPC64: %[[old_and:.*]] = and i32 %[[old]], 255
|
||||
|
@ -251,12 +251,12 @@ namespace N3 {
|
|||
unsigned read(S* s) {
|
||||
// CHECK-X86-64-LABEL: define i32 @_ZN2N34read
|
||||
// CHECK-X86-64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i32*
|
||||
// CHECK-X86-64: %[[val:.*]] = load i32* %[[ptr]]
|
||||
// CHECK-X86-64: %[[val:.*]] = load i32, i32* %[[ptr]]
|
||||
// CHECK-X86-64: %[[and:.*]] = and i32 %[[val]], 16777215
|
||||
// CHECK-X86-64: ret i32 %[[and]]
|
||||
// CHECK-PPC64-LABEL: define zeroext i32 @_ZN2N34read
|
||||
// CHECK-PPC64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i32*
|
||||
// CHECK-PPC64: %[[val:.*]] = load i32* %[[ptr]]
|
||||
// CHECK-PPC64: %[[val:.*]] = load i32, i32* %[[ptr]]
|
||||
// CHECK-PPC64: %[[shr:.*]] = lshr i32 %[[val]], 8
|
||||
// CHECK-PPC64: ret i32 %[[shr]]
|
||||
return s->b;
|
||||
|
@ -264,14 +264,14 @@ namespace N3 {
|
|||
void write(S* s, unsigned x) {
|
||||
// CHECK-X86-64-LABEL: define void @_ZN2N35write
|
||||
// CHECK-X86-64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i32*
|
||||
// CHECK-X86-64: %[[old:.*]] = load i32* %[[ptr]]
|
||||
// CHECK-X86-64: %[[old:.*]] = load i32, i32* %[[ptr]]
|
||||
// CHECK-X86-64: %[[x_and:.*]] = and i32 %{{.*}}, 16777215
|
||||
// CHECK-X86-64: %[[old_and:.*]] = and i32 %[[old]], -16777216
|
||||
// CHECK-X86-64: %[[new:.*]] = or i32 %[[old_and]], %[[x_and]]
|
||||
// CHECK-X86-64: store i32 %[[new]], i32* %[[ptr]]
|
||||
// CHECK-PPC64-LABEL: define void @_ZN2N35write
|
||||
// CHECK-PPC64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i32*
|
||||
// CHECK-PPC64: %[[old:.*]] = load i32* %[[ptr]]
|
||||
// CHECK-PPC64: %[[old:.*]] = load i32, i32* %[[ptr]]
|
||||
// CHECK-PPC64: %[[x_and:.*]] = and i32 %{{.*}}, 16777215
|
||||
// CHECK-PPC64: %[[x_shl:.*]] = shl i32 %[[x_and]], 8
|
||||
// CHECK-PPC64: %[[old_and:.*]] = and i32 %[[old]], 255
|
||||
|
@ -303,13 +303,13 @@ namespace N4 {
|
|||
// CHECK-X86-64-LABEL: define i32 @_ZN2N44read
|
||||
// CHECK-X86-64: %[[gep:.*]] = getelementptr inbounds {{.*}}, {{.*}}* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-X86-64: %[[ptr:.*]] = bitcast [3 x i8]* %[[gep]] to i24*
|
||||
// CHECK-X86-64: %[[val:.*]] = load i24* %[[ptr]]
|
||||
// CHECK-X86-64: %[[val:.*]] = load i24, i24* %[[ptr]]
|
||||
// CHECK-X86-64: %[[ext:.*]] = zext i24 %[[val]] to i32
|
||||
// CHECK-X86-64: ret i32 %[[ext]]
|
||||
// CHECK-PPC64-LABEL: define zeroext i32 @_ZN2N44read
|
||||
// CHECK-PPC64: %[[gep:.*]] = getelementptr inbounds {{.*}}, {{.*}}* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-PPC64: %[[ptr:.*]] = bitcast [3 x i8]* %[[gep]] to i24*
|
||||
// CHECK-PPC64: %[[val:.*]] = load i24* %[[ptr]]
|
||||
// CHECK-PPC64: %[[val:.*]] = load i24, i24* %[[ptr]]
|
||||
// CHECK-PPC64: %[[ext:.*]] = zext i24 %[[val]] to i32
|
||||
// CHECK-PPC64: ret i32 %[[ext]]
|
||||
return s->b;
|
||||
|
@ -344,12 +344,12 @@ namespace N5 {
|
|||
unsigned read(U* u) {
|
||||
// CHECK-X86-64-LABEL: define i32 @_ZN2N54read
|
||||
// CHECK-X86-64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i32*
|
||||
// CHECK-X86-64: %[[val:.*]] = load i32* %[[ptr]]
|
||||
// CHECK-X86-64: %[[val:.*]] = load i32, i32* %[[ptr]]
|
||||
// CHECK-X86-64: %[[and:.*]] = and i32 %[[val]], 16777215
|
||||
// CHECK-X86-64: ret i32 %[[and]]
|
||||
// CHECK-PPC64-LABEL: define zeroext i32 @_ZN2N54read
|
||||
// CHECK-PPC64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i32*
|
||||
// CHECK-PPC64: %[[val:.*]] = load i32* %[[ptr]]
|
||||
// CHECK-PPC64: %[[val:.*]] = load i32, i32* %[[ptr]]
|
||||
// CHECK-PPC64: %[[shr:.*]] = lshr i32 %[[val]], 8
|
||||
// CHECK-PPC64: ret i32 %[[shr]]
|
||||
return u->y.b;
|
||||
|
@ -357,14 +357,14 @@ namespace N5 {
|
|||
void write(U* u, unsigned x) {
|
||||
// CHECK-X86-64-LABEL: define void @_ZN2N55write
|
||||
// CHECK-X86-64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i32*
|
||||
// CHECK-X86-64: %[[old:.*]] = load i32* %[[ptr]]
|
||||
// CHECK-X86-64: %[[old:.*]] = load i32, i32* %[[ptr]]
|
||||
// CHECK-X86-64: %[[x_and:.*]] = and i32 %{{.*}}, 16777215
|
||||
// CHECK-X86-64: %[[old_and:.*]] = and i32 %[[old]], -16777216
|
||||
// CHECK-X86-64: %[[new:.*]] = or i32 %[[old_and]], %[[x_and]]
|
||||
// CHECK-X86-64: store i32 %[[new]], i32* %[[ptr]]
|
||||
// CHECK-PPC64-LABEL: define void @_ZN2N55write
|
||||
// CHECK-PPC64: %[[ptr:.*]] = bitcast %{{.*}}* %{{.*}} to i32*
|
||||
// CHECK-PPC64: %[[old:.*]] = load i32* %[[ptr]]
|
||||
// CHECK-PPC64: %[[old:.*]] = load i32, i32* %[[ptr]]
|
||||
// CHECK-PPC64: %[[x_and:.*]] = and i32 %{{.*}}, 16777215
|
||||
// CHECK-PPC64: %[[x_shl:.*]] = shl i32 %[[x_and]], 8
|
||||
// CHECK-PPC64: %[[old_and:.*]] = and i32 %[[old]], 255
|
||||
|
@ -389,19 +389,19 @@ namespace N6 {
|
|||
unsigned read(S* s) {
|
||||
// CHECK-X86-64-LABEL: define i32 @_ZN2N64read
|
||||
// CHECK-X86-64: %[[ptr1:.*]] = bitcast {{.*}}* %{{.*}} to i24*
|
||||
// CHECK-X86-64: %[[val1:.*]] = load i24* %[[ptr1]]
|
||||
// CHECK-X86-64: %[[val1:.*]] = load i24, i24* %[[ptr1]]
|
||||
// CHECK-X86-64: %[[ext1:.*]] = zext i24 %[[val1]] to i32
|
||||
// CHECK-X86-64: %[[ptr2:.*]] = getelementptr inbounds {{.*}}, {{.*}}* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-X86-64: %[[val2:.*]] = load i8* %[[ptr2]]
|
||||
// CHECK-X86-64: %[[val2:.*]] = load i8, i8* %[[ptr2]]
|
||||
// CHECK-X86-64: %[[ext2:.*]] = zext i8 %[[val2]] to i32
|
||||
// CHECK-X86-64: %[[add:.*]] = add nsw i32 %[[ext1]], %[[ext2]]
|
||||
// CHECK-X86-64: ret i32 %[[add]]
|
||||
// CHECK-PPC64-LABEL: define zeroext i32 @_ZN2N64read
|
||||
// CHECK-PPC64: %[[ptr1:.*]] = bitcast {{.*}}* %{{.*}} to i24*
|
||||
// CHECK-PPC64: %[[val1:.*]] = load i24* %[[ptr1]]
|
||||
// CHECK-PPC64: %[[val1:.*]] = load i24, i24* %[[ptr1]]
|
||||
// CHECK-PPC64: %[[ext1:.*]] = zext i24 %[[val1]] to i32
|
||||
// CHECK-PPC64: %[[ptr2:.*]] = getelementptr inbounds {{.*}}, {{.*}}* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-PPC64: %[[val2:.*]] = load i8* %[[ptr2]]
|
||||
// CHECK-PPC64: %[[val2:.*]] = load i8, i8* %[[ptr2]]
|
||||
// CHECK-PPC64: %[[ext2:.*]] = zext i8 %[[val2]] to i32
|
||||
// CHECK-PPC64: %[[add:.*]] = add nsw i32 %[[ext1]], %[[ext2]]
|
||||
// CHECK-PPC64: ret i32 %[[add]]
|
||||
|
@ -453,13 +453,13 @@ namespace N7 {
|
|||
// CHECK-X86-64-LABEL: define i32 @_ZN2N74read
|
||||
// CHECK-X86-64: %[[gep:.*]] = getelementptr inbounds {{.*}}, {{.*}}* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-X86-64: %[[ptr:.*]] = bitcast [3 x i8]* %[[gep]] to i24*
|
||||
// CHECK-X86-64: %[[val:.*]] = load i24* %[[ptr]]
|
||||
// CHECK-X86-64: %[[val:.*]] = load i24, i24* %[[ptr]]
|
||||
// CHECK-X86-64: %[[ext:.*]] = zext i24 %[[val]] to i32
|
||||
// CHECK-X86-64: ret i32 %[[ext]]
|
||||
// CHECK-PPC64-LABEL: define zeroext i32 @_ZN2N74read
|
||||
// CHECK-PPC64: %[[gep:.*]] = getelementptr inbounds {{.*}}, {{.*}}* %{{.*}}, i32 0, i32 1
|
||||
// CHECK-PPC64: %[[ptr:.*]] = bitcast [3 x i8]* %[[gep]] to i24*
|
||||
// CHECK-PPC64: %[[val:.*]] = load i24* %[[ptr]]
|
||||
// CHECK-PPC64: %[[val:.*]] = load i24, i24* %[[ptr]]
|
||||
// CHECK-PPC64: %[[ext:.*]] = zext i24 %[[val]] to i32
|
||||
// CHECK-PPC64: ret i32 %[[ext]]
|
||||
return s->b;
|
||||
|
|
|
@ -51,7 +51,7 @@ namespace test_complex_int {
|
|||
// CHECK: store i32 500,
|
||||
// CHECK-NEXT: store i32 0,
|
||||
// CHECK-NEXT: [[COERCE:%.*]] = bitcast
|
||||
// CHECK-NEXT: [[CVAL:%.*]] = load i64* [[COERCE]]
|
||||
// CHECK-NEXT: [[CVAL:%.*]] = load i64, i64* [[COERCE]]
|
||||
// CHECK-NEXT: call void @_Z13takeItByValueICiEvT_(i64 [[CVAL]])
|
||||
}
|
||||
}
|
||||
|
@ -70,14 +70,14 @@ namespace test_complex_int_ref_mutable {
|
|||
void test() {
|
||||
const _Complex int &x = y;
|
||||
takeABlock(^{ takeItByValue(x); });
|
||||
// CHECK: [[R:%.*]] = load i32* getelementptr inbounds ({ i32, i32 }* @_ZN28test_complex_int_ref_mutable1yE, i32 0, i32 0)
|
||||
// CHECK-NEXT: [[I:%.*]] = load i32* getelementptr inbounds ({ i32, i32 }* @_ZN28test_complex_int_ref_mutable1yE, i32 0, i32 1)
|
||||
// CHECK: [[R:%.*]] = load i32, i32* getelementptr inbounds ({ i32, i32 }* @_ZN28test_complex_int_ref_mutable1yE, i32 0, i32 0)
|
||||
// CHECK-NEXT: [[I:%.*]] = load i32, i32* getelementptr inbounds ({ i32, i32 }* @_ZN28test_complex_int_ref_mutable1yE, i32 0, i32 1)
|
||||
// CHECK-NEXT: [[RSLOT:%.*]] = getelementptr inbounds { i32, i32 }, { i32, i32 }* [[CSLOT:%.*]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[ISLOT:%.*]] = getelementptr inbounds { i32, i32 }, { i32, i32 }* [[CSLOT]], i32 0, i32 1
|
||||
// CHECK-NEXT: store i32 [[R]], i32* [[RSLOT]]
|
||||
// CHECK-NEXT: store i32 [[I]], i32* [[ISLOT]]
|
||||
// CHECK-NEXT: [[COERCE:%.*]] = bitcast { i32, i32 }* [[CSLOT]] to i64*
|
||||
// CHECK-NEXT: [[CVAL:%.*]] = load i64* [[COERCE]],
|
||||
// CHECK-NEXT: [[CVAL:%.*]] = load i64, i64* [[COERCE]],
|
||||
// CHECK-NEXT: call void @_Z13takeItByValueICiEvT_(i64 [[CVAL]])
|
||||
}
|
||||
}
|
||||
|
@ -102,7 +102,7 @@ namespace test_block_in_lambda {
|
|||
}
|
||||
// CHECK-LABEL: define internal void @"_ZZN20test_block_in_lambda4testENS_1AEENK3$_0clEv"(
|
||||
// CHECK: [[BLOCK:%.*]] = alloca [[BLOCK_T:<{.*}>]], align 8
|
||||
// CHECK: [[THIS:%.*]] = load [[LAMBDA_T:%.*]]**
|
||||
// CHECK: [[THIS:%.*]] = load [[LAMBDA_T:%.*]]*, [[LAMBDA_T:%.*]]**
|
||||
// CHECK: [[TO_DESTROY:%.*]] = getelementptr inbounds [[BLOCK_T]], [[BLOCK_T]]* [[BLOCK]], i32 0, i32 5
|
||||
// CHECK: [[T0:%.*]] = getelementptr inbounds [[BLOCK_T]], [[BLOCK_T]]* [[BLOCK]], i32 0, i32 5
|
||||
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[LAMBDA_T]], [[LAMBDA_T]]* [[THIS]], i32 0, i32 0
|
||||
|
|
|
@ -122,7 +122,7 @@ namespace test4 {
|
|||
// CHECK-LABEL: define internal void @___ZN5test44testEv_block_invoke
|
||||
// CHECK: [[TMP:%.*]] = alloca [[A:%.*]], align 1
|
||||
// CHECK-NEXT: store i8* [[BLOCKDESC:%.*]], i8** {{.*}}, align 8
|
||||
// CHECK-NEXT: load i8**
|
||||
// CHECK-NEXT: load i8*, i8**
|
||||
// CHECK-NEXT: bitcast i8* [[BLOCKDESC]] to <{ i8*, i32, i32, i8*, %struct.__block_descriptor* }>*
|
||||
// CHECK: call void @_ZN5test41AC1Ev([[A]]* [[TMP]])
|
||||
// CHECK-NEXT: call void @_ZN5test43fooENS_1AE([[A]]* [[TMP]])
|
||||
|
@ -157,7 +157,7 @@ namespace test5 {
|
|||
// CHECK-NEXT: store i8 [[T0]], i8* [[COND]], align 1
|
||||
// CHECK-NEXT: call void @_ZN5test51AC1Ev([[A]]* [[X]])
|
||||
// CHECK-NEXT: [[CLEANUP_ADDR:%.*]] = getelementptr inbounds [[BLOCK_T]], [[BLOCK_T]]* [[BLOCK]], i32 0, i32 5
|
||||
// CHECK-NEXT: [[T0:%.*]] = load i8* [[COND]], align 1
|
||||
// CHECK-NEXT: [[T0:%.*]] = load i8, i8* [[COND]], align 1
|
||||
// CHECK-NEXT: [[T1:%.*]] = trunc i8 [[T0]] to i1
|
||||
// CHECK-NEXT: store i1 false, i1* [[CLEANUP_ACTIVE]]
|
||||
// CHECK-NEXT: br i1 [[T1]],
|
||||
|
@ -173,7 +173,7 @@ namespace test5 {
|
|||
// CHECK-NEXT: store
|
||||
// CHECK-NEXT: load
|
||||
// CHECK-NEXT: call void @_ZN5test511doWithBlockEU13block_pointerFvvE(
|
||||
// CHECK-NEXT: [[T0:%.*]] = load i1* [[CLEANUP_ACTIVE]]
|
||||
// CHECK-NEXT: [[T0:%.*]] = load i1, i1* [[CLEANUP_ACTIVE]]
|
||||
// CHECK-NEXT: br i1 [[T0]]
|
||||
// CHECK: call void @_ZN5test51AD1Ev([[A]]* [[CLEANUP_ADDR]])
|
||||
// CHECK-NEXT: br label
|
||||
|
|
|
@ -63,8 +63,8 @@ void test2(int x) {
|
|||
//
|
||||
// CHECK-2: define internal void @[[HelperName]]
|
||||
// CHECK-2: getelementptr inbounds %[[Capture]], %[[Capture]]*
|
||||
// CHECK-2: load i32**
|
||||
// CHECK-2: load i32*
|
||||
// CHECK-2: load i32*, i32**
|
||||
// CHECK-2: load i32, i32*
|
||||
}
|
||||
|
||||
void test3(int x) {
|
||||
|
|
|
@ -57,7 +57,7 @@ void member_access(S *p) {
|
|||
// (1b) Check that 'p' actually points to an 'S'.
|
||||
|
||||
// CHECK: %[[VPTRADDR:.*]] = bitcast {{.*}} to i64*
|
||||
// CHECK-NEXT: %[[VPTR:.*]] = load i64* %[[VPTRADDR]]
|
||||
// CHECK-NEXT: %[[VPTR:.*]] = load i64, i64* %[[VPTRADDR]]
|
||||
//
|
||||
// hash_16_bytes:
|
||||
//
|
||||
|
@ -82,7 +82,7 @@ void member_access(S *p) {
|
|||
//
|
||||
// CHECK-NEXT: %[[IDX:.*]] = and i64 %{{.*}}, 127
|
||||
// CHECK-NEXT: getelementptr inbounds [128 x i64], [128 x i64]* @__ubsan_vptr_type_cache, i32 0, i64 %[[IDX]]
|
||||
// CHECK-NEXT: %[[CACHEVAL:.*]] = load i64*
|
||||
// CHECK-NEXT: %[[CACHEVAL:.*]] = load i64, i64*
|
||||
// CHECK-NEXT: icmp eq i64 %[[CACHEVAL]], %[[HASH]]
|
||||
// CHECK-NEXT: br i1
|
||||
|
||||
|
@ -116,7 +116,7 @@ void member_access(S *p) {
|
|||
|
||||
// (3b) Check that 'p' actually points to an 'S'
|
||||
|
||||
// CHECK: load i64*
|
||||
// CHECK: load i64, i64*
|
||||
// CHECK-NEXT: xor i64 {{-4030275160588942838|2562089159}},
|
||||
// [...]
|
||||
// CHECK: getelementptr inbounds [128 x i64], [128 x i64]* @__ubsan_vptr_type_cache, i32 0, i64 %
|
||||
|
@ -399,13 +399,13 @@ void indirect_function_call(void (*p)(int)) {
|
|||
|
||||
// Signature check
|
||||
// CHECK-NEXT: [[SIGPTR:%[0-9]*]] = getelementptr <{ i32, i8* }>, <{ i32, i8* }>* [[PTR]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[SIG:%[0-9]*]] = load i32* [[SIGPTR]]
|
||||
// CHECK-NEXT: [[SIG:%[0-9]*]] = load i32, i32* [[SIGPTR]]
|
||||
// CHECK-NEXT: [[SIGCMP:%[0-9]*]] = icmp eq i32 [[SIG]], 1413876459
|
||||
// CHECK-NEXT: br i1 [[SIGCMP]]
|
||||
|
||||
// RTTI pointer check
|
||||
// CHECK: [[RTTIPTR:%[0-9]*]] = getelementptr <{ i32, i8* }>, <{ i32, i8* }>* [[PTR]], i32 0, i32 1
|
||||
// CHECK-NEXT: [[RTTI:%[0-9]*]] = load i8** [[RTTIPTR]]
|
||||
// CHECK-NEXT: [[RTTI:%[0-9]*]] = load i8*, i8** [[RTTIPTR]]
|
||||
// CHECK-NEXT: [[RTTICMP:%[0-9]*]] = icmp eq i8* [[RTTI]], bitcast ({ i8*, i8* }* @_ZTIFviE to i8*)
|
||||
// CHECK-NEXT: br i1 [[RTTICMP]]
|
||||
p(42);
|
||||
|
|
|
@ -20,7 +20,7 @@ int f() {
|
|||
// CHECK-NEXT: [[X:%[a-z0-9]+]] = getelementptr inbounds {{.*}} [[LVALUE]], i32 0, i32 1
|
||||
// CHECK-NEXT: call %struct.X* @_ZN1XC1EPKc({{.*}}[[X]]
|
||||
// CHECK-NEXT: [[I:%[a-z0-9]+]] = getelementptr inbounds {{.*}} [[LVALUE]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[RESULT:%[a-z0-9]+]] = load i32*
|
||||
// CHECK-NEXT: [[RESULT:%[a-z0-9]+]] = load i32, i32*
|
||||
// CHECK-NEXT: call %struct.Y* @_ZN1YD1Ev
|
||||
// CHECK-NEXT: ret i32 [[RESULT]]
|
||||
return ((Y){17, "seventeen"}).i;
|
||||
|
@ -31,9 +31,9 @@ int g() {
|
|||
// CHECK: store [2 x i32]* %{{[a-z0-9.]+}}, [2 x i32]** [[V:%[a-z0-9.]+]]
|
||||
const int (&v)[2] = (int [2]) {1,2};
|
||||
|
||||
// CHECK: [[A:%[a-z0-9.]+]] = load [2 x i32]** [[V]]
|
||||
// CHECK: [[A:%[a-z0-9.]+]] = load [2 x i32]*, [2 x i32]** [[V]]
|
||||
// CHECK-NEXT: [[A0ADDR:%[a-z0-9.]+]] = getelementptr inbounds [2 x i32], [2 x i32]* [[A]], i32 0, {{.*}} 0
|
||||
// CHECK-NEXT: [[A0:%[a-z0-9.]+]] = load i32* [[A0ADDR]]
|
||||
// CHECK-NEXT: [[A0:%[a-z0-9.]+]] = load i32, i32* [[A0ADDR]]
|
||||
// CHECK-NEXT: ret i32 [[A0]]
|
||||
return v[0];
|
||||
}
|
||||
|
|
|
@ -116,7 +116,7 @@ void while_destruct(int z) {
|
|||
|
||||
// Cleanup.
|
||||
// CHECK: call void @_ZN1XD1Ev
|
||||
// CHECK-NEXT: [[DEST:%.*]] = load i32* [[CLEANUPDEST]]
|
||||
// CHECK-NEXT: [[DEST:%.*]] = load i32, i32* [[CLEANUPDEST]]
|
||||
// CHECK-NEXT: switch i32 [[DEST]]
|
||||
}
|
||||
|
||||
|
@ -163,7 +163,7 @@ void for_destruct(int z) {
|
|||
z = 23;
|
||||
|
||||
// %for.inc:
|
||||
// CHECK: [[TMP:%.*]] = load i32* [[Z]]
|
||||
// CHECK: [[TMP:%.*]] = load i32, i32* [[Z]]
|
||||
// CHECK-NEXT: [[INC:%.*]] = add nsw i32 [[TMP]], 1
|
||||
// CHECK-NEXT: store i32 [[INC]], i32* [[Z]]
|
||||
// CHECK-NEXT: store i32 0, i32* [[CLEANUPDEST]]
|
||||
|
@ -172,7 +172,7 @@ void for_destruct(int z) {
|
|||
|
||||
// %cleanup: Destroys X.
|
||||
// CHECK: call void @_ZN1XD1Ev
|
||||
// CHECK-NEXT: [[YDESTTMP:%.*]] = load i32* [[CLEANUPDEST]]
|
||||
// CHECK-NEXT: [[YDESTTMP:%.*]] = load i32, i32* [[CLEANUPDEST]]
|
||||
// CHECK-NEXT: switch i32 [[YDESTTMP]]
|
||||
// 0 -> %cleanup.cont, default -> %cleanup1
|
||||
|
||||
|
@ -207,7 +207,7 @@ void for_destruct(int z) {
|
|||
|
||||
// %for.inc11:
|
||||
// CHECK: call void @_Z4getXv
|
||||
// CHECK-NEXT: load i32* [[I]]
|
||||
// CHECK-NEXT: load i32, i32* [[I]]
|
||||
// CHECK-NEXT: add
|
||||
// CHECK-NEXT: store
|
||||
// CHECK-NEXT: call void @_ZN1XD1Ev
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue