[llvm] [SROA] Unfold gep of index phi (PR #83087)
Artem Belevich via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 27 15:25:36 PST 2024
================
@@ -4023,64 +4023,88 @@ class AggLoadStoreRewriter : public InstVisitor<AggLoadStoreRewriter, bool> {
Visited.insert(NSelI);
enqueueUsers(*NSelI);
- LLVM_DEBUG(dbgs() << "\n to: " << *NTrue
- << "\n " << *NFalse
- << "\n " << *NSel << '\n');
+ LLVM_DEBUG(dbgs() << "\n to: " << *NTrue << "\n "
+ << *NFalse << "\n " << *NSel << '\n');
return true;
}
- // Fold gep (phi ptr1, ptr2) => phi gep(ptr1), gep(ptr2)
+ // Fold gep (phi ptr1, ptr2), idx
+ // => phi ((gep ptr1, idx), (gep ptr2, idx))
+ // and gep ptr, (phi idx1, idx2)
+ // => phi ((gep ptr, idx1), (gep ptr, idx2))
bool foldGEPPhi(GetElementPtrInst &GEPI) {
- if (!GEPI.hasAllConstantIndices())
+ // Check whether the GEP has exactly one phi operand and all indices
+ // will become constant after the transform.
----------------
Artem-B wrote:
Right. now that most geps get normalized to a single-index variant, we only have gep pointer and gep index. Still, expanding both may be useful. E.g. if some code conditionally iterates over one of two buffers, folding both pointer and the index would allow SROA to see all accesses.
https://github.com/llvm/llvm-project/pull/83087
More information about the llvm-commits
mailing list