[DeadStoreElimination] remove a redundant store even if the load is in a different...
authorErik Eckstein <eeckstein@apple.com>
Thu, 13 Aug 2015 15:36:11 +0000 (15:36 +0000)
committerErik Eckstein <eeckstein@apple.com>
Thu, 13 Aug 2015 15:36:11 +0000 (15:36 +0000)
commit22af77d94f33359da9a26c7048e586027f4217bc
tree3737a910f00c58ab6b3354a53e339378258093ff
parent319eb435fdff72025399ed3448103aa2d22c8162
[DeadStoreElimination] remove a redundant store even if the load is in a different block.

DeadStoreElimination does eliminate a store if it stores a value which was loaded from the same memory location.
So far this worked only if the store is in the same block as the load.
Now we can also handle stores which are in a different block than the load.
Example:

define i32 @test(i1, i32*) {
entry:
  %l2 = load i32, i32* %1, align 4
  br i1 %0, label %bb1, label %bb2
bb1:
  br label %bb3
bb2:
  ; This store is redundant
  store i32 %l2, i32* %1, align 4
  br label %bb3
bb3:
  ret i32 0
}

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

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