Tighten up the abstraction slightly.
authorDuncan Sands <baldrick@free.fr>
Fri, 6 Jun 2008 12:49:32 +0000 (12:49 +0000)
committerDuncan Sands <baldrick@free.fr>
Fri, 6 Jun 2008 12:49:32 +0000 (12:49 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52045 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/ValueTypes.h
lib/CodeGen/SelectionDAG/SelectionDAG.cpp

index 1469f8193fbaa7d4ea008704058d8e133aeb4956..16df853286e9f00ea4ad20bab724c4646040db77 100644 (file)
@@ -25,6 +25,7 @@ namespace llvm {
   class Type;
 
   struct MVT { // MVT = Machine Value Type
+  public:
 
     enum SimpleValueType {
       // If you change this numbering, you must change the values in
@@ -107,6 +108,8 @@ namespace llvm {
     ///  |               |      Vector element     |
     ///
 
+  private:
+
     static const int SimpleTypeBits = 8;
     static const int PrecisionBits  = 8;
     static const int VectorBits     = 32 - SimpleTypeBits - PrecisionBits;
@@ -125,6 +128,8 @@ namespace llvm {
 
     uint32_t V;
 
+  public:
+
     MVT() {}
     MVT(SimpleValueType S) { V = S; }
     inline bool operator== (const MVT VT) const { return V == VT.V; }
@@ -194,9 +199,8 @@ namespace llvm {
         if (NumElements == 2)  return v2f64;
         break;
       }
-      // Set the length with the top bit forced to zero (needed by the verifier).
       MVT Result;
-      Result.V = VT.V | (((NumElements + 1) << (33 - VectorBits)) >> 1);
+      Result.V = VT.V | ((NumElements + 1) << (32 - VectorBits));
       assert(Result.getVectorElementType() == VT &&
              "Bad vector element type!");
       assert(Result.getVectorNumElements() == NumElements &&
@@ -406,6 +410,9 @@ namespace llvm {
     /// This returns all pointers as iPTR.  If HandleUnknown is true, unknown
     /// types are returned as Other, otherwise they are invalid.
     static MVT getMVT(const Type *Ty, bool HandleUnknown = false);
+
+    /// getRawBits - Represent the type as a bunch of bits.
+    uint32_t getRawBits() const { return V; }
   };
 
 } // End llvm namespace
index db73ab4650de046746bb1559b91200a16402b731..80d72e726de7547f47d9f25ff78d436a47e26426 100644 (file)
@@ -416,7 +416,7 @@ static void AddNodeIDNode(FoldingSetNodeID &ID, SDNode *N) {
     LoadSDNode *LD = cast<LoadSDNode>(N);
     ID.AddInteger(LD->getAddressingMode());
     ID.AddInteger(LD->getExtensionType());
-    ID.AddInteger(LD->getMemoryVT().V);
+    ID.AddInteger(LD->getMemoryVT().getRawBits());
     ID.AddInteger(LD->getAlignment());
     ID.AddInteger(LD->isVolatile());
     break;
@@ -425,7 +425,7 @@ static void AddNodeIDNode(FoldingSetNodeID &ID, SDNode *N) {
     StoreSDNode *ST = cast<StoreSDNode>(N);
     ID.AddInteger(ST->getAddressingMode());
     ID.AddInteger(ST->isTruncatingStore());
-    ID.AddInteger(ST->getMemoryVT().V);
+    ID.AddInteger(ST->getMemoryVT().getRawBits());
     ID.AddInteger(ST->getAlignment());
     ID.AddInteger(ST->isVolatile());
     break;
@@ -684,13 +684,13 @@ SDNode *SelectionDAG::FindModifiedNodeSlot(SDNode *N,
   if (const LoadSDNode *LD = dyn_cast<LoadSDNode>(N)) {
     ID.AddInteger(LD->getAddressingMode());
     ID.AddInteger(LD->getExtensionType());
-    ID.AddInteger(LD->getMemoryVT().V);
+    ID.AddInteger(LD->getMemoryVT().getRawBits());
     ID.AddInteger(LD->getAlignment());
     ID.AddInteger(LD->isVolatile());
   } else if (const StoreSDNode *ST = dyn_cast<StoreSDNode>(N)) {
     ID.AddInteger(ST->getAddressingMode());
     ID.AddInteger(ST->isTruncatingStore());
-    ID.AddInteger(ST->getMemoryVT().V);
+    ID.AddInteger(ST->getMemoryVT().getRawBits());
     ID.AddInteger(ST->getAlignment());
     ID.AddInteger(ST->isVolatile());
   }
@@ -2984,7 +2984,7 @@ SDOperand SelectionDAG::getAtomic(unsigned Opcode, SDOperand Chain,
   FoldingSetNodeID ID;
   SDOperand Ops[] = {Chain, Ptr, Cmp, Swp};
   AddNodeIDNode(ID, Opcode, VTs, Ops, 4);
-  ID.AddInteger(VT.V);
+  ID.AddInteger(VT.getRawBits());
   void* IP = 0;
   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
     return SDOperand(E, 0);
@@ -3007,7 +3007,7 @@ SDOperand SelectionDAG::getAtomic(unsigned Opcode, SDOperand Chain,
   FoldingSetNodeID ID;
   SDOperand Ops[] = {Chain, Ptr, Val};
   AddNodeIDNode(ID, Opcode, VTs, Ops, 3);
-  ID.AddInteger(VT.V);
+  ID.AddInteger(VT.getRawBits());
   void* IP = 0;
   if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
     return SDOperand(E, 0);
@@ -3064,7 +3064,7 @@ SelectionDAG::getLoad(ISD::MemIndexedMode AM, ISD::LoadExtType ExtType,
   AddNodeIDNode(ID, ISD::LOAD, VTs, Ops, 3);
   ID.AddInteger(AM);
   ID.AddInteger(ExtType);
-  ID.AddInteger(EVT.V);
+  ID.AddInteger(EVT.getRawBits());
   ID.AddInteger(Alignment);
   ID.AddInteger(isVolatile);
   void *IP = 0;
@@ -3132,7 +3132,7 @@ SDOperand SelectionDAG::getStore(SDOperand Chain, SDOperand Val,
   AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
   ID.AddInteger(ISD::UNINDEXED);
   ID.AddInteger(false);
-  ID.AddInteger(VT.V);
+  ID.AddInteger(VT.getRawBits());
   ID.AddInteger(Alignment);
   ID.AddInteger(isVolatile);
   void *IP = 0;
@@ -3178,7 +3178,7 @@ SDOperand SelectionDAG::getTruncStore(SDOperand Chain, SDOperand Val,
   AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
   ID.AddInteger(ISD::UNINDEXED);
   ID.AddInteger(1);
-  ID.AddInteger(SVT.V);
+  ID.AddInteger(SVT.getRawBits());
   ID.AddInteger(Alignment);
   ID.AddInteger(isVolatile);
   void *IP = 0;
@@ -3203,7 +3203,7 @@ SelectionDAG::getIndexedStore(SDOperand OrigStore, SDOperand Base,
   AddNodeIDNode(ID, ISD::STORE, VTs, Ops, 4);
   ID.AddInteger(AM);
   ID.AddInteger(ST->isTruncatingStore());
-  ID.AddInteger(ST->getMemoryVT().V);
+  ID.AddInteger(ST->getMemoryVT().getRawBits());
   ID.AddInteger(ST->getAlignment());
   ID.AddInteger(ST->isVolatile());
   void *IP = 0;