Author: djg Date: Fri Feb 8 16:59:30 2008 New Revision: 46899 URL: http://llvm.org/viewvc/llvm-project?rev=46899&view=rev Log: Change ConstantSDNode to store an APInt instead of a uint64_t, and begin adding some methods to use it this way.
Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAG.h llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAG.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAG.h?rev=46899&r1=46898&r2=46899&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/SelectionDAG.h (original) +++ llvm/trunk/include/llvm/CodeGen/SelectionDAG.h Fri Feb 8 16:59:30 2008 @@ -172,10 +172,14 @@ // SDOperand getString(const std::string &Val); SDOperand getConstant(uint64_t Val, MVT::ValueType VT, bool isTarget = false); + SDOperand getConstant(const APInt &Val, MVT::ValueType VT, bool isTarget = false); SDOperand getIntPtrConstant(uint64_t Val, bool isTarget = false); SDOperand getTargetConstant(uint64_t Val, MVT::ValueType VT) { return getConstant(Val, VT, true); } + SDOperand getTargetConstant(const APInt &Val, MVT::ValueType VT) { + return getConstant(Val, VT, true); + } SDOperand getConstantFP(double Val, MVT::ValueType VT, bool isTarget = false); SDOperand getConstantFP(const APFloat& Val, MVT::ValueType VT, bool isTarget = false); Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h?rev=46899&r1=46898&r2=46899&view=diff ============================================================================== --- llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h (original) +++ llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h Fri Feb 8 16:59:30 2008 @@ -24,6 +24,7 @@ #include "llvm/ADT/GraphTraits.h" #include "llvm/ADT/iterator" #include "llvm/ADT/APFloat.h" +#include "llvm/ADT/APInt.h" #include "llvm/CodeGen/ValueTypes.h" #include "llvm/CodeGen/MemOperand.h" #include "llvm/Support/DataTypes.h" @@ -1173,21 +1174,22 @@ }; class ConstantSDNode : public SDNode { - uint64_t Value; + APInt Value; virtual void ANCHOR(); // Out-of-line virtual method to give class a home. protected: friend class SelectionDAG; - ConstantSDNode(bool isTarget, uint64_t val, MVT::ValueType VT) + ConstantSDNode(bool isTarget, const APInt &val, MVT::ValueType VT) : SDNode(isTarget ? ISD::TargetConstant : ISD::Constant, getSDVTList(VT)), Value(val) { } public: - uint64_t getValue() const { return Value; } + const APInt &getAPIntValue() const { return Value; } + uint64_t getValue() const { return Value.getZExtValue(); } int64_t getSignExtended() const { unsigned Bits = MVT::getSizeInBits(getValueType(0)); - return ((int64_t)Value << (64-Bits)) >> (64-Bits); + return ((int64_t)Value.getZExtValue() << (64-Bits)) >> (64-Bits); } bool isNullValue() const { return Value == 0; } Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=46899&r1=46898&r2=46899&view=diff ============================================================================== --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original) +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Fri Feb 8 16:59:30 2008 @@ -706,18 +706,25 @@ } SDOperand SelectionDAG::getConstant(uint64_t Val, MVT::ValueType VT, bool isT) { + MVT::ValueType EltVT = + MVT::isVector(VT) ? MVT::getVectorElementType(VT) : VT; + + return getConstant(APInt(MVT::getSizeInBits(EltVT), Val), VT, isT); +} + +SDOperand SelectionDAG::getConstant(const APInt &Val, MVT::ValueType VT, bool isT) { assert(MVT::isInteger(VT) && "Cannot create FP integer constant!"); MVT::ValueType EltVT = MVT::isVector(VT) ? MVT::getVectorElementType(VT) : VT; - // Mask out any bits that are not valid for this constant. - Val &= MVT::getIntVTBitMask(EltVT); + assert(Val.getBitWidth() == MVT::getSizeInBits(EltVT) && + "APInt size does not match type size!"); unsigned Opc = isT ? ISD::TargetConstant : ISD::Constant; FoldingSetNodeID ID; AddNodeIDNode(ID, Opc, getVTList(EltVT), 0, 0); - ID.AddInteger(Val); + ID.AddAPInt(Val); void *IP = 0; SDNode *N = NULL; if ((N = CSEMap.FindNodeOrInsertPos(ID, IP))) _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits