diff options
author | Piotr Padlewski <piotr.padlewski@gmail.com> | 2018-05-03 11:03:53 +0000 |
---|---|---|
committer | Piotr Padlewski <piotr.padlewski@gmail.com> | 2018-05-03 11:03:53 +0000 |
commit | c77ab8ef2fbe14f4688bb0499612e9b42e99fc16 (patch) | |
tree | b6d46e9fc386483848d4d8a31a3e96592a7ede5b /llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp | |
parent | 5dde809404f73b30bb41b79f7060c0e14cfe0426 (diff) | |
download | bcm5719-llvm-c77ab8ef2fbe14f4688bb0499612e9b42e99fc16.tar.gz bcm5719-llvm-c77ab8ef2fbe14f4688bb0499612e9b42e99fc16.zip |
perform DSE through launder.invariant.group
Summary:
Alias Analysis knows that llvm.launder.invariant.group
returns pointer that mustalias argument, but this information
wasn't used, therefor we didn't DSE through launder.invariant.group
Reviewers: chandlerc, dberlin, bogner, hfinkel, efriedma
Reviewed By: dberlin
Subscribers: amharc, llvm-commits, nlewycky, rsmith
Differential Revision: https://reviews.llvm.org/D31581
llvm-svn: 331449
Diffstat (limited to 'llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp')
-rw-r--r-- | llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp index b3dbe4df7ef..201d0f07c21 100644 --- a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp +++ b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp @@ -343,7 +343,8 @@ static OverwriteResult isOverwrite(const MemoryLocation &Later, const TargetLibraryInfo &TLI, int64_t &EarlierOff, int64_t &LaterOff, Instruction *DepWrite, - InstOverlapIntervalsTy &IOL) { + InstOverlapIntervalsTy &IOL, + AliasAnalysis &AA) { // If we don't know the sizes of either access, then we can't do a comparison. if (Later.Size == MemoryLocation::UnknownSize || Earlier.Size == MemoryLocation::UnknownSize) @@ -354,7 +355,7 @@ static OverwriteResult isOverwrite(const MemoryLocation &Later, // If the start pointers are the same, we just have to compare sizes to see if // the later store was larger than the earlier store. - if (P1 == P2) { + if (P1 == P2 || AA.isMustAlias(P1, P2)) { // Make sure that the Later size is >= the Earlier size. if (Later.Size >= Earlier.Size) return OW_Complete; @@ -1162,9 +1163,8 @@ static bool eliminateDeadStores(BasicBlock &BB, AliasAnalysis *AA, if (isRemovable(DepWrite) && !isPossibleSelfRead(Inst, Loc, DepWrite, *TLI, *AA)) { int64_t InstWriteOffset, DepWriteOffset; - OverwriteResult OR = - isOverwrite(Loc, DepLoc, DL, *TLI, DepWriteOffset, InstWriteOffset, - DepWrite, IOL); + OverwriteResult OR = isOverwrite(Loc, DepLoc, DL, *TLI, DepWriteOffset, + InstWriteOffset, DepWrite, IOL, *AA); if (OR == OW_Complete) { DEBUG(dbgs() << "DSE: Remove Dead Store:\n DEAD: " << *DepWrite << "\n KILLER: " << *Inst << '\n'); |