mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-07 14:33:15 +00:00
Opaque Pointer Types: GEP API migrations to specify the gep type explicitly
The changes to InstCombine do seem a bit silly - it doesn't make anything obviously better to have the caller access the pointers element type (the thing I'm trying to remove) than the GEP itself, but it's a helpful migration step. This will allow me to more obviously lock down GEP (& Load, etc) API usage, then fix all the code that accesses pointer element types except the places that need to be removed (most of the InstCombines) anyway - at which point I'll need to just remove all that code because it won't be meaningful anymore (there will be no pointer types, so no bitcasts to combine) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@233126 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6bde9f6994
commit
dad4e9cde6
@ -600,8 +600,8 @@ simplifyRelocatesOffABase(IntrinsicInst *RelocatedBase,
|
||||
// Create a Builder and replace the target callsite with a gep
|
||||
IRBuilder<> Builder(ToReplace);
|
||||
Builder.SetCurrentDebugLocation(ToReplace->getDebugLoc());
|
||||
Value *Replacement =
|
||||
Builder.CreateGEP(RelocatedBase, makeArrayRef(OffsetV));
|
||||
Value *Replacement = Builder.CreateGEP(
|
||||
Derived->getSourceElementType(), RelocatedBase, makeArrayRef(OffsetV));
|
||||
Instruction *ReplacementInst = cast<Instruction>(Replacement);
|
||||
ReplacementInst->removeFromParent();
|
||||
ReplacementInst->insertAfter(RelocatedBase);
|
||||
|
@ -128,7 +128,8 @@ void SjLjEHPrepare::insertCallSiteStore(Instruction *I, int Number) {
|
||||
Value *Zero = ConstantInt::get(Int32Ty, 0);
|
||||
Value *One = ConstantInt::get(Int32Ty, 1);
|
||||
Value *Idxs[2] = { Zero, One };
|
||||
Value *CallSite = Builder.CreateGEP(FuncCtx, Idxs, "call_site");
|
||||
Value *CallSite =
|
||||
Builder.CreateGEP(FunctionContextTy, FuncCtx, Idxs, "call_site");
|
||||
|
||||
// Insert a store of the call-site number
|
||||
ConstantInt *CallSiteNoC =
|
||||
|
@ -1611,9 +1611,12 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
|
||||
// %0 = GEP [10 x i8] addrspace(1)* X, ...
|
||||
// addrspacecast i8 addrspace(1)* %0 to i8*
|
||||
SmallVector<Value*, 8> Idx(GEP.idx_begin(), GEP.idx_end());
|
||||
Value *NewGEP = GEP.isInBounds() ?
|
||||
Builder->CreateInBoundsGEP(StrippedPtr, Idx, GEP.getName()) :
|
||||
Builder->CreateGEP(StrippedPtr, Idx, GEP.getName());
|
||||
Value *NewGEP =
|
||||
GEP.isInBounds()
|
||||
? Builder->CreateInBoundsGEP(StrippedPtr, Idx,
|
||||
GEP.getName())
|
||||
: Builder->CreateGEP(StrippedPtrTy->getElementType(),
|
||||
StrippedPtr, Idx, GEP.getName());
|
||||
return new AddrSpaceCastInst(NewGEP, GEP.getType());
|
||||
}
|
||||
}
|
||||
@ -1629,9 +1632,11 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
|
||||
DL.getTypeAllocSize(ResElTy)) {
|
||||
Type *IdxType = DL.getIntPtrType(GEP.getType());
|
||||
Value *Idx[2] = { Constant::getNullValue(IdxType), GEP.getOperand(1) };
|
||||
Value *NewGEP = GEP.isInBounds() ?
|
||||
Builder->CreateInBoundsGEP(StrippedPtr, Idx, GEP.getName()) :
|
||||
Builder->CreateGEP(StrippedPtr, Idx, GEP.getName());
|
||||
Value *NewGEP =
|
||||
GEP.isInBounds()
|
||||
? Builder->CreateInBoundsGEP(StrippedPtr, Idx, GEP.getName())
|
||||
: Builder->CreateGEP(StrippedPtrTy->getElementType(),
|
||||
StrippedPtr, Idx, GEP.getName());
|
||||
|
||||
// V and GEP are both pointer types --> BitCast
|
||||
return CastInst::CreatePointerBitCastOrAddrSpaceCast(NewGEP,
|
||||
@ -1662,9 +1667,12 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
|
||||
// Successfully decomposed Idx as NewIdx * Scale, form a new GEP.
|
||||
// If the multiplication NewIdx * Scale may overflow then the new
|
||||
// GEP may not be "inbounds".
|
||||
Value *NewGEP = GEP.isInBounds() && NSW ?
|
||||
Builder->CreateInBoundsGEP(StrippedPtr, NewIdx, GEP.getName()) :
|
||||
Builder->CreateGEP(StrippedPtr, NewIdx, GEP.getName());
|
||||
Value *NewGEP =
|
||||
GEP.isInBounds() && NSW
|
||||
? Builder->CreateInBoundsGEP(StrippedPtr, NewIdx,
|
||||
GEP.getName())
|
||||
: Builder->CreateGEP(StrippedPtrTy->getElementType(),
|
||||
StrippedPtr, NewIdx, GEP.getName());
|
||||
|
||||
// The NewGEP must be pointer typed, so must the old one -> BitCast
|
||||
return CastInst::CreatePointerBitCastOrAddrSpaceCast(NewGEP,
|
||||
@ -1704,7 +1712,7 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
|
||||
|
||||
Value *NewGEP = GEP.isInBounds() && NSW ?
|
||||
Builder->CreateInBoundsGEP(StrippedPtr, Off, GEP.getName()) :
|
||||
Builder->CreateGEP(StrippedPtr, Off, GEP.getName());
|
||||
Builder->CreateGEP(SrcElTy, StrippedPtr, Off, GEP.getName());
|
||||
// The NewGEP must be pointer typed, so must the old one -> BitCast
|
||||
return CastInst::CreatePointerBitCastOrAddrSpaceCast(NewGEP,
|
||||
GEP.getType());
|
||||
@ -1768,7 +1776,7 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
|
||||
if (FindElementAtOffset(OpType, Offset.getSExtValue(), NewIndices)) {
|
||||
Value *NGEP = GEP.isInBounds() ?
|
||||
Builder->CreateInBoundsGEP(Operand, NewIndices) :
|
||||
Builder->CreateGEP(Operand, NewIndices);
|
||||
Builder->CreateGEP(OpType->getElementType(), Operand, NewIndices);
|
||||
|
||||
if (NGEP->getType() == GEP.getType())
|
||||
return ReplaceInstUsesWith(GEP, NGEP);
|
||||
|
@ -450,7 +450,7 @@ bool Scalarizer::visitGetElementPtrInst(GetElementPtrInst &GEPI) {
|
||||
Indices.resize(NumIndices);
|
||||
for (unsigned J = 0; J < NumIndices; ++J)
|
||||
Indices[J] = Ops[J][I];
|
||||
Res[I] = Builder.CreateGEP(Base[I], Indices,
|
||||
Res[I] = Builder.CreateGEP(GEPI.getSourceElementType(), Base[I], Indices,
|
||||
GEPI.getName() + ".i" + Twine(I));
|
||||
if (GEPI.isInBounds())
|
||||
if (GetElementPtrInst *NewGEPI = dyn_cast<GetElementPtrInst>(Res[I]))
|
||||
|
@ -2365,7 +2365,8 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E) {
|
||||
OpVecs.push_back(OpVec);
|
||||
}
|
||||
|
||||
Value *V = Builder.CreateGEP(Op0, OpVecs);
|
||||
Value *V = Builder.CreateGEP(
|
||||
cast<GetElementPtrInst>(VL0)->getSourceElementType(), Op0, OpVecs);
|
||||
E->VectorizedValue = V;
|
||||
++NumVectorInstructions;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user