forked from OSchip/llvm-project
parent
012d4fcaf0
commit
2761350730
|
@ -2516,7 +2516,6 @@ llvm::Value *X86_64ABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
|
|||
uint64_t TySize = SizeAlign.first.getQuantity();
|
||||
unsigned TyAlign = SizeAlign.second.getQuantity();
|
||||
if (TyAlign > 8) {
|
||||
RegAddr = CGF.Builder.CreateGEP(RegAddr, gp_offset);
|
||||
llvm::Value *Tmp = CGF.CreateMemTemp(Ty);
|
||||
CGF.Builder.CreateMemCpy(Tmp, RegAddr, TySize, 8, false);
|
||||
RegAddr = Tmp;
|
||||
|
|
|
@ -399,6 +399,15 @@ void test51(struct test51_s *s, __builtin_va_list argList) {
|
|||
}
|
||||
|
||||
// CHECK: define void @test51
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* {{.*}}, i8* {{.*}}, i64 16, i32 8, i1 false)
|
||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* {{.*}}, i8* {{.*}}, i64 16, i32 16, i1 false)
|
||||
// CHECK-NEXT: ret void
|
||||
// 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: [[VALUE_ADDR:%.*]] = getelementptr 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*
|
||||
// CHECK-NEXT: [[RECASTED_VALUE_ADDR:%.*]] = bitcast [[STRUCT_TEST51]]* [[CASTED_VALUE_ADDR]] to i8*
|
||||
// CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[CASTED_TMP_ADDR]], i8* [[RECASTED_VALUE_ADDR]], i64 16, i32 8, i1 false)
|
||||
// CHECK-NEXT: add i32 {{.*}}, 16
|
||||
// CHECK-NEXT: store i32 {{.*}}, i32* {{.*}}
|
||||
// CHECK-NEXT: br label
|
||||
|
|
Loading…
Reference in New Issue