Document the fact that the verifier currently requires the
authorDuncan Sands <baldrick@free.fr>
Tue, 16 Oct 2007 13:34:11 +0000 (13:34 +0000)
committerDuncan Sands <baldrick@free.fr>
Tue, 16 Oct 2007 13:34:11 +0000 (13:34 +0000)
top bit of a ValueType to be zero.  Enforce this by ensuring
an assertion failure if someone tries to create a ValueType
without this property.  I chose this minimal approach rather
than a more official integration of the notion of reserved
bits into ValueType because I'm hoping that the verifier will
be changed to no longer require this :)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43031 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/ValueTypes.h

index 05f10e8b04e21e6cd8f3582de18b4db40df3b0cb..780482b0793358614d365f15947ba0a23fa06aa1 100644 (file)
@@ -107,7 +107,9 @@ namespace MVT {  // MVT = Machine Value Types
   ///
   /// 31--------------16-----------8-------------0
   ///  | Vector length | Precision | Simple type |
-  ///                  |      Vector element     |
+  ///  |               |      Vector element     |
+  ///
+  /// Note that the verifier currently requires the top bit to be zero.
 
   typedef uint32_t ValueType;
 
@@ -313,7 +315,8 @@ namespace MVT {  // MVT = Machine Value Types
       if (NumElements == 2)  return MVT::v2f64;
       break;
     }
-    ValueType Result = VT | ((NumElements + 1) << (32 - VectorBits));
+    // Set the length with the top bit forced to zero (needed by the verifier).
+    ValueType Result = VT | (((NumElements + 1) << (33 - VectorBits)) >> 1);
     assert(getVectorElementType(Result) == VT &&
            "Bad vector element type!");
     assert(getVectorNumElements(Result) == NumElements &&