[llvm-commits] [llvm] r46899 - in /llvm/trunk: include/llvm/CodeGen/SelectionDAG.h include/llvm/CodeGen/SelectionDAGNodes.h lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Dan Gohman gohman at apple.com
Fri Feb 8 14:59:30 PST 2008


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)))





More information about the llvm-commits mailing list