diff options
Diffstat (limited to 'llvm/lib/Analysis/MemorySSAUpdater.cpp')
-rw-r--r-- | llvm/lib/Analysis/MemorySSAUpdater.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/llvm/lib/Analysis/MemorySSAUpdater.cpp b/llvm/lib/Analysis/MemorySSAUpdater.cpp index 473268982f2d..85af091772e7 100644 --- a/llvm/lib/Analysis/MemorySSAUpdater.cpp +++ b/llvm/lib/Analysis/MemorySSAUpdater.cpp @@ -10,11 +10,13 @@ // //===----------------------------------------------------------------===// #include "llvm/Analysis/MemorySSAUpdater.h" +#include "llvm/Analysis/LoopIterator.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/SetVector.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/Analysis/IteratedDominanceFrontier.h" #include "llvm/Analysis/MemorySSA.h" +#include "llvm/IR/BasicBlock.h" #include "llvm/IR/DataLayout.h" #include "llvm/IR/Dominators.h" #include "llvm/IR/GlobalVariable.h" @@ -781,24 +783,24 @@ void MemorySSAUpdater::updateExitBlocksForClonedLoop( void MemorySSAUpdater::applyUpdates(ArrayRef<CFGUpdate> Updates, DominatorTree &DT) { - SmallVector<CFGUpdate, 4> RevDeleteUpdates; + SmallVector<CFGUpdate, 4> DeleteUpdates; SmallVector<CFGUpdate, 4> InsertUpdates; for (auto &Update : Updates) { if (Update.getKind() == DT.Insert) InsertUpdates.push_back({DT.Insert, Update.getFrom(), Update.getTo()}); else - RevDeleteUpdates.push_back({DT.Insert, Update.getFrom(), Update.getTo()}); + DeleteUpdates.push_back({DT.Delete, Update.getFrom(), Update.getTo()}); } - if (!RevDeleteUpdates.empty()) { + if (!DeleteUpdates.empty()) { // Update for inserted edges: use newDT and snapshot CFG as if deletes had // not occurred. // FIXME: This creates a new DT, so it's more expensive to do mix // delete/inserts vs just inserts. We can do an incremental update on the DT // to revert deletes, than re-delete the edges. Teaching DT to do this, is // part of a pending cleanup. - DominatorTree NewDT(DT, RevDeleteUpdates); - GraphDiff<BasicBlock *> GD(RevDeleteUpdates); + DominatorTree NewDT(DT, DeleteUpdates); + GraphDiff<BasicBlock *> GD(DeleteUpdates, /*ReverseApplyUpdates=*/true); applyInsertUpdates(InsertUpdates, NewDT, &GD); } else { GraphDiff<BasicBlock *> GD; @@ -806,7 +808,7 @@ void MemorySSAUpdater::applyUpdates(ArrayRef<CFGUpdate> Updates, } // Update for deleted edges - for (auto &Update : RevDeleteUpdates) + for (auto &Update : DeleteUpdates) removeEdge(Update.getFrom(), Update.getTo()); } |