mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-05 18:28:29 +00:00
Implement Transforms/InstCombine/store.ll:test2.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28503 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0102587f2a
commit
b4db97ffa7
@ -6833,8 +6833,22 @@ Instruction *InstCombiner::visitStoreInst(StoreInst &SI) {
|
||||
break;
|
||||
}
|
||||
|
||||
// If this is a load, we have to stop. However, if the loaded value is from
|
||||
// the pointer we're loading and is producing the pointer we're storing,
|
||||
// then *this* store is dead (X = load P; store X -> P).
|
||||
if (LoadInst *LI = dyn_cast<LoadInst>(BBI)) {
|
||||
if (LI == Val && LI->getOperand(0) == Ptr) {
|
||||
EraseInstFromFunction(SI);
|
||||
++NumCombined;
|
||||
return 0;
|
||||
}
|
||||
// Otherwise, this is a load from some other location. Stores before it
|
||||
// may not be dead.
|
||||
break;
|
||||
}
|
||||
|
||||
// Don't skip over loads or things that can modify memory.
|
||||
if (BBI->mayWriteToMemory() || isa<LoadInst>(BBI))
|
||||
if (BBI->mayWriteToMemory())
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user