diff options
| author | Max Kazantsev <max.kazantsev@azul.com> | 2018-04-23 10:32:37 +0000 |
|---|---|---|
| committer | Max Kazantsev <max.kazantsev@azul.com> | 2018-04-23 10:32:37 +0000 |
| commit | b1137c42fa9173e60c4396e1607205785c35bbe7 (patch) | |
| tree | 02d7ad693def478eb876d8a2db38676dea54a774 /llvm/test/Transforms/LoopSimplify | |
| parent | 4a4e7a31adbc1fb69383c113806af25d94b7257e (diff) | |
| download | bcm5719-llvm-b1137c42fa9173e60c4396e1607205785c35bbe7.tar.gz bcm5719-llvm-b1137c42fa9173e60c4396e1607205785c35bbe7.zip | |
[LoopSimplify] Fix incorrect SCEV invalidation
In the function `simplifyOneLoop` we optimistically assume that changes in the
inner loop only affect this very loop and have no impact on its parents. In fact,
after rL329047 has been merged, we can now calculate exit counts for outer
loops which may depend on inner loops. Thus, we need to invalidate all parents
when we do something to a loop.
There is an evidence of incorrect behavior of `simplifyOneLoop`: when we insert
`SE->verify()` check in the end of this funciton, it fails on a bunch of existing
test, in particular:
LLVM :: Transforms/LoopUnroll/peel-loop-not-forced.ll
LLVM :: Transforms/LoopUnroll/peel-loop-pgo.ll
LLVM :: Transforms/LoopUnroll/peel-loop.ll
LLVM :: Transforms/LoopUnroll/peel-loop2.ll
Note that previously we have fixed issues of this variety, see rL328483.
This patch makes this function invalidate the outermost loop properly.
Differential Revision: https://reviews.llvm.org/D45937
Reviewed By: chandlerc
llvm-svn: 330576
Diffstat (limited to 'llvm/test/Transforms/LoopSimplify')
| -rw-r--r-- | llvm/test/Transforms/LoopSimplify/preserve-scev.ll | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/llvm/test/Transforms/LoopSimplify/preserve-scev.ll b/llvm/test/Transforms/LoopSimplify/preserve-scev.ll index 2def885353b..07486ef2468 100644 --- a/llvm/test/Transforms/LoopSimplify/preserve-scev.ll +++ b/llvm/test/Transforms/LoopSimplify/preserve-scev.ll @@ -95,7 +95,7 @@ declare void @foo() nounwind ; CHECK: Loop %while.cond191: max backedge-taken count is 0 ; CHECK: Loop %while.cond191: Predicated backedge-taken count is 0 ; CHECK: Loop %while.cond191.outer: <multiple exits> Unpredictable backedge-taken count. -; CHECK: Loop %while.cond191.outer: Unpredictable max backedge-taken count. +; CHECK: Loop %while.cond191.outer: max backedge-taken count is false ; CHECK: Loop %while.cond191.outer: Unpredictable predicated backedge-taken count. define void @mergeExit(i32 %MapAttrCount) nounwind uwtable ssp { entry: |

