mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-10 02:38:50 +00:00
Fix CodeGen/PowerPC/2006-01-20-ShiftPartsCrash.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25496 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
60dda07913
commit
348e93c8f7
@ -3710,9 +3710,9 @@ void SelectionDAGLegalize::ExpandOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi){
|
|||||||
NeedsAnotherIteration = true;
|
NeedsAnotherIteration = true;
|
||||||
|
|
||||||
switch (Node->getOpcode()) {
|
switch (Node->getOpcode()) {
|
||||||
case ISD::CopyFromReg:
|
case ISD::CopyFromReg:
|
||||||
assert(0 && "CopyFromReg must be legal!");
|
assert(0 && "CopyFromReg must be legal!");
|
||||||
default:
|
default:
|
||||||
std::cerr << "NODE: "; Node->dump(); std::cerr << "\n";
|
std::cerr << "NODE: "; Node->dump(); std::cerr << "\n";
|
||||||
assert(0 && "Do not know how to expand this operator!");
|
assert(0 && "Do not know how to expand this operator!");
|
||||||
abort();
|
abort();
|
||||||
@ -4161,9 +4161,10 @@ void SelectionDAGLegalize::ExpandOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi){
|
|||||||
|
|
||||||
case ISD::SHL: {
|
case ISD::SHL: {
|
||||||
// If the target wants custom lowering, do so.
|
// If the target wants custom lowering, do so.
|
||||||
|
SDOperand ShiftAmt = LegalizeOp(Node->getOperand(1));
|
||||||
if (TLI.getOperationAction(ISD::SHL, VT) == TargetLowering::Custom) {
|
if (TLI.getOperationAction(ISD::SHL, VT) == TargetLowering::Custom) {
|
||||||
SDOperand Op = DAG.getNode(ISD::SHL, VT, Node->getOperand(0),
|
SDOperand Op = DAG.getNode(ISD::SHL, VT, Node->getOperand(0),
|
||||||
LegalizeOp(Node->getOperand(1)));
|
ShiftAmt);
|
||||||
Op = TLI.LowerOperation(Op, DAG);
|
Op = TLI.LowerOperation(Op, DAG);
|
||||||
if (Op.Val) {
|
if (Op.Val) {
|
||||||
// Now that the custom expander is done, expand the result, which is
|
// Now that the custom expander is done, expand the result, which is
|
||||||
@ -4174,7 +4175,7 @@ void SelectionDAGLegalize::ExpandOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi){
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If we can emit an efficient shift operation, do so now.
|
// If we can emit an efficient shift operation, do so now.
|
||||||
if (ExpandShift(ISD::SHL, Node->getOperand(0), Node->getOperand(1), Lo, Hi))
|
if (ExpandShift(ISD::SHL, Node->getOperand(0), ShiftAmt, Lo, Hi))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// If this target supports SHL_PARTS, use it.
|
// If this target supports SHL_PARTS, use it.
|
||||||
@ -4182,8 +4183,7 @@ void SelectionDAGLegalize::ExpandOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi){
|
|||||||
TLI.getOperationAction(ISD::SHL_PARTS, NVT);
|
TLI.getOperationAction(ISD::SHL_PARTS, NVT);
|
||||||
if ((Action == TargetLowering::Legal && TLI.isTypeLegal(NVT)) ||
|
if ((Action == TargetLowering::Legal && TLI.isTypeLegal(NVT)) ||
|
||||||
Action == TargetLowering::Custom) {
|
Action == TargetLowering::Custom) {
|
||||||
ExpandShiftParts(ISD::SHL_PARTS, Node->getOperand(0), Node->getOperand(1),
|
ExpandShiftParts(ISD::SHL_PARTS, Node->getOperand(0), ShiftAmt, Lo, Hi);
|
||||||
Lo, Hi);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4194,9 +4194,10 @@ void SelectionDAGLegalize::ExpandOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi){
|
|||||||
|
|
||||||
case ISD::SRA: {
|
case ISD::SRA: {
|
||||||
// If the target wants custom lowering, do so.
|
// If the target wants custom lowering, do so.
|
||||||
|
SDOperand ShiftAmt = LegalizeOp(Node->getOperand(1));
|
||||||
if (TLI.getOperationAction(ISD::SRA, VT) == TargetLowering::Custom) {
|
if (TLI.getOperationAction(ISD::SRA, VT) == TargetLowering::Custom) {
|
||||||
SDOperand Op = DAG.getNode(ISD::SRA, VT, Node->getOperand(0),
|
SDOperand Op = DAG.getNode(ISD::SRA, VT, Node->getOperand(0),
|
||||||
LegalizeOp(Node->getOperand(1)));
|
ShiftAmt);
|
||||||
Op = TLI.LowerOperation(Op, DAG);
|
Op = TLI.LowerOperation(Op, DAG);
|
||||||
if (Op.Val) {
|
if (Op.Val) {
|
||||||
// Now that the custom expander is done, expand the result, which is
|
// Now that the custom expander is done, expand the result, which is
|
||||||
@ -4207,7 +4208,7 @@ void SelectionDAGLegalize::ExpandOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi){
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If we can emit an efficient shift operation, do so now.
|
// If we can emit an efficient shift operation, do so now.
|
||||||
if (ExpandShift(ISD::SRA, Node->getOperand(0), Node->getOperand(1), Lo, Hi))
|
if (ExpandShift(ISD::SRA, Node->getOperand(0), ShiftAmt, Lo, Hi))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// If this target supports SRA_PARTS, use it.
|
// If this target supports SRA_PARTS, use it.
|
||||||
@ -4215,8 +4216,7 @@ void SelectionDAGLegalize::ExpandOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi){
|
|||||||
TLI.getOperationAction(ISD::SRA_PARTS, NVT);
|
TLI.getOperationAction(ISD::SRA_PARTS, NVT);
|
||||||
if ((Action == TargetLowering::Legal && TLI.isTypeLegal(NVT)) ||
|
if ((Action == TargetLowering::Legal && TLI.isTypeLegal(NVT)) ||
|
||||||
Action == TargetLowering::Custom) {
|
Action == TargetLowering::Custom) {
|
||||||
ExpandShiftParts(ISD::SRA_PARTS, Node->getOperand(0), Node->getOperand(1),
|
ExpandShiftParts(ISD::SRA_PARTS, Node->getOperand(0), ShiftAmt, Lo, Hi);
|
||||||
Lo, Hi);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4227,9 +4227,10 @@ void SelectionDAGLegalize::ExpandOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi){
|
|||||||
|
|
||||||
case ISD::SRL: {
|
case ISD::SRL: {
|
||||||
// If the target wants custom lowering, do so.
|
// If the target wants custom lowering, do so.
|
||||||
|
SDOperand ShiftAmt = LegalizeOp(Node->getOperand(1));
|
||||||
if (TLI.getOperationAction(ISD::SRL, VT) == TargetLowering::Custom) {
|
if (TLI.getOperationAction(ISD::SRL, VT) == TargetLowering::Custom) {
|
||||||
SDOperand Op = DAG.getNode(ISD::SRL, VT, Node->getOperand(0),
|
SDOperand Op = DAG.getNode(ISD::SRL, VT, Node->getOperand(0),
|
||||||
LegalizeOp(Node->getOperand(1)));
|
ShiftAmt);
|
||||||
Op = TLI.LowerOperation(Op, DAG);
|
Op = TLI.LowerOperation(Op, DAG);
|
||||||
if (Op.Val) {
|
if (Op.Val) {
|
||||||
// Now that the custom expander is done, expand the result, which is
|
// Now that the custom expander is done, expand the result, which is
|
||||||
@ -4240,7 +4241,7 @@ void SelectionDAGLegalize::ExpandOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi){
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If we can emit an efficient shift operation, do so now.
|
// If we can emit an efficient shift operation, do so now.
|
||||||
if (ExpandShift(ISD::SRL, Node->getOperand(0), Node->getOperand(1), Lo, Hi))
|
if (ExpandShift(ISD::SRL, Node->getOperand(0), ShiftAmt, Lo, Hi))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// If this target supports SRL_PARTS, use it.
|
// If this target supports SRL_PARTS, use it.
|
||||||
@ -4248,8 +4249,7 @@ void SelectionDAGLegalize::ExpandOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi){
|
|||||||
TLI.getOperationAction(ISD::SRL_PARTS, NVT);
|
TLI.getOperationAction(ISD::SRL_PARTS, NVT);
|
||||||
if ((Action == TargetLowering::Legal && TLI.isTypeLegal(NVT)) ||
|
if ((Action == TargetLowering::Legal && TLI.isTypeLegal(NVT)) ||
|
||||||
Action == TargetLowering::Custom) {
|
Action == TargetLowering::Custom) {
|
||||||
ExpandShiftParts(ISD::SRL_PARTS, Node->getOperand(0), Node->getOperand(1),
|
ExpandShiftParts(ISD::SRL_PARTS, Node->getOperand(0), ShiftAmt, Lo, Hi);
|
||||||
Lo, Hi);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user