diff options
| author | Daniel Berlin <dberlin@dberlin.org> | 2017-04-04 23:43:10 +0000 |
|---|---|---|
| committer | Daniel Berlin <dberlin@dberlin.org> | 2017-04-04 23:43:10 +0000 |
| commit | e33bc31df448c21ad0728b9aec46f9355acc9926 (patch) | |
| tree | ed82203f6d39c3f1ecfa757c2936aafc30b74ea2 /llvm/lib/Transforms | |
| parent | f49d4c45a17d4be48f3e3627e9c21212e46bc83c (diff) | |
| download | bcm5719-llvm-e33bc31df448c21ad0728b9aec46f9355acc9926.tar.gz bcm5719-llvm-e33bc31df448c21ad0728b9aec46f9355acc9926.zip | |
Re-apply MemorySSA: Add support for caching clobbering access in
stores with some fixes.
Summary:
This enables us to cache the clobbering access for stores, despite the
fact that we can't rewrite the use-def chains themselves.
Early testing shows that, after this change, for larger testcases, it
will be a significant net positive (memory and time) to remove the
walker caching.
Reviewers: george.burgess.iv, davide
Subscribers: Prazek, llvm-commits
Differential Revision: https://reviews.llvm.org/D31567
llvm-svn: 299486
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Utils/MemorySSA.cpp | 14 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Utils/MemorySSAUpdater.cpp | 4 |
2 files changed, 9 insertions, 9 deletions
diff --git a/llvm/lib/Transforms/Utils/MemorySSA.cpp b/llvm/lib/Transforms/Utils/MemorySSA.cpp index 5a3b163992e..79c0ac17ad3 100644 --- a/llvm/lib/Transforms/Utils/MemorySSA.cpp +++ b/llvm/lib/Transforms/Utils/MemorySSA.cpp @@ -2181,9 +2181,9 @@ MemorySSA::CachingWalker::getClobberingMemoryAccess(MemoryAccess *MA) { // If this is an already optimized use or def, return the optimized result. // Note: Currently, we do not store the optimized def result because we'd need // a separate field, since we can't use it as the defining access. - if (MemoryUse *MU = dyn_cast<MemoryUse>(StartingAccess)) - if (MU->isOptimized()) - return MU->getDefiningAccess(); + if (auto *MUD = dyn_cast<MemoryUseOrDef>(StartingAccess)) + if (MUD->isOptimized()) + return MUD->getOptimized(); const Instruction *I = StartingAccess->getMemoryInst(); UpwardsMemoryQuery Q(I, StartingAccess); @@ -2199,8 +2199,8 @@ MemorySSA::CachingWalker::getClobberingMemoryAccess(MemoryAccess *MA) { if (isUseTriviallyOptimizableToLiveOnEntry(*MSSA->AA, I)) { MemoryAccess *LiveOnEntry = MSSA->getLiveOnEntryDef(); Cache.insert(StartingAccess, LiveOnEntry, Q.StartingLoc, Q.IsCall); - if (MemoryUse *MU = dyn_cast<MemoryUse>(StartingAccess)) - MU->setDefiningAccess(LiveOnEntry, true); + if (auto *MUD = dyn_cast<MemoryUseOrDef>(StartingAccess)) + MUD->setOptimized(LiveOnEntry); return LiveOnEntry; } @@ -2217,8 +2217,8 @@ MemorySSA::CachingWalker::getClobberingMemoryAccess(MemoryAccess *MA) { DEBUG(dbgs() << *DefiningAccess << "\n"); DEBUG(dbgs() << "Final Memory SSA clobber for " << *I << " is "); DEBUG(dbgs() << *Result << "\n"); - if (MemoryUse *MU = dyn_cast<MemoryUse>(StartingAccess)) - MU->setDefiningAccess(Result, true); + if (auto *MUD = dyn_cast<MemoryUseOrDef>(StartingAccess)) + MUD->setOptimized(Result); return Result; } diff --git a/llvm/lib/Transforms/Utils/MemorySSAUpdater.cpp b/llvm/lib/Transforms/Utils/MemorySSAUpdater.cpp index 7e043956171..c396bd73504 100644 --- a/llvm/lib/Transforms/Utils/MemorySSAUpdater.cpp +++ b/llvm/lib/Transforms/Utils/MemorySSAUpdater.cpp @@ -451,8 +451,8 @@ void MemorySSAUpdater::removeMemoryAccess(MemoryAccess *MA) { while (!MA->use_empty()) { Use &U = *MA->use_begin(); - if (MemoryUse *MU = dyn_cast<MemoryUse>(U.getUser())) - MU->resetOptimized(); + if (auto *MUD = dyn_cast<MemoryUseOrDef>(U.getUser())) + MUD->resetOptimized(); U.set(NewDefTarget); } } |

