diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp index 0a6ebb897e98..58cbf2e20684 100644 --- a/clang/lib/CodeGen/TargetInfo.cpp +++ b/clang/lib/CodeGen/TargetInfo.cpp @@ -2755,21 +2755,6 @@ llvm::Value *PPC64_SVR4_ABIInfo::EmitVAArg(llvm::Value *VAListAddr, llvm::Value *VAListAddrAsBPP = Builder.CreateBitCast(VAListAddr, BPP, "ap"); llvm::Value *Addr = Builder.CreateLoad(VAListAddrAsBPP, "ap.cur"); - // Handle address alignment for type alignment > 64 bits. Although - // long double normally requires 16-byte alignment, this is not the - // case when it is passed as an argument; so handle that special case. - const BuiltinType *BT = Ty->getAs(); - unsigned TyAlign = CGF.getContext().getTypeAlign(Ty) / 8; - - if (TyAlign > 8 && (!BT || !BT->isFloatingPoint())) { - assert((TyAlign & (TyAlign - 1)) == 0 && - "Alignment is not power of 2!"); - llvm::Value *AddrAsInt = Builder.CreatePtrToInt(Addr, CGF.Int64Ty); - AddrAsInt = Builder.CreateAdd(AddrAsInt, Builder.getInt64(TyAlign - 1)); - AddrAsInt = Builder.CreateAnd(AddrAsInt, Builder.getInt64(~(TyAlign - 1))); - Addr = Builder.CreateIntToPtr(AddrAsInt, BP); - } - // Update the va_list pointer. unsigned SizeInBytes = CGF.getContext().getTypeSize(Ty) / 8; unsigned Offset = llvm::RoundUpToAlignment(SizeInBytes, 8); diff --git a/clang/test/CodeGen/ppc64-varargs-struct.c b/clang/test/CodeGen/ppc64-varargs-struct.c index 3c7e7cb6bc10..e69332ead434 100644 --- a/clang/test/CodeGen/ppc64-varargs-struct.c +++ b/clang/test/CodeGen/ppc64-varargs-struct.c @@ -18,12 +18,6 @@ void testva (int n, ...) // CHECK: bitcast %struct.x* %{{[0-9]+}} to i8* // CHECK: call void @llvm.memcpy - __int128_t u = va_arg (ap, __int128_t); -// CHECK: ptrtoint i8* %{{[a-z.0-9]*}} to i64 -// CHECK: add i64 %{{[0-9]+}}, 15 -// CHECK: and i64 %{{[0-9]+}}, 4294967280 -// CHECK: inttoptr i64 %{{[0-9]+}} to i8* - int v = va_arg (ap, int); // CHECK: ptrtoint i8* %{{[a-z.0-9]*}} to i64 // CHECK: add i64 %{{[0-9]+}}, 4