[llvm] [LoopPeel] Peel last iteration to enable load widening (PR #173420)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 12 03:28:49 PST 2026
================
@@ -890,6 +1049,76 @@ void llvm::computePeelCount(Loop *L, unsigned LoopSize,
}
}
+bool llvm::widenLoadsAfterPeel(Loop &L, ScalarEvolution &SE,
+ const DataLayout &DL,
+ const TargetTransformInfo &TTI,
+ DominatorTree &DT) {
+ BasicBlock *Latch = L.getLoopLatch();
+ if (!Latch)
+ return false;
+
+ bool Changed = false;
+
+ for (BasicBlock *BB : L.blocks()) {
+ if (!DT.dominates(BB, Latch))
+ continue;
+ SmallVector<LoadGroup> Groups =
+ findLoadGroupsForWidening(BB, L, SE, DL, TTI);
+ for (const LoadGroup &Group : Groups) {
+ LoadInst *InsertPoint = Group.FirstLoad;
+ IRBuilder<> Builder(InsertPoint);
+ Value *BasePtr = Group.BasePtr;
+ int64_t FirstOffset = Group.Loads[0].second.getSExtValue();
+ // If the first load doesn't start at offset 0, we need to adjust.
+ if (FirstOffset != 0) {
+ Value *OrigPtr = Group.BasePtr;
+ BasePtr = Builder.CreatePtrAdd(
+ OrigPtr,
+ ConstantInt::get(
+ Builder.getIndexTy(DL, DL.getDefaultGlobalsAddressSpace()),
+ FirstOffset));
+ }
+ // Merge AA metadata from all loads.
+ AAMDNodes AATags = InsertPoint->getAAMetadata();
+ for (const auto &[Load, Offset] : Group.Loads) {
+ if (Load != InsertPoint)
+ AATags = AATags.concat(Load->getAAMetadata());
+ }
----------------
fhahn wrote:
Shouldn't this be the union? Needs test
https://github.com/llvm/llvm-project/pull/173420
More information about the llvm-commits
mailing list