[PATCH] D43878: [LoopUnroll] Simplify induction variables after peeling too.
Florian Hahn via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 28 09:58:41 PST 2018
fhahn created this revision.
fhahn added reviewers: sanjoy, bogner, mzolotukhin, efriedma.
Loop peeling also has an impact on the induction variables, so we should
benefit from induction variable simplification after peeling too.
https://reviews.llvm.org/D43878
Files:
lib/Transforms/Utils/LoopUnroll.cpp
test/Transforms/LoopUnroll/peel-loop-conditions.ll
Index: test/Transforms/LoopUnroll/peel-loop-conditions.ll
===================================================================
--- test/Transforms/LoopUnroll/peel-loop-conditions.ll
+++ test/Transforms/LoopUnroll/peel-loop-conditions.ll
@@ -33,17 +33,9 @@
; CHECK-NEXT: [[CMP_PEEL8:%.*]] = icmp slt i32 [[INC_PEEL7]], [[K]]
; CHECK-NEXT: br i1 [[CMP_PEEL8]], label [[FOR_BODY:%.*]], label [[FOR_END]]
; CHECK: for.body:
-; CHECK-NEXT: [[I_05:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_INC:%.*]] ], [ [[INC_PEEL7]], [[FOR_INC_PEEL6]] ]
-; CHECK-NEXT: [[CMP1:%.*]] = icmp ult i32 [[I_05]], 2
-; CHECK-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
-; CHECK: if.then:
-; CHECK-NEXT: call void @f1()
-; CHECK-NEXT: br label [[FOR_INC]]
-; CHECK: if.else:
+; CHECK-NEXT: [[I_05:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ [[INC_PEEL7]], [[FOR_INC_PEEL6]] ]
; CHECK-NEXT: call void @f2()
-; CHECK-NEXT: br label [[FOR_INC]]
-; CHECK: for.inc:
-; CHECK-NEXT: [[INC]] = add nsw i32 [[I_05]], 1
+; CHECK-NEXT: [[INC]] = add nuw nsw i32 [[I_05]], 1
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[INC]], [[K]]
; CHECK-NEXT: br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END]], !llvm.loop !0
; CHECK: for.end:
Index: lib/Transforms/Utils/LoopUnroll.cpp
===================================================================
--- lib/Transforms/Utils/LoopUnroll.cpp
+++ lib/Transforms/Utils/LoopUnroll.cpp
@@ -403,8 +403,9 @@
"Did not expect runtime trip-count unrolling "
"and peeling for the same loop");
+ bool Peeled = false;
if (PeelCount) {
- bool Peeled = peelLoop(L, PeelCount, LI, SE, DT, AC, PreserveLCSSA);
+ Peeled = peelLoop(L, PeelCount, LI, SE, DT, AC, PreserveLCSSA);
// Successful peeling may result in a change in the loop preheader/trip
// counts. If we later unroll the loop, we want these to be updated.
@@ -790,7 +791,7 @@
}
// Simplify any new induction variables in the partially unrolled loop.
- if (SE && !CompletelyUnroll && Count > 1) {
+ if (SE && !CompletelyUnroll && (Count > 1 || Peeled)) {
SmallVector<WeakTrackingVH, 16> DeadInsts;
simplifyLoopIVs(L, SE, DT, LI, DeadInsts);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D43878.136322.patch
Type: text/x-patch
Size: 2252 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180228/ec439257/attachment.bin>
More information about the llvm-commits
mailing list