[EarlyCSE] DSE of atomic unordered stores
authorPhilip Reames <listmail@philipreames.com>
Thu, 17 Dec 2015 18:50:50 +0000 (18:50 +0000)
committerPhilip Reames <listmail@philipreames.com>
Thu, 17 Dec 2015 18:50:50 +0000 (18:50 +0000)
commitb14726242cbfb773f0b9c16346810408880122c1
treed4f28667853c29cfcceb2a2b371a2ff48c1fa17e
parent017de8d08b24b23d9989bf4cfafe8229018b4241
[EarlyCSE] DSE of atomic unordered stores

The rules for removing trivially dead stores are a lot less complicated than loads. Since we know the later store post dominates the former and the former dominates the later, unless the former has side effects other than the actual store, we can remove it. One slightly surprising thing is that we can freely remove atomic stores, even if the later one isn't atomic. There's no guarantee the atomic one was every visible.

For the moment, we don't handle DSE of ordered atomic stores. We could extend the same chain of reasoning to them, but the catch is we'd then have to model the ordering effect without a store instruction. Since our fences are a stronger than our operation orderings, simple using a fence isn't an obvious win. This arguable calls for a refinement in our fence specification, but that's (much) later work.

Differential Revision: http://reviews.llvm.org/D15352

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255914 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Scalar/EarlyCSE.cpp
test/Transforms/EarlyCSE/atomics.ll