summaryrefslogtreecommitdiffstats
path: root/llvm/utils/TableGen
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2016-01-17 18:12:52 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2016-01-17 18:12:52 +0000
commitde47590589f8418b942a0ca4576f6ed40ec61c36 (patch)
treef3700e4e6e0f7bbf3dbab6b95f6fc487a5c9e719 /llvm/utils/TableGen
parent7a8a705c9d4542c5692667adb7de34d617a52378 (diff)
downloadbcm5719-llvm-de47590589f8418b942a0ca4576f6ed40ec61c36.tar.gz
bcm5719-llvm-de47590589f8418b942a0ca4576f6ed40ec61c36.zip
[IndVars] Fix PR25576
`LCSSASafePhiForRAUW` as computed was incorrect -- in cases like these (this exact example does not actually trigger the bug): define i32 @f(i32 %n, i1* %c) { entry: br label %outer.loop outer.loop: br label %inner.loop inner.loop: %iv = phi i32 [ 0, %outer.loop ], [ %iv.inc, %inner.loop ] %iv.inc = add nuw nsw i32 %iv, 1 %tc = udiv i32 %n, 13 %be.cond = icmp ult i32 %iv, %tc br i1 %be.cond, label %inner.loop, label %inner.exit inner.exit: %iv.lcssa = phi i32 [ %iv, %inner.loop ] %outer.be.cond = load volatile i1, i1* %c br i1 %outer.be.cond, label %outer.loop, label %leave leave: %iv.lcssa.lcssa = phi i32 [ %iv.lcssa, %inner.exit ] ret i32 %iv.lcssa.lcssa } `LCSSASafePhiForRAUW` is true for `%iv.lcssa` when re-rewriting the exit value of `%iv` for `%inner.loop` to `%tc` (this can happen due to `SCEVExpander::findExistingExpansion`), but the RAUW breaks LCSSA. To fix this, instead of computing `SafePhi` with special logic, decide the safety of RAUW directly via `replacementPreservesLCSSAForm`. llvm-svn: 258016
Diffstat (limited to 'llvm/utils/TableGen')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud