mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 09:06:07 +00:00
[LICM] Simplify isLoadInvariantInLoop given opaque pointers (#65597)
Since we no longer support typed pointers in LLVM IR, the PtrASXTy in isLoadInvariantInLoop was set to be equal to Addr->getType() (an opaque ptr in the same address space). That made the loop looking through bitcasts redundant.
This commit is contained in:
parent
aca9019be0
commit
a0ce4384a6
@ -1039,7 +1039,7 @@ bool llvm::hoistRegion(DomTreeNode *N, AAResults *AA, LoopInfo *LI,
|
||||
// invariant.start has no uses.
|
||||
static bool isLoadInvariantInLoop(LoadInst *LI, DominatorTree *DT,
|
||||
Loop *CurLoop) {
|
||||
Value *Addr = LI->getOperand(0);
|
||||
Value *Addr = LI->getPointerOperand();
|
||||
const DataLayout &DL = LI->getModule()->getDataLayout();
|
||||
const TypeSize LocSizeInBits = DL.getTypeSizeInBits(LI->getType());
|
||||
|
||||
@ -1055,21 +1055,6 @@ static bool isLoadInvariantInLoop(LoadInst *LI, DominatorTree *DT,
|
||||
if (LocSizeInBits.isScalable())
|
||||
return false;
|
||||
|
||||
// if the type is ptr addrspace(x), we know this is the type of
|
||||
// llvm.invariant.start operand
|
||||
auto *PtrASXTy = PointerType::get(LI->getContext(),
|
||||
LI->getPointerAddressSpace());
|
||||
unsigned BitcastsVisited = 0;
|
||||
// Look through bitcasts until we reach the PtrASXTy type (this is
|
||||
// invariant.start operand type).
|
||||
// FIXME: We shouldn't really find such bitcasts with opaque pointers.
|
||||
while (Addr->getType() != PtrASXTy) {
|
||||
auto *BC = dyn_cast<BitCastInst>(Addr);
|
||||
// Avoid traversing high number of bitcast uses.
|
||||
if (++BitcastsVisited > MaxNumUsesTraversed || !BC)
|
||||
return false;
|
||||
Addr = BC->getOperand(0);
|
||||
}
|
||||
// If we've ended up at a global/constant, bail. We shouldn't be looking at
|
||||
// uselists for non-local Values in a loop pass.
|
||||
if (isa<Constant>(Addr))
|
||||
|
Loading…
x
Reference in New Issue
Block a user