diff options
| author | Nate Begeman <natebegeman@mac.com> | 2005-04-12 23:12:17 +0000 | 
|---|---|---|
| committer | Nate Begeman <natebegeman@mac.com> | 2005-04-12 23:12:17 +0000 | 
| commit | af1c0f7a007ce33efd0b059b52ef61d120bd9254 (patch) | |
| tree | 537ada904f44a48a48f708634ad3622a6e74919d /llvm/lib/CodeGen/SelectionDAG | |
| parent | 818eb6ddd2dd6e1fee0de819d85b7c3af6cd1206 (diff) | |
| download | bcm5719-llvm-af1c0f7a007ce33efd0b059b52ef61d120bd9254.tar.gz bcm5719-llvm-af1c0f7a007ce33efd0b059b52ef61d120bd9254.zip | |
Fold shift by size larger than type size to undef
Make llvm undef values generate ISD::UNDEF nodes
llvm-svn: 21261
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 15 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 9 | 
2 files changed, 5 insertions, 19 deletions
| diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 634197c0f96..613d0983ad6 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -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. +    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())) { -        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()); -        } +        return getNode(ISD::UNDEF, N1.getValueType());        } -      // FALL THROUGH. -    case ISD::SRA:        if (C2 == 0) return N1;        break; diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index bfceecb7aaf..f041905bb32 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -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 { | 

