[PATCH] D71990: [LoopUtils] Better accuracy for getLoopEstimatedTripCount.
Evgeniy via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 20 02:07:41 PST 2020
This revision was automatically updated to reflect the committed changes.
Closed by commit rG10357e1c89b3: [LoopUtils] Better accuracy for getLoopEstimatedTripCount. (authored by ebrevnov).
Changed prior to commit:
https://reviews.llvm.org/D71990?vs=238693&id=239040#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D71990/new/
https://reviews.llvm.org/D71990
Files:
llvm/lib/Transforms/Utils/LoopUtils.cpp
llvm/test/Transforms/LoopUnroll/peel-loop-conditions-pgo-1.ll
llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt-idom-2.ll
llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt-idom.ll
llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt.ll
llvm/test/Transforms/LoopUnroll/peel-loop-pgo.ll
Index: llvm/test/Transforms/LoopUnroll/peel-loop-pgo.ll
===================================================================
--- llvm/test/Transforms/LoopUnroll/peel-loop-pgo.ll
+++ llvm/test/Transforms/LoopUnroll/peel-loop-pgo.ll
@@ -9,7 +9,7 @@
; from the loop, and update the branch weights for the peeled loop properly.
; CHECK: Loop Unroll: F[basic]
-; CHECK: PEELING loop %for.body with iteration count 3!
+; CHECK: PEELING loop %for.body with iteration count 4!
; CHECK: Loop Unroll: F[optsize]
; CHECK-NOT: PEELING
Index: llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt.ll
===================================================================
--- llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt.ll
+++ llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt.ll
@@ -8,7 +8,7 @@
; All side exits to deopt does not change weigths.
; CHECK: Loop Unroll: F[basic]
-; CHECK: PEELING loop %for.body with iteration count 3!
+; CHECK: PEELING loop %for.body with iteration count 4!
; CHECK-NO-PEEL-NOT: PEELING loop %for.body
; CHECK-LABEL: @basic
; CHECK: br i1 %c, label %{{.*}}, label %side_exit, !prof !15
Index: llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt-idom.ll
===================================================================
--- llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt-idom.ll
+++ llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt-idom.ll
@@ -5,7 +5,7 @@
; Regression test for setting the correct idom for exit blocks.
; CHECK: Loop Unroll: F[basic]
-; CHECK: PEELING loop %for.body with iteration count 1!
+; CHECK: PEELING loop %for.body with iteration count 2!
define i32 @basic(i32* %p, i32 %k, i1 %c1, i1 %c2) #0 !prof !3 {
entry:
Index: llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt-idom-2.ll
===================================================================
--- llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt-idom-2.ll
+++ llvm/test/Transforms/LoopUnroll/peel-loop-pgo-deopt-idom-2.ll
@@ -5,7 +5,7 @@
; Regression test for setting the correct idom for exit blocks.
; CHECK: Loop Unroll: F[basic]
-; CHECK: PEELING loop %for.body with iteration count 1!
+; CHECK: PEELING loop %for.body with iteration count 2!
define i32 @basic(i32* %p, i32 %k, i1 %c1, i1 %c2) #0 !prof !3 {
entry:
Index: llvm/test/Transforms/LoopUnroll/peel-loop-conditions-pgo-1.ll
===================================================================
--- llvm/test/Transforms/LoopUnroll/peel-loop-conditions-pgo-1.ll
+++ llvm/test/Transforms/LoopUnroll/peel-loop-conditions-pgo-1.ll
@@ -11,7 +11,7 @@
define void @test1(i32 %k) !prof !4 {
; CHECK: Loop Unroll: F[test1] Loop %for.body
; CHECK: PEELING loop %for.body with iteration count 2!
-; CHECK: PEELING loop %for.body with iteration count 4!
+; CHECK: PEELING loop %for.body with iteration count 5!
; CHECK: llvm.loop.unroll.disable
for.body.lr.ph:
br label %for.body
Index: llvm/lib/Transforms/Utils/LoopUtils.cpp
===================================================================
--- llvm/lib/Transforms/Utils/LoopUtils.cpp
+++ llvm/lib/Transforms/Utils/LoopUtils.cpp
@@ -723,12 +723,15 @@
if (LatchBR->getSuccessor(0) != L->getHeader())
std::swap(BackedgeTakenWeight, LatchExitWeight);
- if (!BackedgeTakenWeight || !LatchExitWeight)
- return 0;
+ if (!LatchExitWeight)
+ return None;
- // Divide the count of the backedge by the count of the edge exiting the loop,
- // rounding to nearest.
- return llvm::divideNearest(BackedgeTakenWeight, LatchExitWeight);
+ // Estimated backedge taken count is a ratio of the backedge taken weight by
+ // the the edge exiting weight, rounded to nearest.
+ uint64_t BackedgeTakenCount =
+ llvm::divideNearest(BackedgeTakenWeight, LatchExitWeight);
+ // Estimated trip count is one plus estimated backedge taken count.
+ return BackedgeTakenCount + 1;
}
bool llvm::hasIterationCountInvariantInParent(Loop *InnerLoop,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D71990.239040.patch
Type: text/x-patch
Size: 3912 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200120/1a6a3d61/attachment.bin>
More information about the llvm-commits
mailing list