forked from OSchip/llvm-project
Don't remove two operand, two result nodes from the binary ops map. These
should come from the arbitrary ops map. This fixes Regression/CodeGen/PowerPC/2005-12-01-Crash.ll llvm-svn: 24571
This commit is contained in:
parent
e4ffb9a57d
commit
0142afd6c1
|
@ -388,18 +388,12 @@ void SelectionDAG::RemoveNodeFromCSEMaps(SDNode *N) {
|
|||
SDNode *SelectionDAG::AddNonLeafNodeToCSEMaps(SDNode *N) {
|
||||
assert(N->getNumOperands() && "This is a leaf node!");
|
||||
if (N->getOpcode() == ISD::CALLSEQ_START ||
|
||||
N->getOpcode() == ISD::CALLSEQ_END)
|
||||
return 0;
|
||||
N->getOpcode() == ISD::CALLSEQ_END ||
|
||||
N->getOpcode() == ISD::HANDLENODE)
|
||||
return 0; // Never add these nodes.
|
||||
|
||||
if (N->getOpcode() == ISD::LOAD) {
|
||||
SDNode *&L = Loads[std::make_pair(N->getOperand(1),
|
||||
std::make_pair(N->getOperand(0),
|
||||
N->getValueType(0)))];
|
||||
if (L) return L;
|
||||
L = N;
|
||||
} else if (N->getOpcode() == ISD::HANDLENODE) {
|
||||
return 0; // never add it.
|
||||
} else if (N->getNumOperands() == 1) {
|
||||
if (N->getNumValues() == 1) {
|
||||
if (N->getNumOperands() == 1) {
|
||||
SDNode *&U = UnaryOps[std::make_pair(N->getOpcode(),
|
||||
std::make_pair(N->getOperand(0),
|
||||
N->getValueType(0)))];
|
||||
|
@ -411,12 +405,20 @@ SDNode *SelectionDAG::AddNonLeafNodeToCSEMaps(SDNode *N) {
|
|||
N->getOperand(1)))];
|
||||
if (B) return B;
|
||||
B = N;
|
||||
} else if (N->getNumValues() == 1) {
|
||||
} else {
|
||||
std::vector<SDOperand> Ops(N->op_begin(), N->op_end());
|
||||
SDNode *&ORN = OneResultNodes[std::make_pair(N->getOpcode(),
|
||||
std::make_pair(N->getValueType(0), Ops))];
|
||||
if (ORN) return ORN;
|
||||
ORN = N;
|
||||
}
|
||||
} else {
|
||||
if (N->getOpcode() == ISD::LOAD) {
|
||||
SDNode *&L = Loads[std::make_pair(N->getOperand(1),
|
||||
std::make_pair(N->getOperand(0),
|
||||
N->getValueType(0)))];
|
||||
if (L) return L;
|
||||
L = N;
|
||||
} else {
|
||||
// Remove the node from the ArbitraryNodes map.
|
||||
std::vector<MVT::ValueType> RV(N->value_begin(), N->value_end());
|
||||
|
@ -426,6 +428,7 @@ SDNode *SelectionDAG::AddNonLeafNodeToCSEMaps(SDNode *N) {
|
|||
if (AN) return AN;
|
||||
AN = N;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue