diff options
author | Anna Thomas <anna@azul.com> | 2016-07-07 20:51:42 +0000 |
---|---|---|
committer | Anna Thomas <anna@azul.com> | 2016-07-07 20:51:42 +0000 |
commit | 6a78c78a03d8426afc6b5203813ec4b11d9e8df2 (patch) | |
tree | 267272193c28e681f3b13ac54d6b971dd75c3341 /llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp | |
parent | a7e11a5d34117e5fd26b4aa028f0ac0c5ec29cb4 (diff) | |
download | bcm5719-llvm-6a78c78a03d8426afc6b5203813ec4b11d9e8df2.tar.gz bcm5719-llvm-6a78c78a03d8426afc6b5203813ec4b11d9e8df2.zip |
[DSE] Remove dead stores in end blocks containing fence
We can remove dead stores in the presence of fence instructions. Fence
does not change an otherwise thread local store to visible.
reviewers: reames, dexonsmith, jfb
Differential Revision: http://reviews.llvm.org/D22001
llvm-svn: 274795
Diffstat (limited to 'llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp')
-rw-r--r-- | llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp index 55d06a53faf..45e11a50752 100644 --- a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp +++ b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp @@ -778,6 +778,14 @@ static bool handleEndBlock(BasicBlock &BB, AliasAnalysis *AA, continue; } + // We can remove the dead stores, irrespective of the fence and its ordering + // (release/acquire/seq_cst). Fences only constraints the ordering of + // already visible stores, it does not make a store visible to other + // threads. So, skipping over a fence does not change a store from being + // dead. + if (isa<FenceInst>(*BBI)) + continue; + MemoryLocation LoadedLoc; // If we encounter a use of the pointer, it is no longer considered dead |