summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar
diff options
context:
space:
mode:
authorAnna Thomas <anna@azul.com>2016-07-07 20:51:42 +0000
committerAnna Thomas <anna@azul.com>2016-07-07 20:51:42 +0000
commit6a78c78a03d8426afc6b5203813ec4b11d9e8df2 (patch)
tree267272193c28e681f3b13ac54d6b971dd75c3341 /llvm/lib/Transforms/Scalar
parenta7e11a5d34117e5fd26b4aa028f0ac0c5ec29cb4 (diff)
downloadbcm5719-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')
-rw-r--r--llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp8
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
OpenPOWER on IntegriCloud