Make sure to relegalize new nodes

llvm-svn: 24843
This commit is contained in:
Chris Lattner 2005-12-18 23:54:29 +00:00
parent f5f80cb947
commit c06da626b4
1 changed files with 21 additions and 11 deletions

View File

@ -627,13 +627,16 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
Ops.push_back(Tmp1); // chain Ops.push_back(Tmp1); // chain
Ops.push_back(Node->getOperand(1)); // line # Ops.push_back(Node->getOperand(1)); // line #
Ops.push_back(Node->getOperand(2)); // col # Ops.push_back(Node->getOperand(2)); // col #
const std::string &fname = cast<StringSDNode>(Node->getOperand(3))->getValue(); const std::string &fname =
const std::string &dirname=cast<StringSDNode>(Node->getOperand(4))->getValue(); cast<StringSDNode>(Node->getOperand(3))->getValue();
const std::string &dirname =
cast<StringSDNode>(Node->getOperand(4))->getValue();
unsigned id = DebugInfo.RecordSource(fname, dirname); unsigned id = DebugInfo.RecordSource(fname, dirname);
Ops.push_back(DAG.getConstant(id, MVT::i32)); // source file id Ops.push_back(DAG.getConstant(id, MVT::i32)); // source file id
Result = DAG.getNode(ISD::DEBUG_LOC, MVT::Other, Ops); Result = DAG.getNode(ISD::DEBUG_LOC, MVT::Other, Ops);
} Result = LegalizeOp(Result); // Relegalize new nodes.
break; break;
}
case TargetLowering::Legal: case TargetLowering::Legal:
if (Tmp1 != Node->getOperand(0) || if (Tmp1 != Node->getOperand(0) ||
getTypeAction(Node->getOperand(1).getValueType()) == Promote) { getTypeAction(Node->getOperand(1).getValueType()) == Promote) {
@ -878,6 +881,7 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
DAG.getConstant(0, Tmp2.getValueType()), DAG.getConstant(0, Tmp2.getValueType()),
Node->getOperand(2)); Node->getOperand(2));
} }
Result = LegalizeOp(Result); // Relegalize new nodes.
break; break;
case TargetLowering::Legal: case TargetLowering::Legal:
// Basic block destination (Op#2) is always legal. // Basic block destination (Op#2) is always legal.
@ -979,6 +983,7 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
Node->getOperand(2)); Node->getOperand(2));
Result = DAG.getNode(ISD::BR, MVT::Other, Result, Node->getOperand(3)); Result = DAG.getNode(ISD::BR, MVT::Other, Result, Node->getOperand(3));
} }
Result = LegalizeOp(Result); // Relegalize new nodes.
break; break;
} }
break; break;
@ -1021,6 +1026,7 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
Result = DAG.getNode(ISD::BRCOND, MVT::Other, Tmp1, Tmp2, Result = DAG.getNode(ISD::BRCOND, MVT::Other, Tmp1, Tmp2,
Node->getOperand(4)); Node->getOperand(4));
Result = DAG.getNode(ISD::BR, MVT::Other, Result, Node->getOperand(5)); Result = DAG.getNode(ISD::BR, MVT::Other, Result, Node->getOperand(5));
Result = LegalizeOp(Result); // Relegalize new nodes.
break; break;
} }
} }
@ -1079,6 +1085,7 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
if (SrcVT == MVT::f32 && Node->getValueType(0) == MVT::f64) { if (SrcVT == MVT::f32 && Node->getValueType(0) == MVT::f64) {
SDOperand Load = DAG.getLoad(SrcVT, Tmp1, Tmp2, Node->getOperand(2)); SDOperand Load = DAG.getLoad(SrcVT, Tmp1, Tmp2, Node->getOperand(2));
Result = DAG.getNode(ISD::FP_EXTEND, Node->getValueType(0), Load); Result = DAG.getNode(ISD::FP_EXTEND, Node->getValueType(0), Load);
Result = LegalizeOp(Result); // Relegalize new nodes.
if (Op.ResNo) if (Op.ResNo)
return Load.getValue(1); return Load.getValue(1);
return Result; return Result;
@ -1097,6 +1104,8 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
ValRes = DAG.getZeroExtendInReg(Result, SrcVT); ValRes = DAG.getZeroExtendInReg(Result, SrcVT);
AddLegalizedOperand(SDOperand(Node, 0), ValRes); AddLegalizedOperand(SDOperand(Node, 0), ValRes);
AddLegalizedOperand(SDOperand(Node, 1), Result.getValue(1)); AddLegalizedOperand(SDOperand(Node, 1), Result.getValue(1));
Result = LegalizeOp(Result); // Relegalize new nodes.
ValRes = LegalizeOp(ValRes); // Relegalize new nodes.
if (Op.ResNo) if (Op.ResNo)
return Result.getValue(1); return Result.getValue(1);
return ValRes; return ValRes;
@ -1364,6 +1373,7 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
DAG.getConstant(0, Tmp1.getValueType()), DAG.getConstant(0, Tmp1.getValueType()),
Tmp2, Tmp3, ISD::SETNE); Tmp2, Tmp3, ISD::SETNE);
} }
Result = LegalizeOp(Result); // Relegalize new nodes.
break; break;
case TargetLowering::Custom: { case TargetLowering::Custom: {
SDOperand Tmp = SDOperand Tmp =