mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 15:56: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.
|
// invariant.start has no uses.
|
||||||
static bool isLoadInvariantInLoop(LoadInst *LI, DominatorTree *DT,
|
static bool isLoadInvariantInLoop(LoadInst *LI, DominatorTree *DT,
|
||||||
Loop *CurLoop) {
|
Loop *CurLoop) {
|
||||||
Value *Addr = LI->getOperand(0);
|
Value *Addr = LI->getPointerOperand();
|
||||||
const DataLayout &DL = LI->getModule()->getDataLayout();
|
const DataLayout &DL = LI->getModule()->getDataLayout();
|
||||||
const TypeSize LocSizeInBits = DL.getTypeSizeInBits(LI->getType());
|
const TypeSize LocSizeInBits = DL.getTypeSizeInBits(LI->getType());
|
||||||
|
|
||||||
@ -1055,21 +1055,6 @@ static bool isLoadInvariantInLoop(LoadInst *LI, DominatorTree *DT,
|
|||||||
if (LocSizeInBits.isScalable())
|
if (LocSizeInBits.isScalable())
|
||||||
return false;
|
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
|
// 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.
|
// uselists for non-local Values in a loop pass.
|
||||||
if (isa<Constant>(Addr))
|
if (isa<Constant>(Addr))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user