[llvm] [LICM] Simplify isLoadInvariantInLoop given opaque pointers (PR #65597)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 14 07:53:03 PDT 2023
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-transforms
<details>
<summary>Changes</summary>
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.
--
Full diff: https://github.com/llvm/llvm-project/pull/65597.diff
1 Files Affected:
- (modified) llvm/lib/Transforms/Scalar/LICM.cpp (+1-16)
<pre>
diff --git a/llvm/lib/Transforms/Scalar/LICM.cpp b/llvm/lib/Transforms/Scalar/LICM.cpp
index d6e77c904f3aa2c..4cb70cbdf093b36 100644
--- a/llvm/lib/Transforms/Scalar/LICM.cpp
+++ b/llvm/lib/Transforms/Scalar/LICM.cpp
@@ -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))
</pre>
</details>
https://github.com/llvm/llvm-project/pull/65597
More information about the llvm-commits
mailing list