mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-07 11:33:44 +00:00
Delete a store whose input is a load from the same pointer:
x = load p store x -> p git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45398 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7ede51b964
commit
3c87285af6
@ -4223,7 +4223,7 @@ SDOperand DAGCombiner::visitSTORE(SDNode *N) {
|
||||
if (CombineToPreIndexedLoadStore(N) || CombineToPostIndexedLoadStore(N))
|
||||
return SDOperand(N, 0);
|
||||
|
||||
// FIXME: is there such a think as a truncating indexed store?
|
||||
// FIXME: is there such a thing as a truncating indexed store?
|
||||
if (ST->isTruncatingStore() && ST->getAddressingMode() == ISD::UNINDEXED &&
|
||||
MVT::isInteger(Value.getValueType())) {
|
||||
// See if we can simplify the input to this truncstore with knowledge that
|
||||
@ -4243,6 +4243,17 @@ SDOperand DAGCombiner::visitSTORE(SDNode *N) {
|
||||
return SDOperand(N, 0);
|
||||
}
|
||||
|
||||
// If this is a load followed by a store to the same location, then the store
|
||||
// is dead/noop.
|
||||
if (LoadSDNode *Ld = dyn_cast<LoadSDNode>(Value)) {
|
||||
if (Chain.Val == Ld && Ld->getBasePtr() == Ptr &&
|
||||
ST->getAddressingMode() == ISD::UNINDEXED &&
|
||||
ST->getStoredVT() == Ld->getLoadedVT()) {
|
||||
// The store is dead, remove it.
|
||||
return Chain;
|
||||
}
|
||||
}
|
||||
|
||||
return SDOperand();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user