mirror of
https://github.com/RPCSX/llvm.git
synced 2025-04-12 13:03:14 +00:00
Alias analysis of TRUNCSTORE.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30889 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
bcc3f0a61d
commit
7aed46c25b
@ -503,6 +503,8 @@ SDOperand DAGCombiner::visit(SDNode *N) {
|
|||||||
case ISD::BRCOND: return visitBRCOND(N);
|
case ISD::BRCOND: return visitBRCOND(N);
|
||||||
case ISD::BR_CC: return visitBR_CC(N);
|
case ISD::BR_CC: return visitBR_CC(N);
|
||||||
case ISD::LOAD: return visitLOAD(N);
|
case ISD::LOAD: return visitLOAD(N);
|
||||||
|
// FIXME - Switch over after StoreSDNode comes online.
|
||||||
|
case ISD::TRUNCSTORE: // Fail thru
|
||||||
case ISD::STORE: return visitSTORE(N);
|
case ISD::STORE: return visitSTORE(N);
|
||||||
case ISD::INSERT_VECTOR_ELT: return visitINSERT_VECTOR_ELT(N);
|
case ISD::INSERT_VECTOR_ELT: return visitINSERT_VECTOR_ELT(N);
|
||||||
case ISD::VINSERT_VECTOR_ELT: return visitVINSERT_VECTOR_ELT(N);
|
case ISD::VINSERT_VECTOR_ELT: return visitVINSERT_VECTOR_ELT(N);
|
||||||
@ -2696,6 +2698,24 @@ SDOperand DAGCombiner::visitSTORE(SDNode *N) {
|
|||||||
SDOperand Value = N->getOperand(1);
|
SDOperand Value = N->getOperand(1);
|
||||||
SDOperand Ptr = N->getOperand(2);
|
SDOperand Ptr = N->getOperand(2);
|
||||||
SDOperand SrcValue = N->getOperand(3);
|
SDOperand SrcValue = N->getOperand(3);
|
||||||
|
|
||||||
|
// FIXME - Switch over after StoreSDNode comes online.
|
||||||
|
if (N->getOpcode() == ISD::TRUNCSTORE) {
|
||||||
|
if (CombinerAA) {
|
||||||
|
// Walk up chain skipping non-aliasing memory nodes.
|
||||||
|
SDOperand BetterChain = FindBetterChain(N, Chain);
|
||||||
|
|
||||||
|
// If there is a better chain.
|
||||||
|
if (Chain != BetterChain) {
|
||||||
|
// Replace the chain to avoid dependency.
|
||||||
|
SDOperand ReplTStore = DAG.getStore(BetterChain, Value, Ptr, SrcValue);
|
||||||
|
// Create token to keep both nodes around.
|
||||||
|
return DAG.getNode(ISD::TokenFactor, MVT::Other, Chain, ReplTStore);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return SDOperand();
|
||||||
|
}
|
||||||
|
|
||||||
// If this is a store that kills a previous store, remove the previous store.
|
// If this is a store that kills a previous store, remove the previous store.
|
||||||
if (Chain.getOpcode() == ISD::STORE && Chain.getOperand(2) == Ptr &&
|
if (Chain.getOpcode() == ISD::STORE && Chain.getOperand(2) == Ptr &&
|
||||||
@ -3996,7 +4016,7 @@ bool DAGCombiner::FindAliasInfo(SDNode *N,
|
|||||||
SrcValue = LD->getSrcValue();
|
SrcValue = LD->getSrcValue();
|
||||||
return true;
|
return true;
|
||||||
} else if (StoreSDNode *ST = dyn_cast<StoreSDNode>(N)) {
|
} else if (StoreSDNode *ST = dyn_cast<StoreSDNode>(N)) {
|
||||||
#if 1 //FIXME - Switch over after StoreSDNode comes online.
|
#if 1 // FIXME - Switch over after StoreSDNode comes online.
|
||||||
Ptr = ST->getOperand(2);
|
Ptr = ST->getOperand(2);
|
||||||
Size = MVT::getSizeInBits(ST->getOperand(1).getValueType()) >> 3;
|
Size = MVT::getSizeInBits(ST->getOperand(1).getValueType()) >> 3;
|
||||||
SrcValue = 0;
|
SrcValue = 0;
|
||||||
@ -4005,6 +4025,11 @@ bool DAGCombiner::FindAliasInfo(SDNode *N,
|
|||||||
Size = MVT::getSizeInBits(ST->getOperand(1).getValueType()) >> 3;
|
Size = MVT::getSizeInBits(ST->getOperand(1).getValueType()) >> 3;
|
||||||
SrcValue = ST->getSrcValue();
|
SrcValue = ST->getSrcValue();
|
||||||
#endif
|
#endif
|
||||||
|
// FIXME - Switch over after StoreSDNode comes online.
|
||||||
|
} else if (N->getOpcode() == ISD::TRUNCSTORE) {
|
||||||
|
Ptr = N->getOperand(2);
|
||||||
|
Size = MVT::getSizeInBits(cast<VTSDNode>(N->getOperand(4))->getVT()) >> 3;
|
||||||
|
SrcValue = 0;
|
||||||
} else {
|
} else {
|
||||||
assert(0 && "FindAliasInfo expected a memory operand");
|
assert(0 && "FindAliasInfo expected a memory operand");
|
||||||
}
|
}
|
||||||
@ -4045,6 +4070,8 @@ void DAGCombiner::GatherAllAliases(SDNode *N, SDOperand OriginalChain,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case ISD::LOAD:
|
case ISD::LOAD:
|
||||||
|
// FIXME - Switch over after StoreSDNode comes online.
|
||||||
|
case ISD::TRUNCSTORE:
|
||||||
case ISD::STORE: {
|
case ISD::STORE: {
|
||||||
// Get alias information for Chain.
|
// Get alias information for Chain.
|
||||||
SDOperand OpPtr;
|
SDOperand OpPtr;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user