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:
Chris Lattner 2006-05-26 19:19:20 +00:00
parent 0102587f2a
commit b4db97ffa7

View File

@ -6833,8 +6833,22 @@ Instruction *InstCombiner::visitStoreInst(StoreInst &SI) {
break; 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. // Don't skip over loads or things that can modify memory.
if (BBI->mayWriteToMemory() || isa<LoadInst>(BBI)) if (BBI->mayWriteToMemory())
break; break;
} }