mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-06 23:32:27 +00:00
[LPM] Fix a logic error in LICM spotted by inspection.
We completely skipped promotion in LICM if the loop has a preheader or dedicated exits, but not *both*. We hoist if there is a preheader, and sink if there are dedicated exits, but either hoisting or sinking can move loop invariant code out of the loop! I have no idea if this has a practical consequence. If anyone has ideas for a test case, let me know. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199966 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5950c6fa48
commit
4296ce5662
@ -273,7 +273,7 @@ bool LICM::runOnLoop(Loop *L, LPPassManager &LPM) {
|
||||
|
||||
// Now that all loop invariants have been removed from the loop, promote any
|
||||
// memory references to scalars that we can.
|
||||
if (!DisablePromotion && Preheader && L->hasDedicatedExits()) {
|
||||
if (!DisablePromotion && (Preheader || L->hasDedicatedExits())) {
|
||||
SmallVector<BasicBlock *, 8> ExitBlocks;
|
||||
SmallVector<Instruction *, 8> InsertPts;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user