Fold shift by size larger than type size to undef

Make llvm undef values generate ISD::UNDEF nodes


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21261 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nate Begeman 2005-04-12 23:12:17 +00:00
parent 9765c25eb7
commit b882752bd0
3 changed files with 6 additions and 21 deletions

View File

@ -755,19 +755,12 @@ SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
case ISD::SHL:
case ISD::SRL:
// If the shift amount is bigger than the size of the data, simplify.
if (C2 >= MVT::getSizeInBits(N1.getValueType())) {
if (TLI.getShiftAmountFlavor() == TargetLowering::Mask) {
unsigned NewAmt =
C2 & ((1 << MVT::getSizeInBits(N1.getValueType()))-1);
return getNode(Opcode, VT, N1, getConstant(NewAmt,N2.getValueType()));
} else if (TLI.getShiftAmountFlavor() == TargetLowering::Extend) {
// Shifting all of the bits out?
return getConstant(0, N1.getValueType());
}
}
// FALL THROUGH.
case ISD::SRA:
// If the shift amount is bigger than the size of the data, then all the
// bits are shifted out. Simplify to loading constant zero.
if (C2 >= MVT::getSizeInBits(N1.getValueType())) {
return getNode(ISD::UNDEF, N1.getValueType());
}
if (C2 == 0) return N1;
break;

View File

@ -266,14 +266,7 @@ public:
} else if (isa<ConstantPointerNull>(C)) {
return N = DAG.getConstant(0, TLI.getPointerTy());
} else if (isa<UndefValue>(C)) {
/// FIXME: Implement UNDEFVALUE better.
if (MVT::isInteger(VT))
return N = DAG.getConstant(0, VT);
else if (MVT::isFloatingPoint(VT))
return N = DAG.getConstantFP(0, VT);
else
assert(0 && "Unknown value type!");
return N = DAG.getNode(ISD::UNDEF, VT);
} else if (ConstantFP *CFP = dyn_cast<ConstantFP>(C)) {
return N = DAG.getConstantFP(CFP->getValue(), VT);
} else {

View File

@ -61,7 +61,6 @@ namespace {
setOperationAction(ISD::SREM, MVT::i32, Expand);
setOperationAction(ISD::UREM, MVT::i32, Expand);
setShiftAmountFlavor(Extend); // shl X, 32 == 0
setSetCCResultContents(ZeroOrOneSetCCResult);
addLegalFPImmediate(+0.0); // Necessary for FSEL
addLegalFPImmediate(-0.0); //