[CodeGen] Avoid more pointer element type accesses
This is enough to build sqlite3 with opaque pointers.
This commit is contained in:
parent
2dbe5898d7
commit
2d89382b5a
|
@ -2686,8 +2686,8 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
|
|||
case ABIArgInfo::Indirect:
|
||||
case ABIArgInfo::IndirectAliased: {
|
||||
assert(NumIRArgs == 1);
|
||||
Address ParamAddr =
|
||||
Address(Fn->getArg(FirstIRArg), ArgI.getIndirectAlign());
|
||||
Address ParamAddr = Address(Fn->getArg(FirstIRArg), ConvertTypeForMem(Ty),
|
||||
ArgI.getIndirectAlign());
|
||||
|
||||
if (!hasScalarEvaluationKind(Ty)) {
|
||||
// Aggregates and complex variables are accessed by reference. All we
|
||||
|
@ -4869,7 +4869,8 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
|
|||
I->copyInto(*this, AI);
|
||||
} else {
|
||||
// Skip the extra memcpy call.
|
||||
auto *T = V->getType()->getPointerElementType()->getPointerTo(
|
||||
auto *T = llvm::PointerType::getWithSamePointeeType(
|
||||
cast<llvm::PointerType>(V->getType()),
|
||||
CGM.getDataLayout().getAllocaAddrSpace());
|
||||
IRCallArgs[FirstIRArg] = getTargetHooks().performAddrSpaceCast(
|
||||
*this, V, LangAS::Default, CGM.getASTAllocaAddressSpace(), T,
|
||||
|
|
|
@ -1193,7 +1193,7 @@ static void emitStoresForConstant(CodeGenModule &CGM, const VarDecl &D,
|
|||
bool valueAlreadyCorrect =
|
||||
constant->isNullValue() || isa<llvm::UndefValue>(constant);
|
||||
if (!valueAlreadyCorrect) {
|
||||
Loc = Builder.CreateBitCast(Loc, Ty->getPointerTo(Loc.getAddressSpace()));
|
||||
Loc = Builder.CreateElementBitCast(Loc, Ty);
|
||||
emitStoresForInitAfterBZero(CGM, constant, Loc, isVolatile, Builder,
|
||||
IsAutoInit);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue