Truncate of undef is just undef of smaller size.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148205 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Craig Topper 2012-01-15 01:05:11 +00:00
parent d07ef50ca1
commit 799ea5ccc0

View File

@ -2571,17 +2571,18 @@ SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL,
"Vector element count mismatch!"); "Vector element count mismatch!");
if (OpOpcode == ISD::TRUNCATE) if (OpOpcode == ISD::TRUNCATE)
return getNode(ISD::TRUNCATE, DL, VT, Operand.getNode()->getOperand(0)); return getNode(ISD::TRUNCATE, DL, VT, Operand.getNode()->getOperand(0));
else if (OpOpcode == ISD::ZERO_EXTEND || OpOpcode == ISD::SIGN_EXTEND || if (OpOpcode == ISD::ZERO_EXTEND || OpOpcode == ISD::SIGN_EXTEND ||
OpOpcode == ISD::ANY_EXTEND) { OpOpcode == ISD::ANY_EXTEND) {
// If the source is smaller than the dest, we still need an extend. // If the source is smaller than the dest, we still need an extend.
if (Operand.getNode()->getOperand(0).getValueType().getScalarType() if (Operand.getNode()->getOperand(0).getValueType().getScalarType()
.bitsLT(VT.getScalarType())) .bitsLT(VT.getScalarType()))
return getNode(OpOpcode, DL, VT, Operand.getNode()->getOperand(0)); return getNode(OpOpcode, DL, VT, Operand.getNode()->getOperand(0));
else if (Operand.getNode()->getOperand(0).getValueType().bitsGT(VT)) if (Operand.getNode()->getOperand(0).getValueType().bitsGT(VT))
return getNode(ISD::TRUNCATE, DL, VT, Operand.getNode()->getOperand(0)); return getNode(ISD::TRUNCATE, DL, VT, Operand.getNode()->getOperand(0));
else return Operand.getNode()->getOperand(0);
return Operand.getNode()->getOperand(0);
} }
if (OpOpcode == ISD::UNDEF)
return getUNDEF(VT);
break; break;
case ISD::BITCAST: case ISD::BITCAST:
// Basic sanity checking. // Basic sanity checking.