diff options
| author | Daniel Berlin <dberlin@dberlin.org> | 2016-09-26 17:22:54 +0000 | 
|---|---|---|
| committer | Daniel Berlin <dberlin@dberlin.org> | 2016-09-26 17:22:54 +0000 | 
| commit | 1e98c0422640cfe512c0ef529ed2e3f2ecec3f67 (patch) | |
| tree | e432ba8c425fabd00a3ac0243514161f4b85005f /llvm/lib/Transforms/Utils | |
| parent | b764aba2aba7465421e33d761df5b94c50a2f415 (diff) | |
| download | bcm5719-llvm-1e98c0422640cfe512c0ef529ed2e3f2ecec3f67.tar.gz bcm5719-llvm-1e98c0422640cfe512c0ef529ed2e3f2ecec3f67.zip | |
Remove pruning of phi nodes in MemorySSA - it makes updating harder
Reviewers: george.burgess.iv
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D24923
llvm-svn: 282419
Diffstat (limited to 'llvm/lib/Transforms/Utils')
| -rw-r--r-- | llvm/lib/Transforms/Utils/MemorySSA.cpp | 45 | 
1 files changed, 5 insertions, 40 deletions
| diff --git a/llvm/lib/Transforms/Utils/MemorySSA.cpp b/llvm/lib/Transforms/Utils/MemorySSA.cpp index 151e60643c7..e06b60484c5 100644 --- a/llvm/lib/Transforms/Utils/MemorySSA.cpp +++ b/llvm/lib/Transforms/Utils/MemorySSA.cpp @@ -1348,7 +1348,7 @@ void MemorySSA::OptimizeUses::optimizeUsesInBlock(        // branch of the dominator tree first. This will guarantee this resets on        // the smallest set of blocks.        if (LocInfo.LowerBoundBlock && LocInfo.LowerBoundBlock != BB && -          !DT->dominates(LocInfo.LowerBoundBlock, BB)){ +          !DT->dominates(LocInfo.LowerBoundBlock, BB)) {          // Reset the lower bound of things to check.          // TODO: Some day we should be able to reset to last kill, rather than          // 0. @@ -1455,12 +1455,10 @@ void MemorySSA::OptimizeUses::optimizeUses() {  }  void MemorySSA::placePHINodes( -    const SmallPtrSetImpl<BasicBlock *> &DefiningBlocks, -    const SmallPtrSetImpl<BasicBlock *> &LiveInBlocks) { +    const SmallPtrSetImpl<BasicBlock *> &DefiningBlocks) {    // Determine where our MemoryPhi's should go    ForwardIDFCalculator IDFs(*DT);    IDFs.setDefiningBlocks(DefiningBlocks); -  IDFs.setLiveInBlocks(LiveInBlocks);    SmallVector<BasicBlock *, 32> IDFBlocks;    IDFs.calculate(IDFBlocks); @@ -1511,40 +1509,7 @@ void MemorySSA::buildMemorySSA() {      if (Accesses)        DefUseBlocks.insert(&B);    } - -  // Compute live-in. -  // Live in is normally defined as "all the blocks on the path from each def to -  // each of it's uses". -  // MemoryDef's are implicit uses of previous state, so they are also uses. -  // This means we don't really have def-only instructions.  The only -  // MemoryDef's that are not really uses are those that are of the LiveOnEntry -  // variable (because LiveOnEntry can reach anywhere, and every def is a -  // must-kill of LiveOnEntry). -  // In theory, you could precisely compute live-in by using alias-analysis to -  // disambiguate defs and uses to see which really pair up with which. -  // In practice, this would be really expensive and difficult. So we simply -  // assume all defs are also uses that need to be kept live. -  // Because of this, the end result of this live-in computation will be "the -  // entire set of basic blocks that reach any use". - -  SmallPtrSet<BasicBlock *, 32> LiveInBlocks; -  SmallVector<BasicBlock *, 64> LiveInBlockWorklist(DefUseBlocks.begin(), -                                                    DefUseBlocks.end()); -  // Now that we have a set of blocks where a value is live-in, recursively add -  // predecessors until we find the full region the value is live. -  while (!LiveInBlockWorklist.empty()) { -    BasicBlock *BB = LiveInBlockWorklist.pop_back_val(); - -    // The block really is live in here, insert it into the set.  If already in -    // the set, then it has already been processed. -    if (!LiveInBlocks.insert(BB).second) -      continue; - -    // Since the value is live into BB, it is either defined in a predecessor or -    // live into it to. -    LiveInBlockWorklist.append(pred_begin(BB), pred_end(BB)); -  } -  placePHINodes(DefiningBlocks, LiveInBlocks); +  placePHINodes(DefiningBlocks);    // Now do regular SSA renaming on the MemoryDef/MemoryUse. Visited will get    // filled in with all blocks. @@ -2069,8 +2034,8 @@ bool MemorySSAPrinterLegacyPass::runOnFunction(Function &F) {  char MemorySSAAnalysis::PassID; -MemorySSAAnalysis::Result -MemorySSAAnalysis::run(Function &F, FunctionAnalysisManager &AM) { +MemorySSAAnalysis::Result MemorySSAAnalysis::run(Function &F, +                                                 FunctionAnalysisManager &AM) {    auto &DT = AM.getResult<DominatorTreeAnalysis>(F);    auto &AA = AM.getResult<AAManager>(F);    return MemorySSAAnalysis::Result(make_unique<MemorySSA>(F, &AA, &DT)); | 

