For PR1064:
Implement the arbitrary bit-width integer feature. The feature allows
integers of any bitwidth (up to 64) to be defined instead of just 1, 8,
16, 32, and 64 bit integers.

This change does several things:
1. Introduces a new Derived Type, IntegerType, to represent the number of
   bits in an integer. The Type classes SubclassData field is used to
   store the number of bits. This allows 2^23 bits in an integer type.
2. Removes the five integer Type::TypeID values for the 1, 8, 16, 32 and
   64-bit integers. These are replaced with just IntegerType which is not
   a primitive any more.
3. Adjust the rest of LLVM to account for this change.

Note that while this incremental change lays the foundation for arbitrary
bit-width integers, LLVM has not yet been converted to actually deal with
them in any significant way. Most optimization passes, for example, will
still only deal with the byte-width integer types.  Future increments
will rectify this situation.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33113 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/llvm/DerivedTypes.h b/include/llvm/DerivedTypes.h
index f8d9a1b..78759f1 100644
--- a/include/llvm/DerivedTypes.h
+++ b/include/llvm/DerivedTypes.h
@@ -29,6 +29,7 @@
 class StructValType;
 class PointerValType;
 class PackedValType;
+class IntegerValType;
 
 class DerivedType : public Type {
   friend class Type;
@@ -71,6 +72,40 @@
   }
 };
 
+/// Class to represent integer types. Note that this class is also used to
+/// represent the built-in integer types: Int1Ty, Int8Ty, Int16Ty, Int32Ty and
+/// Int64Ty. 
+/// @brief Integer representation type
+class IntegerType : public DerivedType {
+protected:
+  IntegerType(unsigned NumBits) : DerivedType(IntegerTyID) {
+    setSubclassData(NumBits);
+  }
+  friend class TypeMap<IntegerValType, IntegerType>;
+public:
+  /// This enum is just used to hold constants we need for IntegerType.
+  enum {
+    MIN_INT_BITS = 1,        ///< Minimum number of bits that can be specified
+    MAX_INT_BITS = (1<<23)-1 ///< Maximum number of bits that can be specified
+      ///< Note that bit width is stored in the Type classes SubclassData field
+      ///< which has 23 bits. This yields a maximum bit width of 8,388,607 bits.
+  };
+
+  /// This static method is the primary way of constructing an IntegerType. 
+  /// If an IntegerType with the same NumBits value was previously instantiated,
+  /// that instance will be returned. Otherwise a new one will be created. Only
+  /// one instance with a given NumBits value is ever created.
+  /// @brief Get or create an IntegerType instance.
+  static const IntegerType* get(unsigned NumBits);
+
+  /// @brief Get the number of bits in this IntegerType
+  unsigned getBitWidth() const { return getSubclassData(); }
+
+  // Methods for support type inquiry through isa, cast, and dyn_cast:
+  static inline bool classof(const IntegerType *T) { return true; }
+  static inline bool classof(const Type *T) { return T->isIntegral(); }
+};
+
 
 /// FunctionType - Class to represent function types
 ///
diff --git a/include/llvm/Intrinsics.td b/include/llvm/Intrinsics.td
index ca6725b..6bcbd68 100644
--- a/include/llvm/Intrinsics.td
+++ b/include/llvm/Intrinsics.td
@@ -57,6 +57,11 @@
   string TypeVal = typeval;
 }
 
+class LLVMIntegerType<ValueType VT, int width>
+  : LLVMType<VT, "Type::IntegerTyID"> {
+  int Width = width;
+}
+
 class LLVMPackedType<ValueType VT, int numelts, LLVMType elty>
   : LLVMType<VT, "Type::PackedTyID">{
   int NumElts = numelts;
@@ -64,25 +69,24 @@
 } 
 
 def llvm_void_ty       : LLVMType<isVoid, "Type::VoidTyID">;
-def llvm_i1_ty         : LLVMType<i1 , "Type::Int1TyID">;
-def llvm_i8_ty         : LLVMType<i8 , "Type::Int8TyID">;
-def llvm_i16_ty        : LLVMType<i16, "Type::Int16TyID">;
-def llvm_i32_ty        : LLVMType<i32, "Type::Int32TyID">;
-def llvm_i64_ty        : LLVMType<i64, "Type::Int64TyID">;
+def llvm_bool_ty       : LLVMIntegerType<i1, 1>;
+def llvm_i8_ty         : LLVMIntegerType<i8 , 8>;
+def llvm_i16_ty        : LLVMIntegerType<i16, 16>;
+def llvm_i32_ty        : LLVMIntegerType<i32, 32>;
+def llvm_i64_ty        : LLVMIntegerType<i64, 64>;
 def llvm_float_ty      : LLVMType<f32, "Type::FloatTyID">;
 def llvm_double_ty     : LLVMType<f64, "Type::DoubleTyID">;
-def llvm_ptr_ty        : LLVMType<iPTR, "Type::PointerTyID">;     // sbyte*
-def llvm_ptrptr_ty     : LLVMType<iPTR, "Type::PointerTyID">;     // sbyte**
+def llvm_ptr_ty        : LLVMType<iPTR, "Type::PointerTyID">;     // i8*
+def llvm_ptrptr_ty     : LLVMType<iPTR, "Type::PointerTyID">;     // i8**
 def llvm_descriptor_ty : LLVMType<iPTR, "Type::PointerTyID">;     // global*
 
-def llvm_v16i8_ty      : LLVMPackedType<v16i8,16, llvm_i8_ty>;  // 16 x sbyte
-def llvm_v8i16_ty      : LLVMPackedType<v8i16, 8, llvm_i16_ty>;  // 8 x short
-
-def llvm_v2i64_ty      : LLVMPackedType<v2i64, 2, llvm_i64_ty>;   // 2 x long
-def llvm_v2i32_ty      : LLVMPackedType<v2i32, 2, llvm_i32_ty>;    // 2 x int
-def llvm_v4i32_ty      : LLVMPackedType<v4i32, 4, llvm_i32_ty>;    // 4 x int
-def llvm_v4f32_ty      : LLVMPackedType<v4f32, 4, llvm_float_ty>;  // 4 x float
-def llvm_v2f64_ty      : LLVMPackedType<v2f64, 2, llvm_double_ty>; // 2 x double
+def llvm_v16i8_ty      : LLVMPackedType<v16i8,16, llvm_i8_ty>;    // 16 x i8
+def llvm_v8i16_ty      : LLVMPackedType<v8i16, 8, llvm_i16_ty>;   //  8 x i16
+def llvm_v2i64_ty      : LLVMPackedType<v2i64, 2, llvm_i64_ty>;   //  2 x i64
+def llvm_v2i32_ty      : LLVMPackedType<v2i32, 2, llvm_i32_ty>;   //  2 x i32
+def llvm_v4i32_ty      : LLVMPackedType<v4i32, 4, llvm_i32_ty>;   //  4 x i32
+def llvm_v4f32_ty      : LLVMPackedType<v4f32, 4, llvm_float_ty>; //  4 x float
+def llvm_v2f64_ty      : LLVMPackedType<v2f64, 2, llvm_double_ty>;//  2 x double
 
 //===----------------------------------------------------------------------===//
 // Intrinsic Definitions.
diff --git a/include/llvm/Target/TargetLowering.h b/include/llvm/Target/TargetLowering.h
index 5749d52..fd2caf8 100644
--- a/include/llvm/Target/TargetLowering.h
+++ b/include/llvm/Target/TargetLowering.h
@@ -22,7 +22,7 @@
 #ifndef LLVM_TARGET_TARGETLOWERING_H
 #define LLVM_TARGET_TARGETLOWERING_H
 
-#include "llvm/Type.h"
+#include "llvm/DerivedTypes.h"
 #include "llvm/CodeGen/SelectionDAGNodes.h"
 #include <map>
 
@@ -429,11 +429,16 @@
     switch (Ty->getTypeID()) {
     default: assert(0 && "Unknown type!");
     case Type::VoidTyID:    return MVT::isVoid;
-    case Type::Int1TyID:    return MVT::i1;
-    case Type::Int8TyID:    return MVT::i8;
-    case Type::Int16TyID:   return MVT::i16;
-    case Type::Int32TyID:   return MVT::i32;
-    case Type::Int64TyID:   return MVT::i64;
+    case Type::IntegerTyID:
+      switch (cast<IntegerType>(Ty)->getBitWidth()) {
+        default: assert(0 && "Invalid width for value type");
+        case 1:    return MVT::i1;
+        case 8:    return MVT::i8;
+        case 16:   return MVT::i16;
+        case 32:   return MVT::i32;
+        case 64:   return MVT::i64;
+      }
+      break;
     case Type::FloatTyID:   return MVT::f32;
     case Type::DoubleTyID:  return MVT::f64;
     case Type::PointerTyID: return PointerTy;
diff --git a/include/llvm/Type.h b/include/llvm/Type.h
index 29180a0..b95f146 100644
--- a/include/llvm/Type.h
+++ b/include/llvm/Type.h
@@ -71,32 +71,31 @@
   ///
   enum TypeID {
     // PrimitiveTypes .. make sure LastPrimitiveTyID stays up to date
-    VoidTyID = 0  , Int1TyID,           //  0, 1: Basics...
-    Int8TyID,                           //  2   :  8 bit type...
-    Int16TyID,                          //  3   : 16 bit type...
-    Int32TyID,                          //  4   : 32 bit type...
-    Int64TyID,                          //  5   : 64 bit type...
-    FloatTyID, DoubleTyID,              //  6, 7: Floating point types...
-    LabelTyID,                          //  8   : Labels...
+    VoidTyID = 0,    ///<  0: type with no size
+    FloatTyID,       ///<  1: 32 bit floating point type
+    DoubleTyID,      ///<  2: 64 bit floating point type
+    LabelTyID,       ///<  3: Labels
 
     // Derived types... see DerivedTypes.h file...
     // Make sure FirstDerivedTyID stays up to date!!!
-    FunctionTyID  , StructTyID,         // Functions... Structs...
-    ArrayTyID     , PointerTyID,        // Array... pointer...
-    OpaqueTyID,                         // Opaque type instances...
-    PackedTyID,                         // SIMD 'packed' format...
-    BC_ONLY_PackedStructTyID,           // packed struct, for BC rep only
-    //...
+    IntegerTyID,     ///<  4: Arbitrary bit width integers
+    FunctionTyID,    ///<  5: Functions
+    StructTyID,      ///<  6: Structures
+    PackedStructTyID,///<  7: Packed Structure. This is for bytecode only
+    ArrayTyID,       ///<  8: Arrays
+    PointerTyID,     ///<  9: Pointers
+    OpaqueTyID,      ///< 10: Opaque: type with unknown structure
+    PackedTyID,      ///< 11: SIMD 'packed' format, or other vector type
 
     NumTypeIDs,                         // Must remain as last defined ID
     LastPrimitiveTyID = LabelTyID,
-    FirstDerivedTyID = FunctionTyID
+    FirstDerivedTyID = IntegerTyID
   };
 
 private:
   TypeID   ID : 8;    // The current base type of this type.
   bool     Abstract : 1;  // True if type contains an OpaqueType
-  bool     SubclassData : 1; //Space for subclasses to store a flag
+  unsigned SubclassData : 23; //Space for subclasses to store data
 
   /// RefCount - This counts the number of PATypeHolders that are pointing to
   /// this type.  When this number falls to zero, if the type is abstract and
@@ -108,7 +107,8 @@
   const Type *getForwardedTypeInternal() const;
 protected:
   Type(const char *Name, TypeID id);
-  Type(TypeID id) : ID(id), Abstract(false), RefCount(0), ForwardType(0) {}
+  Type(TypeID id) : ID(id), Abstract(false), SubclassData(0), RefCount(0), 
+                    ForwardType(0) {}
   virtual ~Type() {
     assert(AbstractTypeUsers.empty());
   }
@@ -119,8 +119,8 @@
 
   unsigned getRefCount() const { return RefCount; }
 
-  bool getSubclassData() const { return SubclassData; }
-  void setSubclassData(bool b) { SubclassData = b; }
+  unsigned getSubclassData() const { return SubclassData; }
+  void setSubclassData(unsigned val) { SubclassData = val; }
 
   /// ForwardType - This field is used to implement the union find scheme for
   /// abstract types.  When types are refined to other types, this field is set
@@ -162,12 +162,12 @@
 
   /// isInteger - Equivalent to isSigned() || isUnsigned()
   ///
-  bool isInteger() const { return ID >= Int8TyID && ID <= Int64TyID; }
+  bool isInteger() const { return ID == IntegerTyID && this != Int1Ty; } 
 
   /// isIntegral - Returns true if this is an integral type, which is either
   /// Int1Ty or one of the Integer types.
   ///
-  bool isIntegral() const { return isInteger() || this == Int1Ty; }
+  bool isIntegral() const { return ID == IntegerTyID; }
 
   /// isFloatingPoint - Return true if this is one of the two floating point
   /// types
@@ -200,7 +200,7 @@
   ///
   inline bool isFirstClassType() const {
     return (ID != VoidTyID && ID <= LastPrimitiveTyID) ||
-            ID == PointerTyID || ID == PackedTyID;
+            ID == IntegerTyID || ID == PointerTyID || ID == PackedTyID;
   }
 
   /// isSized - Return true if it makes sense to take the size of this type.  To
@@ -209,11 +209,13 @@
   ///
   bool isSized() const {
     // If it's a primitive, it is always sized.
-    if (ID >= Int1TyID && ID <= DoubleTyID || ID == PointerTyID)
+    if (ID == IntegerTyID || (ID >= FloatTyID && ID <= DoubleTyID) || 
+        ID == PointerTyID)
       return true;
     // If it is not something that can have a size (e.g. a function or label),
     // it doesn't have a size.
-    if (ID != StructTyID && ID != ArrayTyID && ID != PackedTyID)
+    if (ID != StructTyID && ID != ArrayTyID && ID != PackedTyID &&
+        ID != PackedStructTyID)
       return false;
     // If it is something that can have a size and it's concrete, it definitely
     // has a size, otherwise we have to try harder to decide.
@@ -224,7 +226,6 @@
   /// type.  These are fixed by LLVM and are not target dependent.  This will
   /// return zero if the type does not have a size or is not a primitive type.
   ///
-  unsigned getPrimitiveSize() const;
   unsigned getPrimitiveSizeInBits() const;
 
   /// getIntegralTypeMask - Return a bitmask with ones set for all of the bits
@@ -248,7 +249,7 @@
   /// will be promoted to if passed through a variable argument
   /// function.
   const Type *getVAArgsPromotedType() const {
-    if (ID == Int1TyID || ID == Int8TyID || ID == Int16TyID)
+    if (ID == IntegerTyID && getSubclassData() < 32)
       return Type::Int32Ty;
     else if (ID == FloatTyID)
       return Type::DoubleTy;
@@ -288,12 +289,8 @@
   //===--------------------------------------------------------------------===//
   // These are the builtin types that are always available...
   //
-  static Type *VoidTy , *Int1Ty;
-  static Type *Int8Ty , *Int16Ty,
-              *Int32Ty, *Int64Ty;
-  static Type *FloatTy, *DoubleTy;
-
-  static Type* LabelTy;
+  static const Type *VoidTy, *LabelTy, *FloatTy, *DoubleTy;
+  static const Type *Int1Ty, *Int8Ty, *Int16Ty, *Int32Ty, *Int64Ty;
 
   /// Methods for support type inquiry through isa, cast, and dyn_cast:
   static inline bool classof(const Type *T) { return true; }
diff --git a/lib/AsmParser/Lexer.cpp.cvs b/lib/AsmParser/Lexer.cpp.cvs
index 55d32cd..b849cae 100644
--- a/lib/AsmParser/Lexer.cpp.cvs
+++ b/lib/AsmParser/Lexer.cpp.cvs
@@ -317,99 +317,99 @@
 	*yy_cp = '\0'; \
 	yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 138
-#define YY_END_OF_BUFFER 139
-static yyconst short int yy_acclist[216] =
+#define YY_NUM_RULES 135
+#define YY_END_OF_BUFFER 136
+static yyconst short int yy_acclist[214] =
     {   0,
-      139,  137,  138,  136,  137,  138,  136,  138,  137,  138,
-      137,  138,  137,  138,  137,  138,  137,  138,  137,  138,
-      129,  137,  138,  129,  137,  138,    1,  137,  138,  137,
-      138,  137,  138,  137,  138,  137,  138,  137,  138,  137,
-      138,  137,  138,  137,  138,  137,  138,  137,  138,  137,
-      138,  137,  138,  137,  138,  137,  138,  137,  138,  137,
-      138,  137,  138,  137,  138,  137,  138,  137,  138,  137,
-      138,  128,  126,  125,  125,  132,  130,  134,  129,    1,
-      111,   39,   71,   48,   72,   67,   23,  128,  125,  125,
-      133,  134,   20,  134,  135,   57,   66,   37,   32,   40,
+      136,  134,  135,  133,  134,  135,  133,  135,  134,  135,
+      134,  135,  134,  135,  134,  135,  134,  135,  134,  135,
+      126,  134,  135,  126,  134,  135,    1,  134,  135,  134,
+      135,  134,  135,  134,  135,  134,  135,  134,  135,  134,
+      135,  134,  135,   53,  134,  135,  134,  135,  134,  135,
+      134,  135,  134,  135,  134,  135,  134,  135,  134,  135,
+      134,  135,  134,  135,  134,  135,  134,  135,  134,  135,
+      134,  135,  125,  123,  122,  122,  129,  127,  131,  126,
+        1,  108,   39,   68,   53,   69,   64,   23,  125,  122,
+      122,  130,  131,   20,  131,  132,   54,   63,   37,   32,
 
-        3,   49,   50,   51,   59,   81,   86,   84,   85,   83,
-       82,   87,   91,  110,   76,   74,  106,   75,   73,   58,
-       89,   80,   78,   79,   77,   90,   88,   68,  127,  134,
-      134,  108,   47,   92,   70,   62,  118,   65,   69,  119,
-      107,   22,  131,   61,   95,   64,   24,    4,   55,   60,
-       63,   46,   12,   94,  134,   34,    2,    5,   52,   97,
-       54,  120,   93,   21,  117,   43,    7,   53,   28,   42,
-      101,  100,    8,  113,   31,  116,   36,   56,  105,   99,
-      112,   25,   26,   98,  114,  109,  104,   41,    6,   27,
-       96,   35,    9,   17,   10,  102,   11,  103,   33,   13,
+       40,    3,   56,   78,   83,   81,   82,   80,   79,   84,
+       88,  107,   73,   71,  103,   72,   70,   55,   86,   77,
+       75,   76,   74,   87,   85,   65,  124,  131,  131,  105,
+       47,   89,   67,   59,  115,   62,   66,  116,  104,   22,
+      128,   58,   92,   61,   24,    4,   51,   57,   60,   46,
+       12,   91,  131,   34,    2,    5,   48,   94,   50,  117,
+       90,   21,  114,   43,    7,   49,   28,   42,   98,   97,
+        8,  110,   31,  113,   36,   52,  102,   96,  109,   25,
+       26,   95,  111,  106,  101,   41,    6,   27,   93,   35,
+        9,   17,   10,   99,   11,  100,   33,   13,   15,   14,
 
-       15,   14,   30,   38,   16,   29,  115,  121,  123,  124,
-       44,  122,   18,   45,   19
+       30,   38,   16,   29,  112,  118,  120,  121,   44,  119,
+       18,   45,   19
     } ;
 
-static yyconst short int yy_accept[558] =
+static yyconst short int yy_accept[552] =
     {   0,
         1,    1,    1,    2,    4,    7,    9,   11,   13,   15,
        17,   19,   21,   24,   27,   30,   32,   34,   36,   38,
-       40,   42,   44,   46,   48,   50,   52,   54,   56,   58,
-       60,   62,   64,   66,   68,   70,   72,   72,   73,   73,
-       74,   75,   76,   77,   77,   78,   78,   79,   80,   80,
-       81,   81,   81,   81,   81,   81,   81,   81,   81,   82,
-       82,   83,   83,   83,   83,   83,   83,   83,   83,   84,
-       84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
-       84,   84,   85,   85,   85,   85,   85,   85,   85,   85,
-       85,   85,   85,   86,   86,   86,   86,   86,   86,   86,
-
-       87,   87,   87,   87,   87,   87,   87,   87,   87,   87,
+       40,   42,   44,   47,   49,   51,   53,   55,   57,   59,
+       61,   63,   65,   67,   69,   71,   73,   73,   74,   74,
+       75,   76,   77,   78,   78,   79,   79,   80,   81,   81,
+       82,   82,   82,   82,   82,   82,   82,   82,   82,   83,
+       83,   84,   84,   84,   84,   84,   84,   84,   84,   85,
+       85,   85,   85,   85,   85,   85,   85,   85,   85,   86,
+       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
        87,   87,   87,   87,   87,   87,   87,   88,   88,   88,
+
        88,   88,   88,   88,   88,   88,   88,   88,   88,   88,
-       88,   88,   88,   89,   90,   92,   93,   94,   95,   95,
-       96,   97,   97,   97,   98,   98,   98,   99,   99,  100,
-      100,  100,  100,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  102,  102,  102,  102,  102,  102,  102,
-      102,  102,  102,  102,  102,  103,  104,  105,  105,  105,
-      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
-      106,  106,  107,  108,  109,  110,  111,  112,  112,  113,
+       88,   88,   88,   88,   89,   89,   89,   89,   89,   89,
+       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
+       90,   91,   93,   94,   95,   96,   96,   97,   98,   98,
+       98,   99,   99,   99,  100,  100,  101,  101,  101,  101,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
+      103,  103,  103,  103,  104,  104,  105,  106,  107,  108,
+      109,  110,  110,  111,  112,  112,  112,  113,  113,  113,
 
-      114,  114,  114,  115,  115,  115,  115,  115,  115,  116,
-      117,  118,  118,  118,  118,  119,  120,  120,  120,  121,
-      121,  121,  121,  121,  121,  121,  121,  122,  123,  124,
-      124,  125,  126,  126,  127,  128,  128,  128,  128,  128,
-      128,  128,  128,  128,  129,  129,  129,  130,  131,  131,
-      131,  131,  132,  132,  132,  132,  133,  133,  133,  134,
-      135,  135,  135,  135,  135,  135,  135,  135,  135,  135,
-      135,  135,  135,  135,  135,  135,  136,  137,  137,  137,
-      137,  137,  138,  139,  139,  139,  140,  140,  140,  140,
-      140,  140,  140,  140,  140,  141,  142,  142,  142,  143,
+      113,  113,  113,  114,  115,  116,  116,  116,  116,  117,
+      118,  118,  118,  119,  119,  119,  119,  119,  119,  119,
+      119,  120,  121,  122,  122,  123,  124,  124,  125,  126,
+      126,  126,  126,  126,  126,  126,  126,  126,  127,  127,
+      127,  128,  129,  129,  129,  129,  130,  130,  130,  130,
+      131,  131,  131,  132,  133,  133,  133,  133,  133,  133,
+      133,  133,  133,  133,  133,  133,  133,  133,  133,  133,
+      134,  135,  135,  135,  135,  135,  136,  137,  137,  137,
+      138,  138,  138,  138,  138,  138,  138,  138,  138,  139,
+      140,  140,  140,  141,  141,  141,  141,  142,  143,  143,
 
-      143,  143,  143,  144,  145,  145,  145,  146,  146,  146,
-      146,  147,  147,  147,  148,  148,  148,  149,  149,  150,
-      151,  151,  151,  151,  151,  152,  152,  153,  153,  154,
-      154,  154,  155,  156,  157,  157,  157,  158,  158,  158,
-      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
-      158,  158,  159,  159,  160,  161,  161,  161,  161,  161,
-      161,  161,  161,  161,  161,  161,  162,  162,  162,  162,
-      162,  162,  162,  162,  162,  162,  162,  162,  162,  163,
-      163,  163,  163,  164,  164,  165,  165,  165,  165,  165,
-      165,  165,  165,  166,  166,  166,  167,  167,  167,  167,
+      143,  144,  144,  144,  144,  145,  145,  145,  146,  146,
+      146,  147,  147,  148,  149,  149,  149,  149,  149,  150,
+      150,  151,  151,  152,  152,  152,  153,  154,  155,  155,
+      155,  156,  156,  156,  156,  156,  156,  156,  156,  156,
+      156,  156,  156,  156,  156,  156,  157,  157,  158,  159,
+      159,  159,  159,  159,  159,  159,  159,  159,  159,  159,
+      160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
+      160,  160,  160,  161,  161,  161,  161,  162,  162,  163,
+      163,  163,  163,  163,  163,  163,  163,  164,  164,  164,
+      165,  165,  165,  165,  165,  166,  166,  166,  166,  167,
 
-      167,  168,  168,  168,  168,  169,  170,  170,  170,  171,
-      172,  173,  173,  173,  174,  174,  174,  174,  174,  175,
-      175,  176,  177,  178,  179,  179,  179,  179,  180,  180,
-      180,  181,  182,  183,  184,  185,  185,  186,  187,  187,
-      187,  187,  187,  187,  188,  188,  189,  189,  190,  191,
-      191,  191,  191,  191,  191,  192,  192,  192,  192,  192,
-      192,  192,  192,  192,  193,  193,  193,  193,  193,  193,
-      193,  193,  193,  194,  194,  194,  194,  194,  195,  195,
-      195,  195,  195,  196,  197,  198,  198,  199,  199,  199,
-      199,  200,  200,  200,  200,  201,  201,  202,  203,  203,
+      168,  168,  168,  169,  170,  171,  171,  171,  172,  172,
+      172,  172,  172,  173,  173,  174,  175,  176,  177,  177,
+      177,  177,  178,  178,  178,  179,  180,  181,  182,  183,
+      183,  184,  185,  185,  185,  185,  185,  185,  186,  186,
+      187,  187,  188,  189,  189,  189,  189,  189,  189,  190,
+      190,  190,  190,  190,  190,  190,  190,  190,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  192,  192,  192,
+      192,  192,  193,  193,  193,  193,  193,  194,  195,  196,
+      196,  197,  197,  197,  197,  198,  198,  198,  198,  199,
+      199,  200,  201,  201,  201,  201,  201,  201,  201,  201,
 
-      203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
-      203,  204,  204,  204,  204,  204,  204,  204,  204,  205,
-      205,  205,  205,  205,  206,  206,  206,  206,  206,  207,
-      207,  208,  208,  208,  208,  208,  208,  208,  208,  208,
-      208,  208,  208,  208,  209,  209,  210,  211,  211,  212,
-      212,  213,  214,  215,  215,  216,  216
+      201,  201,  201,  201,  201,  202,  202,  202,  202,  202,
+      202,  202,  202,  203,  203,  203,  203,  203,  204,  204,
+      204,  204,  204,  205,  205,  206,  206,  206,  206,  206,
+      206,  206,  206,  206,  206,  206,  206,  206,  207,  207,
+      208,  209,  209,  210,  210,  211,  212,  213,  213,  214,
+      214
     } ;
 
 static yyconst int yy_ec[256] =
@@ -418,16 +418,16 @@
         1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    2,    1,    4,    1,    5,    6,    1,    1,    1,
-        1,    1,    7,    1,    8,    9,    1,   10,   11,   12,
-       13,   14,   15,   16,   15,   17,   15,   18,   19,    1,
-        1,    1,    1,    1,   20,   20,   20,   20,   21,   20,
+        1,    1,    7,    1,    8,    9,    1,   10,   11,   11,
+       11,   11,   11,   12,   11,   13,   11,   14,   15,    1,
+        1,    1,    1,    1,   16,   16,   16,   16,   17,   16,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        1,    1,    1,    1,   22,    1,   23,   24,   25,   26,
+        1,    1,    1,    1,   18,    1,   19,   20,   21,   22,
 
-       27,   28,   29,   30,   31,    5,   32,   33,   34,   35,
-       36,   37,   38,   39,   40,   41,   42,   43,   44,   45,
-       46,   47,    1,    1,    1,    1,    1,    1,    1,    1,
+       23,   24,   25,   26,   27,    5,   28,   29,   30,   31,
+       32,   33,   34,   35,   36,   37,   38,   39,   40,   41,
+       42,   43,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -444,269 +444,267 @@
         1,    1,    1,    1,    1
     } ;
 
-static yyconst int yy_meta[48] =
+static yyconst int yy_meta[44] =
     {   0,
-        1,    1,    2,    1,    3,    1,    4,    5,    3,    6,
-        6,    6,    6,    6,    6,    6,    6,    7,    1,    3,
-        8,    3,    3,    3,    3,    3,    8,    3,    3,    3,
+        1,    1,    2,    1,    3,    1,    1,    3,    3,    3,
+        3,    3,    3,    4,    1,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-        3,    3,    3,    3,    3,    3,    3
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3
     } ;
 
-static yyconst short int yy_base[566] =
+static yyconst short int yy_base[556] =
     {   0,
-        0,    0, 1196, 1197, 1197, 1197, 1191, 1176,   40,    0,
-       48,   58,   68, 1148,    0,   68,   71,   81,   91,   52,
-       97,   98,  126,  110,  117,  120,  136,  138,   73,  170,
-      159,  205,  134,  131,   56,  137, 1188, 1197, 1173, 1197,
-        0,  235,    0, 1181, 1180,  158,  243, 1143,  261,    0,
-       70,  154,   93,   31,  160,  163,  175,   57, 1169,  173,
-      192,  189,  127,   54,  200,  202,  166,  195, 1168,  201,
-      250,  114,  171,  225,  273,  212,  251,  244,   53,  215,
-      249, 1167,  261,  275,  276,  278,  280,  281,  211,  285,
-      279,  289, 1166,  290,  288,  283,  293,  309,  307,  311,
+        0,    0, 1195, 1196, 1196, 1196, 1190, 1179,   36,   40,
+       44,   50,   56,   62,    0,   63,   66,   81,   89,   47,
+      108,   91,  134,   92,   72,   93,  152,  124,  109,  178,
+      138,  209,  121,  111,  146,  119, 1188, 1196, 1177, 1196,
+        0,  183,  198,  215,  236,   70,  241,  256,  261,    0,
+       68,  122,  140,  125,  160,  101,  154,   31, 1176,  153,
+      155,  183,   48,  184,  265,  170,  192,  149, 1175,  206,
+      227,  203,  175,  225,  273,  274,  223,  262,  269,  277,
+      228,  278,  215,  281,  287,  279,  290,  289,  294, 1174,
+      295,  288,  302,  306,  307,  312,  313,  314,  318,  299,
 
-      310,  313,  314,  315,  295,  317,  321,  320,  325,  324,
-      333,  337,  327,  344,  339,  341, 1165,  351,  334,  355,
-      357,  358,  359,  360,  370,  363,  361,  371,  380,  376,
-      366,  373, 1164,    0,    0,  386, 1163,    0,  412,    0,
-     1162,  392,  397, 1161,  390,  393, 1160,  412, 1159,  413,
-      416,  417, 1158,  418,  419,  421,  422,  423,  424,  428,
-      433,  429,  434,  436,  439,  440,  448,  444,  449,  450,
-      452,  455,  451,  453, 1157, 1156, 1155,  456,  465,  472,
-      474,  458,  478,   94,  462,  482,  468,  479,  484, 1154,
-      486, 1153, 1152, 1151, 1150, 1149, 1148,  491, 1147, 1146,
+      319,   46,  322,  323,  324,  328,  326,  332,  336,  339,
+      340,  348,  351, 1173,  353,  337,  354,  358,  359,  360,
+      362,  379,  365,  369,  376,  370,  386,  380,  381, 1172,
+        0,  396,  413, 1171,  427,  444,    0, 1170,  396,  399,
+     1169,  404,  398, 1168,  390, 1167,  414,  418,  420, 1166,
+      431,  406,  445,  429,  432,  446,  448,  449,  450,  451,
+      452,  453,  455,  344,  457,  460,  466,  467,  468,  470,
+      474,  471,  472,  483,  486,  476,  489,  491,  481,  499,
+      496,  497,  500, 1165,  501, 1164, 1163, 1162, 1161, 1160,
+     1159,  502, 1158, 1157,  503,  506, 1156,  534,  510,  511,
 
-      488,  492, 1145,  524,  499,  502,  495,  512, 1144, 1143,
-     1142,  493,  498,  496, 1141, 1140,  528,  536, 1139,  537,
-      538,  539,  540,  545,  500,  541, 1138, 1137, 1136,  543,
-     1135, 1134,  542, 1133, 1132,  546,  552,  547,  564,  548,
-      567,  568,  506, 1131,  558,  570, 1197,  568,  258,  584,
-      589,  591,  575,  583,  584, 1130,  585,  586, 1129, 1128,
-      587,  588,  589,  595,  598,  596,  604,  597,  599,  605,
-      609,  600,  618,  607,  619, 1127, 1126,  606,  608,  622,
-      625, 1125, 1124,  627,  628, 1123,  630,  632,  634,  636,
-      637,  635,  638,  643, 1122, 1121,  641,  645, 1120,  640,
+      514,  515, 1155, 1154, 1153,  508,  519,  527, 1152, 1151,
+      546,  526, 1150,  525,  549,  550,  551,  554,  556,  552,
+     1149, 1148, 1147,  555, 1146, 1145,  557, 1144, 1143,  558,
+      559,  553,  574,  513,  575,  568,  581, 1142,  560,  576,
+     1196,  591,  599,  605,  609,  614,  615,  584,  616, 1141,
+      617,  618, 1140, 1139,  619,  620,  621,  622,  624,  625,
+      627,  628,  630,  635,  631,  638,  647,  639,  649, 1138,
+     1137,  641,  645,  651,  653, 1136, 1135,  654,  657, 1134,
+      658,  660,  661,  665,  666,  663,  670,  671, 1133, 1132,
+      672,  674, 1131,  676,  679,  685,    0, 1130,  684,  687,
 
-      647,  648,    0, 1119,  652,  661, 1118,  657,  662,  663,
-     1117,  669,  672, 1116,  674,  675, 1115,  677, 1114, 1113,
-      676,  681,  680,  682, 1112,  687, 1111,  688, 1110,  692,
-      693, 1109,    0, 1108,  689,  695, 1107,  696,  697,  700,
-      709,  707,  698,  701,  715,  713,  717,  720,  722,  723,
-      724, 1106,  726, 1105, 1104,  725,  728,  727,  734,  730,
-      735,  737,  742,  746,  747, 1103,  749,  748,  754,  753,
-      755,  758,  750,  752,  768,  769,  771,  773, 1102,  774,
-      772,  776, 1101,  775, 1100,  780,  782,  777,  783,  793,
-      778,  789, 1099,  797,  779, 1098,  799,  800,  803,  804,
+     1129,  691,  695,  696, 1128,  698,  692, 1127,  705,  693,
+     1126,  709, 1125, 1124,  710,  711,  712,  713, 1123,  715,
+     1122,  718, 1121,  722,  724, 1120,  729, 1119,  729,  723,
+     1118,  733,  735,  738,  739,  740,  747,  748,  750,  751,
+      752,  749,  759,  760,  754, 1117,  762, 1116, 1115,  753,
+      765,  763,  764,  767,  772,  774,  775,  779,  781, 1114,
+      783,  784,  787,  786,  796,  799,  789,  785,  791,  801,
+      807,  804, 1113,  806,  809,  810, 1112,  811, 1111,  813,
+      821,  815,  812,  822,  824,  828, 1110,  831,  833, 1109,
+      834,  835,  836,  837, 1108,  838,  839,  840, 1107, 1106,
 
-     1097,  805,  808,  811, 1096, 1095,  814,  809, 1094, 1093,
-     1092,  815,  812, 1091,  821,  824,  820,  817, 1090,  834,
-     1089, 1088, 1087, 1086,  823,  835,  836, 1085,  837,  838,
-     1084, 1083, 1082, 1081, 1080,  839, 1079, 1078,  842,  843,
-      847,  845,  849, 1077,  850, 1076,  854, 1075, 1070,  856,
-      859,  860,  861,  862, 1067,  869,  864,  867,  868,  863,
-      870,  874,  875, 1064,  885,  888,  887,  890,  889,  893,
-      891,  894, 1056,  895,  901,  902,  904, 1053,  903,  906,
-      907,  908, 1050, 1044, 1033,  909, 1032,  911,  921,  926,
-     1031,  927,  931,  916, 1030,  915, 1026, 1025,  935,  933,
+      848,  843, 1105, 1104, 1103,  854,  849, 1102,  841,  859,
+      862,  855, 1101,  863, 1100, 1099, 1098, 1097,  869,  871,
+      872, 1096,  873,  874, 1095, 1094, 1093, 1092, 1091,  875,
+     1090, 1089,  876,  877,  885,  879,  880, 1088,  881, 1087,
+      883, 1086, 1085,  886,  894,  895,  896,  900, 1084,  903,
+      902,  898,  905,  906,  908,  910,  914, 1083,  916,  922,
+      918,  924,  925,  928,  926,  929, 1080,  930,  934,  936,
+      938, 1070,  943,  939,  942,  944, 1069, 1068, 1066,  950,
+     1064,  946,  945,  960, 1063,  961,  962,  951, 1062,  969,
+     1061, 1060,  970,  971,  972,  973,  974,  976,  977,  979,
 
-      937,  939,  941,  943,  945,  946,  947,  948,  949,  950,
-     1024,  951,  954,  956,  958,  959,  967,  961, 1023,  971,
-      963,  973,  974, 1022,  977,  979,  982,  966, 1018,  985,
-     1016,  990,  987,  991,  992,  993,  997,  996,  999, 1000,
-     1001,  998, 1006,  549, 1011,  513,  466, 1010,  398, 1012,
-      331,  291,  208, 1013,  168, 1197, 1052, 1058, 1064,  177,
-     1072, 1078,  123, 1081, 1086
+      981,  982,  983,  986, 1058,  985,  988,  989,  993,  994,
+      997, 1000, 1057, 1001, 1007, 1009, 1011, 1055, 1012, 1013,
+     1014, 1015, 1054, 1017, 1053, 1018, 1030, 1025, 1028, 1019,
+     1029, 1020, 1031, 1034, 1039, 1042, 1044,  719, 1048,  586,
+      583, 1049,  469, 1050,  415,  248,  245, 1051,  208, 1196,
+     1086, 1088,  169, 1092,  106
     } ;
 
-static yyconst short int yy_def[566] =
+static yyconst short int yy_def[556] =
     {   0,
-      556,    1,  556,  556,  556,  556,  557,  558,  559,  560,
-      558,  558,   11,   13,  561,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  557,  556,  558,  556,
-      562,  562,  563,  560,   11,  558,   11,   13,   11,  561,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
+      550,    1,  550,  550,  550,  550,  551,  552,  553,  550,
+      552,  552,  552,  552,  554,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  551,  550,  552,  550,
+      555,  555,  550,  550,  552,  552,  552,  552,  552,  554,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,   23,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
 
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  556,  562,   42,  564,  558,   47,   11,   49,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  550,
+      555,  555,  550,  552,  552,  552,   49,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,   49,  552,  552,
 
-      558,  558,  558,   49,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  556,  564,  565,  565,
-      139,  139,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      550,  550,  550,  550,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  198,  552,  552,  552,
 
-      558,  558,  204,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  250,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  550,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
 
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
 
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,    0,  556,  556,  556,  556,
-      556,  556,  556,  556,  556
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
+      552,  552,  552,  552,  552,  552,  552,  552,  552,    0,
+      550,  550,  550,  550,  550
     } ;
 
-static yyconst short int yy_nxt[1245] =
+static yyconst short int yy_nxt[1240] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
-       14,   14,   14,   14,   14,   14,   14,    4,   15,    8,
-        8,    8,   16,   17,   18,   19,   20,   21,   22,    8,
-       23,    8,   24,   25,   26,   27,   28,    8,   29,   30,
-       31,   32,   33,   34,   35,    8,   36,   42,   40,   43,
-       43,   43,   43,   43,   43,   43,   43,   45,   45,   45,
-       45,   45,   45,   45,   45,   40,   46,  145,  175,   40,
-       40,   40,  130,   40,   40,   40,   47,   48,   48,   48,
-       48,   48,   48,   48,   48,   40,   68,   40,   40,   69,
-       40,  131,  151,   51,  157,  141,   70,   56,   40,  104,
+       14,   14,   14,    4,   15,    8,    8,    8,   16,   17,
+       18,   19,   20,   21,   22,    8,   23,    8,   24,   25,
+       26,   27,   28,    8,   29,   30,   31,   32,   33,   34,
+       35,    8,   36,   42,   40,   43,   43,   43,   43,   44,
+       44,   44,   44,   45,   45,   45,   45,   40,   46,   40,
+       40,   40,  148,   40,   47,   48,   48,   48,   48,   40,
+       47,   48,   48,   48,   48,   40,   40,   68,  134,   40,
+       69,   40,  153,   40,   51,   40,  198,   70,   56,  138,
+       87,   52,   57,   53,   40,   54,   49,   58,   55,   60,
 
-       52,   57,   53,   60,   54,   61,   58,   55,   40,   59,
-       40,   40,   49,   64,   40,   40,   62,   65,  144,   71,
-       63,   72,   73,   66,   77,  293,   67,   40,   43,   74,
-       78,   40,   86,   75,   40,   76,   79,   40,   80,   90,
-       87,   81,   82,   40,   40,   88,   93,  167,   40,   89,
-       83,   40,   91,   40,   40,   40,  127,  129,   92,   84,
-       85,   94,   95,  132,   96,  156,  137,  101,   97,  128,
-       98,   40,   99,  102,  100,   40,   40,   40,  103,  105,
-       40,  116,   44,   40,  142,   40,  143,   40,   40,  146,
-       40,  148,   40,  147,  117,  106,  107,  118,  108,  109,
+       59,   61,   40,   88,   40,   40,   40,   64,  131,   89,
+       83,   65,   62,   77,   40,   90,   63,   66,   84,   78,
+       67,   40,   40,   85,   40,  145,   71,   86,   72,   73,
+       91,  101,   40,  126,   40,   40,   74,   40,   40,  124,
+       75,  129,   76,   79,   79,   79,   79,   40,  139,   98,
+      140,   40,  125,   40,   80,   99,  113,  142,  127,   40,
+      100,  141,   40,   81,   82,   40,   40,   40,   40,  114,
+      160,   41,  115,   40,   92,  150,   93,  128,  146,  116,
+       94,  149,   95,   40,   96,  143,   97,  102,   40,  144,
+      147,   40,  132,  132,  132,  132,   40,   40,  158,  103,
 
-      110,  168,  111,  149,  119,  152,   40,  162,  112,   40,
-      113,  114,   40,  115,  105,  150,  153,   40,   40,   40,
-      163,  154,   40,  155,  158,   40,  176,  159,   40,   40,
-      120,  121,   40,  122,  161,  123,  160,  124,  172,  125,
-      187,  164,   40,  126,  135,  135,  135,  135,  135,  135,
-      135,  135,  138,  138,  138,  138,  138,  138,  138,  138,
-      169,   40,  177,  139,  250,  250,   40,   40,   40,  139,
-      140,  140,  140,  140,  140,  140,  140,  140,   40,  174,
-      140,  140,  165,  140,  140,  140,  140,  140,  140,  166,
-       40,  173,   40,   40,  178,   40,   40,   40,   40,  170,
+      104,  165,  105,  106,  107,   40,  108,   43,   43,   43,
+       43,  151,  109,  152,  110,  111,   40,  112,  102,   40,
+      154,   40,   40,  133,   44,   44,   44,   44,   40,  159,
+      117,  118,  164,  119,  177,  120,   40,  121,   40,  122,
+       40,   40,  161,  123,   47,   45,   45,   45,   45,   40,
+      135,  135,  135,  135,   40,  162,  166,  136,   40,  170,
+      173,   40,  163,  136,   47,   48,   48,   48,   48,   40,
+      137,  137,  137,  137,   40,   40,  137,  137,   40,  137,
+      137,  137,  137,  137,  137,  155,   40,   40,  156,   39,
+       40,   40,   40,  171,   40,  167,  169,  157,   39,   39,
 
-       40,  183,   40,  186,  189,   40,   40,   40,   40,  193,
-       40,  179,   40,  171,  184,  180,  181,  188,  182,  195,
-      185,  190,  191,  194,   40,  192,   40,   40,   40,  198,
-       40,   40,   40,  196,   40,  197,  199,   40,   40,  204,
-      200,   40,   40,  201,   40,  206,  209,  205,   40,  213,
-       40,   40,  202,  207,   40,  203,   40,  211,   40,  215,
-      210,   40,  218,  217,  214,  208,  212,  219,   40,  220,
-      225,  221,   40,  216,   40,   40,   40,   40,   40,  222,
-       40,  223,  239,   40,  228,  226,  231,   40,   40,  238,
-       40,  243,  224,   40,  227,  233,  234,   40,  229,  230,
+       40,   40,   40,   40,  181,  180,  172,   40,   40,  168,
+      183,  178,   40,  174,  175,   40,  176,  179,  182,   40,
+       40,  186,  184,  185,  187,   40,   40,   40,  189,  191,
+      192,   40,   40,  196,  193,   40,   40,   40,  188,   40,
+      194,   40,  190,  200,  195,   40,  203,  207,  199,   40,
+       40,  201,   40,   40,  209,  197,  205,   40,  211,  213,
+      204,   40,  208,  202,   40,  206,   40,   40,  210,  219,
+      212,   40,   40,   40,  214,   40,  270,  215,   40,  217,
+      220,  222,   40,   40,  225,  216,  233,  232,  236,   40,
+      218,  221,   40,   40,   40,  223,  224,  237,  226,   40,
 
-      232,  240,  242,  241,  244,  235,  249,   40,  236,   40,
-       40,  245,  249,  237,   40,   40,  255,  246,  250,  251,
-      253,  252,  252,  252,  252,  252,  252,  252,  252,   40,
-       40,  256,  254,   40,   40,   40,   40,  258,   40,   40,
-       40,   40,  257,  261,  264,   40,   40,  263,  259,  260,
-       40,   40,  270,   40,  266,  265,   40,   40,  262,  268,
-      267,   40,  272,  269,  271,   40,   40,   40,   40,   40,
-       40,  278,   40,   40,  273,   40,  285,  284,  274,   40,
-      275,  282,   40,   40,  276,   40,  277,  280,  283,   40,
-      281,   40,  286,  291,  279,   40,   40,  287,  288,   40,
+      227,  228,  234,   40,  235,  132,  132,  132,  132,   40,
+      229,   40,   40,  230,  238,  239,  251,   40,  231,   40,
+      247,  240,  242,  242,  242,  242,  249,   40,   40,  243,
+      248,   40,  250,   40,  252,  243,  135,  135,  135,  135,
+       40,  256,   40,  136,   40,   40,  253,  258,  254,  136,
+      244,  245,  255,  246,  246,  246,  246,   40,   40,   40,
+      259,   40,   40,   40,   40,   40,   40,  257,   40,  264,
+       40,  262,  260,   40,  266,  263,  261,  265,  272,   40,
+       40,   40,   40,   40,   40,   40,  267,   40,  268,   40,
+      276,  269,  278,  279,   40,  271,   40,  277,  274,   40,
 
-      289,   40,  294,   40,  292,   40,  296,  295,   40,   40,
-       40,  297,   40,   40,  290,   40,   40,   40,  299,   40,
-      308,  306,  301,   40,  309,  298,  319,  330,  300,   40,
-       40,  310,  302,  303,  303,  303,  303,  303,  303,  303,
-      303,  304,  305,  303,  303,   40,  303,  303,  303,  303,
-      303,  303,  307,   40,   40,   40,   40,   40,   40,   40,
-       40,  311,   40,   40,   40,   40,   40,  315,  322,   40,
-      314,  317,  323,  327,  312,   40,  316,  313,  321,  318,
-      325,   40,  324,  320,   40,   40,  326,   40,  249,  328,
-      556,  556,   40,  331,  249,  556,   39,  556,   39,  329,
+      281,  275,   40,  280,   40,  282,  273,  285,  283,   40,
+       40,  286,   40,   40,   40,   40,   40,  288,  287,   40,
+      289,   40,  284,   40,   40,  291,   40,   40,   40,  293,
+      290,  302,   40,  295,  321,  294,  300,  292,   40,   40,
+       40,  303,  296,  297,  297,  297,  297,  299,  298,  297,
+      297,  301,  297,  297,  297,  297,  297,  297,  304,   40,
+      306,  307,   40,   40,   40,   40,   40,   40,   40,   40,
+       40,   40,   40,   40,  309,  305,  311,  308,  313,  316,
+      317,   40,  319,  310,  312,  318,  315,   40,   40,   40,
+      314,  325,  320,  322,   40,  323,   40,   40,  324,   40,
 
-       40,   40,   40,   40,   40,   40,   40,  335,  338,  334,
-      332,  339,   40,   40,   40,   40,   40,   40,  336,  337,
-      343,   40,   40,   40,   40,   40,   40,  342,  340,  341,
-      344,  349,  347,  352,  345,   40,   40,  348,  350,   40,
-      351,  346,   40,  353,   40,   40,  354,   40,  355,   40,
-      360,   40,   40,   40,   40,   40,  361,   40,   40,  359,
-       40,  356,   40,  357,   40,   40,  358,  366,  365,   40,
-      362,  364,  363,  367,   40,  368,  369,  370,   40,   40,
-       40,  371,  374,  373,  376,  375,   40,  372,  377,   40,
-      378,   40,   40,   40,   40,  379,  380,   40,   40,   40,
+      242,  242,  242,  242,  329,  244,  244,  243,  327,  327,
+      327,  327,  326,  243,  327,  327,  327,  327,  246,  246,
+      246,  246,   40,  246,  246,  246,  246,   40,   40,   40,
+       40,   40,   40,   40,   40,   40,  332,   40,   40,  333,
+       40,   40,  337,   40,   40,  328,  330,  331,   40,  343,
+      336,   40,   40,  339,   40,  338,  334,  335,   40,  341,
+       40,  346,   40,  342,   40,  345,   40,   40,  340,  347,
+       40,   40,  344,   40,   40,  354,   40,  348,   40,   40,
+      355,  349,  353,   40,   40,   40,  350,   40,  351,   40,
+      352,  360,   40,  359,  356,  357,  358,   40,   40,  362,
 
-      381,  383,  386,  384,   40,   40,   40,  382,  385,   40,
-       40,  393,   40,   40,   40,   40,  387,   40,   40,  390,
-      394,  396,  397,  392,   40,  388,   40,  401,  389,  399,
-       40,  391,   40,  398,   40,  395,  400,   40,  402,   40,
-       40,   40,   40,   40,   40,   40,  405,   40,  408,  403,
-      409,   40,   40,  404,   40,  410,  406,  407,  411,   40,
-      413,  412,  414,   40,   40,   40,   40,   40,  415,   40,
-       40,   40,   40,  419,  421,   40,  417,  416,  422,  423,
-      426,  424,  418,  420,  425,   40,   40,  427,   40,   40,
-       40,   40,   40,   40,   40,   40,   40,   40,  430,   40,
+       40,  361,  364,  363,   40,   40,   40,  369,   40,   40,
+      368,   40,  374,  365,  370,  366,  367,  371,   40,  372,
+      373,  376,   40,   40,   40,   40,   40,  375,   40,  377,
+      380,   40,   40,  378,  379,   40,   40,   40,  327,  327,
+      327,  327,   40,  381,  388,  384,   40,  387,   40,  382,
+      386,   40,   40,   40,  383,  390,  391,  385,  393,  392,
+       40,   40,   40,   40,   40,   40,   40,   40,  389,  396,
+      395,  399,   40,   40,  402,   40,   40,   40,   40,  404,
+       40,  394,  403,  397,  398,   40,  407,   40,   40,  400,
+      401,  405,   40,  406,   40,  408,   40,   40,   40,   40,
 
-       40,  429,  434,  432,  436,  438,   40,  437,  428,  431,
-       40,  435,  433,  439,   40,  440,   40,   40,  441,  444,
-       40,   40,   40,  442,  446,   40,   40,  443,   40,   40,
-      448,   40,   40,  445,   40,  452,  453,   40,   40,  455,
-       40,   40,  459,  450,  449,  456,  451,  457,  447,  454,
-      458,   40,   40,   40,   40,   40,   40,  460,  461,   40,
-       40,  462,   40,  465,   40,  466,   40,   40,  467,  463,
-      464,   40,  470,   40,  468,  471,   40,   40,   40,   40,
-       40,   40,  469,  472,   40,   40,   40,   40,  479,  474,
-      473,   40,   40,  478,  475,  480,  485,  476,  481,  482,
+       40,  409,   40,  413,   40,  411,  415,  416,  417,   40,
+      410,  412,   40,  414,   40,  420,  421,   40,  418,   40,
+       40,  419,   40,   40,   40,   40,   40,  422,   40,  423,
+      424,  426,  428,  430,   40,   40,  425,   40,  433,  432,
+      434,   40,  431,  429,   40,  427,   40,   40,   40,   40,
+       40,   40,   40,   40,   40,  440,   40,  437,  436,  442,
+      435,   40,   40,  451,  439,  446,  447,   40,   40,  438,
+      444,  445,   40,  443,  449,   40,   40,  441,  450,  448,
+      453,  452,   40,  455,   40,   40,   40,   40,   40,   40,
+       40,  454,   40,   40,   40,  459,   40,  460,   40,   40,
 
-      483,  484,   40,  477,   40,   40,   40,   40,   40,  490,
-       40,   40,   40,  486,  489,  487,  491,  493,   40,   40,
-       40,   40,  495,   40,   40,   40,   40,  488,   40,  492,
-      499,  494,   40,   40,  503,  500,  496,  505,   40,  504,
-      501,  497,  498,   40,   40,  506,  510,  502,   40,  507,
-       40,  508,   40,  509,   40,  511,   40,  512,   40,  513,
-       40,  515,   40,   40,   40,   40,   40,   40,   40,  518,
-      521,   40,  523,   40,  516,   40,   40,  514,   40,  520,
-       40,  522,  524,   40,   40,  528,  519,  525,   40,  517,
-       40,   40,  526,  529,   40,  532,   40,  531,  527,   40,
+      461,  457,  458,  456,  462,  465,  464,   40,   40,   40,
+      466,   40,  463,   40,  468,   40,   40,  467,   40,   40,
+      469,   40,  473,   40,  472,  474,  476,   40,  470,   40,
+      479,   40,  475,  477,  471,   40,  484,   40,   40,   40,
+      478,   40,   40,   40,  483,  480,  485,   40,  487,   40,
+      481,   40,   40,  489,  482,   40,   40,   40,   40,   40,
+      493,  486,  488,   40,   40,  500,  497,  490,  499,  495,
+      491,  494,  492,   40,   40,   40,  498,  504,  496,  501,
+      503,  502,   40,   40,   40,   40,   40,   40,  506,   40,
+       40,  509,   40,  507,   40,   40,   40,  512,   40,   40,
 
-      538,  530,   40,  535,   40,  533,  534,   40,   40,   40,
-       40,  541,  537,   40,   40,   40,   40,   40,   40,  536,
-      539,  542,  540,   40,  548,  549,  543,   40,   40,   40,
-       40,  544,  545,   40,  553,   40,  546,  547,  554,   40,
-       40,   40,   40,   40,  550,  552,  551,   40,   40,   40,
-       40,  555,   37,   37,   37,   37,   37,   37,   37,   37,
-       39,   40,   39,   39,   39,   39,   41,   40,   41,   41,
-       40,   41,   50,   40,   50,   50,   50,   50,   50,   50,
-      134,   40,  134,  134,   40,  134,  248,   40,  248,  333,
-      333,  333,   40,   40,   40,   40,   40,   40,   40,   40,
+      515,   40,   40,  510,  517,  505,   40,   40,  508,  514,
+       40,  516,  518,   40,   40,  513,  522,  519,  511,  523,
+       40,  520,   40,  525,   40,   40,   40,   40,   40,  521,
+       40,   40,   40,   40,  529,  526,  524,  527,   40,  528,
+      531,   40,   40,   40,   40,  532,  534,   40,  533,  530,
+      535,  536,   40,  538,  542,   40,  540,   40,  537,  543,
+      539,   40,   40,   40,   40,  541,   40,   40,   40,  547,
+       40,   40,  548,   40,   40,   40,   40,   40,  546,   40,
+      545,   40,   40,   40,  544,  549,   37,   37,   37,   37,
+       39,   39,   50,   40,   50,   50,   40,   40,   40,   40,
 
        40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
        40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
@@ -716,155 +714,153 @@
        40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
        40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
        40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
-       40,  247,   40,   40,   40,   40,   40,   39,   47,  136,
-       40,  133,   39,   40,   38,  556,    3,  556,  556,  556,
+       40,   40,   40,   40,   40,  241,   40,   40,   40,   40,
+       40,  130,   40,   38,  550,    3,  550,  550,  550,  550,
 
-      556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-      556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-      556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-      556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-      556,  556,  556,  556
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550
     } ;
 
-static yyconst short int yy_chk[1245] =
+static yyconst short int yy_chk[1240] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    9,   54,    9,
-        9,    9,    9,    9,    9,    9,    9,   11,   11,   11,
-       11,   11,   11,   11,   11,   11,   12,   54,   79,   20,
-       79,   64,   35,   35,   58,   12,   13,   13,   13,   13,
-       13,   13,   13,   13,   13,   16,   20,   51,   17,   20,
-       29,   35,   58,   16,   64,   51,   20,   17,   18,   29,
+        1,    1,    1,    9,   58,    9,    9,    9,    9,   10,
+       10,   10,   10,   11,   11,   11,   11,   11,   12,  102,
+       20,   63,   58,   12,   13,   13,   13,   13,   13,   13,
+       14,   14,   14,   14,   14,   14,   16,   20,   46,   17,
+       20,   51,   63,   46,   16,   25,  102,   20,   17,   51,
+       25,   16,   17,   16,   18,   16,   13,   17,   16,   18,
 
-       16,   17,   16,   18,   16,   18,   17,   16,   19,   17,
-       53,  184,   13,   19,   21,   22,   18,   19,   53,   21,
-       18,   21,   21,   19,   22,  184,   19,   24,  563,   21,
-       22,   72,   24,   21,   25,   21,   23,   26,   23,   25,
-       24,   23,   23,   23,   63,   24,   26,   72,   34,   24,
-       23,   33,   25,   27,   36,   28,   33,   34,   25,   23,
-       23,   26,   27,   36,   27,   63,   46,   28,   27,   33,
-       27,   52,   27,   28,   27,   46,   31,   55,   28,   30,
-       56,   31,  560,   67,   52,  555,   52,   30,   73,   55,
-       60,   56,   57,   55,   31,   30,   30,   31,   30,   30,
+       17,   18,   19,   25,   22,   24,   26,   19,  555,   25,
+       24,   19,   18,   22,   56,   26,   18,   19,   24,   22,
+       19,   21,   29,   24,   34,   56,   21,   24,   21,   21,
+       26,   29,   36,   34,   33,   52,   21,   28,   54,   33,
+       21,   36,   21,   23,   23,   23,   23,   23,   52,   28,
+       52,   31,   33,   53,   23,   28,   31,   54,   35,   35,
+       28,   53,   68,   23,   23,   27,   60,   57,   61,   31,
+       68,  553,   31,   55,   27,   61,   27,   35,   57,   31,
+       27,   60,   27,   66,   27,   55,   27,   30,   73,   55,
+       57,   30,   42,   42,   42,   42,   62,   64,   66,   30,
 
-       30,   73,   30,   57,   31,   60,   62,   67,   30,   61,
-       30,   30,   68,   30,   32,   57,   61,   65,   70,   66,
-       68,   62,   32,   62,   65,  553,   80,   65,   89,   76,
-       32,   32,   80,   32,   66,   32,   65,   32,   76,   32,
-       89,   70,   74,   32,   42,   42,   42,   42,   42,   42,
-       42,   42,   47,   47,   47,   47,   47,   47,   47,   47,
-       74,   78,   81,   47,  249,  249,   81,   71,   77,   47,
-       49,   49,   49,   49,   49,   49,   49,   49,   83,   78,
-       49,   49,   71,   49,   49,   49,   49,   49,   49,   71,
-       75,   77,   84,   85,   83,   86,   91,   87,   88,   75,
+       30,   73,   30,   30,   30,   67,   30,   43,   43,   43,
+       43,   62,   30,   62,   30,   30,   72,   30,   32,   70,
+       64,  549,   32,   44,   44,   44,   44,   44,   83,   67,
+       32,   32,   72,   32,   83,   32,   77,   32,   74,   32,
+       71,   81,   70,   32,   45,   45,   45,   45,   45,   45,
+       47,   47,   47,   47,   47,   71,   74,   47,  547,   77,
+       81,  546,   71,   47,   48,   48,   48,   48,   48,   48,
+       49,   49,   49,   49,   49,   78,   49,   49,   65,   49,
+       49,   49,   49,   49,   49,   65,   75,   76,   65,   79,
+       80,   82,   86,   78,   84,   75,   76,   65,   79,   79,
 
-       96,   86,   90,   88,   91,   95,   92,   94,  552,   96,
-       97,   84,  105,   75,   87,   85,   85,   90,   85,   97,
-       87,   92,   94,   96,   99,   95,   98,  101,  100,   99,
-      102,  103,  104,   97,  106,   98,  100,  108,  107,  105,
-      101,  110,  109,  102,  113,  107,  108,  106,  551,  110,
-      111,  119,  103,  107,  112,  104,  115,  109,  116,  111,
-      108,  114,  113,  112,  110,  107,  109,  114,  118,  115,
-      119,  116,  120,  111,  121,  122,  123,  124,  127,  116,
-      126,  118,  127,  131,  122,  120,  124,  125,  128,  126,
-      132,  130,  118,  130,  121,  125,  125,  129,  122,  123,
+       85,   92,   88,   87,   86,   85,   80,   89,   91,   75,
+       88,   84,  100,   82,   82,   93,   82,   84,   87,   94,
+       95,   92,   89,   91,   93,   96,   97,   98,   94,   95,
+       96,   99,  101,  100,   97,  103,  104,  105,   93,  107,
+       98,  106,   94,  104,   99,  108,  105,  107,  103,  109,
+      116,  104,  110,  111,  108,  101,  106,  164,  109,  111,
+      105,  112,  107,  104,  113,  106,  115,  117,  108,  116,
+      110,  118,  119,  120,  112,  121,  164,  113,  123,  115,
+      117,  119,  124,  126,  121,  113,  124,  123,  126,  125,
+      115,  118,  122,  128,  129,  119,  120,  127,  121,  127,
 
-      124,  128,  129,  128,  131,  125,  136,  145,  125,  142,
-      146,  132,  136,  125,  143,  549,  145,  132,  139,  139,
-      142,  139,  139,  139,  139,  139,  139,  139,  139,  148,
-      150,  146,  143,  151,  152,  154,  155,  150,  156,  157,
-      158,  159,  148,  154,  157,  160,  162,  156,  151,  152,
-      161,  163,  162,  164,  159,  158,  165,  166,  155,  161,
-      160,  168,  164,  161,  163,  167,  169,  170,  173,  171,
-      174,  169,  172,  178,  164,  182,  174,  173,  165,  185,
-      166,  172,  179,  547,  167,  187,  168,  171,  172,  180,
-      171,  181,  178,  182,  170,  183,  188,  179,  180,  186,
+      122,  122,  125,  145,  125,  132,  132,  132,  132,  139,
+      122,  143,  140,  122,  128,  129,  145,  142,  122,  152,
+      139,  129,  133,  133,  133,  133,  142,  147,  545,  133,
+      140,  148,  143,  149,  147,  133,  135,  135,  135,  135,
+      135,  152,  154,  135,  151,  155,  148,  154,  149,  135,
+      136,  136,  151,  136,  136,  136,  136,  136,  153,  156,
+      155,  157,  158,  159,  160,  161,  162,  153,  163,  159,
+      165,  158,  156,  166,  161,  158,  157,  160,  166,  167,
+      168,  169,  543,  170,  172,  173,  161,  171,  162,  176,
+      169,  163,  170,  171,  179,  165,  174,  169,  168,  175,
 
-      181,  189,  185,  191,  183,  201,  187,  186,  198,  202,
-      212,  188,  207,  214,  181,  213,  205,  225,  191,  206,
-      212,  207,  201,  243,  213,  189,  225,  243,  198,  208,
-      546,  214,  202,  204,  204,  204,  204,  204,  204,  204,
-      204,  205,  206,  204,  204,  217,  204,  204,  204,  204,
-      204,  204,  208,  218,  220,  221,  222,  223,  226,  233,
-      230,  217,  224,  236,  238,  240,  544,  222,  233,  237,
-      221,  224,  236,  240,  218,  245,  223,  220,  230,  224,
-      238,  239,  237,  226,  241,  242,  239,  246,  248,  241,
-      250,  250,  253,  245,  248,  251,  251,  252,  252,  242,
+      173,  168,  177,  172,  178,  174,  167,  176,  175,  181,
+      182,  177,  180,  183,  185,  192,  195,  179,  178,  196,
+      180,  206,  175,  199,  200,  182,  234,  201,  202,  185,
+      181,  206,  207,  195,  234,  192,  201,  183,  214,  212,
+      208,  207,  196,  198,  198,  198,  198,  200,  199,  198,
+      198,  202,  198,  198,  198,  198,  198,  198,  208,  211,
+      212,  214,  215,  216,  217,  220,  232,  218,  224,  219,
+      227,  230,  231,  239,  216,  211,  218,  215,  219,  227,
+      230,  236,  232,  217,  218,  231,  224,  233,  235,  240,
+      220,  239,  233,  235,  237,  236,  541,  248,  237,  540,
 
-      254,  255,  257,  258,  261,  262,  263,  254,  258,  253,
-      246,  261,  264,  266,  268,  265,  269,  272,  255,  257,
-      265,  267,  270,  278,  274,  279,  271,  264,  262,  263,
-      266,  271,  269,  274,  267,  273,  275,  270,  272,  280,
-      273,  268,  281,  275,  284,  285,  278,  287,  279,  288,
-      285,  289,  292,  290,  291,  293,  287,  300,  297,  284,
-      294,  280,  298,  280,  301,  302,  281,  292,  291,  305,
-      288,  290,  289,  293,  308,  294,  297,  298,  306,  309,
-      310,  300,  305,  302,  308,  306,  312,  301,  309,  313,
-      310,  315,  316,  321,  318,  312,  313,  323,  322,  324,
+      242,  242,  242,  242,  248,  243,  243,  242,  243,  243,
+      243,  243,  240,  242,  244,  244,  244,  244,  245,  245,
+      245,  245,  245,  246,  246,  246,  246,  246,  247,  249,
+      251,  252,  255,  256,  257,  258,  252,  259,  260,  255,
+      261,  262,  259,  263,  265,  247,  249,  251,  264,  265,
+      258,  266,  268,  261,  272,  260,  256,  257,  273,  263,
+      267,  268,  269,  264,  274,  267,  275,  278,  262,  269,
+      279,  281,  266,  282,  283,  279,  286,  272,  284,  285,
+      281,  273,  278,  287,  288,  291,  274,  292,  274,  294,
+      275,  286,  295,  285,  282,  283,  284,  299,  296,  288,
 
-      315,  318,  323,  321,  326,  328,  335,  316,  322,  330,
-      331,  335,  336,  338,  339,  343,  324,  340,  344,  330,
-      336,  339,  340,  331,  342,  326,  341,  344,  328,  342,
-      346,  330,  345,  341,  347,  338,  343,  348,  345,  349,
-      350,  351,  356,  353,  358,  357,  348,  360,  351,  346,
-      353,  359,  361,  347,  362,  356,  349,  350,  357,  363,
-      359,  358,  360,  364,  365,  368,  367,  373,  361,  374,
-      370,  369,  371,  365,  368,  372,  363,  362,  369,  370,
-      373,  371,  364,  367,  372,  375,  376,  374,  377,  381,
-      378,  380,  384,  382,  388,  391,  395,  386,  377,  387,
+      300,  287,  292,  291,  302,  307,  310,  300,  303,  304,
+      299,  306,  307,  294,  302,  295,  296,  303,  309,  304,
+      306,  310,  312,  315,  316,  317,  318,  309,  320,  312,
+      317,  322,  538,  315,  316,  324,  330,  325,  327,  327,
+      327,  327,  329,  318,  330,  324,  332,  329,  333,  320,
+      325,  334,  335,  336,  322,  333,  334,  324,  336,  335,
+      337,  338,  342,  339,  340,  341,  350,  345,  332,  339,
+      338,  342,  343,  344,  345,  347,  352,  353,  351,  350,
+      354,  337,  347,  340,  341,  355,  353,  356,  357,  343,
+      344,  351,  358,  352,  359,  354,  361,  362,  368,  364,
 
-      389,  376,  382,  380,  386,  388,  392,  387,  375,  378,
-      390,  384,  381,  389,  394,  390,  397,  398,  391,  395,
-      399,  400,  402,  392,  398,  403,  408,  394,  404,  413,
-      400,  407,  412,  397,  418,  407,  407,  417,  415,  412,
-      425,  416,  417,  403,  402,  413,  404,  415,  399,  408,
-      416,  420,  426,  427,  429,  430,  436,  418,  420,  439,
-      440,  425,  442,  429,  441,  430,  443,  445,  436,  426,
-      427,  447,  441,  450,  439,  442,  451,  452,  453,  454,
-      460,  457,  440,  443,  458,  459,  456,  461,  454,  447,
-      445,  462,  463,  453,  450,  456,  461,  451,  457,  458,
+      363,  355,  367,  359,  369,  357,  362,  363,  364,  365,
+      356,  358,  366,  361,  370,  367,  368,  372,  365,  374,
+      371,  366,  375,  376,  378,  383,  380,  369,  382,  370,
+      371,  374,  376,  380,  381,  384,  372,  385,  383,  382,
+      384,  386,  381,  378,  388,  375,  389,  391,  392,  393,
+      394,  396,  397,  398,  409,  392,  402,  388,  386,  394,
+      385,  401,  407,  409,  391,  401,  401,  406,  412,  389,
+      397,  398,  410,  396,  406,  411,  414,  393,  407,  402,
+      411,  410,  419,  414,  420,  421,  423,  424,  430,  433,
+      434,  412,  436,  437,  439,  423,  441,  424,  435,  444,
 
-      459,  460,  465,  452,  467,  466,  469,  468,  471,  467,
-      470,  472,  474,  462,  466,  463,  468,  470,  475,  476,
-      479,  477,  472,  480,  481,  482,  486,  465,  488,  469,
-      477,  471,  496,  494,  482,  479,  474,  488,  489,  486,
-      480,  475,  476,  490,  492,  489,  494,  481,  493,  490,
-      500,  492,  499,  493,  501,  496,  502,  499,  503,  500,
-      504,  502,  505,  506,  507,  508,  509,  510,  512,  505,
-      508,  513,  510,  514,  503,  515,  516,  501,  518,  507,
-      521,  509,  512,  528,  517,  516,  506,  513,  520,  504,
-      522,  523,  514,  517,  525,  521,  526,  520,  515,  527,
+      430,  420,  421,  419,  433,  436,  435,  445,  446,  447,
+      437,  452,  434,  448,  441,  451,  450,  439,  453,  454,
+      444,  455,  448,  456,  447,  450,  452,  457,  445,  459,
+      455,  461,  451,  453,  446,  460,  461,  462,  463,  465,
+      454,  464,  466,  468,  460,  456,  462,  469,  464,  470,
+      457,  471,  474,  466,  459,  475,  473,  476,  483,  482,
+      471,  463,  465,  480,  488,  483,  476,  468,  482,  474,
+      469,  473,  470,  484,  486,  487,  480,  488,  475,  484,
+      487,  486,  490,  493,  494,  495,  496,  497,  493,  498,
+      499,  496,  500,  494,  501,  502,  503,  499,  506,  504,
 
-      528,  518,  530,  525,  533,  522,  523,  532,  534,  535,
-      536,  533,  527,  538,  537,  542,  539,  540,  541,  526,
-      530,  534,  532,  543,  540,  541,  535,  548,  545,  550,
-      554,  536,  537,  531,  548,  529,  538,  539,  550,  524,
-      519,  511,  498,  497,  542,  545,  543,  495,  491,  487,
-      485,  554,  557,  557,  557,  557,  557,  557,  557,  557,
-      558,  484,  558,  558,  558,  558,  559,  483,  559,  559,
-      478,  559,  561,  473,  561,  561,  561,  561,  561,  561,
-      562,  464,  562,  562,  455,  562,  564,  449,  564,  565,
-      565,  565,  448,  446,  444,  438,  437,  435,  434,  433,
+      502,  507,  508,  497,  504,  490,  509,  510,  495,  501,
+      511,  503,  506,  512,  514,  500,  510,  507,  498,  511,
+      515,  508,  516,  514,  517,  519,  520,  521,  522,  509,
+      524,  526,  530,  532,  519,  515,  512,  516,  528,  517,
+      521,  529,  531,  527,  533,  522,  526,  534,  524,  520,
+      527,  528,  535,  530,  534,  536,  532,  537,  529,  535,
+      531,  539,  542,  544,  548,  533,  525,  523,  518,  542,
+      513,  505,  544,  492,  491,  489,  485,  481,  539,  479,
+      537,  478,  477,  472,  536,  548,  551,  551,  551,  551,
+      552,  552,  554,  467,  554,  554,  458,  449,  443,  442,
 
-      432,  431,  428,  424,  423,  422,  421,  419,  414,  411,
-      410,  409,  406,  405,  401,  396,  393,  385,  383,  379,
-      366,  355,  354,  352,  337,  334,  332,  329,  327,  325,
-      320,  319,  317,  314,  311,  307,  304,  299,  296,  295,
-      286,  283,  282,  277,  276,  260,  259,  256,  244,  235,
-      234,  232,  231,  229,  228,  227,  219,  216,  215,  211,
-      210,  209,  203,  200,  199,  197,  196,  195,  194,  193,
-      192,  190,  177,  176,  175,  153,  149,  147,  144,  141,
-      137,  133,  117,   93,   82,   69,   59,   48,   45,   44,
-       39,   37,   14,    8,    7,    3,  556,  556,  556,  556,
+      440,  438,  432,  431,  429,  428,  427,  426,  425,  422,
+      418,  417,  416,  415,  413,  408,  405,  404,  403,  400,
+      399,  395,  390,  387,  379,  377,  373,  360,  349,  348,
+      346,  331,  328,  326,  323,  321,  319,  314,  313,  311,
+      308,  305,  301,  298,  293,  290,  289,  280,  277,  276,
+      271,  270,  254,  253,  250,  238,  229,  228,  226,  225,
+      223,  222,  221,  213,  210,  209,  205,  204,  203,  197,
+      194,  193,  191,  190,  189,  188,  187,  186,  184,  150,
+      146,  144,  141,  138,  134,  130,  114,   90,   69,   59,
+       39,   37,    8,    7,    3,  550,  550,  550,  550,  550,
 
-      556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-      556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-      556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-      556,  556,  556,  556,  556,  556,  556,  556,  556,  556,
-      556,  556,  556,  556
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550,  550,
+      550,  550,  550,  550,  550,  550,  550,  550,  550
     } ;
 
 static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
@@ -881,7 +877,7 @@
 #define YY_MORE_ADJ 0
 #define YY_RESTORE_YY_MORE_OFFSET
 char *yytext;
-#line 1 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 1 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 #define INITIAL 0
 /*===-- Lexer.l - Scanner for llvm assembly files --------------*- C++ -*--===//
 //
@@ -896,7 +892,7 @@
 //
 //===----------------------------------------------------------------------===*/
 #define YY_NEVER_INTERACTIVE 1
-#line 28 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 28 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 #include "ParserInternals.h"
 #include "llvm/Module.h"
 #include <list>
@@ -1029,7 +1025,7 @@
 /* HexIntConstant - Hexadecimal constant generated by the CFE to avoid forcing
  * it to deal with 64 bit numbers.
  */
-#line 1033 "Lexer.cpp"
+#line 1029 "Lexer.cpp"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -1180,10 +1176,10 @@
 	register char *yy_cp = NULL, *yy_bp = NULL;
 	register int yy_act;
 
-#line 186 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 188 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 
 
-#line 1187 "Lexer.cpp"
+#line 1183 "Lexer.cpp"
 
 	if ( yy_init )
 		{
@@ -1231,14 +1227,14 @@
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 557 )
+				if ( yy_current_state >= 551 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			*yy_state_ptr++ = yy_current_state;
 			++yy_cp;
 			}
-		while ( yy_current_state != 556 );
+		while ( yy_current_state != 550 );
 
 yy_find_action:
 		yy_current_state = *--yy_state_ptr;
@@ -1276,636 +1272,627 @@
 	{ /* beginning of action switch */
 case 1:
 YY_RULE_SETUP
-#line 188 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 190 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { /* Ignore comments for now */ }
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 190 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 192 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return BEGINTOK; }
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 191 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 193 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return ENDTOK; }
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 192 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 194 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return TRUETOK;  }
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 193 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 195 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return FALSETOK; }
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 194 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 196 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return DECLARE; }
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 195 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 197 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return DEFINE; }
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 196 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 198 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return GLOBAL; }
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 197 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 199 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return CONSTANT; }
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 198 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 200 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return INTERNAL; }
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 199 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 201 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return LINKONCE; }
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 200 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 202 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return WEAK; }
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 201 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 203 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return APPENDING; }
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 202 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 204 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return DLLIMPORT; }
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 203 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 205 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return DLLEXPORT; }
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 204 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 206 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return EXTERN_WEAK; }
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 205 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 207 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return EXTERNAL; }
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 206 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 208 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return IMPLEMENTATION; }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 207 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 209 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return ZEROINITIALIZER; }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 208 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 210 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return DOTDOTDOT; }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 209 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 211 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return UNDEF; }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 210 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 212 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return NULL_TOK; }
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 211 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 213 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return TO; }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 212 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 214 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return TAIL; }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 213 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 215 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return TARGET; }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 214 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 216 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return TRIPLE; }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 215 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 217 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return DEPLIBS; }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 216 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 218 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return ENDIAN; }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 217 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 219 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return POINTERSIZE; }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 218 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 220 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return DATALAYOUT; }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 219 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 221 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return LITTLE; }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 220 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 222 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return BIG; }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 221 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 223 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return VOLATILE; }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 222 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 224 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return ALIGN;  }
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 223 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 225 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return SECTION; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 224 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 226 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return MODULE; }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 225 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 227 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return ASM_TOK; }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 226 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 228 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return SIDEEFFECT; }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 228 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 230 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return CC_TOK; }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 229 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 231 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return CCC_TOK; }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 230 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 232 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return CSRETCC_TOK; }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 231 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 233 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return FASTCC_TOK; }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 232 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 234 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return COLDCC_TOK; }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 233 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 235 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return X86_STDCALLCC_TOK; }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 234 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 236 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return X86_FASTCALLCC_TOK; }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 236 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 238 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TY(Type::VoidTy,  VOID);  }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 237 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 239 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TY(Type::Int1Ty,  BOOL);  }
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 238 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TY(Type::Int8Ty,  INT8);  }
+#line 240 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TY(Type::FloatTy, FLOAT); }
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 239 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TY(Type::Int16Ty, INT16); }
+#line 241 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TY(Type::DoubleTy,DOUBLE);}
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 240 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TY(Type::Int32Ty, INT32); }
+#line 242 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TY(Type::LabelTy, LABEL); }
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 241 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TY(Type::Int64Ty, INT64); }
+#line 243 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return TYPE;   }
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 242 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TY(Type::FloatTy, FLOAT); }
+#line 244 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return OPAQUE; }
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 243 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TY(Type::DoubleTy,DOUBLE);}
+#line 245 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ uint64_t NumBits = atoull(yytext+1);
+                  if (NumBits < IntegerType::MIN_INT_BITS || 
+                      NumBits > IntegerType::MAX_INT_BITS)
+                    GenerateError("Bitwidth for integer type out of range!");
+                  const Type* Ty = IntegerType::get(NumBits);
+                  RET_TY(Ty, INTTYPE);
+                }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 244 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TY(Type::LabelTy, LABEL); }
+#line 253 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, Add, ADD); }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 245 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return TYPE;   }
+#line 254 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, Sub, SUB); }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 246 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return OPAQUE; }
+#line 255 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, Mul, MUL); }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 248 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(BinaryOpVal, Add, ADD); }
+#line 256 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, UDiv, UDIV); }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 249 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(BinaryOpVal, Sub, SUB); }
+#line 257 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, SDiv, SDIV); }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 250 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(BinaryOpVal, Mul, MUL); }
+#line 258 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, FDiv, FDIV); }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 251 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(BinaryOpVal, UDiv, UDIV); }
+#line 259 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, URem, UREM); }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 252 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(BinaryOpVal, SDiv, SDIV); }
+#line 260 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, SRem, SREM); }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 253 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(BinaryOpVal, FDiv, FDIV); }
+#line 261 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, FRem, FREM); }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 254 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(BinaryOpVal, URem, UREM); }
+#line 262 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, And, AND); }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 255 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(BinaryOpVal, SRem, SREM); }
+#line 263 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, Or , OR ); }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 256 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(BinaryOpVal, FRem, FREM); }
+#line 264 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, Xor, XOR); }
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 257 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(BinaryOpVal, And, AND); }
+#line 265 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal,  ICmp,  ICMP); }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 258 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(BinaryOpVal, Or , OR ); }
+#line 266 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal,  FCmp,  FCMP); }
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 259 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(BinaryOpVal, Xor, XOR); }
+#line 267 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return EQ;  }
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 260 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(OtherOpVal,  ICmp,  ICMP); }
+#line 268 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return NE;  }
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 261 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(OtherOpVal,  FCmp,  FCMP); }
+#line 269 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return SLT; }
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 262 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return EQ;  }
+#line 270 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return SGT; }
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 263 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return NE;  }
+#line 271 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return SLE; }
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 264 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return SLT; }
+#line 272 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return SGE; }
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 265 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return SGT; }
+#line 273 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return ULT; }
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 266 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return SLE; }
+#line 274 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return UGT; }
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 267 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return SGE; }
+#line 275 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return ULE; }
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 268 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return ULT; }
+#line 276 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return UGE; }
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 269 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return UGT; }
+#line 277 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return OEQ; }
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 270 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return ULE; }
+#line 278 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return ONE; }
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 271 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return UGE; }
+#line 279 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return OLT; }
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 272 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return OEQ; }
+#line 280 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return OGT; }
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 273 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return ONE; }
+#line 281 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return OLE; }
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 274 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return OLT; }
+#line 282 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return OGE; }
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 275 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return OGT; }
+#line 283 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return ORD; }
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 276 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return OLE; }
+#line 284 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return UNO; }
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 277 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return OGE; }
+#line 285 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return UEQ; }
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 278 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return ORD; }
+#line 286 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ return UNE; }
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 279 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return UNO; }
+#line 288 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, PHI, PHI_TOK); }
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 280 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return UEQ; }
+#line 289 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, Call, CALL); }
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 281 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return UNE; }
+#line 290 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(CastOpVal, Trunc, TRUNC); }
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 283 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(OtherOpVal, PHI, PHI_TOK); }
+#line 291 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(CastOpVal, ZExt, ZEXT); }
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 284 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(OtherOpVal, Call, CALL); }
+#line 292 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(CastOpVal, SExt, SEXT); }
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 285 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(CastOpVal, Trunc, TRUNC); }
+#line 293 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(CastOpVal, FPTrunc, FPTRUNC); }
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 286 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(CastOpVal, ZExt, ZEXT); }
+#line 294 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(CastOpVal, FPExt, FPEXT); }
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 287 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(CastOpVal, SExt, SEXT); }
+#line 295 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(CastOpVal, UIToFP, UITOFP); }
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 288 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(CastOpVal, FPTrunc, FPTRUNC); }
+#line 296 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(CastOpVal, SIToFP, SITOFP); }
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 289 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(CastOpVal, FPExt, FPEXT); }
+#line 297 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(CastOpVal, FPToUI, FPTOUI); }
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 290 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(CastOpVal, UIToFP, UITOFP); }
+#line 298 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(CastOpVal, FPToSI, FPTOSI); }
 	YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 291 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(CastOpVal, SIToFP, SITOFP); }
+#line 299 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(CastOpVal, IntToPtr, INTTOPTR); }
 	YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 292 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(CastOpVal, FPToUI, FPTOUI); }
+#line 300 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(CastOpVal, PtrToInt, PTRTOINT); }
 	YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 293 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(CastOpVal, FPToSI, FPTOSI); }
+#line 301 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(CastOpVal, BitCast, BITCAST); }
 	YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 294 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(CastOpVal, IntToPtr, INTTOPTR); }
+#line 302 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, Select, SELECT); }
 	YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 295 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(CastOpVal, PtrToInt, PTRTOINT); }
+#line 303 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, Shl, SHL); }
 	YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 296 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(CastOpVal, BitCast, BITCAST); }
+#line 304 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, LShr, LSHR); }
 	YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 297 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(OtherOpVal, Select, SELECT); }
+#line 305 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, AShr, ASHR); }
 	YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 298 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(OtherOpVal, Shl, SHL); }
+#line 306 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, VAArg , VAARG); }
 	YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 299 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(OtherOpVal, LShr, LSHR); }
+#line 307 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(TermOpVal, Ret, RET); }
 	YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 300 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(OtherOpVal, AShr, ASHR); }
+#line 308 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(TermOpVal, Br, BR); }
 	YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 301 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(OtherOpVal, VAArg , VAARG); }
+#line 309 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(TermOpVal, Switch, SWITCH); }
 	YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 302 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(TermOpVal, Ret, RET); }
+#line 310 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(TermOpVal, Invoke, INVOKE); }
 	YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 303 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(TermOpVal, Br, BR); }
+#line 311 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(TermOpVal, Unwind, UNWIND); }
 	YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 304 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(TermOpVal, Switch, SWITCH); }
+#line 312 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(TermOpVal, Unreachable, UNREACHABLE); }
 	YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 305 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(TermOpVal, Invoke, INVOKE); }
+#line 314 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(MemOpVal, Malloc, MALLOC); }
 	YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 306 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(TermOpVal, Unwind, UNWIND); }
+#line 315 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(MemOpVal, Alloca, ALLOCA); }
 	YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 307 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(TermOpVal, Unreachable, UNREACHABLE); }
+#line 316 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(MemOpVal, Free, FREE); }
 	YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 309 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(MemOpVal, Malloc, MALLOC); }
+#line 317 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(MemOpVal, Load, LOAD); }
 	YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 310 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(MemOpVal, Alloca, ALLOCA); }
+#line 318 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(MemOpVal, Store, STORE); }
 	YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 311 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(MemOpVal, Free, FREE); }
+#line 319 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(MemOpVal, GetElementPtr, GETELEMENTPTR); }
 	YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 312 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(MemOpVal, Load, LOAD); }
+#line 321 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, ExtractElement, EXTRACTELEMENT); }
 	YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 313 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(MemOpVal, Store, STORE); }
+#line 322 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, InsertElement, INSERTELEMENT); }
 	YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 314 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(MemOpVal, GetElementPtr, GETELEMENTPTR); }
+#line 323 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, ShuffleVector, SHUFFLEVECTOR); }
 	YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 316 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(OtherOpVal, ExtractElement, EXTRACTELEMENT); }
-	YY_BREAK
-case 123:
-YY_RULE_SETUP
-#line 317 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(OtherOpVal, InsertElement, INSERTELEMENT); }
-	YY_BREAK
-case 124:
-YY_RULE_SETUP
-#line 318 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(OtherOpVal, ShuffleVector, SHUFFLEVECTOR); }
-	YY_BREAK
-case 125:
-YY_RULE_SETUP
-#line 321 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 326 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 {
                   UnEscapeLexed(yytext+1);
                   llvmAsmlval.StrVal = strdup(yytext+1);             // Skip %
                   return VAR_ID;
                 }
 	YY_BREAK
-case 126:
+case 123:
 YY_RULE_SETUP
-#line 326 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 331 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 {
                   yytext[strlen(yytext)-1] = 0;  // nuke colon
                   UnEscapeLexed(yytext);
@@ -1913,9 +1900,9 @@
                   return LABELSTR;
                 }
 	YY_BREAK
-case 127:
+case 124:
 YY_RULE_SETUP
-#line 332 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 337 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 {
                   yytext[strlen(yytext)-2] = 0;  // nuke colon, end quote
                   UnEscapeLexed(yytext+1);
@@ -1923,9 +1910,9 @@
                   return LABELSTR;
                 }
 	YY_BREAK
-case 128:
+case 125:
 YY_RULE_SETUP
-#line 339 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 344 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { // Note that we cannot unescape a string constant here!  The
                    // string constant might contain a \00 which would not be
                    // understood by the string stuff.  It is valid to make a
@@ -1936,14 +1923,14 @@
                    return STRINGCONSTANT;
                  }
 	YY_BREAK
-case 129:
+case 126:
 YY_RULE_SETUP
-#line 350 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 355 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { llvmAsmlval.UInt64Val = atoull(yytext); return EUINT64VAL; }
 	YY_BREAK
-case 130:
+case 127:
 YY_RULE_SETUP
-#line 351 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 356 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 {
                   uint64_t Val = atoull(yytext+1);
                   // +1:  we have bigger negative range
@@ -1953,17 +1940,17 @@
                   return ESINT64VAL;
                 }
 	YY_BREAK
-case 131:
+case 128:
 YY_RULE_SETUP
-#line 359 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 364 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 {
                    llvmAsmlval.UInt64Val = HexIntToVal(yytext+3);
                    return yytext[0] == 's' ? ESINT64VAL : EUINT64VAL;
                  }
 	YY_BREAK
-case 132:
+case 129:
 YY_RULE_SETUP
-#line 364 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 369 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 {
                   uint64_t Val = atoull(yytext+1);
                   if ((unsigned)Val != Val)
@@ -1972,9 +1959,9 @@
                   return UINTVAL;
                 }
 	YY_BREAK
-case 133:
+case 130:
 YY_RULE_SETUP
-#line 371 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 376 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 {
                   uint64_t Val = atoull(yytext+2);
                   // +1:  we have bigger negative range
@@ -1984,18 +1971,18 @@
                   return SINTVAL;
                 }
 	YY_BREAK
-case 134:
+case 131:
 YY_RULE_SETUP
-#line 380 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 385 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { llvmAsmlval.FPVal = atof(yytext); return FPVAL; }
 	YY_BREAK
-case 135:
+case 132:
 YY_RULE_SETUP
-#line 381 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 386 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { llvmAsmlval.FPVal = HexToFP(yytext); return FPVAL; }
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 383 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 388 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 {
                   /* Make sure to free the internal buffers for flex when we are
                    * done reading our input!
@@ -2004,22 +1991,22 @@
                   return EOF;
                 }
 	YY_BREAK
-case 136:
+case 133:
 YY_RULE_SETUP
-#line 391 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 396 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { /* Ignore whitespace */ }
 	YY_BREAK
-case 137:
+case 134:
 YY_RULE_SETUP
-#line 392 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 397 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return yytext[0]; }
 	YY_BREAK
-case 138:
+case 135:
 YY_RULE_SETUP
-#line 394 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 399 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
 	YY_BREAK
-#line 2023 "Lexer.cpp"
+#line 2010 "Lexer.cpp"
 
 	case YY_END_OF_BUFFER:
 		{
@@ -2306,7 +2293,7 @@
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 557 )
+			if ( yy_current_state >= 551 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2336,11 +2323,11 @@
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 557 )
+		if ( yy_current_state >= 551 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 556);
+	yy_is_jam = (yy_current_state == 550);
 	if ( ! yy_is_jam )
 		*yy_state_ptr++ = yy_current_state;
 
@@ -2897,5 +2884,5 @@
 	return 0;
 	}
 #endif
-#line 394 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 399 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 
diff --git a/lib/AsmParser/Lexer.l b/lib/AsmParser/Lexer.l
index e13c56b..9f1eddd 100644
--- a/lib/AsmParser/Lexer.l
+++ b/lib/AsmParser/Lexer.l
@@ -165,6 +165,8 @@
 EPInteger     %[0-9]+
 ENInteger    %-[0-9]+
 
+IntegerType i[0-9]*
+
 
 /* E[PN]Integer: match positive and negative literal integer values */
 PInteger   [0-9]+
@@ -235,15 +237,18 @@
 
 void            { RET_TY(Type::VoidTy,  VOID);  }
 bool            { RET_TY(Type::Int1Ty,  BOOL);  }
-i8              { RET_TY(Type::Int8Ty,  INT8);  }
-i16             { RET_TY(Type::Int16Ty, INT16); }
-i32             { RET_TY(Type::Int32Ty, INT32); }
-i64             { RET_TY(Type::Int64Ty, INT64); }
 float           { RET_TY(Type::FloatTy, FLOAT); }
 double          { RET_TY(Type::DoubleTy,DOUBLE);}
 label           { RET_TY(Type::LabelTy, LABEL); }
 type            { return TYPE;   }
 opaque          { return OPAQUE; }
+{IntegerType}   { uint64_t NumBits = atoull(yytext+1);
+                  if (NumBits < IntegerType::MIN_INT_BITS || 
+                      NumBits > IntegerType::MAX_INT_BITS)
+                    GenerateError("Bitwidth for integer type out of range!");
+                  const Type* Ty = IntegerType::get(NumBits);
+                  RET_TY(Ty, INTTYPE);
+                }
 
 add             { RET_TOK(BinaryOpVal, Add, ADD); }
 sub             { RET_TOK(BinaryOpVal, Sub, SUB); }
diff --git a/lib/AsmParser/Lexer.l.cvs b/lib/AsmParser/Lexer.l.cvs
index e13c56b..9f1eddd 100644
--- a/lib/AsmParser/Lexer.l.cvs
+++ b/lib/AsmParser/Lexer.l.cvs
@@ -165,6 +165,8 @@
 EPInteger     %[0-9]+
 ENInteger    %-[0-9]+
 
+IntegerType i[0-9]*
+
 
 /* E[PN]Integer: match positive and negative literal integer values */
 PInteger   [0-9]+
@@ -235,15 +237,18 @@
 
 void            { RET_TY(Type::VoidTy,  VOID);  }
 bool            { RET_TY(Type::Int1Ty,  BOOL);  }
-i8              { RET_TY(Type::Int8Ty,  INT8);  }
-i16             { RET_TY(Type::Int16Ty, INT16); }
-i32             { RET_TY(Type::Int32Ty, INT32); }
-i64             { RET_TY(Type::Int64Ty, INT64); }
 float           { RET_TY(Type::FloatTy, FLOAT); }
 double          { RET_TY(Type::DoubleTy,DOUBLE);}
 label           { RET_TY(Type::LabelTy, LABEL); }
 type            { return TYPE;   }
 opaque          { return OPAQUE; }
+{IntegerType}   { uint64_t NumBits = atoull(yytext+1);
+                  if (NumBits < IntegerType::MIN_INT_BITS || 
+                      NumBits > IntegerType::MAX_INT_BITS)
+                    GenerateError("Bitwidth for integer type out of range!");
+                  const Type* Ty = IntegerType::get(NumBits);
+                  RET_TY(Ty, INTTYPE);
+                }
 
 add             { RET_TOK(BinaryOpVal, Add, ADD); }
 sub             { RET_TOK(BinaryOpVal, Sub, SUB); }
diff --git a/lib/AsmParser/llvmAsmParser.cpp.cvs b/lib/AsmParser/llvmAsmParser.cpp.cvs
index 7091018..2e540c3 100644
--- a/lib/AsmParser/llvmAsmParser.cpp.cvs
+++ b/lib/AsmParser/llvmAsmParser.cpp.cvs
@@ -71,132 +71,129 @@
      FPVAL = 262,
      VOID = 263,
      BOOL = 264,
-     INT8 = 265,
-     INT16 = 266,
-     INT32 = 267,
-     INT64 = 268,
-     FLOAT = 269,
-     DOUBLE = 270,
-     LABEL = 271,
-     TYPE = 272,
-     VAR_ID = 273,
-     LABELSTR = 274,
-     STRINGCONSTANT = 275,
-     IMPLEMENTATION = 276,
-     ZEROINITIALIZER = 277,
-     TRUETOK = 278,
-     FALSETOK = 279,
-     BEGINTOK = 280,
-     ENDTOK = 281,
-     DECLARE = 282,
-     DEFINE = 283,
-     GLOBAL = 284,
-     CONSTANT = 285,
-     SECTION = 286,
-     VOLATILE = 287,
-     TO = 288,
-     DOTDOTDOT = 289,
-     NULL_TOK = 290,
-     UNDEF = 291,
-     INTERNAL = 292,
-     LINKONCE = 293,
-     WEAK = 294,
-     APPENDING = 295,
-     DLLIMPORT = 296,
-     DLLEXPORT = 297,
-     EXTERN_WEAK = 298,
-     OPAQUE = 299,
-     NOT = 300,
-     EXTERNAL = 301,
-     TARGET = 302,
-     TRIPLE = 303,
-     ENDIAN = 304,
-     POINTERSIZE = 305,
-     LITTLE = 306,
-     BIG = 307,
-     ALIGN = 308,
-     DEPLIBS = 309,
-     CALL = 310,
-     TAIL = 311,
-     ASM_TOK = 312,
-     MODULE = 313,
-     SIDEEFFECT = 314,
-     CC_TOK = 315,
-     CCC_TOK = 316,
-     CSRETCC_TOK = 317,
-     FASTCC_TOK = 318,
-     COLDCC_TOK = 319,
-     X86_STDCALLCC_TOK = 320,
-     X86_FASTCALLCC_TOK = 321,
-     DATALAYOUT = 322,
-     RET = 323,
-     BR = 324,
-     SWITCH = 325,
-     INVOKE = 326,
-     UNWIND = 327,
-     UNREACHABLE = 328,
-     ADD = 329,
-     SUB = 330,
-     MUL = 331,
-     UDIV = 332,
-     SDIV = 333,
-     FDIV = 334,
-     UREM = 335,
-     SREM = 336,
-     FREM = 337,
-     AND = 338,
-     OR = 339,
-     XOR = 340,
-     ICMP = 341,
-     FCMP = 342,
-     EQ = 343,
-     NE = 344,
-     SLT = 345,
-     SGT = 346,
-     SLE = 347,
-     SGE = 348,
-     ULT = 349,
-     UGT = 350,
-     ULE = 351,
-     UGE = 352,
-     OEQ = 353,
-     ONE = 354,
-     OLT = 355,
-     OGT = 356,
-     OLE = 357,
-     OGE = 358,
-     ORD = 359,
-     UNO = 360,
-     UEQ = 361,
-     UNE = 362,
-     MALLOC = 363,
-     ALLOCA = 364,
-     FREE = 365,
-     LOAD = 366,
-     STORE = 367,
-     GETELEMENTPTR = 368,
-     TRUNC = 369,
-     ZEXT = 370,
-     SEXT = 371,
-     FPTRUNC = 372,
-     FPEXT = 373,
-     BITCAST = 374,
-     UITOFP = 375,
-     SITOFP = 376,
-     FPTOUI = 377,
-     FPTOSI = 378,
-     INTTOPTR = 379,
-     PTRTOINT = 380,
-     PHI_TOK = 381,
-     SELECT = 382,
-     SHL = 383,
-     LSHR = 384,
-     ASHR = 385,
-     VAARG = 386,
-     EXTRACTELEMENT = 387,
-     INSERTELEMENT = 388,
-     SHUFFLEVECTOR = 389,
-     NORETURN = 390
+     INTTYPE = 265,
+     FLOAT = 266,
+     DOUBLE = 267,
+     LABEL = 268,
+     TYPE = 269,
+     VAR_ID = 270,
+     LABELSTR = 271,
+     STRINGCONSTANT = 272,
+     IMPLEMENTATION = 273,
+     ZEROINITIALIZER = 274,
+     TRUETOK = 275,
+     FALSETOK = 276,
+     BEGINTOK = 277,
+     ENDTOK = 278,
+     DECLARE = 279,
+     DEFINE = 280,
+     GLOBAL = 281,
+     CONSTANT = 282,
+     SECTION = 283,
+     VOLATILE = 284,
+     TO = 285,
+     DOTDOTDOT = 286,
+     NULL_TOK = 287,
+     UNDEF = 288,
+     INTERNAL = 289,
+     LINKONCE = 290,
+     WEAK = 291,
+     APPENDING = 292,
+     DLLIMPORT = 293,
+     DLLEXPORT = 294,
+     EXTERN_WEAK = 295,
+     OPAQUE = 296,
+     NOT = 297,
+     EXTERNAL = 298,
+     TARGET = 299,
+     TRIPLE = 300,
+     ENDIAN = 301,
+     POINTERSIZE = 302,
+     LITTLE = 303,
+     BIG = 304,
+     ALIGN = 305,
+     DEPLIBS = 306,
+     CALL = 307,
+     TAIL = 308,
+     ASM_TOK = 309,
+     MODULE = 310,
+     SIDEEFFECT = 311,
+     CC_TOK = 312,
+     CCC_TOK = 313,
+     CSRETCC_TOK = 314,
+     FASTCC_TOK = 315,
+     COLDCC_TOK = 316,
+     X86_STDCALLCC_TOK = 317,
+     X86_FASTCALLCC_TOK = 318,
+     DATALAYOUT = 319,
+     RET = 320,
+     BR = 321,
+     SWITCH = 322,
+     INVOKE = 323,
+     UNWIND = 324,
+     UNREACHABLE = 325,
+     ADD = 326,
+     SUB = 327,
+     MUL = 328,
+     UDIV = 329,
+     SDIV = 330,
+     FDIV = 331,
+     UREM = 332,
+     SREM = 333,
+     FREM = 334,
+     AND = 335,
+     OR = 336,
+     XOR = 337,
+     ICMP = 338,
+     FCMP = 339,
+     EQ = 340,
+     NE = 341,
+     SLT = 342,
+     SGT = 343,
+     SLE = 344,
+     SGE = 345,
+     ULT = 346,
+     UGT = 347,
+     ULE = 348,
+     UGE = 349,
+     OEQ = 350,
+     ONE = 351,
+     OLT = 352,
+     OGT = 353,
+     OLE = 354,
+     OGE = 355,
+     ORD = 356,
+     UNO = 357,
+     UEQ = 358,
+     UNE = 359,
+     MALLOC = 360,
+     ALLOCA = 361,
+     FREE = 362,
+     LOAD = 363,
+     STORE = 364,
+     GETELEMENTPTR = 365,
+     TRUNC = 366,
+     ZEXT = 367,
+     SEXT = 368,
+     FPTRUNC = 369,
+     FPEXT = 370,
+     BITCAST = 371,
+     UITOFP = 372,
+     SITOFP = 373,
+     FPTOUI = 374,
+     FPTOSI = 375,
+     INTTOPTR = 376,
+     PTRTOINT = 377,
+     PHI_TOK = 378,
+     SELECT = 379,
+     SHL = 380,
+     LSHR = 381,
+     ASHR = 382,
+     VAARG = 383,
+     EXTRACTELEMENT = 384,
+     INSERTELEMENT = 385,
+     SHUFFLEVECTOR = 386,
+     NORETURN = 387
    };
 #endif
 /* Tokens.  */
@@ -207,138 +204,135 @@
 #define FPVAL 262
 #define VOID 263
 #define BOOL 264
-#define INT8 265
-#define INT16 266
-#define INT32 267
-#define INT64 268
-#define FLOAT 269
-#define DOUBLE 270
-#define LABEL 271
-#define TYPE 272
-#define VAR_ID 273
-#define LABELSTR 274
-#define STRINGCONSTANT 275
-#define IMPLEMENTATION 276
-#define ZEROINITIALIZER 277
-#define TRUETOK 278
-#define FALSETOK 279
-#define BEGINTOK 280
-#define ENDTOK 281
-#define DECLARE 282
-#define DEFINE 283
-#define GLOBAL 284
-#define CONSTANT 285
-#define SECTION 286
-#define VOLATILE 287
-#define TO 288
-#define DOTDOTDOT 289
-#define NULL_TOK 290
-#define UNDEF 291
-#define INTERNAL 292
-#define LINKONCE 293
-#define WEAK 294
-#define APPENDING 295
-#define DLLIMPORT 296
-#define DLLEXPORT 297
-#define EXTERN_WEAK 298
-#define OPAQUE 299
-#define NOT 300
-#define EXTERNAL 301
-#define TARGET 302
-#define TRIPLE 303
-#define ENDIAN 304
-#define POINTERSIZE 305
-#define LITTLE 306
-#define BIG 307
-#define ALIGN 308
-#define DEPLIBS 309
-#define CALL 310
-#define TAIL 311
-#define ASM_TOK 312
-#define MODULE 313
-#define SIDEEFFECT 314
-#define CC_TOK 315
-#define CCC_TOK 316
-#define CSRETCC_TOK 317
-#define FASTCC_TOK 318
-#define COLDCC_TOK 319
-#define X86_STDCALLCC_TOK 320
-#define X86_FASTCALLCC_TOK 321
-#define DATALAYOUT 322
-#define RET 323
-#define BR 324
-#define SWITCH 325
-#define INVOKE 326
-#define UNWIND 327
-#define UNREACHABLE 328
-#define ADD 329
-#define SUB 330
-#define MUL 331
-#define UDIV 332
-#define SDIV 333
-#define FDIV 334
-#define UREM 335
-#define SREM 336
-#define FREM 337
-#define AND 338
-#define OR 339
-#define XOR 340
-#define ICMP 341
-#define FCMP 342
-#define EQ 343
-#define NE 344
-#define SLT 345
-#define SGT 346
-#define SLE 347
-#define SGE 348
-#define ULT 349
-#define UGT 350
-#define ULE 351
-#define UGE 352
-#define OEQ 353
-#define ONE 354
-#define OLT 355
-#define OGT 356
-#define OLE 357
-#define OGE 358
-#define ORD 359
-#define UNO 360
-#define UEQ 361
-#define UNE 362
-#define MALLOC 363
-#define ALLOCA 364
-#define FREE 365
-#define LOAD 366
-#define STORE 367
-#define GETELEMENTPTR 368
-#define TRUNC 369
-#define ZEXT 370
-#define SEXT 371
-#define FPTRUNC 372
-#define FPEXT 373
-#define BITCAST 374
-#define UITOFP 375
-#define SITOFP 376
-#define FPTOUI 377
-#define FPTOSI 378
-#define INTTOPTR 379
-#define PTRTOINT 380
-#define PHI_TOK 381
-#define SELECT 382
-#define SHL 383
-#define LSHR 384
-#define ASHR 385
-#define VAARG 386
-#define EXTRACTELEMENT 387
-#define INSERTELEMENT 388
-#define SHUFFLEVECTOR 389
-#define NORETURN 390
+#define INTTYPE 265
+#define FLOAT 266
+#define DOUBLE 267
+#define LABEL 268
+#define TYPE 269
+#define VAR_ID 270
+#define LABELSTR 271
+#define STRINGCONSTANT 272
+#define IMPLEMENTATION 273
+#define ZEROINITIALIZER 274
+#define TRUETOK 275
+#define FALSETOK 276
+#define BEGINTOK 277
+#define ENDTOK 278
+#define DECLARE 279
+#define DEFINE 280
+#define GLOBAL 281
+#define CONSTANT 282
+#define SECTION 283
+#define VOLATILE 284
+#define TO 285
+#define DOTDOTDOT 286
+#define NULL_TOK 287
+#define UNDEF 288
+#define INTERNAL 289
+#define LINKONCE 290
+#define WEAK 291
+#define APPENDING 292
+#define DLLIMPORT 293
+#define DLLEXPORT 294
+#define EXTERN_WEAK 295
+#define OPAQUE 296
+#define NOT 297
+#define EXTERNAL 298
+#define TARGET 299
+#define TRIPLE 300
+#define ENDIAN 301
+#define POINTERSIZE 302
+#define LITTLE 303
+#define BIG 304
+#define ALIGN 305
+#define DEPLIBS 306
+#define CALL 307
+#define TAIL 308
+#define ASM_TOK 309
+#define MODULE 310
+#define SIDEEFFECT 311
+#define CC_TOK 312
+#define CCC_TOK 313
+#define CSRETCC_TOK 314
+#define FASTCC_TOK 315
+#define COLDCC_TOK 316
+#define X86_STDCALLCC_TOK 317
+#define X86_FASTCALLCC_TOK 318
+#define DATALAYOUT 319
+#define RET 320
+#define BR 321
+#define SWITCH 322
+#define INVOKE 323
+#define UNWIND 324
+#define UNREACHABLE 325
+#define ADD 326
+#define SUB 327
+#define MUL 328
+#define UDIV 329
+#define SDIV 330
+#define FDIV 331
+#define UREM 332
+#define SREM 333
+#define FREM 334
+#define AND 335
+#define OR 336
+#define XOR 337
+#define ICMP 338
+#define FCMP 339
+#define EQ 340
+#define NE 341
+#define SLT 342
+#define SGT 343
+#define SLE 344
+#define SGE 345
+#define ULT 346
+#define UGT 347
+#define ULE 348
+#define UGE 349
+#define OEQ 350
+#define ONE 351
+#define OLT 352
+#define OGT 353
+#define OLE 354
+#define OGE 355
+#define ORD 356
+#define UNO 357
+#define UEQ 358
+#define UNE 359
+#define MALLOC 360
+#define ALLOCA 361
+#define FREE 362
+#define LOAD 363
+#define STORE 364
+#define GETELEMENTPTR 365
+#define TRUNC 366
+#define ZEXT 367
+#define SEXT 368
+#define FPTRUNC 369
+#define FPEXT 370
+#define BITCAST 371
+#define UITOFP 372
+#define SITOFP 373
+#define FPTOUI 374
+#define FPTOSI 375
+#define INTTOPTR 376
+#define PTRTOINT 377
+#define PHI_TOK 378
+#define SELECT 379
+#define SHL 380
+#define LSHR 381
+#define ASHR 382
+#define VAARG 383
+#define EXTRACTELEMENT 384
+#define INSERTELEMENT 385
+#define SHUFFLEVECTOR 386
+#define NORETURN 387
 
 
 
 
 /* Copy the first part of user declarations.  */
-#line 14 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 14 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
 
 #include "ParserInternals.h"
 #include "llvm/CallingConv.h"
@@ -1220,7 +1214,7 @@
 #endif
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 876 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 876 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
 typedef union YYSTYPE {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
@@ -1267,7 +1261,7 @@
   llvm::FCmpInst::Predicate         FPredicate;
 } YYSTYPE;
 /* Line 196 of yacc.c.  */
-#line 1271 "llvmAsmParser.tab.c"
+#line 1265 "llvmAsmParser.tab.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -1279,7 +1273,7 @@
 
 
 /* Line 219 of yacc.c.  */
-#line 1283 "llvmAsmParser.tab.c"
+#line 1277 "llvmAsmParser.tab.c"
 
 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
 # define YYSIZE_T __SIZE_TYPE__
@@ -1430,20 +1424,20 @@
 /* YYFINAL -- State number of the termination state. */
 #define YYFINAL  37
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1584
+#define YYLAST   1512
 
 /* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS  150
+#define YYNTOKENS  147
 /* YYNNTS -- Number of nonterminals. */
 #define YYNNTS  78
 /* YYNRULES -- Number of rules. */
-#define YYNRULES  291
+#define YYNRULES  285
 /* YYNRULES -- Number of states. */
-#define YYNSTATES  576
+#define YYNSTATES  567
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   390
+#define YYMAXUTOK   387
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -1455,15 +1449,15 @@
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     140,   141,   138,     2,   137,     2,     2,     2,     2,     2,
+     137,   138,   135,     2,   134,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     145,   136,   146,     2,     2,     2,     2,     2,     2,     2,
+     142,   133,   143,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   142,   139,   144,     2,     2,     2,     2,     2,   149,
+       2,   139,   136,   141,     2,     2,     2,     2,     2,   146,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     143,     2,     2,   147,     2,   148,     2,     2,     2,     2,
+     140,     2,     2,   144,     2,   145,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -1489,8 +1483,7 @@
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
      105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135
+     125,   126,   127,   128,   129,   130,   131,   132
 };
 
 #if YYDEBUG
@@ -1504,128 +1497,126 @@
       59,    61,    63,    65,    67,    69,    71,    73,    75,    77,
       79,    81,    83,    85,    87,    89,    91,    93,    95,    97,
       99,   101,   103,   105,   107,   109,   111,   113,   115,   117,
-     119,   121,   123,   125,   128,   129,   131,   133,   135,   137,
-     139,   141,   143,   145,   146,   148,   150,   151,   153,   155,
-     157,   159,   160,   162,   164,   166,   168,   170,   172,   175,
-     177,   179,   180,   183,   185,   187,   188,   191,   192,   195,
-     196,   200,   203,   204,   206,   207,   211,   213,   216,   218,
-     220,   222,   224,   226,   228,   230,   232,   234,   236,   239,
-     241,   244,   250,   256,   262,   268,   272,   275,   281,   286,
-     289,   291,   293,   295,   299,   301,   305,   307,   308,   310,
-     314,   319,   323,   327,   332,   337,   341,   348,   354,   357,
-     360,   363,   366,   369,   372,   375,   378,   381,   384,   391,
-     397,   406,   413,   420,   428,   436,   443,   450,   459,   468,
-     472,   474,   476,   478,   480,   481,   483,   486,   487,   491,
-     492,   496,   500,   502,   506,   510,   511,   517,   518,   525,
-     526,   533,   536,   540,   542,   544,   546,   550,   554,   558,
-     562,   566,   570,   572,   573,   575,   577,   579,   580,   586,
-     590,   592,   596,   598,   599,   609,   611,   613,   617,   619,
-     621,   624,   627,   628,   630,   632,   634,   636,   638,   640,
-     642,   644,   646,   650,   652,   658,   660,   662,   664,   666,
-     669,   672,   675,   679,   682,   683,   685,   688,   691,   695,
-     705,   715,   724,   739,   741,   743,   750,   756,   759,   766,
-     774,   778,   784,   785,   786,   790,   793,   795,   801,   807,
-     814,   821,   824,   829,   834,   841,   846,   851,   858,   865,
-     868,   877,   879,   881,   882,   886,   893,   897,   904,   907,
-     912,   919
+     119,   122,   123,   125,   127,   129,   131,   133,   135,   137,
+     139,   140,   142,   144,   145,   147,   149,   151,   153,   154,
+     156,   158,   160,   162,   164,   166,   169,   171,   173,   174,
+     177,   179,   181,   182,   185,   186,   189,   190,   194,   197,
+     198,   200,   201,   205,   207,   210,   212,   214,   216,   218,
+     220,   222,   224,   227,   229,   232,   238,   244,   250,   256,
+     260,   263,   269,   274,   277,   279,   281,   283,   287,   289,
+     293,   295,   296,   298,   302,   307,   311,   315,   320,   325,
+     329,   336,   342,   345,   348,   351,   354,   357,   360,   363,
+     366,   369,   372,   379,   385,   394,   401,   408,   416,   424,
+     431,   438,   447,   456,   460,   462,   464,   466,   468,   469,
+     471,   474,   475,   479,   480,   484,   488,   490,   494,   498,
+     499,   505,   506,   513,   514,   521,   524,   528,   530,   532,
+     534,   538,   542,   546,   550,   554,   558,   560,   561,   563,
+     565,   567,   568,   574,   578,   580,   584,   586,   587,   597,
+     599,   601,   605,   607,   609,   612,   615,   616,   618,   620,
+     622,   624,   626,   628,   630,   632,   634,   638,   640,   646,
+     648,   650,   652,   654,   657,   660,   663,   667,   670,   671,
+     673,   676,   679,   683,   693,   703,   712,   727,   729,   731,
+     738,   744,   747,   754,   762,   766,   772,   773,   774,   778,
+     781,   783,   789,   795,   802,   809,   812,   817,   822,   829,
+     834,   839,   846,   853,   856,   865,   867,   869,   870,   874,
+     881,   885,   892,   895,   900,   907
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
 static const short int yyrhs[] =
 {
-     187,     0,    -1,     5,    -1,     6,    -1,    74,    -1,    75,
-      -1,    76,    -1,    77,    -1,    78,    -1,    79,    -1,    80,
-      -1,    81,    -1,    82,    -1,    83,    -1,    84,    -1,    85,
-      -1,   114,    -1,   115,    -1,   116,    -1,   117,    -1,   118,
-      -1,   119,    -1,   120,    -1,   121,    -1,   122,    -1,   123,
-      -1,   124,    -1,   125,    -1,   128,    -1,   129,    -1,   130,
-      -1,    88,    -1,    89,    -1,    90,    -1,    91,    -1,    92,
-      -1,    93,    -1,    94,    -1,    95,    -1,    96,    -1,    97,
-      -1,    98,    -1,    99,    -1,   100,    -1,   101,    -1,   102,
-      -1,   103,    -1,   104,    -1,   105,    -1,   106,    -1,   107,
-      -1,    94,    -1,    95,    -1,    96,    -1,    97,    -1,    23,
-      -1,    24,    -1,    13,    -1,    12,    -1,    11,    -1,    10,
-      -1,    14,    -1,    15,    -1,   200,   136,    -1,    -1,    37,
-      -1,    39,    -1,    38,    -1,    40,    -1,    42,    -1,    41,
-      -1,    43,    -1,    46,    -1,    -1,    41,    -1,    43,    -1,
-      -1,    37,    -1,    38,    -1,    39,    -1,    42,    -1,    -1,
-      61,    -1,    62,    -1,    63,    -1,    64,    -1,    65,    -1,
-      66,    -1,    60,     4,    -1,   115,    -1,   116,    -1,    -1,
-     167,   166,    -1,   135,    -1,   166,    -1,    -1,   169,   168,
-      -1,    -1,    53,     4,    -1,    -1,   137,    53,     4,    -1,
-      31,    20,    -1,    -1,   172,    -1,    -1,   137,   175,   174,
-      -1,   172,    -1,    53,     4,    -1,     9,    -1,    10,    -1,
-      11,    -1,    12,    -1,    13,    -1,    14,    -1,    15,    -1,
-      16,    -1,    44,    -1,   176,    -1,   177,   138,    -1,   212,
-      -1,   139,     4,    -1,   177,   140,   181,   141,   169,    -1,
-       8,   140,   181,   141,   169,    -1,   142,     4,   143,   177,
-     144,    -1,   145,     4,   143,   177,   146,    -1,   147,   182,
-     148,    -1,   147,   148,    -1,   145,   147,   182,   148,   146,
-      -1,   145,   147,   148,   146,    -1,   177,   167,    -1,   177,
-      -1,     8,    -1,   178,    -1,   180,   137,   178,    -1,   180,
-      -1,   180,   137,    34,    -1,    34,    -1,    -1,   177,    -1,
-     182,   137,   177,    -1,   177,   142,   185,   144,    -1,   177,
-     142,   144,    -1,   177,   149,    20,    -1,   177,   145,   185,
-     146,    -1,   177,   147,   185,   148,    -1,   177,   147,   148,
-      -1,   177,   145,   147,   185,   148,   146,    -1,   177,   145,
-     147,   148,   146,    -1,   177,    35,    -1,   177,    36,    -1,
-     177,   212,    -1,   177,   184,    -1,   177,    22,    -1,   158,
-       3,    -1,   158,     4,    -1,     9,    23,    -1,     9,    24,
-      -1,   159,     7,    -1,   154,   140,   183,    33,   177,   141,
-      -1,   113,   140,   183,   223,   141,    -1,   127,   140,   183,
-     137,   183,   137,   183,   141,    -1,   152,   140,   183,   137,
-     183,   141,    -1,   153,   140,   183,   137,   183,   141,    -1,
-      86,   156,   140,   183,   137,   183,   141,    -1,    87,   157,
-     140,   183,   137,   183,   141,    -1,   155,   140,   183,   137,
-     183,   141,    -1,   132,   140,   183,   137,   183,   141,    -1,
-     133,   140,   183,   137,   183,   137,   183,   141,    -1,   134,
-     140,   183,   137,   183,   137,   183,   141,    -1,   185,   137,
-     183,    -1,   183,    -1,    29,    -1,    30,    -1,   188,    -1,
-      -1,   189,    -1,   188,   189,    -1,    -1,    28,   190,   208,
-      -1,    -1,    27,   191,   209,    -1,    58,    57,   195,    -1,
-      21,    -1,   160,    17,   177,    -1,   160,    17,     8,    -1,
-      -1,   160,   186,   183,   192,   174,    -1,    -1,   160,   161,
-     186,   183,   193,   174,    -1,    -1,   160,   162,   186,   177,
-     194,   174,    -1,    47,   197,    -1,    54,   136,   198,    -1,
-      20,    -1,    52,    -1,    51,    -1,    49,   136,   196,    -1,
-      50,   136,     4,    -1,    48,   136,    20,    -1,    67,   136,
-      20,    -1,   142,   199,   144,    -1,   199,   137,    20,    -1,
-      20,    -1,    -1,    18,    -1,    20,    -1,   200,    -1,    -1,
-     202,   137,   177,   167,   201,    -1,   177,   167,   201,    -1,
-     202,    -1,   202,   137,    34,    -1,    34,    -1,    -1,   165,
-     179,   200,   140,   203,   141,   169,   173,   170,    -1,    25,
-      -1,   147,    -1,   164,   204,   205,    -1,    26,    -1,   148,
-      -1,   215,   207,    -1,   163,   204,    -1,    -1,    59,    -1,
-       3,    -1,     4,    -1,     7,    -1,    23,    -1,    24,    -1,
-      35,    -1,    36,    -1,    22,    -1,   145,   185,   146,    -1,
-     184,    -1,    57,   210,    20,   137,    20,    -1,   151,    -1,
-     200,    -1,   212,    -1,   211,    -1,   177,   213,    -1,   215,
-     216,    -1,   206,   216,    -1,   217,   160,   218,    -1,   217,
-     220,    -1,    -1,    19,    -1,    68,   214,    -1,    68,     8,
-      -1,    69,    16,   213,    -1,    69,     9,   213,   137,    16,
-     213,   137,    16,   213,    -1,    70,   158,   213,   137,    16,
-     213,   142,   219,   144,    -1,    70,   158,   213,   137,    16,
-     213,   142,   144,    -1,    71,   165,   179,   213,   140,   222,
-     141,   169,    33,    16,   213,    72,    16,   213,    -1,    72,
-      -1,    73,    -1,   219,   158,   211,   137,    16,   213,    -1,
-     158,   211,   137,    16,   213,    -1,   160,   225,    -1,   177,
-     142,   213,   137,   213,   144,    -1,   221,   137,   142,   213,
-     137,   213,   144,    -1,   177,   213,   167,    -1,   222,   137,
-     177,   213,   167,    -1,    -1,    -1,   223,   137,   214,    -1,
-      56,    55,    -1,    55,    -1,   152,   177,   213,   137,   213,
-      -1,   153,   177,   213,   137,   213,    -1,    86,   156,   177,
-     213,   137,   213,    -1,    87,   157,   177,   213,   137,   213,
-      -1,    45,   214,    -1,   155,   214,   137,   214,    -1,   154,
-     214,    33,   177,    -1,   127,   214,   137,   214,   137,   214,
-      -1,   131,   214,   137,   177,    -1,   132,   214,   137,   214,
-      -1,   133,   214,   137,   214,   137,   214,    -1,   134,   214,
-     137,   214,   137,   214,    -1,   126,   221,    -1,   224,   165,
-     179,   213,   140,   222,   141,   169,    -1,   227,    -1,    32,
-      -1,    -1,   108,   177,   171,    -1,   108,   177,   137,    12,
-     213,   171,    -1,   109,   177,   171,    -1,   109,   177,   137,
-      12,   213,   171,    -1,   110,   214,    -1,   226,   111,   177,
-     213,    -1,   226,   112,   214,   137,   177,   213,    -1,   113,
-     177,   213,   223,    -1
+     184,     0,    -1,     5,    -1,     6,    -1,    71,    -1,    72,
+      -1,    73,    -1,    74,    -1,    75,    -1,    76,    -1,    77,
+      -1,    78,    -1,    79,    -1,    80,    -1,    81,    -1,    82,
+      -1,   111,    -1,   112,    -1,   113,    -1,   114,    -1,   115,
+      -1,   116,    -1,   117,    -1,   118,    -1,   119,    -1,   120,
+      -1,   121,    -1,   122,    -1,   125,    -1,   126,    -1,   127,
+      -1,    85,    -1,    86,    -1,    87,    -1,    88,    -1,    89,
+      -1,    90,    -1,    91,    -1,    92,    -1,    93,    -1,    94,
+      -1,    95,    -1,    96,    -1,    97,    -1,    98,    -1,    99,
+      -1,   100,    -1,   101,    -1,   102,    -1,   103,    -1,   104,
+      -1,    91,    -1,    92,    -1,    93,    -1,    94,    -1,    20,
+      -1,    21,    -1,    10,    -1,    11,    -1,    12,    -1,   197,
+     133,    -1,    -1,    34,    -1,    36,    -1,    35,    -1,    37,
+      -1,    39,    -1,    38,    -1,    40,    -1,    43,    -1,    -1,
+      38,    -1,    40,    -1,    -1,    34,    -1,    35,    -1,    36,
+      -1,    39,    -1,    -1,    58,    -1,    59,    -1,    60,    -1,
+      61,    -1,    62,    -1,    63,    -1,    57,     4,    -1,   112,
+      -1,   113,    -1,    -1,   164,   163,    -1,   132,    -1,   163,
+      -1,    -1,   166,   165,    -1,    -1,    50,     4,    -1,    -1,
+     134,    50,     4,    -1,    28,    17,    -1,    -1,   169,    -1,
+      -1,   134,   172,   171,    -1,   169,    -1,    50,     4,    -1,
+       9,    -1,    10,    -1,    11,    -1,    12,    -1,    13,    -1,
+      41,    -1,   173,    -1,   174,   135,    -1,   209,    -1,   136,
+       4,    -1,   174,   137,   178,   138,   166,    -1,     8,   137,
+     178,   138,   166,    -1,   139,     4,   140,   174,   141,    -1,
+     142,     4,   140,   174,   143,    -1,   144,   179,   145,    -1,
+     144,   145,    -1,   142,   144,   179,   145,   143,    -1,   142,
+     144,   145,   143,    -1,   174,   164,    -1,   174,    -1,     8,
+      -1,   175,    -1,   177,   134,   175,    -1,   177,    -1,   177,
+     134,    31,    -1,    31,    -1,    -1,   174,    -1,   179,   134,
+     174,    -1,   174,   139,   182,   141,    -1,   174,   139,   141,
+      -1,   174,   146,    17,    -1,   174,   142,   182,   143,    -1,
+     174,   144,   182,   145,    -1,   174,   144,   145,    -1,   174,
+     142,   144,   182,   145,   143,    -1,   174,   142,   144,   145,
+     143,    -1,   174,    32,    -1,   174,    33,    -1,   174,   209,
+      -1,   174,   181,    -1,   174,    19,    -1,   155,     3,    -1,
+     155,     4,    -1,     9,    20,    -1,     9,    21,    -1,   156,
+       7,    -1,   151,   137,   180,    30,   174,   138,    -1,   110,
+     137,   180,   220,   138,    -1,   124,   137,   180,   134,   180,
+     134,   180,   138,    -1,   149,   137,   180,   134,   180,   138,
+      -1,   150,   137,   180,   134,   180,   138,    -1,    83,   153,
+     137,   180,   134,   180,   138,    -1,    84,   154,   137,   180,
+     134,   180,   138,    -1,   152,   137,   180,   134,   180,   138,
+      -1,   129,   137,   180,   134,   180,   138,    -1,   130,   137,
+     180,   134,   180,   134,   180,   138,    -1,   131,   137,   180,
+     134,   180,   134,   180,   138,    -1,   182,   134,   180,    -1,
+     180,    -1,    26,    -1,    27,    -1,   185,    -1,    -1,   186,
+      -1,   185,   186,    -1,    -1,    25,   187,   205,    -1,    -1,
+      24,   188,   206,    -1,    55,    54,   192,    -1,    18,    -1,
+     157,    14,   174,    -1,   157,    14,     8,    -1,    -1,   157,
+     183,   180,   189,   171,    -1,    -1,   157,   158,   183,   180,
+     190,   171,    -1,    -1,   157,   159,   183,   174,   191,   171,
+      -1,    44,   194,    -1,    51,   133,   195,    -1,    17,    -1,
+      49,    -1,    48,    -1,    46,   133,   193,    -1,    47,   133,
+       4,    -1,    45,   133,    17,    -1,    64,   133,    17,    -1,
+     139,   196,   141,    -1,   196,   134,    17,    -1,    17,    -1,
+      -1,    15,    -1,    17,    -1,   197,    -1,    -1,   199,   134,
+     174,   164,   198,    -1,   174,   164,   198,    -1,   199,    -1,
+     199,   134,    31,    -1,    31,    -1,    -1,   162,   176,   197,
+     137,   200,   138,   166,   170,   167,    -1,    22,    -1,   144,
+      -1,   161,   201,   202,    -1,    23,    -1,   145,    -1,   212,
+     204,    -1,   160,   201,    -1,    -1,    56,    -1,     3,    -1,
+       4,    -1,     7,    -1,    20,    -1,    21,    -1,    32,    -1,
+      33,    -1,    19,    -1,   142,   182,   143,    -1,   181,    -1,
+      54,   207,    17,   134,    17,    -1,   148,    -1,   197,    -1,
+     209,    -1,   208,    -1,   174,   210,    -1,   212,   213,    -1,
+     203,   213,    -1,   214,   157,   215,    -1,   214,   217,    -1,
+      -1,    16,    -1,    65,   211,    -1,    65,     8,    -1,    66,
+      13,   210,    -1,    66,     9,   210,   134,    13,   210,   134,
+      13,   210,    -1,    67,   155,   210,   134,    13,   210,   139,
+     216,   141,    -1,    67,   155,   210,   134,    13,   210,   139,
+     141,    -1,    68,   162,   176,   210,   137,   219,   138,   166,
+      30,    13,   210,    69,    13,   210,    -1,    69,    -1,    70,
+      -1,   216,   155,   208,   134,    13,   210,    -1,   155,   208,
+     134,    13,   210,    -1,   157,   222,    -1,   174,   139,   210,
+     134,   210,   141,    -1,   218,   134,   139,   210,   134,   210,
+     141,    -1,   174,   210,   164,    -1,   219,   134,   174,   210,
+     164,    -1,    -1,    -1,   220,   134,   211,    -1,    53,    52,
+      -1,    52,    -1,   149,   174,   210,   134,   210,    -1,   150,
+     174,   210,   134,   210,    -1,    83,   153,   174,   210,   134,
+     210,    -1,    84,   154,   174,   210,   134,   210,    -1,    42,
+     211,    -1,   152,   211,   134,   211,    -1,   151,   211,    30,
+     174,    -1,   124,   211,   134,   211,   134,   211,    -1,   128,
+     211,   134,   174,    -1,   129,   211,   134,   211,    -1,   130,
+     211,   134,   211,   134,   211,    -1,   131,   211,   134,   211,
+     134,   211,    -1,   123,   218,    -1,   221,   162,   176,   210,
+     137,   219,   138,   166,    -1,   224,    -1,    29,    -1,    -1,
+     105,   174,   168,    -1,   105,   174,   134,    10,   210,   168,
+      -1,   106,   174,   168,    -1,   106,   174,   134,    10,   210,
+     168,    -1,   107,   211,    -1,   223,   108,   174,   210,    -1,
+     223,   109,   211,   134,   174,   210,    -1,   110,   174,   210,
+     220,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -1636,31 +1627,30 @@
     1032,  1032,  1033,  1033,  1033,  1033,  1033,  1033,  1034,  1034,
     1034,  1036,  1036,  1037,  1037,  1038,  1038,  1039,  1039,  1040,
     1040,  1044,  1044,  1045,  1045,  1046,  1046,  1047,  1047,  1048,
-    1048,  1049,  1049,  1050,  1050,  1051,  1052,  1057,  1057,  1057,
-    1057,  1058,  1058,  1061,  1065,  1071,  1072,  1073,  1074,  1075,
-    1079,  1080,  1081,  1085,  1086,  1087,  1091,  1092,  1093,  1094,
-    1095,  1098,  1099,  1100,  1101,  1102,  1103,  1104,  1105,  1112,
-    1113,  1116,  1117,  1122,  1123,  1126,  1127,  1134,  1135,  1141,
-    1142,  1150,  1158,  1159,  1164,  1165,  1166,  1171,  1184,  1184,
-    1184,  1184,  1184,  1184,  1184,  1184,  1187,  1191,  1195,  1202,
-    1207,  1215,  1233,  1251,  1256,  1268,  1278,  1282,  1292,  1299,
-    1306,  1313,  1318,  1323,  1330,  1331,  1338,  1345,  1353,  1358,
-    1369,  1397,  1413,  1442,  1470,  1495,  1514,  1539,  1558,  1570,
-    1577,  1640,  1650,  1660,  1666,  1672,  1676,  1680,  1688,  1702,
-    1723,  1731,  1737,  1748,  1753,  1758,  1767,  1773,  1779,  1788,
-    1792,  1800,  1800,  1811,  1816,  1824,  1825,  1829,  1829,  1833,
-    1833,  1836,  1839,  1851,  1875,  1886,  1886,  1895,  1895,  1903,
-    1903,  1913,  1916,  1922,  1935,  1936,  1938,  1942,  1951,  1955,
-    1960,  1962,  1967,  1972,  1981,  1981,  1982,  1982,  1984,  1994,
-    2005,  2009,  2018,  2027,  2032,  2137,  2137,  2139,  2147,  2147,
-    2149,  2154,  2165,  2169,  2174,  2178,  2182,  2186,  2190,  2194,
-    2198,  2202,  2206,  2231,  2235,  2249,  2253,  2259,  2259,  2265,
-    2274,  2278,  2287,  2298,  2307,  2319,  2332,  2336,  2340,  2345,
-    2354,  2373,  2382,  2449,  2453,  2460,  2471,  2484,  2493,  2504,
-    2514,  2522,  2530,  2533,  2534,  2541,  2545,  2550,  2571,  2588,
-    2601,  2614,  2627,  2636,  2649,  2657,  2664,  2670,  2676,  2682,
-    2697,  2760,  2765,  2769,  2776,  2783,  2791,  2798,  2806,  2814,
-    2828,  2845
+    1048,  1049,  1049,  1050,  1050,  1051,  1052,  1057,  1058,  1058,
+    1061,  1065,  1071,  1072,  1073,  1074,  1075,  1079,  1080,  1081,
+    1085,  1086,  1087,  1091,  1092,  1093,  1094,  1095,  1098,  1099,
+    1100,  1101,  1102,  1103,  1104,  1105,  1112,  1113,  1116,  1117,
+    1122,  1123,  1126,  1127,  1134,  1135,  1141,  1142,  1150,  1158,
+    1159,  1164,  1165,  1166,  1171,  1184,  1184,  1184,  1184,  1184,
+    1187,  1191,  1195,  1202,  1207,  1215,  1233,  1251,  1256,  1268,
+    1278,  1282,  1292,  1299,  1306,  1313,  1318,  1323,  1330,  1331,
+    1338,  1345,  1353,  1358,  1369,  1397,  1413,  1442,  1470,  1495,
+    1514,  1539,  1558,  1570,  1577,  1640,  1650,  1660,  1666,  1672,
+    1676,  1680,  1688,  1702,  1723,  1731,  1737,  1748,  1753,  1758,
+    1767,  1773,  1779,  1788,  1792,  1800,  1800,  1811,  1816,  1824,
+    1825,  1829,  1829,  1833,  1833,  1836,  1839,  1851,  1875,  1886,
+    1886,  1895,  1895,  1903,  1903,  1913,  1916,  1922,  1935,  1936,
+    1938,  1942,  1951,  1955,  1960,  1962,  1967,  1972,  1981,  1981,
+    1982,  1982,  1984,  1994,  2005,  2009,  2018,  2027,  2032,  2137,
+    2137,  2139,  2147,  2147,  2149,  2154,  2165,  2169,  2174,  2178,
+    2182,  2186,  2190,  2194,  2198,  2202,  2206,  2231,  2235,  2249,
+    2253,  2259,  2259,  2265,  2274,  2278,  2287,  2298,  2307,  2319,
+    2332,  2336,  2340,  2345,  2354,  2373,  2382,  2449,  2453,  2460,
+    2471,  2484,  2493,  2504,  2514,  2522,  2530,  2533,  2534,  2541,
+    2545,  2550,  2571,  2588,  2601,  2614,  2627,  2636,  2649,  2657,
+    2664,  2670,  2676,  2682,  2697,  2760,  2765,  2769,  2776,  2783,
+    2791,  2798,  2806,  2814,  2828,  2845
 };
 #endif
 
@@ -1670,43 +1660,43 @@
 static const char *const yytname[] =
 {
   "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "SINTVAL",
-  "UINTVAL", "FPVAL", "VOID", "BOOL", "INT8", "INT16", "INT32", "INT64",
-  "FLOAT", "DOUBLE", "LABEL", "TYPE", "VAR_ID", "LABELSTR",
-  "STRINGCONSTANT", "IMPLEMENTATION", "ZEROINITIALIZER", "TRUETOK",
-  "FALSETOK", "BEGINTOK", "ENDTOK", "DECLARE", "DEFINE", "GLOBAL",
-  "CONSTANT", "SECTION", "VOLATILE", "TO", "DOTDOTDOT", "NULL_TOK",
-  "UNDEF", "INTERNAL", "LINKONCE", "WEAK", "APPENDING", "DLLIMPORT",
-  "DLLEXPORT", "EXTERN_WEAK", "OPAQUE", "NOT", "EXTERNAL", "TARGET",
-  "TRIPLE", "ENDIAN", "POINTERSIZE", "LITTLE", "BIG", "ALIGN", "DEPLIBS",
-  "CALL", "TAIL", "ASM_TOK", "MODULE", "SIDEEFFECT", "CC_TOK", "CCC_TOK",
-  "CSRETCC_TOK", "FASTCC_TOK", "COLDCC_TOK", "X86_STDCALLCC_TOK",
-  "X86_FASTCALLCC_TOK", "DATALAYOUT", "RET", "BR", "SWITCH", "INVOKE",
-  "UNWIND", "UNREACHABLE", "ADD", "SUB", "MUL", "UDIV", "SDIV", "FDIV",
-  "UREM", "SREM", "FREM", "AND", "OR", "XOR", "ICMP", "FCMP", "EQ", "NE",
-  "SLT", "SGT", "SLE", "SGE", "ULT", "UGT", "ULE", "UGE", "OEQ", "ONE",
-  "OLT", "OGT", "OLE", "OGE", "ORD", "UNO", "UEQ", "UNE", "MALLOC",
-  "ALLOCA", "FREE", "LOAD", "STORE", "GETELEMENTPTR", "TRUNC", "ZEXT",
-  "SEXT", "FPTRUNC", "FPEXT", "BITCAST", "UITOFP", "SITOFP", "FPTOUI",
-  "FPTOSI", "INTTOPTR", "PTRTOINT", "PHI_TOK", "SELECT", "SHL", "LSHR",
-  "ASHR", "VAARG", "EXTRACTELEMENT", "INSERTELEMENT", "SHUFFLEVECTOR",
-  "NORETURN", "'='", "','", "'*'", "'\\\\'", "'('", "')'", "'['", "'x'",
-  "']'", "'<'", "'>'", "'{'", "'}'", "'c'", "$accept", "INTVAL",
-  "ArithmeticOps", "LogicalOps", "CastOps", "ShiftOps", "IPredicates",
-  "FPredicates", "IntType", "FPType", "OptAssign", "GVInternalLinkage",
-  "GVExternalLinkage", "FunctionDeclareLinkage", "FunctionDefineLinkage",
-  "OptCallingConv", "ParamAttr", "OptParamAttrs", "FuncAttr",
-  "OptFuncAttrs", "OptAlign", "OptCAlign", "SectionString", "OptSection",
-  "GlobalVarAttributes", "GlobalVarAttribute", "PrimType", "Types",
-  "ArgType", "ResultTypes", "ArgTypeList", "ArgTypeListI", "TypeListI",
-  "ConstVal", "ConstExpr", "ConstVector", "GlobalType", "Module",
-  "DefinitionList", "Definition", "@1", "@2", "@3", "@4", "@5", "AsmBlock",
-  "BigOrLittle", "TargetDefinition", "LibrariesDefinition", "LibList",
-  "Name", "OptName", "ArgListH", "ArgList", "FunctionHeaderH", "BEGIN",
-  "FunctionHeader", "END", "Function", "FunctionProto", "OptSideEffect",
-  "ConstValueRef", "SymbolicValueRef", "ValueRef", "ResolvedVal",
-  "BasicBlockList", "BasicBlock", "InstructionList", "BBTerminatorInst",
-  "JumpTable", "Inst", "PHIList", "ValueRefList", "IndexList",
-  "OptTailCall", "InstVal", "OptVolatile", "MemoryInst", 0
+  "UINTVAL", "FPVAL", "VOID", "BOOL", "INTTYPE", "FLOAT", "DOUBLE",
+  "LABEL", "TYPE", "VAR_ID", "LABELSTR", "STRINGCONSTANT",
+  "IMPLEMENTATION", "ZEROINITIALIZER", "TRUETOK", "FALSETOK", "BEGINTOK",
+  "ENDTOK", "DECLARE", "DEFINE", "GLOBAL", "CONSTANT", "SECTION",
+  "VOLATILE", "TO", "DOTDOTDOT", "NULL_TOK", "UNDEF", "INTERNAL",
+  "LINKONCE", "WEAK", "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK",
+  "OPAQUE", "NOT", "EXTERNAL", "TARGET", "TRIPLE", "ENDIAN", "POINTERSIZE",
+  "LITTLE", "BIG", "ALIGN", "DEPLIBS", "CALL", "TAIL", "ASM_TOK", "MODULE",
+  "SIDEEFFECT", "CC_TOK", "CCC_TOK", "CSRETCC_TOK", "FASTCC_TOK",
+  "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT",
+  "RET", "BR", "SWITCH", "INVOKE", "UNWIND", "UNREACHABLE", "ADD", "SUB",
+  "MUL", "UDIV", "SDIV", "FDIV", "UREM", "SREM", "FREM", "AND", "OR",
+  "XOR", "ICMP", "FCMP", "EQ", "NE", "SLT", "SGT", "SLE", "SGE", "ULT",
+  "UGT", "ULE", "UGE", "OEQ", "ONE", "OLT", "OGT", "OLE", "OGE", "ORD",
+  "UNO", "UEQ", "UNE", "MALLOC", "ALLOCA", "FREE", "LOAD", "STORE",
+  "GETELEMENTPTR", "TRUNC", "ZEXT", "SEXT", "FPTRUNC", "FPEXT", "BITCAST",
+  "UITOFP", "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR", "PTRTOINT",
+  "PHI_TOK", "SELECT", "SHL", "LSHR", "ASHR", "VAARG", "EXTRACTELEMENT",
+  "INSERTELEMENT", "SHUFFLEVECTOR", "NORETURN", "'='", "','", "'*'",
+  "'\\\\'", "'('", "')'", "'['", "'x'", "']'", "'<'", "'>'", "'{'", "'}'",
+  "'c'", "$accept", "INTVAL", "ArithmeticOps", "LogicalOps", "CastOps",
+  "ShiftOps", "IPredicates", "FPredicates", "IntType", "FPType",
+  "OptAssign", "GVInternalLinkage", "GVExternalLinkage",
+  "FunctionDeclareLinkage", "FunctionDefineLinkage", "OptCallingConv",
+  "ParamAttr", "OptParamAttrs", "FuncAttr", "OptFuncAttrs", "OptAlign",
+  "OptCAlign", "SectionString", "OptSection", "GlobalVarAttributes",
+  "GlobalVarAttribute", "PrimType", "Types", "ArgType", "ResultTypes",
+  "ArgTypeList", "ArgTypeListI", "TypeListI", "ConstVal", "ConstExpr",
+  "ConstVector", "GlobalType", "Module", "DefinitionList", "Definition",
+  "@1", "@2", "@3", "@4", "@5", "AsmBlock", "BigOrLittle",
+  "TargetDefinition", "LibrariesDefinition", "LibList", "Name", "OptName",
+  "ArgListH", "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader",
+  "END", "Function", "FunctionProto", "OptSideEffect", "ConstValueRef",
+  "SymbolicValueRef", "ValueRef", "ResolvedVal", "BasicBlockList",
+  "BasicBlock", "InstructionList", "BBTerminatorInst", "JumpTable", "Inst",
+  "PHIList", "ValueRefList", "IndexList", "OptTailCall", "InstVal",
+  "OptVolatile", "MemoryInst", 0
 };
 #endif
 
@@ -1728,44 +1718,43 @@
      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
      365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-     385,   386,   387,   388,   389,   390,    61,    44,    42,    92,
-      40,    41,    91,   120,    93,    60,    62,   123,   125,    99
+     385,   386,   387,    61,    44,    42,    92,    40,    41,    91,
+     120,    93,    60,    62,   123,   125,    99
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const unsigned char yyr1[] =
 {
-       0,   150,   151,   151,   152,   152,   152,   152,   152,   152,
-     152,   152,   152,   153,   153,   153,   154,   154,   154,   154,
-     154,   154,   154,   154,   154,   154,   154,   154,   155,   155,
-     155,   156,   156,   156,   156,   156,   156,   156,   156,   156,
-     156,   157,   157,   157,   157,   157,   157,   157,   157,   157,
-     157,   157,   157,   157,   157,   157,   157,   158,   158,   158,
-     158,   159,   159,   160,   160,   161,   161,   161,   161,   161,
-     162,   162,   162,   163,   163,   163,   164,   164,   164,   164,
-     164,   165,   165,   165,   165,   165,   165,   165,   165,   166,
-     166,   167,   167,   168,   168,   169,   169,   170,   170,   171,
-     171,   172,   173,   173,   174,   174,   175,   175,   176,   176,
-     176,   176,   176,   176,   176,   176,   177,   177,   177,   177,
-     177,   177,   177,   177,   177,   177,   177,   177,   177,   178,
-     179,   179,   180,   180,   181,   181,   181,   181,   182,   182,
-     183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
-     183,   183,   183,   183,   183,   183,   183,   183,   184,   184,
-     184,   184,   184,   184,   184,   184,   184,   184,   184,   185,
-     185,   186,   186,   187,   187,   188,   188,   190,   189,   191,
-     189,   189,   189,   189,   189,   192,   189,   193,   189,   194,
-     189,   189,   189,   195,   196,   196,   197,   197,   197,   197,
-     198,   199,   199,   199,   200,   200,   201,   201,   202,   202,
-     203,   203,   203,   203,   204,   205,   205,   206,   207,   207,
-     208,   209,   210,   210,   211,   211,   211,   211,   211,   211,
-     211,   211,   211,   211,   211,   212,   212,   213,   213,   214,
-     215,   215,   216,   217,   217,   217,   218,   218,   218,   218,
-     218,   218,   218,   218,   218,   219,   219,   220,   221,   221,
-     222,   222,   222,   223,   223,   224,   224,   225,   225,   225,
-     225,   225,   225,   225,   225,   225,   225,   225,   225,   225,
-     225,   225,   226,   226,   227,   227,   227,   227,   227,   227,
-     227,   227
+       0,   147,   148,   148,   149,   149,   149,   149,   149,   149,
+     149,   149,   149,   150,   150,   150,   151,   151,   151,   151,
+     151,   151,   151,   151,   151,   151,   151,   151,   152,   152,
+     152,   153,   153,   153,   153,   153,   153,   153,   153,   153,
+     153,   154,   154,   154,   154,   154,   154,   154,   154,   154,
+     154,   154,   154,   154,   154,   154,   154,   155,   156,   156,
+     157,   157,   158,   158,   158,   158,   158,   159,   159,   159,
+     160,   160,   160,   161,   161,   161,   161,   161,   162,   162,
+     162,   162,   162,   162,   162,   162,   163,   163,   164,   164,
+     165,   165,   166,   166,   167,   167,   168,   168,   169,   170,
+     170,   171,   171,   172,   172,   173,   173,   173,   173,   173,
+     174,   174,   174,   174,   174,   174,   174,   174,   174,   174,
+     174,   174,   174,   175,   176,   176,   177,   177,   178,   178,
+     178,   178,   179,   179,   180,   180,   180,   180,   180,   180,
+     180,   180,   180,   180,   180,   180,   180,   180,   180,   180,
+     180,   180,   181,   181,   181,   181,   181,   181,   181,   181,
+     181,   181,   181,   182,   182,   183,   183,   184,   184,   185,
+     185,   187,   186,   188,   186,   186,   186,   186,   186,   189,
+     186,   190,   186,   191,   186,   186,   186,   192,   193,   193,
+     194,   194,   194,   194,   195,   196,   196,   196,   197,   197,
+     198,   198,   199,   199,   200,   200,   200,   200,   201,   202,
+     202,   203,   204,   204,   205,   206,   207,   207,   208,   208,
+     208,   208,   208,   208,   208,   208,   208,   208,   208,   209,
+     209,   210,   210,   211,   212,   212,   213,   214,   214,   214,
+     215,   215,   215,   215,   215,   215,   215,   215,   215,   216,
+     216,   217,   218,   218,   219,   219,   219,   220,   220,   221,
+     221,   222,   222,   222,   222,   222,   222,   222,   222,   222,
+     222,   222,   222,   222,   222,   222,   223,   223,   224,   224,
+     224,   224,   224,   224,   224,   224
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1777,30 +1766,29 @@
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     2,     0,     1,     1,     1,     1,     1,
-       1,     1,     1,     0,     1,     1,     0,     1,     1,     1,
-       1,     0,     1,     1,     1,     1,     1,     1,     2,     1,
-       1,     0,     2,     1,     1,     0,     2,     0,     2,     0,
-       3,     2,     0,     1,     0,     3,     1,     2,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     2,     1,
-       2,     5,     5,     5,     5,     3,     2,     5,     4,     2,
-       1,     1,     1,     3,     1,     3,     1,     0,     1,     3,
-       4,     3,     3,     4,     4,     3,     6,     5,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     6,     5,
-       8,     6,     6,     7,     7,     6,     6,     8,     8,     3,
-       1,     1,     1,     1,     0,     1,     2,     0,     3,     0,
-       3,     3,     1,     3,     3,     0,     5,     0,     6,     0,
-       6,     2,     3,     1,     1,     1,     3,     3,     3,     3,
-       3,     3,     1,     0,     1,     1,     1,     0,     5,     3,
-       1,     3,     1,     0,     9,     1,     1,     3,     1,     1,
-       2,     2,     0,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     3,     1,     5,     1,     1,     1,     1,     2,
-       2,     2,     3,     2,     0,     1,     2,     2,     3,     9,
-       9,     8,    14,     1,     1,     6,     5,     2,     6,     7,
-       3,     5,     0,     0,     3,     2,     1,     5,     5,     6,
-       6,     2,     4,     4,     6,     4,     4,     6,     6,     2,
-       8,     1,     1,     0,     3,     6,     3,     6,     2,     4,
-       6,     4
+       2,     0,     1,     1,     1,     1,     1,     1,     1,     1,
+       0,     1,     1,     0,     1,     1,     1,     1,     0,     1,
+       1,     1,     1,     1,     1,     2,     1,     1,     0,     2,
+       1,     1,     0,     2,     0,     2,     0,     3,     2,     0,
+       1,     0,     3,     1,     2,     1,     1,     1,     1,     1,
+       1,     1,     2,     1,     2,     5,     5,     5,     5,     3,
+       2,     5,     4,     2,     1,     1,     1,     3,     1,     3,
+       1,     0,     1,     3,     4,     3,     3,     4,     4,     3,
+       6,     5,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     6,     5,     8,     6,     6,     7,     7,     6,
+       6,     8,     8,     3,     1,     1,     1,     1,     0,     1,
+       2,     0,     3,     0,     3,     3,     1,     3,     3,     0,
+       5,     0,     6,     0,     6,     2,     3,     1,     1,     1,
+       3,     3,     3,     3,     3,     3,     1,     0,     1,     1,
+       1,     0,     5,     3,     1,     3,     1,     0,     9,     1,
+       1,     3,     1,     1,     2,     2,     0,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     3,     1,     5,     1,
+       1,     1,     1,     2,     2,     2,     3,     2,     0,     1,
+       2,     2,     3,     9,     9,     8,    14,     1,     1,     6,
+       5,     2,     6,     7,     3,     5,     0,     0,     3,     2,
+       1,     5,     5,     6,     6,     2,     4,     4,     6,     4,
+       4,     6,     6,     2,     8,     1,     1,     0,     3,     6,
+       3,     6,     2,     4,     6,     4
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -1808,550 +1796,533 @@
    means the default is an error.  */
 static const unsigned short int yydefact[] =
 {
-      64,   204,   205,   182,   179,   177,     0,     0,     0,     0,
-       0,    64,   175,     0,    73,    76,     0,     0,     0,     0,
-     191,     0,     0,     0,   171,   172,    65,    67,    66,    68,
-      70,    69,    71,    72,     0,     0,     0,     1,   176,    63,
-      74,    75,    81,   180,    77,    78,    79,    80,    81,   244,
-     178,   244,     0,     0,     0,     0,   203,   192,   193,   181,
-       2,     3,   184,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,     0,     0,     0,     0,   235,   117,   183,   236,
-     119,     0,     0,     0,   108,   109,   110,   111,   112,   113,
-     114,     0,     0,     0,   185,     0,    82,    83,    84,    85,
-      86,    87,     0,   221,     0,   245,   241,    64,   218,   219,
-     220,   240,   198,   195,   194,   196,   197,   199,   202,     0,
-     137,   120,     0,     0,     0,   126,   138,     0,   118,   137,
-     187,   189,   155,   156,   153,   154,   157,   152,   148,   149,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,     0,     0,     0,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,     0,    28,    29,
-      30,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   151,   150,   104,    88,   131,   130,     0,   215,
-     216,   217,   283,   243,     0,   200,   136,    91,   132,   134,
-       0,     0,     0,     0,     0,     0,   125,     0,   104,   104,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-       0,    55,    56,    51,    52,    53,    54,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,     0,     0,     0,
-       0,     0,     0,   141,   170,     0,     0,     0,   145,     0,
-     142,     0,     0,     0,     0,     0,   186,     0,   282,     0,
-     266,     0,     0,     0,     0,    81,   253,   254,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   242,    81,   257,     0,   281,   201,
-     129,     0,    95,     0,     0,   128,     0,   139,    95,   188,
-     190,     0,     0,   263,     0,     0,     0,     0,     0,   140,
-     126,   138,     0,   143,   144,     0,     0,     0,     0,     0,
-       0,   106,   104,   213,     0,   271,   265,   247,   246,     0,
-       0,    60,    59,    58,    57,     0,     0,     0,     0,    99,
-      99,   288,     0,     0,   279,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    89,    90,    92,
-     135,   133,   122,   123,   124,   127,   121,     0,     0,     0,
-       0,     0,     0,     0,   169,   147,     0,     0,     0,     0,
-       0,   101,   107,   105,   212,    91,   210,     0,   224,   225,
-     226,   231,   227,   228,   229,   230,   222,     0,   233,   238,
-     237,   239,     0,   248,     0,     0,     0,     0,     0,   284,
-       0,   286,   263,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    93,    94,    96,
-       0,     0,     0,   159,     0,     0,     0,     0,   146,     0,
-       0,     0,     0,   207,     0,    95,   223,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   291,     0,     0,
-       0,   275,   276,     0,     0,     0,     0,   273,   272,     0,
-     289,     0,     0,     0,   264,     0,   166,     0,     0,   161,
-     162,   158,   165,   206,   209,   211,    91,   102,     0,   232,
-       0,     0,   262,     0,     0,    99,   100,    99,     0,     0,
-       0,     0,     0,   267,   268,   262,     0,   163,   164,     0,
-       0,     0,   207,   103,    97,     0,     0,     0,     0,     0,
-     269,   270,     0,   285,   287,     0,     0,   274,   277,   278,
-       0,   290,   160,   167,   168,   208,     0,   214,   234,     0,
-       0,    91,     0,    95,   258,     0,    95,    98,     0,   251,
-       0,     0,   260,     0,     0,   259,   280,   249,     0,   250,
-       0,    91,     0,     0,     0,   261,     0,     0,     0,     0,
-     256,     0,     0,   255,     0,   252
+      61,   198,   199,   176,   173,   171,     0,     0,     0,     0,
+       0,    61,   169,     0,    70,    73,     0,     0,     0,     0,
+     185,     0,     0,     0,   165,   166,    62,    64,    63,    65,
+      67,    66,    68,    69,     0,     0,     0,     1,   170,    60,
+      71,    72,    78,   174,    74,    75,    76,    77,    78,   238,
+     172,   238,     0,     0,     0,     0,   197,   186,   187,   175,
+       2,     3,   178,   105,   106,   107,   108,   109,   110,     0,
+       0,     0,     0,   229,   111,   177,   230,   113,     0,     0,
+       0,   105,   106,   107,   108,     0,     0,     0,   179,     0,
+      79,    80,    81,    82,    83,    84,     0,   215,     0,   239,
+     235,    61,   212,   213,   214,   234,   192,   189,   188,   190,
+     191,   193,   196,     0,   131,   114,     0,     0,     0,   120,
+     132,     0,   112,   131,   181,   183,   149,   150,   147,   148,
+     151,   146,   142,   143,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,     0,     0,     0,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,     0,    28,    29,    30,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   145,   144,   101,    85,
+     125,   124,     0,   209,   210,   211,   277,   237,     0,   194,
+     130,    88,   126,   128,     0,     0,     0,     0,     0,     0,
+     119,     0,   101,   101,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,     0,    55,    56,    51,    52,    53,
+      54,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,     0,     0,     0,     0,     0,     0,   135,   164,     0,
+       0,     0,   139,     0,   136,     0,     0,     0,     0,     0,
+     180,     0,   276,     0,   260,     0,     0,     0,     0,    78,
+     247,   248,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   236,    78,
+     251,     0,   275,   195,   123,     0,    92,     0,     0,   122,
+       0,   133,    92,   182,   184,     0,     0,   257,     0,     0,
+       0,     0,     0,   134,   120,   132,     0,   137,   138,     0,
+       0,     0,     0,     0,     0,   103,   101,   207,     0,   265,
+     259,   241,   240,     0,     0,    57,     0,     0,     0,     0,
+      96,    96,   282,     0,     0,   273,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    86,    87,
+      89,   129,   127,   116,   117,   118,   121,   115,     0,     0,
+       0,     0,     0,     0,     0,   163,   141,     0,     0,     0,
+       0,     0,    98,   104,   102,   206,    88,   204,     0,   218,
+     219,   220,   225,   221,   222,   223,   224,   216,     0,   227,
+     232,   231,   233,     0,   242,     0,     0,     0,     0,     0,
+     278,     0,   280,   257,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    90,    91,
+      93,     0,     0,     0,   153,     0,     0,     0,     0,   140,
+       0,     0,     0,     0,   201,     0,    92,   217,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   285,     0,
+       0,     0,   269,   270,     0,     0,     0,     0,   267,   266,
+       0,   283,     0,     0,     0,   258,     0,   160,     0,     0,
+     155,   156,   152,   159,   200,   203,   205,    88,    99,     0,
+     226,     0,     0,   256,     0,     0,    96,    97,    96,     0,
+       0,     0,     0,     0,   261,   262,   256,     0,   157,   158,
+       0,     0,     0,   201,   100,    94,     0,     0,     0,     0,
+       0,   263,   264,     0,   279,   281,     0,     0,   268,   271,
+     272,     0,   284,   154,   161,   162,   202,     0,   208,   228,
+       0,     0,    88,     0,    92,   252,     0,    92,    95,     0,
+     245,     0,     0,   254,     0,     0,   253,   274,   243,     0,
+     244,     0,    88,     0,     0,     0,   255,     0,     0,     0,
+       0,   250,     0,     0,   249,     0,   246
 };
 
 /* YYDEFGOTO[NTERM-NUM]. */
 static const short int yydefgoto[] =
 {
-      -1,    76,   178,   179,   180,   181,   220,   237,    91,    92,
-       9,    34,    35,    42,    48,   102,   359,   290,   429,   362,
-     537,   409,   321,   514,   256,   322,    77,    93,   198,   188,
-     199,   200,   127,   244,   398,   245,    36,    10,    11,    12,
-      15,    14,   184,   208,   209,    59,   115,    20,    57,   119,
-      79,   484,   386,   387,   103,   191,    49,   110,    50,    43,
-     447,   399,    80,   401,   325,    51,   106,   107,   284,   551,
-     193,   344,   519,   369,   285,   286,   287,   288
+      -1,    73,   172,   173,   174,   175,   214,   231,    85,    86,
+       9,    34,    35,    42,    48,    96,   350,   284,   420,   353,
+     528,   400,   315,   505,   250,   316,    74,    87,   192,   182,
+     193,   194,   121,   238,   389,   239,    36,    10,    11,    12,
+      15,    14,   178,   202,   203,    59,   109,    20,    57,   113,
+      76,   475,   377,   378,    97,   185,    49,   104,    50,    43,
+     438,   390,    77,   392,   319,    51,   100,   101,   278,   542,
+     187,   335,   510,   360,   279,   280,   281,   282
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -457
+#define YYPACT_NINF -509
 static const short int yypact[] =
 {
-      49,  -457,  -457,  -457,  -457,  -457,     8,  -107,    -9,   255,
-      61,   188,  -457,    -7,   113,   165,    33,    38,    51,    69,
-    -457,    17,    95,  1056,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,    91,    91,  1290,  -457,  -457,  -457,
-    -457,  -457,   130,  -457,  -457,  -457,  -457,  -457,   130,   116,
-    -457,    25,   192,    98,   265,   198,   201,  -457,  -457,  -457,
-    -457,  -457,   131,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,   270,   273,     5,   128,  -457,  -457,    73,  -457,
-    -457,  1290,  1310,   131,   217,   234,   259,   262,   276,   281,
-     292,   278,   297,   623,  -457,   279,  -457,  -457,  -457,  -457,
-    -457,  -457,  1327,  -457,    -2,  -457,  -457,   214,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -120,
-     809,  -457,   162,   163,   710,  -457,    73,   -84,  -457,   809,
-    -457,    73,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,   269,  1007,   167,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,   168,  -457,  -457,
-    -457,   169,   171,   172,    75,  1347,   768,   296,   177,   178,
-     179,   180,  -457,  -457,   184,  -457,   131,    73,   214,  -457,
-    -457,  -457,  1450,  -457,   302,  -457,  -457,    73,  -457,   189,
-     183,  1310,  1310,   181,   -83,  1310,  -457,   194,   184,   184,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-     185,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,   190,  1290,  1290,
-    1290,  1290,  1290,  -457,  -457,   -27,   784,   -32,  -457,   -77,
-    -457,  1290,  1290,  1290,  1290,   -21,  -457,   196,  -457,  1310,
-    -457,   282,  1370,   114,   216,   130,  -457,  -457,   269,  1007,
-    1310,  1310,  1310,  1310,  1310,  1310,  1310,  1310,  1310,  1310,
-    1310,  1310,  1310,  1310,  -457,   130,  -457,   175,  -457,  -457,
-     187,   952,  -457,    13,   -22,  -457,   193,    73,  -457,  -457,
-    -457,  1290,  1290,  -457,   203,   205,   206,   207,  1290,  -457,
-     199,   623,   -75,  -457,  -457,   209,   210,   305,   211,   331,
-     348,  -457,   184,  1227,   860,  -457,  -457,   131,  -457,  1003,
-    1003,  -457,  -457,  -457,  -457,  1003,  1327,  1310,  1310,    60,
-      93,  -457,   860,   -40,   218,   235,   236,   237,   238,   239,
-     860,   860,   320,   240,  1327,  1310,  1310,  -457,  -457,  -457,
-    -457,  -457,   -69,  -457,  -457,  -457,   -69,   241,   242,   -59,
-    1290,  1290,  1290,  1290,  -457,  -457,   208,  1290,  1290,  1310,
-    1290,  -457,  -457,  -457,  -457,    73,   247,   244,  -457,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,   327,  1290,  -457,  -457,
-    -457,  -457,   250,  -457,   251,  1003,   860,   860,     2,  -457,
-      19,  -457,  -457,  1003,   248,  1310,  1310,  1310,  1310,  1310,
-     252,   254,  1310,  1310,  1003,   860,   260,  -457,  -457,  -457,
-    1290,  1290,  1310,  -457,   261,   266,   264,   271,  -457,   272,
-     274,    45,   275,    10,  1273,  -457,  -457,   382,   -24,   387,
-     394,   277,   283,   285,  1003,   407,  1003,   288,   289,  1003,
-     290,    73,  -457,   291,   295,  1003,  1003,    73,  -457,   293,
-    -457,  1310,   294,   298,  -457,  1290,  -457,  1290,  1290,  -457,
-    -457,  -457,  -457,  -457,  -457,  -457,    73,    -4,   299,  -457,
-    1003,  1003,  1310,  1003,  1003,   301,  -457,   301,  1003,   303,
-    1310,  1310,  1310,  -457,  -457,  1310,   860,  -457,  -457,   300,
-     304,   306,    10,  -457,   361,   398,   309,   287,   860,    39,
-    -457,  -457,   366,  -457,  -457,   308,  1003,  -457,  -457,  -457,
-      40,  -457,  -457,  -457,  -457,  -457,   430,  -457,  -457,   426,
-      23,  -457,  1310,  -457,  -457,   310,  -457,  -457,  1003,  -457,
-    1135,    27,   187,   860,    12,  -457,   -69,  -457,   312,  -457,
-    1135,  -457,   427,   441,   322,   187,  1003,  1003,   444,   389,
-    -457,  1003,   446,  -457,  1003,  -457
+      54,  -509,  -509,  -509,  -509,  -509,    -7,   -83,    53,   273,
+      87,    68,  -509,    -5,    44,   103,    18,    31,    37,    49,
+    -509,    22,   124,   353,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,   174,   174,  1146,  -509,  -509,  -509,
+    -509,  -509,   177,  -509,  -509,  -509,  -509,  -509,   177,   151,
+    -509,     8,   239,   157,   253,   242,   243,  -509,  -509,  -509,
+    -509,  -509,   126,  -509,  -509,  -509,  -509,  -509,  -509,   257,
+     260,     0,    10,  -509,  -509,    59,  -509,  -509,  1146,  1251,
+     126,   193,   212,   258,   259,   215,   261,   599,  -509,   263,
+    -509,  -509,  -509,  -509,  -509,  -509,  1288,  -509,     6,  -509,
+    -509,   130,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,   -60,   781,  -509,   129,   132,   681,  -509,
+      59,   -46,  -509,   781,  -509,    59,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,    99,   383,   136,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,   137,  -509,  -509,  -509,   139,   141,   142,   921,  1301,
+     741,   266,   147,   148,   152,   153,  -509,  -509,   154,  -509,
+     126,    59,   130,  -509,  -509,  -509,  1381,  -509,   274,  -509,
+    -509,    59,  -509,   158,   155,  1251,  1251,   159,   -44,  1251,
+    -509,   160,   154,   154,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,   164,  -509,  -509,  -509,  -509,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+    -509,   166,  1146,  1146,  1146,  1146,  1146,  -509,  -509,   -21,
+     754,   -54,  -509,   -37,  -509,  1146,  1146,  1146,  1146,    13,
+    -509,   178,  -509,  1251,  -509,   244,  1338,    33,   285,   177,
+    -509,  -509,    99,   383,  1251,  1251,  1251,  1251,  1251,  1251,
+    1251,  1251,  1251,  1251,  1251,  1251,  1251,  1251,  -509,   177,
+    -509,   118,  -509,  -509,   116,   999,  -509,    -8,   -19,  -509,
+     175,    59,  -509,  -509,  -509,  1146,  1146,  -509,   163,   183,
+     185,   186,  1146,  -509,   182,   599,   -28,  -509,  -509,   187,
+     192,   298,   195,   313,   327,  -509,   154,  1191,   830,  -509,
+    -509,   126,  -509,   970,   970,  -509,   970,  1288,  1251,  1251,
+      34,    40,  -509,   830,    21,   200,   206,   207,   211,   214,
+     218,   830,   830,   319,   219,  1288,  1251,  1251,  -509,  -509,
+    -509,  -509,  -509,   -65,  -509,  -509,  -509,   -65,   220,   221,
+     -13,  1146,  1146,  1146,  1146,  -509,  -509,   213,  1146,  1146,
+    1251,  1146,  -509,  -509,  -509,  -509,    59,   223,   222,  -509,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,   311,  1146,  -509,
+    -509,  -509,  -509,   235,  -509,   237,   970,   830,   830,    25,
+    -509,    27,  -509,  -509,   970,   233,  1251,  1251,  1251,  1251,
+    1251,   240,   241,  1251,  1251,   970,   830,   245,  -509,  -509,
+    -509,  1146,  1146,  1251,  -509,   246,   238,   247,   248,  -509,
+     250,   251,    43,   254,    19,  1234,  -509,  -509,   356,   -40,
+     364,   365,   256,   264,   265,   970,   391,   970,   267,   268,
+     970,   275,    59,  -509,   276,   277,   970,   970,    59,  -509,
+     271,  -509,  1251,   278,   279,  -509,  1146,  -509,  1146,  1146,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,    59,    -2,   280,
+    -509,   970,   970,  1251,   970,   970,   281,  -509,   281,   970,
+     284,  1251,  1251,  1251,  -509,  -509,  1251,   830,  -509,  -509,
+     282,   283,   288,    19,  -509,   369,   405,   289,   290,   830,
+     -12,  -509,  -509,   381,  -509,  -509,   291,   970,  -509,  -509,
+    -509,    28,  -509,  -509,  -509,  -509,  -509,   429,  -509,  -509,
+     421,    -1,  -509,  1251,  -509,  -509,   295,  -509,  -509,   970,
+    -509,  1099,     7,   116,   830,     2,  -509,   -65,  -509,   304,
+    -509,  1099,  -509,   427,   434,   308,   116,   970,   970,   435,
+     380,  -509,   970,   437,  -509,   970,  -509
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const short int yypgoto[] =
 {
-    -457,  -457,   284,   311,   316,   318,   200,   197,  -262,  -457,
-     360,  -457,  -457,  -457,  -457,  -222,  -355,  -377,  -457,  -282,
-    -457,  -327,   -17,  -457,  -167,  -457,  -457,   -23,   182,  -286,
-    -457,   345,   351,   129,   -87,  -172,   256,  -457,  -457,   469,
-    -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,  -457,
-       1,   -31,  -457,  -457,   435,  -457,  -457,  -457,  -457,  -457,
-    -457,  -456,    -1,   121,  -257,  -457,   433,  -457,  -457,  -457,
-    -457,  -457,   -20,    74,  -457,  -457,  -457,  -457
+    -509,  -509,   269,   272,   286,   302,   189,   190,  -256,  -509,
+     351,  -509,  -509,  -509,  -509,  -215,  -343,  -373,  -509,  -279,
+    -509,  -323,   -17,  -509,  -173,  -509,  -509,   -23,   172,  -275,
+    -509,   339,   345,   -25,   -80,  -164,   197,  -509,  -509,   453,
+    -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,  -509,
+       1,   -36,  -509,  -509,   423,  -509,  -509,  -509,  -509,  -509,
+    -509,  -508,     9,   104,  -211,  -509,   445,  -509,  -509,  -509,
+    -509,  -509,     3,   100,  -509,  -509,  -509,  -509
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -175
+#define YYTABLE_NINF -169
 static const short int yytable[] =
 {
-      78,    13,   335,   247,   249,   328,   182,   428,   443,   123,
-     319,   428,    13,   411,   454,   341,   366,   194,   345,   346,
-     347,   348,   349,   189,   195,   352,   353,   319,     1,    21,
-       2,   456,   320,   331,   332,   333,   334,   331,   332,   333,
-     334,   299,   300,   336,   105,   562,   357,   358,    22,  -174,
-     405,   108,   126,   205,   205,   455,    16,    17,    18,   131,
-     308,    37,   308,   354,   206,   296,   427,     1,   424,     2,
-       3,   314,   455,   376,   312,    19,     4,     5,   432,   187,
-      60,    61,   433,    83,    84,    85,    86,    87,    88,    89,
-      90,    70,   183,     1,   558,     2,     6,   197,   128,   426,
-     129,   126,   413,     7,   564,   308,   197,     8,    13,   512,
-     308,   357,   358,   308,   313,    58,   128,   309,   129,    71,
-      24,    25,   489,   329,   364,   357,   358,   357,   358,    39,
-     330,   427,   428,    60,    61,   105,    83,    63,    64,    65,
-      66,    67,    68,    69,    70,   190,     1,   427,     2,   113,
-     114,   128,   124,   129,    40,   383,    41,   363,   460,    56,
-     462,   463,   464,   487,   552,    94,   468,   549,   523,    52,
-     524,   559,    71,   109,    53,   474,   542,   542,   293,   294,
-     543,   546,   297,   128,   565,   129,   481,    54,  -173,   257,
-      95,    96,    97,    98,    99,   100,   101,   408,   128,   428,
-     129,   428,    44,    45,    46,    55,     1,    47,     2,     3,
-     130,   128,   112,   129,    72,     4,     5,    73,   117,   243,
-      74,   118,    75,   311,   182,   448,   331,   332,   333,   334,
-     410,   128,     1,   129,     2,     6,   324,   -60,   -60,   324,
-     132,   133,     7,   527,   528,   529,     8,   339,   340,   324,
-     342,   343,   324,   324,   324,   324,   324,   350,   351,   324,
-     324,   554,   -59,   -59,   556,   -58,   -58,    72,   197,   116,
-      73,   120,    23,    74,   121,    75,   125,   122,   550,   -57,
-     -57,   134,   135,   185,    24,    25,   355,   356,   -61,   560,
-      81,    82,    26,    27,    28,    29,    30,    31,    32,   -62,
-     385,    33,   357,   358,   136,   201,   202,   238,   239,   240,
-     183,   241,   242,   187,   406,   407,   250,   251,   252,   253,
-     254,   255,   289,   400,   292,   301,   291,   295,   400,   400,
-     302,   187,   425,   324,   400,   298,   323,   326,   379,   365,
-     370,   400,   371,   372,   373,   375,   377,   378,   380,   400,
-     400,   381,   382,   422,   438,   414,   441,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   303,   304,   305,
-     306,   307,   415,   416,   417,   418,   419,   423,   430,   431,
-     315,   316,   317,   318,   444,   445,   446,   449,   450,   465,
-     459,   466,   324,   461,   324,   324,   324,   471,   475,   467,
-     324,   477,   488,   490,   400,   400,   400,   476,   478,   324,
-     491,   496,   400,   479,   536,   480,   482,   492,   538,   455,
-     493,   486,   494,   400,   400,   432,   498,   500,   501,   540,
-     367,   368,   502,   505,   547,   507,   515,   374,   522,   508,
-     526,   532,   548,   566,   483,   533,   539,   534,   506,   563,
-     402,   403,   544,   400,   555,   400,   404,   567,   400,   568,
-     571,   572,   574,   412,   400,   400,   338,   192,   337,   518,
-     513,   420,   421,   361,   207,   204,   280,   324,   324,   324,
-      38,   535,   518,   104,   111,   530,   457,     0,     0,   400,
-     400,     0,   400,   400,     0,     0,     0,   400,     0,   434,
-     435,   436,   437,   281,     0,   400,   439,   440,   282,   442,
-     283,     0,     0,   483,     0,     0,     0,   400,     0,   553,
-       0,     0,     0,     0,     0,   400,   451,   452,   453,     0,
-       0,     0,     0,     0,   458,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   469,   470,   400,     0,     0,
-       0,     0,   400,     0,     0,     0,     0,     0,     0,   472,
-     473,     0,     0,     0,     0,   400,   400,     0,     0,     0,
-     400,     0,     0,   400,     0,   495,     0,   497,     0,     0,
-     499,     0,     0,     0,     0,     0,   503,   504,     0,     0,
+      75,    13,   326,   434,   117,   241,   243,   176,   402,   325,
+     419,    88,    13,   357,   419,    60,    61,   325,    80,    63,
+      64,    65,    66,    67,    99,     1,   313,     2,   183,   293,
+     294,   102,   553,   549,     1,   445,     2,   447,    16,    17,
+      18,   313,   323,   555,   327,   322,   324,   348,   349,   120,
+      21,    68,   396,   124,  -168,   332,   125,    19,   336,   337,
+     338,   339,   340,   314,   345,   343,   344,   418,  -167,     1,
+     415,     2,     3,   181,   188,   446,   306,   446,     4,     5,
+     302,   189,    40,     1,    41,     2,     3,    37,   199,   307,
+     199,   191,     4,     5,   302,   120,   177,   302,     6,   200,
+     191,   290,    13,   480,   503,     7,   302,    22,   308,     8,
+     348,   349,     6,   302,   348,   349,   122,   367,   123,     7,
+     303,   423,   533,     8,   355,   424,   534,   122,    39,   123,
+     418,   348,   349,   354,   418,   419,   417,    44,    45,    46,
+     540,    58,    47,   374,   118,     1,    69,     2,   550,    70,
+     184,    52,    71,   103,    72,   119,   122,   478,   123,   543,
+     404,    56,   533,   514,    53,   515,   537,    99,   399,   122,
+      54,   123,   287,   288,   401,   122,   291,   123,   122,   556,
+     123,   472,    55,   251,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   122,   451,   123,   453,   454,   455,
+      24,    25,   419,   459,   419,   107,   108,   297,   298,   299,
+     300,   301,   465,   126,   127,   -57,   -57,   305,   128,   129,
+     309,   310,   311,   312,   439,   176,   346,   347,   348,   349,
+     318,    78,    79,   318,    89,    90,    91,    92,    93,    94,
+      95,   330,   331,   318,   333,   334,   318,   318,   318,   318,
+     318,   341,   342,   318,   318,   545,   106,   110,   547,   111,
+     112,   115,   191,   114,   116,   -58,   -59,   179,   130,   195,
+     358,   359,   196,   232,   233,   541,   234,   365,   235,   236,
+     518,   519,   520,   244,   245,   246,   551,    23,   249,   247,
+     248,   283,   285,   286,   376,   325,   320,   361,   292,    24,
+      25,   295,   289,   296,   181,   397,   398,    26,    27,    28,
+      29,    30,    31,    32,   177,   317,    33,   362,   356,   363,
+     364,   368,   181,   416,   318,   366,   369,   391,   370,   371,
+     372,   373,   391,   391,   405,   391,   425,   426,   427,   428,
+     406,   407,   391,   430,   431,   408,   433,   432,   409,   413,
+     391,   391,   410,   414,   421,   422,   429,   435,    60,    61,
+     436,    62,    63,    64,    65,    66,    67,   437,     1,   440,
+       2,   441,   450,   479,   456,   457,   467,   481,   482,   462,
+     466,   468,   469,   318,   452,   318,   318,   318,   470,   471,
+     458,   318,   473,   483,    68,   487,   463,   464,   484,   485,
+     318,   423,   489,   215,   216,   391,   391,   391,   496,   491,
+     492,   493,   477,   391,   506,   513,   498,   499,   517,   527,
+     523,   524,   529,   530,   391,   391,   525,   393,   394,   531,
+     395,   446,   535,   538,   539,   474,   546,   403,   554,   497,
+     557,   500,   559,   501,   502,   411,   412,   558,   562,   563,
+     565,   328,   186,   329,   391,   274,   391,   352,   275,   391,
+     509,   504,   201,   198,    38,   391,   391,   526,   318,   318,
+     318,    98,   276,   509,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   277,    69,
+     391,   391,    70,   391,   391,    71,   105,    72,   391,   521,
+     442,   443,   444,   448,   474,     0,   391,     0,   449,     0,
+     544,     0,     0,     0,     0,     0,     0,     0,   391,   460,
+     461,     0,     0,     0,     0,     0,   391,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   509,     0,   510,   511,     0,     0,
-       0,   516,   517,     0,   520,   521,     0,     0,     0,   525,
-       0,     0,     0,     0,     0,     0,     0,   531,    60,    61,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   541,
-       0,     1,     0,     2,     0,   137,     0,   545,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   138,   139,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   557,
-       0,     0,     0,     0,   561,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   569,   570,     0,
-       0,     0,   573,     0,     0,   575,     0,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,     0,     0,     0,     0,    60,    61,     0,    83,    63,
-      64,    65,    66,    67,    68,    69,    70,     0,     1,     0,
-       2,     0,     0,     0,     0,     0,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,     0,
-     167,   168,   169,   170,    71,   171,   172,   173,     0,     0,
-       0,   128,     0,   129,     0,   174,     0,     0,   175,     0,
-     176,     0,   177,    60,    61,     0,    83,    84,    85,    86,
-      87,    88,    89,    90,    70,     0,     1,     0,     2,    60,
-      61,     0,    83,    84,    85,    86,    87,    88,    89,    90,
-      70,     0,     1,     0,     2,     0,     0,     0,     0,     0,
-       0,     0,    71,     0,    60,    61,     0,    83,    63,    64,
-      65,    66,    67,    68,    69,    70,     0,     1,    71,     2,
+       0,     0,     0,     0,     0,     0,     0,     0,   391,   486,
+       0,   488,     0,   391,   490,     0,     0,     0,     0,     0,
+     494,   495,     0,     0,     0,     0,   391,   391,     0,     0,
+       0,   391,     0,     0,   391,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   507,   508,     0,   511,   512,
+       0,     0,     0,   516,     0,     0,     0,     0,     0,     0,
+       0,   522,     0,     0,    60,    61,     0,     0,     0,     0,
+       0,     0,     0,   532,     1,     0,     2,     0,   131,     0,
+       0,   536,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   132,   133,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   548,     0,     0,     0,     0,   552,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   196,     0,     0,     0,     0,     0,    72,
-       0,     0,    73,    71,     0,    74,     0,    75,   203,     0,
-       0,     0,     0,   388,   389,    60,    61,   390,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     1,     0,
-       2,     0,   391,   392,   393,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   394,   395,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    72,     0,     0,
-      73,     0,     0,    74,     0,    75,   248,   396,     0,     0,
-       0,     0,     0,    72,     0,     0,    73,     0,     0,    74,
-       0,    75,   310,     0,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,    72,     0,
-       0,    73,     0,     0,    74,     0,    75,    60,    61,     0,
-      83,    63,    64,    65,    66,    67,    68,    69,    70,     0,
-       1,     0,     2,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   360,   167,   168,   169,
-     170,     0,   171,   172,   173,     0,    71,     0,   128,     0,
-     129,     0,     0,     0,     0,   397,   388,   389,    60,    61,
-     390,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     1,     0,     2,     0,   391,   392,   393,     0,     0,
-     221,   222,     0,     0,     0,     0,     0,     0,   394,   395,
+       0,   560,   561,     0,     0,     0,   564,     0,     0,   566,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,     0,     0,    60,    61,     0,    80,
+      63,    64,    65,    66,    67,     0,     1,     0,     2,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,    68,   161,   162,   163,   164,     0,   165,   166,
+     167,     0,     0,     0,   122,     0,   123,     0,   168,     0,
+       0,   169,     0,   170,     0,   171,    60,    61,     0,    80,
+      81,    82,    83,    84,    67,     0,     1,     0,     2,    60,
+      61,     0,    80,    81,    82,    83,    84,    67,     0,     1,
+       0,     2,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    68,     0,     0,     0,    60,    61,     0,    80,
+      63,    64,    65,    66,    67,    68,     1,     0,     2,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   190,     0,     0,     0,     0,    69,     0,     0,
+      70,     0,    68,    71,     0,    72,   197,     0,     0,     0,
+       0,     0,     0,   379,   380,    60,    61,   381,     0,     0,
+       0,     0,     0,     0,     0,     1,     0,     2,     0,   382,
+     383,   384,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   385,   386,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    69,     0,     0,
+      70,     0,     0,    71,   387,    72,   242,     0,     0,     0,
+      69,     0,     0,    70,     0,     0,    71,     0,    72,   304,
+       0,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,     0,     0,    69,     0,     0,
+      70,     0,     0,    71,     0,    72,    60,    61,     0,    80,
+      81,    82,    83,    84,    67,     0,     1,     0,     2,     0,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,     0,   161,   162,   163,   164,     0,   165,
+     166,   167,    68,     0,     0,   122,     0,   123,     0,     0,
+       0,     0,   388,   379,   380,    60,    61,   381,     0,     0,
+       0,     0,     0,     0,     0,     1,     0,     2,     0,   382,
+     383,   384,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   385,   386,    60,    61,     0,    80,    63,    64,
+      65,    66,    67,     0,     1,     0,     2,     0,     0,     0,
+       0,     0,     0,     0,   387,     0,     0,     0,     0,     0,
+     351,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      68,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,     0,     0,    69,     0,     0,
+      70,     0,   237,    71,     0,    72,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     396,    60,    61,     0,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,     0,     1,     0,     2,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,    72,     0,     0,    73,     0,     0,    74,     0,    75,
-      71,   223,   224,   225,   226,   227,   228,   229,   230,   231,
-     232,   233,   234,   235,   236,     0,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,     0,
-     167,   168,   169,   170,     0,   171,   172,   173,   388,   389,
-       0,     0,   390,     0,     0,     0,     0,     0,   397,     0,
-       0,     0,     0,     0,     0,     0,     0,   391,   392,   393,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,     0,   161,   162,   163,   164,     0,   165,
+     166,   167,   379,   380,     0,     0,   381,     0,     0,     0,
+       0,     0,   388,     0,     0,     0,     0,     0,   382,   383,
+     384,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   385,   386,     0,     0,    69,     0,     0,    70,     0,
+       0,    71,     0,    72,     0,     0,     0,     0,     0,     0,
+       0,    60,    61,   387,    80,    81,    82,    83,    84,    67,
+       0,     1,     0,     2,     0,     0,     0,     0,     0,     0,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,     0,     0,     0,    68,     0,     0,
+       0,     0,     0,     0,     0,     0,    60,    61,     0,    80,
+      63,    64,    65,    66,    67,     0,     1,     0,     2,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   375,   161,   162,   163,   164,     0,   165,   166,
+     167,     0,    68,     0,     0,     0,     0,     0,     0,    60,
+      61,   388,    80,    63,    64,    65,    66,    67,     0,     1,
+       0,     2,     0,     0,     0,     0,    60,    61,     0,    80,
+      63,    64,    65,    66,    67,   476,     1,     0,     2,     0,
+       0,     0,     0,     0,     0,    68,     0,     0,     0,     0,
+       0,     0,    69,     0,     0,    70,     0,     0,    71,     0,
+      72,     0,    68,    60,    61,     0,   180,    63,    64,    65,
+      66,    67,     0,     1,     0,     2,    60,    61,     0,    80,
+      81,    82,    83,    84,    67,     0,     1,     0,     2,     0,
+       0,     0,     0,     0,     0,     0,     0,    69,     0,    68,
+      70,     0,     0,    71,     0,    72,     0,     0,     0,     0,
+       0,     0,    68,    60,    61,     0,   321,    63,    64,    65,
+      66,    67,     0,     1,     0,     2,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     394,   395,     0,     0,     0,     0,     0,     0,     0,     0,
+      69,     0,     0,    70,     0,     0,    71,     0,    72,    68,
+       0,     0,     0,     0,     0,     0,     0,    69,     0,     0,
+      70,     0,     0,    71,     0,    72,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   396,     0,     0,    72,     0,     0,    73,     0,
-       0,    74,     0,    75,     0,     0,     0,     0,     0,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    60,    61,     0,    83,    63,    64,    65,    66,
-      67,    68,    69,    70,     0,     1,     0,     2,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   384,   167,   168,   169,   170,     0,   171,   172,   173,
-       0,    71,     0,     0,     0,     0,     0,     0,    60,    61,
-     397,    83,    63,    64,    65,    66,    67,    68,    69,    70,
-       0,     1,     0,     2,     0,    60,    61,     0,    83,    84,
-      85,    86,    87,    88,    89,    90,    70,   485,     1,     0,
-       2,     0,     0,     0,     0,    60,    61,    71,    83,    63,
-      64,    65,    66,    67,    68,    69,    70,     0,     1,     0,
-       2,     0,    60,    61,    71,   186,    63,    64,    65,    66,
-      67,    68,    69,    70,     0,     1,     0,     2,     0,     0,
-       0,     0,    60,    61,    71,    83,    84,    85,    86,    87,
-      88,    89,    90,    70,     0,     1,    72,     2,     0,    73,
-       0,    71,    74,     0,    75,    60,    61,     0,   327,    63,
-      64,    65,    66,    67,    68,    69,    70,     0,     1,     0,
-       2,    71,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    72,     0,    71,    73,     0,     0,    74,     0,
-      75,     0,     0,     0,     0,     0,     0,     0,     0,    72,
-       0,     0,    73,     0,     0,    74,     0,    75,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    72,
-       0,     0,    73,     0,     0,    74,     0,    75,     0,     0,
-       0,     0,     0,     0,     0,     0,    72,     0,     0,    73,
-       0,     0,    74,     0,    75,     0,     0,     0,     0,     0,
-       0,     0,   258,     0,     0,     0,    72,     0,     0,    73,
-       0,     0,    74,     0,   246,   259,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   260,   261,     0,     0,    72,
-       0,     0,    73,     0,     0,    74,     0,    75,   262,   263,
-     264,   265,   266,   267,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   268,   269,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   270,   271,
-     272,     0,     0,   273,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   274,   275,   168,   169,
-     170,   276,   277,   278,   279
+     252,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   253,    69,     0,     0,    70,     0,     0,
+      71,     0,    72,   254,   255,     0,     0,    69,     0,     0,
+      70,     0,     0,    71,     0,   240,   256,   257,   258,   259,
+     260,   261,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   262,   263,     0,     0,     0,     0,
+       0,     0,     0,     0,    69,     0,     0,    70,     0,     0,
+      71,     0,    72,     0,     0,     0,   264,   265,   266,     0,
+       0,   267,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   268,   269,   162,   163,   164,   270,
+     271,   272,   273
 };
 
 static const short int yycheck[] =
 {
-      23,     0,   264,   175,   176,   262,    93,   362,   385,     4,
-      31,   366,    11,   340,    12,   272,   298,   137,   275,   276,
-     277,   278,   279,    25,   144,   282,   283,    31,    18,   136,
-      20,    12,    53,    10,    11,    12,    13,    10,    11,    12,
-      13,   208,   209,   265,    19,    33,   115,   116,    57,     0,
-     336,    26,    75,   137,   137,    53,    48,    49,    50,    82,
-     137,     0,   137,   285,   148,   148,   135,    18,   354,    20,
-      21,   148,    53,   148,   246,    67,    27,    28,   137,   102,
-       5,     6,   141,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    93,    18,   550,    20,    47,   120,   138,   356,
-     140,   124,   142,    54,   560,   137,   129,    58,   107,   486,
-     137,   115,   116,   137,   146,    20,   138,   144,   140,    44,
-      29,    30,   146,     9,   146,   115,   116,   115,   116,   136,
-      16,   135,   487,     5,     6,    19,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,   147,    18,   135,    20,    51,
-      52,   138,   147,   140,    41,   322,    43,   144,   415,   142,
-     417,   418,   419,   445,   541,    36,   423,   144,   495,   136,
-     497,   144,    44,   148,   136,   432,   137,   137,   201,   202,
-     141,   141,   205,   138,   561,   140,   141,   136,     0,   188,
-      60,    61,    62,    63,    64,    65,    66,   137,   138,   554,
-     140,   556,    37,    38,    39,   136,    18,    42,    20,    21,
-      81,   138,    20,   140,   139,    27,    28,   142,    20,   144,
-     145,    20,   147,   246,   311,   397,    10,    11,    12,    13,
-     137,   138,    18,   140,    20,    47,   259,     3,     4,   262,
-      23,    24,    54,   500,   501,   502,    58,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   543,     3,     4,   546,     3,     4,   139,   291,     4,
-     142,   140,    17,   145,     4,   147,   148,     4,   540,     3,
-       4,     3,     4,     4,    29,    30,   111,   112,     7,   551,
-      34,    35,    37,    38,    39,    40,    41,    42,    43,     7,
-     323,    46,   115,   116,     7,   143,   143,   140,   140,   140,
-     311,   140,   140,   336,   337,   338,    20,   140,   140,   140,
-     140,   137,    20,   324,   141,   140,   137,   146,   329,   330,
-     140,   354,   355,   356,   335,   141,   140,    55,    33,   146,
-     137,   342,   137,   137,   137,   146,   137,   137,   137,   350,
-     351,    20,     4,    33,   146,   137,   379,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,   238,   239,   240,
-     241,   242,   137,   137,   137,   137,   137,   137,   137,   137,
-     251,   252,   253,   254,   137,   141,    59,   137,   137,   137,
-     142,   137,   415,   416,   417,   418,   419,   137,   137,   422,
-     423,   137,    20,    16,   405,   406,   407,   141,   137,   432,
-      16,     4,   413,   141,    53,   141,   141,   140,    20,    53,
-     137,   444,   137,   424,   425,   137,   137,   137,   137,   142,
-     301,   302,   137,   140,     4,   141,   137,   308,   137,   141,
-     137,   141,    16,    16,   443,   141,   137,   141,   471,   137,
-     329,   330,   144,   454,   144,   456,   335,    16,   459,   137,
-      16,    72,    16,   342,   465,   466,   269,   107,   268,   492,
-     487,   350,   351,   291,   129,   124,   192,   500,   501,   502,
-      11,   512,   505,    48,    51,   505,   412,    -1,    -1,   490,
-     491,    -1,   493,   494,    -1,    -1,    -1,   498,    -1,   370,
-     371,   372,   373,   192,    -1,   506,   377,   378,   192,   380,
-     192,    -1,    -1,   512,    -1,    -1,    -1,   518,    -1,   542,
-      -1,    -1,    -1,    -1,    -1,   526,   405,   406,   407,    -1,
-      -1,    -1,    -1,    -1,   413,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   424,   425,   548,    -1,    -1,
-      -1,    -1,   553,    -1,    -1,    -1,    -1,    -1,    -1,   430,
-     431,    -1,    -1,    -1,    -1,   566,   567,    -1,    -1,    -1,
-     571,    -1,    -1,   574,    -1,   454,    -1,   456,    -1,    -1,
-     459,    -1,    -1,    -1,    -1,    -1,   465,   466,    -1,    -1,
+      23,     0,   258,   376,     4,   169,   170,    87,   331,    10,
+     353,    36,    11,   292,   357,     5,     6,    10,     8,     9,
+      10,    11,    12,    13,    16,    15,    28,    17,    22,   202,
+     203,    23,    30,   541,    15,    10,    17,    10,    45,    46,
+      47,    28,     9,   551,   259,   256,    13,   112,   113,    72,
+     133,    41,   327,    78,     0,   266,    79,    64,   269,   270,
+     271,   272,   273,    50,   279,   276,   277,   132,     0,    15,
+     345,    17,    18,    96,   134,    50,   240,    50,    24,    25,
+     134,   141,    38,    15,    40,    17,    18,     0,   134,   143,
+     134,   114,    24,    25,   134,   118,    87,   134,    44,   145,
+     123,   145,   101,   143,   477,    51,   134,    54,   145,    55,
+     112,   113,    44,   134,   112,   113,   135,   145,   137,    51,
+     141,   134,   134,    55,   143,   138,   138,   135,   133,   137,
+     132,   112,   113,   141,   132,   478,   347,    34,    35,    36,
+     141,    17,    39,   316,   144,    15,   136,    17,   141,   139,
+     144,   133,   142,   145,   144,   145,   135,   436,   137,   532,
+     139,   139,   134,   486,   133,   488,   138,    16,   134,   135,
+     133,   137,   195,   196,   134,   135,   199,   137,   135,   552,
+     137,   138,   133,   182,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,   135,   406,   137,   408,   409,   410,
+      26,    27,   545,   414,   547,    48,    49,   232,   233,   234,
+     235,   236,   423,    20,    21,     3,     4,   240,     3,     4,
+     245,   246,   247,   248,   388,   305,   108,   109,   112,   113,
+     253,    34,    35,   256,    57,    58,    59,    60,    61,    62,
+      63,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   534,    17,     4,   537,    17,
+      17,     4,   285,   137,     4,     7,     7,     4,     7,   140,
+     295,   296,   140,   137,   137,   531,   137,   302,   137,   137,
+     491,   492,   493,    17,   137,   137,   542,    14,   134,   137,
+     137,    17,   134,   138,   317,    10,    52,   134,   138,    26,
+      27,   137,   143,   137,   327,   328,   329,    34,    35,    36,
+      37,    38,    39,    40,   305,   137,    43,   134,   143,   134,
+     134,   134,   345,   346,   347,   143,   134,   318,    30,   134,
+      17,     4,   323,   324,   134,   326,   361,   362,   363,   364,
+     134,   134,   333,   368,   369,   134,   371,   370,   134,    30,
+     341,   342,   134,   134,   134,   134,   143,   134,     5,     6,
+     138,     8,     9,    10,    11,    12,    13,    56,    15,   134,
+      17,   134,   139,    17,   134,   134,   138,    13,    13,   134,
+     134,   134,   134,   406,   407,   408,   409,   410,   138,   138,
+     413,   414,   138,   137,    41,     4,   421,   422,   134,   134,
+     423,   134,   134,    20,    21,   396,   397,   398,   137,   134,
+     134,   134,   435,   404,   134,   134,   138,   138,   134,    50,
+     138,   138,    17,   134,   415,   416,   138,   323,   324,   139,
+     326,    50,   141,     4,    13,   434,   141,   333,   134,   462,
+      13,   466,   134,   468,   469,   341,   342,    13,    13,    69,
+      13,   262,   101,   263,   445,   186,   447,   285,   186,   450,
+     483,   478,   123,   118,    11,   456,   457,   503,   491,   492,
+     493,    48,   186,   496,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   186,   136,
+     481,   482,   139,   484,   485,   142,    51,   144,   489,   496,
+     396,   397,   398,   403,   503,    -1,   497,    -1,   404,    -1,
+     533,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   509,   415,
+     416,    -1,    -1,    -1,    -1,    -1,   517,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   475,    -1,   477,   478,    -1,    -1,
-      -1,   490,   491,    -1,   493,   494,    -1,    -1,    -1,   498,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   506,     5,     6,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   518,
-      -1,    18,    -1,    20,    -1,    22,    -1,   526,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    35,    36,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   548,
-      -1,    -1,    -1,    -1,   553,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   566,   567,    -1,
-      -1,    -1,   571,    -1,    -1,   574,    -1,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    -1,    -1,    -1,    -1,     5,     6,    -1,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    -1,    18,    -1,
-      20,    -1,    -1,    -1,    -1,    -1,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,    -1,
-     127,   128,   129,   130,    44,   132,   133,   134,    -1,    -1,
-      -1,   138,    -1,   140,    -1,   142,    -1,    -1,   145,    -1,
-     147,    -1,   149,     5,     6,    -1,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    -1,    18,    -1,    20,     5,
-       6,    -1,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    -1,    18,    -1,    20,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    44,    -1,     5,     6,    -1,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    -1,    18,    44,    20,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   539,   445,
+      -1,   447,    -1,   544,   450,    -1,    -1,    -1,    -1,    -1,
+     456,   457,    -1,    -1,    -1,    -1,   557,   558,    -1,    -1,
+      -1,   562,    -1,    -1,   565,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   481,   482,    -1,   484,   485,
+      -1,    -1,    -1,   489,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   497,    -1,    -1,     5,     6,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   509,    15,    -1,    17,    -1,    19,    -1,
+      -1,   517,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    32,    33,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   539,    -1,    -1,    -1,    -1,   544,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,   139,
-      -1,    -1,   142,    44,    -1,   145,    -1,   147,   148,    -1,
+      -1,   557,   558,    -1,    -1,    -1,   562,    -1,    -1,   565,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    -1,    -1,     5,     6,    -1,     8,
+       9,    10,    11,    12,    13,    -1,    15,    -1,    17,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,    41,   124,   125,   126,   127,    -1,   129,   130,
+     131,    -1,    -1,    -1,   135,    -1,   137,    -1,   139,    -1,
+      -1,   142,    -1,   144,    -1,   146,     5,     6,    -1,     8,
+       9,    10,    11,    12,    13,    -1,    15,    -1,    17,     5,
+       6,    -1,     8,     9,    10,    11,    12,    13,    -1,    15,
+      -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    41,    -1,    -1,    -1,     5,     6,    -1,     8,
+       9,    10,    11,    12,    13,    41,    15,    -1,    17,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    31,    -1,    -1,    -1,    -1,   136,    -1,    -1,
+     139,    -1,    41,   142,    -1,   144,   145,    -1,    -1,    -1,
       -1,    -1,    -1,     3,     4,     5,     6,     7,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    18,    -1,
-      20,    -1,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    35,    36,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   139,    -1,    -1,
-     142,    -1,    -1,   145,    -1,   147,   148,    57,    -1,    -1,
-      -1,    -1,    -1,   139,    -1,    -1,   142,    -1,    -1,   145,
-      -1,   147,   148,    -1,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,   139,    -1,
-      -1,   142,    -1,    -1,   145,    -1,   147,     5,     6,    -1,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
-      18,    -1,    20,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,    34,   127,   128,   129,
-     130,    -1,   132,   133,   134,    -1,    44,    -1,   138,    -1,
-     140,    -1,    -1,    -1,    -1,   145,     3,     4,     5,     6,
-       7,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    18,    -1,    20,    -1,    22,    23,    24,    -1,    -1,
-      23,    24,    -1,    -1,    -1,    -1,    -1,    -1,    35,    36,
+      -1,    -1,    -1,    -1,    -1,    15,    -1,    17,    -1,    19,
+      20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    32,    33,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   136,    -1,    -1,
+     139,    -1,    -1,   142,    54,   144,   145,    -1,    -1,    -1,
+     136,    -1,    -1,   139,    -1,    -1,   142,    -1,   144,   145,
+      -1,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    -1,    -1,   136,    -1,    -1,
+     139,    -1,    -1,   142,    -1,   144,     5,     6,    -1,     8,
+       9,    10,    11,    12,    13,    -1,    15,    -1,    17,    -1,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,    -1,   124,   125,   126,   127,    -1,   129,
+     130,   131,    41,    -1,    -1,   135,    -1,   137,    -1,    -1,
+      -1,    -1,   142,     3,     4,     5,     6,     7,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    15,    -1,    17,    -1,    19,
+      20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    32,    33,     5,     6,    -1,     8,     9,    10,
+      11,    12,    13,    -1,    15,    -1,    17,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    54,    -1,    -1,    -1,    -1,    -1,
+      31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      41,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    -1,    -1,   136,    -1,    -1,
+     139,    -1,   141,   142,    -1,   144,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,    -1,   124,   125,   126,   127,    -1,   129,
+     130,   131,     3,     4,    -1,    -1,     7,    -1,    -1,    -1,
+      -1,    -1,   142,    -1,    -1,    -1,    -1,    -1,    19,    20,
+      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    32,    33,    -1,    -1,   136,    -1,    -1,   139,    -1,
+      -1,   142,    -1,   144,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,     5,     6,    54,     8,     9,    10,    11,    12,    13,
+      -1,    15,    -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    -1,    -1,    -1,    41,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     5,     6,    -1,     8,
+       9,    10,    11,    12,    13,    -1,    15,    -1,    17,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,    31,   124,   125,   126,   127,    -1,   129,   130,
+     131,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,     5,
+       6,   142,     8,     9,    10,    11,    12,    13,    -1,    15,
+      -1,    17,    -1,    -1,    -1,    -1,     5,     6,    -1,     8,
+       9,    10,    11,    12,    13,    31,    15,    -1,    17,    -1,
+      -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,
+      -1,    -1,   136,    -1,    -1,   139,    -1,    -1,   142,    -1,
+     144,    -1,    41,     5,     6,    -1,     8,     9,    10,    11,
+      12,    13,    -1,    15,    -1,    17,     5,     6,    -1,     8,
+       9,    10,    11,    12,    13,    -1,    15,    -1,    17,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   136,    -1,    41,
+     139,    -1,    -1,   142,    -1,   144,    -1,    -1,    -1,    -1,
+      -1,    -1,    41,     5,     6,    -1,     8,     9,    10,    11,
+      12,    13,    -1,    15,    -1,    17,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      57,     5,     6,    -1,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    -1,    18,    -1,    20,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,   139,    -1,    -1,   142,    -1,    -1,   145,    -1,   147,
-      44,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,    -1,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,    -1,
-     127,   128,   129,   130,    -1,   132,   133,   134,     3,     4,
-      -1,    -1,     7,    -1,    -1,    -1,    -1,    -1,   145,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    22,    23,    24,
+     136,    -1,    -1,   139,    -1,    -1,   142,    -1,   144,    41,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   136,    -1,    -1,
+     139,    -1,    -1,   142,    -1,   144,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      35,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    57,    -1,    -1,   139,    -1,    -1,   142,    -1,
-      -1,   145,    -1,   147,    -1,    -1,    -1,    -1,    -1,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,     5,     6,    -1,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    -1,    18,    -1,    20,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,    34,   127,   128,   129,   130,    -1,   132,   133,   134,
-      -1,    44,    -1,    -1,    -1,    -1,    -1,    -1,     5,     6,
-     145,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      -1,    18,    -1,    20,    -1,     5,     6,    -1,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    34,    18,    -1,
-      20,    -1,    -1,    -1,    -1,     5,     6,    44,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    -1,    18,    -1,
-      20,    -1,     5,     6,    44,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    -1,    18,    -1,    20,    -1,    -1,
-      -1,    -1,     5,     6,    44,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    -1,    18,   139,    20,    -1,   142,
-      -1,    44,   145,    -1,   147,     5,     6,    -1,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    -1,    18,    -1,
-      20,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   139,    -1,    44,   142,    -1,    -1,   145,    -1,
-     147,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   139,
-      -1,    -1,   142,    -1,    -1,   145,    -1,   147,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   139,
-      -1,    -1,   142,    -1,    -1,   145,    -1,   147,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   139,    -1,    -1,   142,
-      -1,    -1,   145,    -1,   147,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    32,    -1,    -1,    -1,   139,    -1,    -1,   142,
-      -1,    -1,   145,    -1,   147,    45,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    55,    56,    -1,    -1,   139,
-      -1,    -1,   142,    -1,    -1,   145,    -1,   147,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,   109,
-     110,    -1,    -1,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134
+      29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    42,   136,    -1,    -1,   139,    -1,    -1,
+     142,    -1,   144,    52,    53,    -1,    -1,   136,    -1,    -1,
+     139,    -1,    -1,   142,    -1,   144,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   136,    -1,    -1,   139,    -1,    -1,
+     142,    -1,   144,    -1,    -1,    -1,   105,   106,   107,    -1,
+      -1,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const unsigned char yystos[] =
 {
-       0,    18,    20,    21,    27,    28,    47,    54,    58,   160,
-     187,   188,   189,   200,   191,   190,    48,    49,    50,    67,
-     197,   136,    57,    17,    29,    30,    37,    38,    39,    40,
-      41,    42,    43,    46,   161,   162,   186,     0,   189,   136,
-      41,    43,   163,   209,    37,    38,    39,    42,   164,   206,
-     208,   215,   136,   136,   136,   136,   142,   198,    20,   195,
-       5,     6,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    44,   139,   142,   145,   147,   151,   176,   177,   200,
-     212,   186,   186,     8,     9,    10,    11,    12,    13,    14,
-      15,   158,   159,   177,   183,    60,    61,    62,    63,    64,
-      65,    66,   165,   204,   204,    19,   216,   217,    26,   148,
-     207,   216,    20,    51,    52,   196,     4,    20,    20,   199,
-     140,     4,     4,     4,   147,   148,   177,   182,   138,   140,
-     183,   177,    23,    24,     3,     4,     7,    22,    35,    36,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   127,   128,   129,
-     130,   132,   133,   134,   142,   145,   147,   149,   152,   153,
-     154,   155,   184,   212,   192,     4,     8,   177,   179,    25,
-     147,   205,   160,   220,   137,   144,    34,   177,   178,   180,
-     181,   143,   143,   148,   182,   137,   148,   181,   193,   194,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-     156,    23,    24,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   157,   140,   140,
-     140,   140,   140,   144,   183,   185,   147,   185,   148,   185,
-      20,   140,   140,   140,   140,   137,   174,   200,    32,    45,
-      55,    56,    68,    69,    70,    71,    72,    73,    86,    87,
-     108,   109,   110,   113,   126,   127,   131,   132,   133,   134,
-     152,   153,   154,   155,   218,   224,   225,   226,   227,    20,
-     167,   137,   141,   177,   177,   146,   148,   177,   141,   174,
-     174,   140,   140,   183,   183,   183,   183,   183,   137,   144,
-     148,   177,   185,   146,   148,   183,   183,   183,   183,    31,
-      53,   172,   175,   140,   177,   214,    55,     8,   214,     9,
-      16,    10,    11,    12,    13,   158,   165,   156,   157,   177,
-     177,   214,   177,   177,   221,   214,   214,   214,   214,   214,
-     177,   177,   214,   214,   165,   111,   112,   115,   116,   166,
-      34,   178,   169,   144,   146,   146,   169,   183,   183,   223,
-     137,   137,   137,   137,   183,   146,   148,   137,   137,    33,
-     137,    20,     4,   174,    34,   177,   202,   203,     3,     4,
-       7,    22,    23,    24,    35,    36,    57,   145,   184,   211,
-     212,   213,   213,   213,   213,   179,   177,   177,   137,   171,
-     137,   171,   213,   142,   137,   137,   137,   137,   137,   137,
-     213,   213,    33,   137,   179,   177,   214,   135,   166,   168,
-     137,   137,   137,   141,   183,   183,   183,   183,   146,   183,
-     183,   177,   183,   167,   137,   141,    59,   210,   185,   137,
-     137,   213,   213,   213,    12,    53,    12,   223,   213,   142,
-     214,   177,   214,   214,   214,   137,   137,   177,   214,   213,
-     213,   137,   183,   183,   214,   137,   141,   137,   137,   141,
-     141,   141,   141,   200,   201,    34,   177,   169,    20,   146,
-      16,    16,   140,   137,   137,   213,     4,   213,   137,   213,
-     137,   137,   137,   213,   213,   140,   177,   141,   141,   183,
-     183,   183,   167,   172,   173,   137,   213,   213,   177,   222,
-     213,   213,   137,   171,   171,   213,   137,   214,   214,   214,
-     222,   213,   141,   141,   141,   201,    53,   170,    20,   137,
-     142,   213,   137,   141,   144,   213,   141,     4,    16,   144,
-     158,   219,   167,   177,   169,   144,   169,   213,   211,   144,
-     158,   213,    33,   137,   211,   167,    16,    16,   137,   213,
-     213,    16,    72,   213,    16,   213
+       0,    15,    17,    18,    24,    25,    44,    51,    55,   157,
+     184,   185,   186,   197,   188,   187,    45,    46,    47,    64,
+     194,   133,    54,    14,    26,    27,    34,    35,    36,    37,
+      38,    39,    40,    43,   158,   159,   183,     0,   186,   133,
+      38,    40,   160,   206,    34,    35,    36,    39,   161,   203,
+     205,   212,   133,   133,   133,   133,   139,   195,    17,   192,
+       5,     6,     8,     9,    10,    11,    12,    13,    41,   136,
+     139,   142,   144,   148,   173,   174,   197,   209,   183,   183,
+       8,     9,    10,    11,    12,   155,   156,   174,   180,    57,
+      58,    59,    60,    61,    62,    63,   162,   201,   201,    16,
+     213,   214,    23,   145,   204,   213,    17,    48,    49,   193,
+       4,    17,    17,   196,   137,     4,     4,     4,   144,   145,
+     174,   179,   135,   137,   180,   174,    20,    21,     3,     4,
+       7,    19,    32,    33,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   124,   125,   126,   127,   129,   130,   131,   139,   142,
+     144,   146,   149,   150,   151,   152,   181,   209,   189,     4,
+       8,   174,   176,    22,   144,   202,   157,   217,   134,   141,
+      31,   174,   175,   177,   178,   140,   140,   145,   179,   134,
+     145,   178,   190,   191,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,   153,    20,    21,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   154,   137,   137,   137,   137,   137,   141,   180,   182,
+     144,   182,   145,   182,    17,   137,   137,   137,   137,   134,
+     171,   197,    29,    42,    52,    53,    65,    66,    67,    68,
+      69,    70,    83,    84,   105,   106,   107,   110,   123,   124,
+     128,   129,   130,   131,   149,   150,   151,   152,   215,   221,
+     222,   223,   224,    17,   164,   134,   138,   174,   174,   143,
+     145,   174,   138,   171,   171,   137,   137,   180,   180,   180,
+     180,   180,   134,   141,   145,   174,   182,   143,   145,   180,
+     180,   180,   180,    28,    50,   169,   172,   137,   174,   211,
+      52,     8,   211,     9,    13,    10,   155,   162,   153,   154,
+     174,   174,   211,   174,   174,   218,   211,   211,   211,   211,
+     211,   174,   174,   211,   211,   162,   108,   109,   112,   113,
+     163,    31,   175,   166,   141,   143,   143,   166,   180,   180,
+     220,   134,   134,   134,   134,   180,   143,   145,   134,   134,
+      30,   134,    17,     4,   171,    31,   174,   199,   200,     3,
+       4,     7,    19,    20,    21,    32,    33,    54,   142,   181,
+     208,   209,   210,   210,   210,   210,   176,   174,   174,   134,
+     168,   134,   168,   210,   139,   134,   134,   134,   134,   134,
+     134,   210,   210,    30,   134,   176,   174,   211,   132,   163,
+     165,   134,   134,   134,   138,   180,   180,   180,   180,   143,
+     180,   180,   174,   180,   164,   134,   138,    56,   207,   182,
+     134,   134,   210,   210,   210,    10,    50,    10,   220,   210,
+     139,   211,   174,   211,   211,   211,   134,   134,   174,   211,
+     210,   210,   134,   180,   180,   211,   134,   138,   134,   134,
+     138,   138,   138,   138,   197,   198,    31,   174,   166,    17,
+     143,    13,    13,   137,   134,   134,   210,     4,   210,   134,
+     210,   134,   134,   134,   210,   210,   137,   174,   138,   138,
+     180,   180,   180,   164,   169,   170,   134,   210,   210,   174,
+     219,   210,   210,   134,   168,   168,   210,   134,   211,   211,
+     211,   219,   210,   138,   138,   138,   198,    50,   167,    17,
+     134,   139,   210,   134,   138,   141,   210,   138,     4,    13,
+     141,   155,   216,   164,   174,   166,   141,   166,   210,   208,
+     141,   155,   210,    30,   134,   208,   164,    13,    13,   134,
+     210,   210,    13,    69,   210,    13,   210
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -3021,7 +2992,7 @@
   switch (yyn)
     {
         case 3:
-#line 1020 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1020 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
   if ((yyvsp[0].UIntVal) > (uint32_t)INT32_MAX)     // Outside of my range!
     GEN_ERROR("Value too large for type!");
@@ -3031,268 +3002,268 @@
     break;
 
   case 31:
-#line 1036 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1036 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
     break;
 
   case 32:
-#line 1036 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1036 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
     break;
 
   case 33:
-#line 1037 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1037 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
     break;
 
   case 34:
-#line 1037 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1037 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
     break;
 
   case 35:
-#line 1038 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1038 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
     break;
 
   case 36:
-#line 1038 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1038 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
     break;
 
   case 37:
-#line 1039 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1039 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
     break;
 
   case 38:
-#line 1039 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1039 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
     break;
 
   case 39:
-#line 1040 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1040 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
     break;
 
   case 40:
-#line 1040 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1040 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
     break;
 
   case 41:
-#line 1044 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1044 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
     break;
 
   case 42:
-#line 1044 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1044 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
     break;
 
   case 43:
-#line 1045 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1045 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
     break;
 
   case 44:
-#line 1045 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1045 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
     break;
 
   case 45:
-#line 1046 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1046 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
     break;
 
   case 46:
-#line 1046 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1046 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
     break;
 
   case 47:
-#line 1047 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1047 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
     break;
 
   case 48:
-#line 1047 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1047 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
     break;
 
   case 49:
-#line 1048 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1048 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
     break;
 
   case 50:
-#line 1048 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1048 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
     break;
 
   case 51:
-#line 1049 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1049 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
     break;
 
   case 52:
-#line 1049 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1049 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
     break;
 
   case 53:
-#line 1050 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1050 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
     break;
 
   case 54:
-#line 1050 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1050 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
     break;
 
   case 55:
-#line 1051 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1051 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
     break;
 
   case 56:
-#line 1052 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1052 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
     break;
 
-  case 63:
-#line 1061 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 60:
+#line 1061 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.StrVal) = (yyvsp[-1].StrVal);
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 64:
-#line 1065 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 61:
+#line 1065 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.StrVal) = 0;
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 65:
-#line 1071 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 62:
+#line 1071 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
     break;
 
-  case 66:
-#line 1072 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 63:
+#line 1072 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
     break;
 
-  case 67:
-#line 1073 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 64:
+#line 1073 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
     break;
 
-  case 68:
-#line 1074 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 65:
+#line 1074 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
     break;
 
-  case 69:
-#line 1075 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 66:
+#line 1075 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
     break;
 
-  case 70:
-#line 1079 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 67:
+#line 1079 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
     break;
 
-  case 71:
-#line 1080 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 68:
+#line 1080 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
     break;
 
-  case 72:
-#line 1081 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 69:
+#line 1081 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
     break;
 
+  case 70:
+#line 1085 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
+    break;
+
+  case 71:
+#line 1086 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
+    break;
+
+  case 72:
+#line 1087 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
+    break;
+
   case 73:
-#line 1085 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1091 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
     break;
 
   case 74:
-#line 1086 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
-    break;
-
-  case 75:
-#line 1087 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
-    break;
-
-  case 76:
-#line 1091 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
-    break;
-
-  case 77:
-#line 1092 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1092 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
     break;
 
-  case 78:
-#line 1093 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 75:
+#line 1093 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
     break;
 
-  case 79:
-#line 1094 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 76:
+#line 1094 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
     break;
 
-  case 80:
-#line 1095 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 77:
+#line 1095 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
     break;
 
-  case 81:
-#line 1098 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 78:
+#line 1098 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::C; ;}
     break;
 
-  case 82:
-#line 1099 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 79:
+#line 1099 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::C; ;}
     break;
 
-  case 83:
-#line 1100 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 80:
+#line 1100 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::CSRet; ;}
     break;
 
-  case 84:
-#line 1101 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 81:
+#line 1101 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::Fast; ;}
     break;
 
-  case 85:
-#line 1102 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 82:
+#line 1102 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::Cold; ;}
     break;
 
-  case 86:
-#line 1103 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 83:
+#line 1103 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
     break;
 
-  case 87:
-#line 1104 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 84:
+#line 1104 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
     break;
 
-  case 88:
-#line 1105 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 85:
+#line 1105 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
                    if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
                      GEN_ERROR("Calling conv too large!");
@@ -3301,77 +3272,77 @@
                  ;}
     break;
 
-  case 89:
-#line 1112 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 86:
+#line 1112 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = FunctionType::ZExtAttribute; ;}
     break;
 
-  case 90:
-#line 1113 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 87:
+#line 1113 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = FunctionType::SExtAttribute; ;}
     break;
 
-  case 91:
-#line 1116 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 88:
+#line 1116 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;}
     break;
 
-  case 92:
-#line 1117 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 89:
+#line 1117 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
                 (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs));
               ;}
     break;
 
-  case 93:
-#line 1122 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 90:
+#line 1122 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = FunctionType::NoReturnAttribute; ;}
     break;
 
-  case 95:
-#line 1126 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 92:
+#line 1126 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;}
     break;
 
-  case 96:
-#line 1127 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 93:
+#line 1127 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
                 (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs));
               ;}
     break;
 
-  case 97:
-#line 1134 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 94:
+#line 1134 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = 0; ;}
     break;
 
+  case 95:
+#line 1135 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+    {
+  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
+  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
+    GEN_ERROR("Alignment must be a power of two!");
+  CHECK_FOR_ERROR
+;}
+    break;
+
+  case 96:
+#line 1141 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+    { (yyval.UIntVal) = 0; ;}
+    break;
+
+  case 97:
+#line 1142 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+    {
+  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
+  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
+    GEN_ERROR("Alignment must be a power of two!");
+  CHECK_FOR_ERROR
+;}
+    break;
+
   case 98:
-#line 1135 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
-  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
-    GEN_ERROR("Alignment must be a power of two!");
-  CHECK_FOR_ERROR
-;}
-    break;
-
-  case 99:
-#line 1141 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.UIntVal) = 0; ;}
-    break;
-
-  case 100:
-#line 1142 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
-    {
-  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
-  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
-    GEN_ERROR("Alignment must be a power of two!");
-  CHECK_FOR_ERROR
-;}
-    break;
-
-  case 101:
-#line 1150 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1150 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
   for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
     if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
@@ -3381,28 +3352,28 @@
 ;}
     break;
 
-  case 102:
-#line 1158 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 99:
+#line 1158 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.StrVal) = 0; ;}
     break;
 
-  case 103:
-#line 1159 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 100:
+#line 1159 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
     break;
 
-  case 104:
-#line 1164 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 101:
+#line 1164 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {;}
     break;
 
-  case 105:
-#line 1165 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 102:
+#line 1165 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {;}
     break;
 
-  case 106:
-#line 1166 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 103:
+#line 1166 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV->setSection((yyvsp[0].StrVal));
     free((yyvsp[0].StrVal));
@@ -3410,8 +3381,8 @@
   ;}
     break;
 
-  case 107:
-#line 1171 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 104:
+#line 1171 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
       GEN_ERROR("Alignment must be a power of two!");
@@ -3420,24 +3391,24 @@
   ;}
     break;
 
-  case 116:
-#line 1187 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 110:
+#line 1187 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 117:
-#line 1191 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 111:
+#line 1191 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 118:
-#line 1195 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 112:
+#line 1195 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {                             // Pointer type?
     if (*(yyvsp[-1].TypeVal) == Type::LabelTy)
       GEN_ERROR("Cannot form a pointer to a basic block");
@@ -3447,8 +3418,8 @@
   ;}
     break;
 
-  case 119:
-#line 1202 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 113:
+#line 1202 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {            // Named types are also simple types...
     const Type* tmp = getTypeVal((yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
@@ -3456,8 +3427,8 @@
   ;}
     break;
 
-  case 120:
-#line 1207 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 114:
+#line 1207 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {                   // Type UpReference
     if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range!");
     OpaqueType *OT = OpaqueType::get();        // Use temporary placeholder
@@ -3468,8 +3439,8 @@
   ;}
     break;
 
-  case 121:
-#line 1215 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 115:
+#line 1215 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     std::vector<const Type*> Params;
     std::vector<FunctionType::ParameterAttributes> Attrs;
@@ -3490,8 +3461,8 @@
   ;}
     break;
 
-  case 122:
-#line 1233 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 116:
+#line 1233 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     std::vector<const Type*> Params;
     std::vector<FunctionType::ParameterAttributes> Attrs;
@@ -3511,8 +3482,8 @@
   ;}
     break;
 
-  case 123:
-#line 1251 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 117:
+#line 1251 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {          // Sized array type?
     (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
     delete (yyvsp[-1].TypeVal);
@@ -3520,14 +3491,14 @@
   ;}
     break;
 
-  case 124:
-#line 1256 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 118:
+#line 1256 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {          // Packed array type?
      const llvm::Type* ElemTy = (yyvsp[-1].TypeVal)->get();
      if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
         GEN_ERROR("Unsigned result not equal to signed result");
-     if (!ElemTy->isPrimitiveType())
-        GEN_ERROR("Elemental type of a PackedType must be primitive");
+     if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
+        GEN_ERROR("Element type of a PackedType must be primitive");
      if (!isPowerOf2_32((yyvsp[-3].UInt64Val)))
        GEN_ERROR("Vector length should be a power of 2!");
      (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PackedType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
@@ -3536,8 +3507,8 @@
   ;}
     break;
 
-  case 125:
-#line 1268 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 119:
+#line 1268 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {                        // Structure type?
     std::vector<const Type*> Elements;
     for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
@@ -3550,16 +3521,16 @@
   ;}
     break;
 
-  case 126:
-#line 1278 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 120:
+#line 1278 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {                                  // Empty structure type?
     (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 127:
-#line 1282 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 121:
+#line 1282 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     std::vector<const Type*> Elements;
     for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-2].TypeList)->begin(),
@@ -3572,24 +3543,24 @@
   ;}
     break;
 
-  case 128:
-#line 1292 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 122:
+#line 1292 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {                         // Empty structure type?
     (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 129:
-#line 1299 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 123:
+#line 1299 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { 
     (yyval.TypeWithAttrs).Ty = (yyvsp[-1].TypeVal); 
     (yyval.TypeWithAttrs).Attrs = (yyvsp[0].ParamAttrs); 
   ;}
     break;
 
-  case 130:
-#line 1306 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 124:
+#line 1306 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
@@ -3599,15 +3570,15 @@
   ;}
     break;
 
-  case 131:
-#line 1313 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 125:
+#line 1313 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeVal) = new PATypeHolder(Type::VoidTy);
   ;}
     break;
 
-  case 132:
-#line 1318 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 126:
+#line 1318 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
     (yyval.TypeWithAttrsList)->push_back((yyvsp[0].TypeWithAttrs));
@@ -3615,16 +3586,16 @@
   ;}
     break;
 
-  case 133:
-#line 1323 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 127:
+#line 1323 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     ((yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList))->push_back((yyvsp[0].TypeWithAttrs));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 135:
-#line 1331 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 129:
+#line 1331 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList);
     TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
@@ -3634,8 +3605,8 @@
   ;}
     break;
 
-  case 136:
-#line 1338 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 130:
+#line 1338 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeWithAttrsList) = new TypeWithAttrsList;
     TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
@@ -3645,16 +3616,16 @@
   ;}
     break;
 
-  case 137:
-#line 1345 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 131:
+#line 1345 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 138:
-#line 1353 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 132:
+#line 1353 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeList) = new std::list<PATypeHolder>();
     (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
@@ -3662,16 +3633,16 @@
   ;}
     break;
 
-  case 139:
-#line 1358 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 133:
+#line 1358 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 140:
-#line 1369 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 134:
+#line 1369 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { // Nonempty unsized arr
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
@@ -3702,8 +3673,8 @@
   ;}
     break;
 
-  case 141:
-#line 1397 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 135:
+#line 1397 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
@@ -3722,8 +3693,8 @@
   ;}
     break;
 
-  case 142:
-#line 1413 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 136:
+#line 1413 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
@@ -3755,8 +3726,8 @@
   ;}
     break;
 
-  case 143:
-#line 1442 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 137:
+#line 1442 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { // Nonempty unsized arr
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
@@ -3787,8 +3758,8 @@
   ;}
     break;
 
-  case 144:
-#line 1470 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 138:
+#line 1470 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
     if (STy == 0)
@@ -3816,8 +3787,8 @@
   ;}
     break;
 
-  case 145:
-#line 1495 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 139:
+#line 1495 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
@@ -3839,8 +3810,8 @@
   ;}
     break;
 
-  case 146:
-#line 1514 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 140:
+#line 1514 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     const StructType *STy = dyn_cast<StructType>((yyvsp[-5].TypeVal)->get());
     if (STy == 0)
@@ -3868,8 +3839,8 @@
   ;}
     break;
 
-  case 147:
-#line 1539 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 141:
+#line 1539 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
@@ -3891,8 +3862,8 @@
   ;}
     break;
 
-  case 148:
-#line 1558 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 142:
+#line 1558 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
@@ -3907,8 +3878,8 @@
   ;}
     break;
 
-  case 149:
-#line 1570 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 143:
+#line 1570 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
@@ -3918,8 +3889,8 @@
   ;}
     break;
 
-  case 150:
-#line 1577 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 144:
+#line 1577 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
@@ -3985,8 +3956,8 @@
   ;}
     break;
 
-  case 151:
-#line 1640 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 145:
+#line 1640 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
@@ -3999,8 +3970,8 @@
   ;}
     break;
 
-  case 152:
-#line 1650 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 146:
+#line 1650 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
@@ -4013,8 +3984,8 @@
   ;}
     break;
 
-  case 153:
-#line 1660 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 147:
+#line 1660 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {      // integral constants
     if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val)))
       GEN_ERROR("Constant value doesn't fit in type!");
@@ -4023,8 +3994,8 @@
   ;}
     break;
 
-  case 154:
-#line 1666 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 148:
+#line 1666 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {      // integral constants
     if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val)))
       GEN_ERROR("Constant value doesn't fit in type!");
@@ -4033,24 +4004,24 @@
   ;}
     break;
 
-  case 155:
-#line 1672 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 149:
+#line 1672 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {                      // Boolean constants
     (yyval.ConstVal) = ConstantInt::getTrue();
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 156:
-#line 1676 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 150:
+#line 1676 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {                     // Boolean constants
     (yyval.ConstVal) = ConstantInt::getFalse();
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 157:
-#line 1680 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 151:
+#line 1680 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {                   // Float & Double constants
     if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal)))
       GEN_ERROR("Floating point constant invalid for type!!");
@@ -4059,8 +4030,8 @@
   ;}
     break;
 
-  case 158:
-#line 1688 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 152:
+#line 1688 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
@@ -4077,8 +4048,8 @@
   ;}
     break;
 
-  case 159:
-#line 1702 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 153:
+#line 1702 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
       GEN_ERROR("GetElementPtr requires a pointer operand!");
@@ -4102,8 +4073,8 @@
   ;}
     break;
 
-  case 160:
-#line 1723 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 154:
+#line 1723 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[-5].ConstVal)->getType() != Type::Int1Ty)
       GEN_ERROR("Select condition must be of boolean type!");
@@ -4114,8 +4085,8 @@
   ;}
     break;
 
-  case 161:
-#line 1731 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 155:
+#line 1731 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
       GEN_ERROR("Binary operator types must match!");
@@ -4124,8 +4095,8 @@
   ;}
     break;
 
-  case 162:
-#line 1737 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 156:
+#line 1737 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
       GEN_ERROR("Logical operator types must match!");
@@ -4139,8 +4110,8 @@
   ;}
     break;
 
-  case 163:
-#line 1748 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 157:
+#line 1748 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
       GEN_ERROR("icmp operand types must match!");
@@ -4148,8 +4119,8 @@
   ;}
     break;
 
-  case 164:
-#line 1753 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 158:
+#line 1753 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
       GEN_ERROR("fcmp operand types must match!");
@@ -4157,8 +4128,8 @@
   ;}
     break;
 
-  case 165:
-#line 1758 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 159:
+#line 1758 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[-1].ConstVal)->getType() != Type::Int8Ty)
       GEN_ERROR("Shift count for shift constant must be i8 type!");
@@ -4170,8 +4141,8 @@
   ;}
     break;
 
-  case 166:
-#line 1767 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 160:
+#line 1767 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
       GEN_ERROR("Invalid extractelement operands!");
@@ -4180,8 +4151,8 @@
   ;}
     break;
 
-  case 167:
-#line 1773 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 161:
+#line 1773 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
       GEN_ERROR("Invalid insertelement operands!");
@@ -4190,8 +4161,8 @@
   ;}
     break;
 
-  case 168:
-#line 1779 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 162:
+#line 1779 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
       GEN_ERROR("Invalid shufflevector operands!");
@@ -4200,16 +4171,16 @@
   ;}
     break;
 
-  case 169:
-#line 1788 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 163:
+#line 1788 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 170:
-#line 1792 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 164:
+#line 1792 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ConstVector) = new std::vector<Constant*>();
     (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
@@ -4217,18 +4188,18 @@
   ;}
     break;
 
-  case 171:
-#line 1800 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 165:
+#line 1800 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.BoolVal) = false; ;}
     break;
 
-  case 172:
-#line 1800 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 166:
+#line 1800 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.BoolVal) = true; ;}
     break;
 
-  case 173:
-#line 1811 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 167:
+#line 1811 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
     CurModule.ModuleDone();
@@ -4236,8 +4207,8 @@
   ;}
     break;
 
-  case 174:
-#line 1816 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 168:
+#line 1816 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
     CurModule.ModuleDone();
@@ -4245,40 +4216,40 @@
   ;}
     break;
 
-  case 177:
-#line 1829 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 171:
+#line 1829 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { CurFun.isDeclare = false ;}
     break;
 
-  case 178:
-#line 1829 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 172:
+#line 1829 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     CurFun.FunctionDone();
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 179:
-#line 1833 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 173:
+#line 1833 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { CurFun.isDeclare = true; ;}
     break;
 
-  case 180:
-#line 1833 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 174:
+#line 1833 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 181:
-#line 1836 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 175:
+#line 1836 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 182:
-#line 1839 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 176:
+#line 1839 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     // Emit an error if there are any unresolved types left.
     if (!CurModule.LateResolveTypes.empty()) {
@@ -4293,8 +4264,8 @@
   ;}
     break;
 
-  case 183:
-#line 1851 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 177:
+#line 1851 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
@@ -4321,8 +4292,8 @@
   ;}
     break;
 
-  case 184:
-#line 1875 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 178:
+#line 1875 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     ResolveTypeTo((yyvsp[-2].StrVal), (yyvsp[0].PrimType));
 
@@ -4336,8 +4307,8 @@
   ;}
     break;
 
-  case 185:
-#line 1886 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 179:
+#line 1886 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { /* "Externally Visible" Linkage */
     if ((yyvsp[0].ConstVal) == 0) 
       GEN_ERROR("Global value initializer is not a constant!");
@@ -4347,15 +4318,15 @@
   ;}
     break;
 
-  case 186:
-#line 1892 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 180:
+#line 1892 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV = 0;
   ;}
     break;
 
-  case 187:
-#line 1895 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 181:
+#line 1895 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[0].ConstVal) == 0) 
       GEN_ERROR("Global value initializer is not a constant!");
@@ -4364,15 +4335,15 @@
   ;}
     break;
 
-  case 188:
-#line 1900 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 182:
+#line 1900 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV = 0;
   ;}
     break;
 
-  case 189:
-#line 1903 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 183:
+#line 1903 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
@@ -4382,30 +4353,30 @@
   ;}
     break;
 
-  case 190:
-#line 1909 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 184:
+#line 1909 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV = 0;
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 191:
-#line 1913 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 185:
+#line 1913 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { 
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 192:
-#line 1916 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 186:
+#line 1916 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 193:
-#line 1922 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 187:
+#line 1922 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
   const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
   char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
@@ -4420,26 +4391,26 @@
 ;}
     break;
 
-  case 194:
-#line 1935 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 188:
+#line 1935 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Endianness) = Module::BigEndian; ;}
     break;
 
-  case 195:
-#line 1936 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 189:
+#line 1936 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Endianness) = Module::LittleEndian; ;}
     break;
 
-  case 196:
-#line 1938 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 190:
+#line 1938 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     CurModule.CurrentModule->setEndianness((yyvsp[0].Endianness));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 197:
-#line 1942 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 191:
+#line 1942 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[0].UInt64Val) == 32)
       CurModule.CurrentModule->setPointerSize(Module::Pointer32);
@@ -4451,54 +4422,54 @@
   ;}
     break;
 
-  case 198:
-#line 1951 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 192:
+#line 1951 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
     free((yyvsp[0].StrVal));
   ;}
     break;
 
-  case 199:
-#line 1955 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 193:
+#line 1955 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
     free((yyvsp[0].StrVal));
   ;}
     break;
 
+  case 195:
+#line 1962 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+    {
+          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
+          free((yyvsp[0].StrVal));
+          CHECK_FOR_ERROR
+        ;}
+    break;
+
+  case 196:
+#line 1967 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+    {
+          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
+          free((yyvsp[0].StrVal));
+          CHECK_FOR_ERROR
+        ;}
+    break;
+
+  case 197:
+#line 1972 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+    {
+          CHECK_FOR_ERROR
+        ;}
+    break;
+
   case 201:
-#line 1962 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
-    {
-          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
-          free((yyvsp[0].StrVal));
-          CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 202:
-#line 1967 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
-    {
-          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
-          free((yyvsp[0].StrVal));
-          CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 203:
-#line 1972 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
-    {
-          CHECK_FOR_ERROR
-        ;}
-    break;
-
-  case 207:
-#line 1982 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1982 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.StrVal) = 0; ;}
     break;
 
-  case 208:
-#line 1984 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 202:
+#line 1984 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
@@ -4511,8 +4482,8 @@
   ;}
     break;
 
-  case 209:
-#line 1994 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 203:
+#line 1994 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
@@ -4525,16 +4496,16 @@
   ;}
     break;
 
-  case 210:
-#line 2005 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 204:
+#line 2005 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = (yyvsp[0].ArgList);
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 211:
-#line 2009 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 205:
+#line 2009 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = (yyvsp[-2].ArgList);
     struct ArgListEntry E;
@@ -4546,8 +4517,8 @@
   ;}
     break;
 
-  case 212:
-#line 2018 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 206:
+#line 2018 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = new ArgListType;
     struct ArgListEntry E;
@@ -4559,16 +4530,16 @@
   ;}
     break;
 
-  case 213:
-#line 2027 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 207:
+#line 2027 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = 0;
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 214:
-#line 2033 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 208:
+#line 2033 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
   UnEscapeLexed((yyvsp[-6].StrVal));
   std::string FunctionName((yyvsp[-6].StrVal));
@@ -4674,8 +4645,8 @@
 ;}
     break;
 
-  case 217:
-#line 2139 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 211:
+#line 2139 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
   (yyval.FunctionVal) = CurFun.CurrentFunction;
 
@@ -4685,16 +4656,16 @@
 ;}
     break;
 
-  case 220:
-#line 2149 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 214:
+#line 2149 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
   (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
   CHECK_FOR_ERROR
 ;}
     break;
 
-  case 221:
-#line 2154 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 215:
+#line 2154 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     CurFun.CurrentFunction->setLinkage((yyvsp[-1].Linkage));
     (yyval.FunctionVal) = CurFun.CurrentFunction;
@@ -4703,88 +4674,88 @@
   ;}
     break;
 
-  case 222:
-#line 2165 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 216:
+#line 2165 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 223:
-#line 2169 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 217:
+#line 2169 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 224:
-#line 2174 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 218:
+#line 2174 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {    // A reference to a direct constant
     (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 225:
-#line 2178 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 219:
+#line 2178 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 226:
-#line 2182 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 220:
+#line 2182 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {                     // Perhaps it's an FP constant?
     (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 227:
-#line 2186 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 221:
+#line 2186 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue());
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 228:
-#line 2190 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 222:
+#line 2190 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse());
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 229:
-#line 2194 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 223:
+#line 2194 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::createNull();
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 230:
-#line 2198 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 224:
+#line 2198 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::createUndef();
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 231:
-#line 2202 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 225:
+#line 2202 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {     // A vector zero constant.
     (yyval.ValIDVal) = ValID::createZeroInit();
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 232:
-#line 2206 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 226:
+#line 2206 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { // Nonempty unsized packed vector
     const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
     int NumElements = (yyvsp[-1].ConstVector)->size(); 
@@ -4812,16 +4783,16 @@
   ;}
     break;
 
-  case 233:
-#line 2231 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 227:
+#line 2231 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 234:
-#line 2235 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 228:
+#line 2235 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
     std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
@@ -4834,24 +4805,24 @@
   ;}
     break;
 
-  case 235:
-#line 2249 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 229:
+#line 2249 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {  // Is it an integer reference...?
     (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 236:
-#line 2253 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 230:
+#line 2253 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {                   // Is it a named reference...?
     (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 239:
-#line 2265 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 233:
+#line 2265 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
@@ -4861,24 +4832,24 @@
   ;}
     break;
 
-  case 240:
-#line 2274 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 234:
+#line 2274 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 241:
-#line 2278 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 235:
+#line 2278 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { // Do not allow functions with 0 basic blocks   
     (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 242:
-#line 2287 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 236:
+#line 2287 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
     CHECK_FOR_ERROR
@@ -4891,8 +4862,8 @@
   ;}
     break;
 
-  case 243:
-#line 2298 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 237:
+#line 2298 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[0].InstVal)))
       if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
@@ -4904,8 +4875,8 @@
   ;}
     break;
 
-  case 244:
-#line 2307 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 238:
+#line 2307 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BasicBlockVal) = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
     CHECK_FOR_ERROR
@@ -4920,8 +4891,8 @@
   ;}
     break;
 
-  case 245:
-#line 2319 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 239:
+#line 2319 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BasicBlockVal) = getBBVal(ValID::create((yyvsp[0].StrVal)), true);
     CHECK_FOR_ERROR
@@ -4936,24 +4907,24 @@
   ;}
     break;
 
-  case 246:
-#line 2332 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 240:
+#line 2332 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {              // Return with a result...
     (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 247:
-#line 2336 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 241:
+#line 2336 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {                                       // Return with no result...
     (yyval.TermInstVal) = new ReturnInst();
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 248:
-#line 2340 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 242:
+#line 2340 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {                         // Unconditional Branch...
     BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
@@ -4961,8 +4932,8 @@
   ;}
     break;
 
-  case 249:
-#line 2345 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 243:
+#line 2345 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {  
     BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal));
     CHECK_FOR_ERROR
@@ -4974,8 +4945,8 @@
   ;}
     break;
 
-  case 250:
-#line 2354 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 244:
+#line 2354 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     Value* tmpVal = getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal));
     CHECK_FOR_ERROR
@@ -4997,8 +4968,8 @@
   ;}
     break;
 
-  case 251:
-#line 2373 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 245:
+#line 2373 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     Value* tmpVal = getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal));
     CHECK_FOR_ERROR
@@ -5010,8 +4981,8 @@
   ;}
     break;
 
-  case 252:
-#line 2383 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 246:
+#line 2383 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
 
     // Handle the short syntax
@@ -5080,24 +5051,24 @@
   ;}
     break;
 
-  case 253:
-#line 2449 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 247:
+#line 2449 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TermInstVal) = new UnwindInst();
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 254:
-#line 2453 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 248:
+#line 2453 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TermInstVal) = new UnreachableInst();
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 255:
-#line 2460 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 249:
+#line 2460 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.JumpTable) = (yyvsp[-5].JumpTable);
     Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
@@ -5111,8 +5082,8 @@
   ;}
     break;
 
-  case 256:
-#line 2471 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 250:
+#line 2471 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
     Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
@@ -5127,8 +5098,8 @@
   ;}
     break;
 
-  case 257:
-#line 2484 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 251:
+#line 2484 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
   // Is this definition named?? if so, assign the name...
   setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
@@ -5139,8 +5110,8 @@
 ;}
     break;
 
-  case 258:
-#line 2493 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 252:
+#line 2493 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {    // Used for PHI nodes
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-5].TypeVal))->getDescription());
@@ -5154,8 +5125,8 @@
   ;}
     break;
 
-  case 259:
-#line 2504 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 253:
+#line 2504 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.PHIList) = (yyvsp[-6].PHIList);
     Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal));
@@ -5166,8 +5137,8 @@
   ;}
     break;
 
-  case 260:
-#line 2514 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 254:
+#line 2514 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {    
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
@@ -5178,8 +5149,8 @@
   ;}
     break;
 
-  case 261:
-#line 2522 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 255:
+#line 2522 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
@@ -5190,18 +5161,18 @@
   ;}
     break;
 
-  case 262:
-#line 2530 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 256:
+#line 2530 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ValueRefList) = new ValueRefList(); ;}
     break;
 
-  case 263:
-#line 2533 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 257:
+#line 2533 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.ValueList) = new std::vector<Value*>(); ;}
     break;
 
-  case 264:
-#line 2534 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 258:
+#line 2534 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValueList) = (yyvsp[-2].ValueList);
     (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
@@ -5209,24 +5180,24 @@
   ;}
     break;
 
-  case 265:
-#line 2541 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 259:
+#line 2541 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 266:
-#line 2545 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 260:
+#line 2545 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 267:
-#line 2550 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 261:
+#line 2550 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
@@ -5250,8 +5221,8 @@
   ;}
     break;
 
-  case 268:
-#line 2571 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 262:
+#line 2571 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
@@ -5271,8 +5242,8 @@
   ;}
     break;
 
-  case 269:
-#line 2588 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 263:
+#line 2588 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
@@ -5288,8 +5259,8 @@
   ;}
     break;
 
-  case 270:
-#line 2601 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 264:
+#line 2601 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
@@ -5305,8 +5276,8 @@
   ;}
     break;
 
-  case 271:
-#line 2614 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 265:
+#line 2614 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     cerr << "WARNING: Use of eliminated 'not' instruction:"
          << " Replacing with 'xor'.\n";
@@ -5322,8 +5293,8 @@
   ;}
     break;
 
-  case 272:
-#line 2627 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 266:
+#line 2627 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[0].ValueVal)->getType() != Type::Int8Ty)
       GEN_ERROR("Shift amount must be i8 type!");
@@ -5335,8 +5306,8 @@
   ;}
     break;
 
-  case 273:
-#line 2636 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 267:
+#line 2636 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
@@ -5352,8 +5323,8 @@
   ;}
     break;
 
-  case 274:
-#line 2649 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 268:
+#line 2649 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[-4].ValueVal)->getType() != Type::Int1Ty)
       GEN_ERROR("select condition must be boolean!");
@@ -5364,8 +5335,8 @@
   ;}
     break;
 
-  case 275:
-#line 2657 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 269:
+#line 2657 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
@@ -5375,8 +5346,8 @@
   ;}
     break;
 
-  case 276:
-#line 2664 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 270:
+#line 2664 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
       GEN_ERROR("Invalid extractelement operands!");
@@ -5385,8 +5356,8 @@
   ;}
     break;
 
-  case 277:
-#line 2670 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 271:
+#line 2670 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
       GEN_ERROR("Invalid insertelement operands!");
@@ -5395,8 +5366,8 @@
   ;}
     break;
 
-  case 278:
-#line 2676 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 272:
+#line 2676 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
       GEN_ERROR("Invalid shufflevector operands!");
@@ -5405,8 +5376,8 @@
   ;}
     break;
 
-  case 279:
-#line 2682 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 273:
+#line 2682 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
     if (!Ty->isFirstClassType())
@@ -5424,8 +5395,8 @@
   ;}
     break;
 
-  case 280:
-#line 2698 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 274:
+#line 2698 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
 
     // Handle the short syntax
@@ -5490,32 +5461,32 @@
   ;}
     break;
 
-  case 281:
-#line 2760 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 275:
+#line 2760 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.InstVal) = (yyvsp[0].InstVal);
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 282:
-#line 2765 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 276:
+#line 2765 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 283:
-#line 2769 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 277:
+#line 2769 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
   ;}
     break;
 
-  case 284:
-#line 2776 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 278:
+#line 2776 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
@@ -5525,8 +5496,8 @@
   ;}
     break;
 
-  case 285:
-#line 2783 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 279:
+#line 2783 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
@@ -5537,8 +5508,8 @@
   ;}
     break;
 
-  case 286:
-#line 2791 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 280:
+#line 2791 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
@@ -5548,8 +5519,8 @@
   ;}
     break;
 
-  case 287:
-#line 2798 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 281:
+#line 2798 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
@@ -5560,8 +5531,8 @@
   ;}
     break;
 
-  case 288:
-#line 2806 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 282:
+#line 2806 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
       GEN_ERROR("Trying to free nonpointer type " + 
@@ -5571,8 +5542,8 @@
   ;}
     break;
 
-  case 289:
-#line 2814 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 283:
+#line 2814 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
@@ -5589,8 +5560,8 @@
   ;}
     break;
 
-  case 290:
-#line 2828 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 284:
+#line 2828 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
@@ -5610,8 +5581,8 @@
   ;}
     break;
 
-  case 291:
-#line 2845 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 285:
+#line 2845 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
@@ -5634,7 +5605,7 @@
     }
 
 /* Line 1126 of yacc.c.  */
-#line 5638 "llvmAsmParser.tab.c"
+#line 5609 "llvmAsmParser.tab.c"
 
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -5902,7 +5873,7 @@
 }
 
 
-#line 2862 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 2862 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
 
 
 // common code from the two 'RunVMAsmParser' functions
diff --git a/lib/AsmParser/llvmAsmParser.h.cvs b/lib/AsmParser/llvmAsmParser.h.cvs
index 645b041..5433242 100644
--- a/lib/AsmParser/llvmAsmParser.h.cvs
+++ b/lib/AsmParser/llvmAsmParser.h.cvs
@@ -36,132 +36,129 @@
      FPVAL = 262,
      VOID = 263,
      BOOL = 264,
-     INT8 = 265,
-     INT16 = 266,
-     INT32 = 267,
-     INT64 = 268,
-     FLOAT = 269,
-     DOUBLE = 270,
-     LABEL = 271,
-     TYPE = 272,
-     VAR_ID = 273,
-     LABELSTR = 274,
-     STRINGCONSTANT = 275,
-     IMPLEMENTATION = 276,
-     ZEROINITIALIZER = 277,
-     TRUETOK = 278,
-     FALSETOK = 279,
-     BEGINTOK = 280,
-     ENDTOK = 281,
-     DECLARE = 282,
-     DEFINE = 283,
-     GLOBAL = 284,
-     CONSTANT = 285,
-     SECTION = 286,
-     VOLATILE = 287,
-     TO = 288,
-     DOTDOTDOT = 289,
-     NULL_TOK = 290,
-     UNDEF = 291,
-     INTERNAL = 292,
-     LINKONCE = 293,
-     WEAK = 294,
-     APPENDING = 295,
-     DLLIMPORT = 296,
-     DLLEXPORT = 297,
-     EXTERN_WEAK = 298,
-     OPAQUE = 299,
-     NOT = 300,
-     EXTERNAL = 301,
-     TARGET = 302,
-     TRIPLE = 303,
-     ENDIAN = 304,
-     POINTERSIZE = 305,
-     LITTLE = 306,
-     BIG = 307,
-     ALIGN = 308,
-     DEPLIBS = 309,
-     CALL = 310,
-     TAIL = 311,
-     ASM_TOK = 312,
-     MODULE = 313,
-     SIDEEFFECT = 314,
-     CC_TOK = 315,
-     CCC_TOK = 316,
-     CSRETCC_TOK = 317,
-     FASTCC_TOK = 318,
-     COLDCC_TOK = 319,
-     X86_STDCALLCC_TOK = 320,
-     X86_FASTCALLCC_TOK = 321,
-     DATALAYOUT = 322,
-     RET = 323,
-     BR = 324,
-     SWITCH = 325,
-     INVOKE = 326,
-     UNWIND = 327,
-     UNREACHABLE = 328,
-     ADD = 329,
-     SUB = 330,
-     MUL = 331,
-     UDIV = 332,
-     SDIV = 333,
-     FDIV = 334,
-     UREM = 335,
-     SREM = 336,
-     FREM = 337,
-     AND = 338,
-     OR = 339,
-     XOR = 340,
-     ICMP = 341,
-     FCMP = 342,
-     EQ = 343,
-     NE = 344,
-     SLT = 345,
-     SGT = 346,
-     SLE = 347,
-     SGE = 348,
-     ULT = 349,
-     UGT = 350,
-     ULE = 351,
-     UGE = 352,
-     OEQ = 353,
-     ONE = 354,
-     OLT = 355,
-     OGT = 356,
-     OLE = 357,
-     OGE = 358,
-     ORD = 359,
-     UNO = 360,
-     UEQ = 361,
-     UNE = 362,
-     MALLOC = 363,
-     ALLOCA = 364,
-     FREE = 365,
-     LOAD = 366,
-     STORE = 367,
-     GETELEMENTPTR = 368,
-     TRUNC = 369,
-     ZEXT = 370,
-     SEXT = 371,
-     FPTRUNC = 372,
-     FPEXT = 373,
-     BITCAST = 374,
-     UITOFP = 375,
-     SITOFP = 376,
-     FPTOUI = 377,
-     FPTOSI = 378,
-     INTTOPTR = 379,
-     PTRTOINT = 380,
-     PHI_TOK = 381,
-     SELECT = 382,
-     SHL = 383,
-     LSHR = 384,
-     ASHR = 385,
-     VAARG = 386,
-     EXTRACTELEMENT = 387,
-     INSERTELEMENT = 388,
-     SHUFFLEVECTOR = 389,
-     NORETURN = 390
+     INTTYPE = 265,
+     FLOAT = 266,
+     DOUBLE = 267,
+     LABEL = 268,
+     TYPE = 269,
+     VAR_ID = 270,
+     LABELSTR = 271,
+     STRINGCONSTANT = 272,
+     IMPLEMENTATION = 273,
+     ZEROINITIALIZER = 274,
+     TRUETOK = 275,
+     FALSETOK = 276,
+     BEGINTOK = 277,
+     ENDTOK = 278,
+     DECLARE = 279,
+     DEFINE = 280,
+     GLOBAL = 281,
+     CONSTANT = 282,
+     SECTION = 283,
+     VOLATILE = 284,
+     TO = 285,
+     DOTDOTDOT = 286,
+     NULL_TOK = 287,
+     UNDEF = 288,
+     INTERNAL = 289,
+     LINKONCE = 290,
+     WEAK = 291,
+     APPENDING = 292,
+     DLLIMPORT = 293,
+     DLLEXPORT = 294,
+     EXTERN_WEAK = 295,
+     OPAQUE = 296,
+     NOT = 297,
+     EXTERNAL = 298,
+     TARGET = 299,
+     TRIPLE = 300,
+     ENDIAN = 301,
+     POINTERSIZE = 302,
+     LITTLE = 303,
+     BIG = 304,
+     ALIGN = 305,
+     DEPLIBS = 306,
+     CALL = 307,
+     TAIL = 308,
+     ASM_TOK = 309,
+     MODULE = 310,
+     SIDEEFFECT = 311,
+     CC_TOK = 312,
+     CCC_TOK = 313,
+     CSRETCC_TOK = 314,
+     FASTCC_TOK = 315,
+     COLDCC_TOK = 316,
+     X86_STDCALLCC_TOK = 317,
+     X86_FASTCALLCC_TOK = 318,
+     DATALAYOUT = 319,
+     RET = 320,
+     BR = 321,
+     SWITCH = 322,
+     INVOKE = 323,
+     UNWIND = 324,
+     UNREACHABLE = 325,
+     ADD = 326,
+     SUB = 327,
+     MUL = 328,
+     UDIV = 329,
+     SDIV = 330,
+     FDIV = 331,
+     UREM = 332,
+     SREM = 333,
+     FREM = 334,
+     AND = 335,
+     OR = 336,
+     XOR = 337,
+     ICMP = 338,
+     FCMP = 339,
+     EQ = 340,
+     NE = 341,
+     SLT = 342,
+     SGT = 343,
+     SLE = 344,
+     SGE = 345,
+     ULT = 346,
+     UGT = 347,
+     ULE = 348,
+     UGE = 349,
+     OEQ = 350,
+     ONE = 351,
+     OLT = 352,
+     OGT = 353,
+     OLE = 354,
+     OGE = 355,
+     ORD = 356,
+     UNO = 357,
+     UEQ = 358,
+     UNE = 359,
+     MALLOC = 360,
+     ALLOCA = 361,
+     FREE = 362,
+     LOAD = 363,
+     STORE = 364,
+     GETELEMENTPTR = 365,
+     TRUNC = 366,
+     ZEXT = 367,
+     SEXT = 368,
+     FPTRUNC = 369,
+     FPEXT = 370,
+     BITCAST = 371,
+     UITOFP = 372,
+     SITOFP = 373,
+     FPTOUI = 374,
+     FPTOSI = 375,
+     INTTOPTR = 376,
+     PTRTOINT = 377,
+     PHI_TOK = 378,
+     SELECT = 379,
+     SHL = 380,
+     LSHR = 381,
+     ASHR = 382,
+     VAARG = 383,
+     EXTRACTELEMENT = 384,
+     INSERTELEMENT = 385,
+     SHUFFLEVECTOR = 386,
+     NORETURN = 387
    };
 #endif
 /* Tokens.  */
@@ -172,138 +169,135 @@
 #define FPVAL 262
 #define VOID 263
 #define BOOL 264
-#define INT8 265
-#define INT16 266
-#define INT32 267
-#define INT64 268
-#define FLOAT 269
-#define DOUBLE 270
-#define LABEL 271
-#define TYPE 272
-#define VAR_ID 273
-#define LABELSTR 274
-#define STRINGCONSTANT 275
-#define IMPLEMENTATION 276
-#define ZEROINITIALIZER 277
-#define TRUETOK 278
-#define FALSETOK 279
-#define BEGINTOK 280
-#define ENDTOK 281
-#define DECLARE 282
-#define DEFINE 283
-#define GLOBAL 284
-#define CONSTANT 285
-#define SECTION 286
-#define VOLATILE 287
-#define TO 288
-#define DOTDOTDOT 289
-#define NULL_TOK 290
-#define UNDEF 291
-#define INTERNAL 292
-#define LINKONCE 293
-#define WEAK 294
-#define APPENDING 295
-#define DLLIMPORT 296
-#define DLLEXPORT 297
-#define EXTERN_WEAK 298
-#define OPAQUE 299
-#define NOT 300
-#define EXTERNAL 301
-#define TARGET 302
-#define TRIPLE 303
-#define ENDIAN 304
-#define POINTERSIZE 305
-#define LITTLE 306
-#define BIG 307
-#define ALIGN 308
-#define DEPLIBS 309
-#define CALL 310
-#define TAIL 311
-#define ASM_TOK 312
-#define MODULE 313
-#define SIDEEFFECT 314
-#define CC_TOK 315
-#define CCC_TOK 316
-#define CSRETCC_TOK 317
-#define FASTCC_TOK 318
-#define COLDCC_TOK 319
-#define X86_STDCALLCC_TOK 320
-#define X86_FASTCALLCC_TOK 321
-#define DATALAYOUT 322
-#define RET 323
-#define BR 324
-#define SWITCH 325
-#define INVOKE 326
-#define UNWIND 327
-#define UNREACHABLE 328
-#define ADD 329
-#define SUB 330
-#define MUL 331
-#define UDIV 332
-#define SDIV 333
-#define FDIV 334
-#define UREM 335
-#define SREM 336
-#define FREM 337
-#define AND 338
-#define OR 339
-#define XOR 340
-#define ICMP 341
-#define FCMP 342
-#define EQ 343
-#define NE 344
-#define SLT 345
-#define SGT 346
-#define SLE 347
-#define SGE 348
-#define ULT 349
-#define UGT 350
-#define ULE 351
-#define UGE 352
-#define OEQ 353
-#define ONE 354
-#define OLT 355
-#define OGT 356
-#define OLE 357
-#define OGE 358
-#define ORD 359
-#define UNO 360
-#define UEQ 361
-#define UNE 362
-#define MALLOC 363
-#define ALLOCA 364
-#define FREE 365
-#define LOAD 366
-#define STORE 367
-#define GETELEMENTPTR 368
-#define TRUNC 369
-#define ZEXT 370
-#define SEXT 371
-#define FPTRUNC 372
-#define FPEXT 373
-#define BITCAST 374
-#define UITOFP 375
-#define SITOFP 376
-#define FPTOUI 377
-#define FPTOSI 378
-#define INTTOPTR 379
-#define PTRTOINT 380
-#define PHI_TOK 381
-#define SELECT 382
-#define SHL 383
-#define LSHR 384
-#define ASHR 385
-#define VAARG 386
-#define EXTRACTELEMENT 387
-#define INSERTELEMENT 388
-#define SHUFFLEVECTOR 389
-#define NORETURN 390
+#define INTTYPE 265
+#define FLOAT 266
+#define DOUBLE 267
+#define LABEL 268
+#define TYPE 269
+#define VAR_ID 270
+#define LABELSTR 271
+#define STRINGCONSTANT 272
+#define IMPLEMENTATION 273
+#define ZEROINITIALIZER 274
+#define TRUETOK 275
+#define FALSETOK 276
+#define BEGINTOK 277
+#define ENDTOK 278
+#define DECLARE 279
+#define DEFINE 280
+#define GLOBAL 281
+#define CONSTANT 282
+#define SECTION 283
+#define VOLATILE 284
+#define TO 285
+#define DOTDOTDOT 286
+#define NULL_TOK 287
+#define UNDEF 288
+#define INTERNAL 289
+#define LINKONCE 290
+#define WEAK 291
+#define APPENDING 292
+#define DLLIMPORT 293
+#define DLLEXPORT 294
+#define EXTERN_WEAK 295
+#define OPAQUE 296
+#define NOT 297
+#define EXTERNAL 298
+#define TARGET 299
+#define TRIPLE 300
+#define ENDIAN 301
+#define POINTERSIZE 302
+#define LITTLE 303
+#define BIG 304
+#define ALIGN 305
+#define DEPLIBS 306
+#define CALL 307
+#define TAIL 308
+#define ASM_TOK 309
+#define MODULE 310
+#define SIDEEFFECT 311
+#define CC_TOK 312
+#define CCC_TOK 313
+#define CSRETCC_TOK 314
+#define FASTCC_TOK 315
+#define COLDCC_TOK 316
+#define X86_STDCALLCC_TOK 317
+#define X86_FASTCALLCC_TOK 318
+#define DATALAYOUT 319
+#define RET 320
+#define BR 321
+#define SWITCH 322
+#define INVOKE 323
+#define UNWIND 324
+#define UNREACHABLE 325
+#define ADD 326
+#define SUB 327
+#define MUL 328
+#define UDIV 329
+#define SDIV 330
+#define FDIV 331
+#define UREM 332
+#define SREM 333
+#define FREM 334
+#define AND 335
+#define OR 336
+#define XOR 337
+#define ICMP 338
+#define FCMP 339
+#define EQ 340
+#define NE 341
+#define SLT 342
+#define SGT 343
+#define SLE 344
+#define SGE 345
+#define ULT 346
+#define UGT 347
+#define ULE 348
+#define UGE 349
+#define OEQ 350
+#define ONE 351
+#define OLT 352
+#define OGT 353
+#define OLE 354
+#define OGE 355
+#define ORD 356
+#define UNO 357
+#define UEQ 358
+#define UNE 359
+#define MALLOC 360
+#define ALLOCA 361
+#define FREE 362
+#define LOAD 363
+#define STORE 364
+#define GETELEMENTPTR 365
+#define TRUNC 366
+#define ZEXT 367
+#define SEXT 368
+#define FPTRUNC 369
+#define FPEXT 370
+#define BITCAST 371
+#define UITOFP 372
+#define SITOFP 373
+#define FPTOUI 374
+#define FPTOSI 375
+#define INTTOPTR 376
+#define PTRTOINT 377
+#define PHI_TOK 378
+#define SELECT 379
+#define SHL 380
+#define LSHR 381
+#define ASHR 382
+#define VAARG 383
+#define EXTRACTELEMENT 384
+#define INSERTELEMENT 385
+#define SHUFFLEVECTOR 386
+#define NORETURN 387
 
 
 
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 876 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 876 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
 typedef union YYSTYPE {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
@@ -350,7 +344,7 @@
   llvm::FCmpInst::Predicate         FPredicate;
 } YYSTYPE;
 /* Line 1447 of yacc.c.  */
-#line 354 "llvmAsmParser.tab.h"
+#line 348 "llvmAsmParser.tab.h"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y
index dbd6188..57ab7c5 100644
--- a/lib/AsmParser/llvmAsmParser.y
+++ b/lib/AsmParser/llvmAsmParser.y
@@ -961,7 +961,7 @@
 // Built in types...
 %type  <TypeVal> Types ResultTypes
 %type  <PrimType> IntType FPType PrimType           // Classifications
-%token <PrimType> VOID BOOL INT8 INT16 INT32 INT64
+%token <PrimType> VOID BOOL INTTYPE 
 %token <PrimType> FLOAT DOUBLE LABEL
 %token TYPE
 
@@ -1054,7 +1054,7 @@
 
 // These are some types that allow classification if we only want a particular 
 // thing... for example, only a signed, unsigned, or integral type.
-IntType :  INT64 | INT32 | INT16 | INT8;
+IntType :  INTTYPE;
 FPType   : FLOAT | DOUBLE;
 
 // OptAssign - Value producing statements have an optional assignment component
@@ -1181,7 +1181,7 @@
 
 // Derived types are added later...
 //
-PrimType : BOOL | INT8 | INT16  | INT32 | INT64 | FLOAT | DOUBLE | LABEL ;
+PrimType : BOOL | INTTYPE | FLOAT | DOUBLE | LABEL ;
 
 Types 
   : OPAQUE {
@@ -1257,8 +1257,8 @@
      const llvm::Type* ElemTy = $4->get();
      if ((unsigned)$2 != $2)
         GEN_ERROR("Unsigned result not equal to signed result");
-     if (!ElemTy->isPrimitiveType())
-        GEN_ERROR("Elemental type of a PackedType must be primitive");
+     if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
+        GEN_ERROR("Element type of a PackedType must be primitive");
      if (!isPowerOf2_32($2))
        GEN_ERROR("Vector length should be a power of 2!");
      $$ = new PATypeHolder(HandleUpRefs(PackedType::get(*$4, (unsigned)$2)));
@@ -2780,7 +2780,7 @@
     delete $2;
     CHECK_FOR_ERROR
   }
-  | MALLOC Types ',' INT32 ValueRef OptCAlign {
+  | MALLOC Types ',' INTTYPE ValueRef OptCAlign {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*$2)->getDescription());
     Value* tmpVal = getVal($4, $5);
@@ -2795,7 +2795,7 @@
     delete $2;
     CHECK_FOR_ERROR
   }
-  | ALLOCA Types ',' INT32 ValueRef OptCAlign {
+  | ALLOCA Types ',' INTTYPE ValueRef OptCAlign {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*$2)->getDescription());
     Value* tmpVal = getVal($4, $5);
diff --git a/lib/AsmParser/llvmAsmParser.y.cvs b/lib/AsmParser/llvmAsmParser.y.cvs
index dbd6188..57ab7c5 100644
--- a/lib/AsmParser/llvmAsmParser.y.cvs
+++ b/lib/AsmParser/llvmAsmParser.y.cvs
@@ -961,7 +961,7 @@
 // Built in types...
 %type  <TypeVal> Types ResultTypes
 %type  <PrimType> IntType FPType PrimType           // Classifications
-%token <PrimType> VOID BOOL INT8 INT16 INT32 INT64
+%token <PrimType> VOID BOOL INTTYPE 
 %token <PrimType> FLOAT DOUBLE LABEL
 %token TYPE
 
@@ -1054,7 +1054,7 @@
 
 // These are some types that allow classification if we only want a particular 
 // thing... for example, only a signed, unsigned, or integral type.
-IntType :  INT64 | INT32 | INT16 | INT8;
+IntType :  INTTYPE;
 FPType   : FLOAT | DOUBLE;
 
 // OptAssign - Value producing statements have an optional assignment component
@@ -1181,7 +1181,7 @@
 
 // Derived types are added later...
 //
-PrimType : BOOL | INT8 | INT16  | INT32 | INT64 | FLOAT | DOUBLE | LABEL ;
+PrimType : BOOL | INTTYPE | FLOAT | DOUBLE | LABEL ;
 
 Types 
   : OPAQUE {
@@ -1257,8 +1257,8 @@
      const llvm::Type* ElemTy = $4->get();
      if ((unsigned)$2 != $2)
         GEN_ERROR("Unsigned result not equal to signed result");
-     if (!ElemTy->isPrimitiveType())
-        GEN_ERROR("Elemental type of a PackedType must be primitive");
+     if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
+        GEN_ERROR("Element type of a PackedType must be primitive");
      if (!isPowerOf2_32($2))
        GEN_ERROR("Vector length should be a power of 2!");
      $$ = new PATypeHolder(HandleUpRefs(PackedType::get(*$4, (unsigned)$2)));
@@ -2780,7 +2780,7 @@
     delete $2;
     CHECK_FOR_ERROR
   }
-  | MALLOC Types ',' INT32 ValueRef OptCAlign {
+  | MALLOC Types ',' INTTYPE ValueRef OptCAlign {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*$2)->getDescription());
     Value* tmpVal = getVal($4, $5);
@@ -2795,7 +2795,7 @@
     delete $2;
     CHECK_FOR_ERROR
   }
-  | ALLOCA Types ',' INT32 ValueRef OptCAlign {
+  | ALLOCA Types ',' INTTYPE ValueRef OptCAlign {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + (*$2)->getDescription());
     Value* tmpVal = getVal($4, $5);
diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp
index 787d000..ce3826c 100644
--- a/lib/Bytecode/Reader/Reader.cpp
+++ b/lib/Bytecode/Reader/Reader.cpp
@@ -189,7 +189,7 @@
 /// Obtain a type given a typeid and account for things like compaction tables,
 /// function level vs module level, and the offsetting for the primitive types.
 const Type *BytecodeReader::getType(unsigned ID) {
-  if (ID < Type::FirstDerivedTyID)
+  if (ID <= Type::LastPrimitiveTyID)
     if (const Type *T = Type::getPrimitiveType((Type::TypeID)ID))
       return T;   // Asked for a primitive type...
 
@@ -573,7 +573,7 @@
       if (Oprnds.size() != 2)
         error("Invalid extractelement instruction!");
       Value *V1 = getValue(iType, Oprnds[0]);
-      Value *V2 = getValue(Type::Int32TyID, Oprnds[1]);
+      Value *V2 = getValue(Int32TySlot, Oprnds[1]);
       
       if (!ExtractElementInst::isValidOperands(V1, V2))
         error("Invalid extractelement instruction!");
@@ -588,7 +588,7 @@
       
       Value *V1 = getValue(iType, Oprnds[0]);
       Value *V2 = getValue(getTypeSlot(PackedTy->getElementType()),Oprnds[1]);
-      Value *V3 = getValue(Type::Int32TyID, Oprnds[2]);
+      Value *V3 = getValue(Int32TySlot, Oprnds[2]);
         
       if (!InsertElementInst::isValidOperands(V1, V2, V3))
         error("Invalid insertelement instruction!");
@@ -684,7 +684,7 @@
     case Instruction::Select:
       if (Oprnds.size() != 3)
         error("Invalid Select instruction!");
-      Result = new SelectInst(getValue(Type::Int1TyID, Oprnds[0]),
+      Result = new SelectInst(getValue(BoolTySlot, Oprnds[0]),
                               getValue(iType, Oprnds[1]),
                               getValue(iType, Oprnds[2]));
       break;
@@ -714,7 +714,7 @@
     case Instruction::AShr:
       Result = new ShiftInst(Instruction::OtherOps(Opcode),
                              getValue(iType, Oprnds[0]),
-                             getValue(Type::Int8TyID, Oprnds[1]));
+                             getValue(Int8TySlot, Oprnds[1]));
       break;
     case Instruction::Ret:
       if (Oprnds.size() == 0)
@@ -730,7 +730,7 @@
         Result = new BranchInst(getBasicBlock(Oprnds[0]));
       else if (Oprnds.size() == 3)
         Result = new BranchInst(getBasicBlock(Oprnds[0]),
-            getBasicBlock(Oprnds[1]), getValue(Type::Int1TyID , Oprnds[2]));
+            getBasicBlock(Oprnds[1]), getValue(BoolTySlot, Oprnds[2]));
       else
         error("Invalid number of operands for a 'br' instruction!");
       break;
@@ -877,7 +877,7 @@
         error("Invalid malloc instruction!");
 
       Result = new MallocInst(cast<PointerType>(InstTy)->getElementType(),
-                              getValue(Type::Int32TyID, Oprnds[0]), Align);
+                              getValue(Int32TySlot, Oprnds[0]), Align);
       break;
     }
     case Instruction::Alloca: {
@@ -890,7 +890,7 @@
         error("Invalid alloca instruction!");
 
       Result = new AllocaInst(cast<PointerType>(InstTy)->getElementType(),
-                              getValue(Type::Int32TyID, Oprnds[0]), Align);
+                              getValue(Int32TySlot, Oprnds[0]), Align);
       break;
     }
     case Instruction::Free:
@@ -916,12 +916,12 @@
         // any of the 32 or 64-bit integer types.  The actual choice of 
         // type is encoded in the low bit of the slot number.
         if (isa<StructType>(TopTy))
-          IdxTy = Type::Int32TyID;
+          IdxTy = Int32TySlot;
         else {
           switch (ValIdx & 1) {
           default:
-          case 0: IdxTy = Type::Int32TyID; break;
-          case 1: IdxTy = Type::Int64TyID; break;
+          case 0: IdxTy = Int32TySlot; break;
+          case 1: IdxTy = Int64TySlot; break;
           }
           ValIdx >>= 1;
         }
@@ -1064,7 +1064,7 @@
       unsigned slot = read_vbr_uint();
       std::string Name = read_str();
       Value *V = 0;
-      if (Typ == Type::LabelTyID) {
+      if (Typ == LabelTySlot) {
         if (slot < BBMap.size())
           V = BBMap[slot];
       } else {
@@ -1160,6 +1160,11 @@
     return Result;
 
   switch (PrimType) {
+  case Type::IntegerTyID: {
+    unsigned NumBits = read_vbr_uint();
+    Result = IntegerType::get(NumBits);
+    break;
+  }
   case Type::FunctionTyID: {
     const Type *RetType = readType();
     unsigned RetAttr = read_vbr_uint();
@@ -1204,7 +1209,7 @@
     Result = StructType::get(Elements, false);
     break;
   }
-  case Type::BC_ONLY_PackedStructTyID: {
+  case Type::PackedStructTyID: {
     std::vector<const Type*> Elements;
     unsigned Typ = read_vbr_uint();
     while (Typ) {         // List is terminated by void/0 typeid
@@ -1399,32 +1404,29 @@
   const Type *Ty = getType(TypeID);
   Constant *Result = 0;
   switch (Ty->getTypeID()) {
-  case Type::Int1TyID: {
-    unsigned Val = read_vbr_uint();
-    if (Val != 0 && Val != 1)
-      error("Invalid boolean value read.");
-    Result = ConstantInt::get(Type::Int1Ty, Val == 1);
-    if (Handler) Handler->handleConstantValue(Result);
-    break;
-  }
-
-  case Type::Int8TyID:   // Unsigned integer types...
-  case Type::Int16TyID:
-  case Type::Int32TyID: {
-    unsigned Val = read_vbr_uint();
-    if (!ConstantInt::isValueValidForType(Ty, uint64_t(Val)))
-      error("Invalid unsigned byte/short/int read.");
-    Result = ConstantInt::get(Ty, Val);
-    if (Handler) Handler->handleConstantValue(Result);
-    break;
-  }
-
-  case Type::Int64TyID: {
-    uint64_t Val = read_vbr_uint64();
-    if (!ConstantInt::isValueValidForType(Ty, Val))
-      error("Invalid constant integer read.");
-    Result = ConstantInt::get(Ty, Val);
-    if (Handler) Handler->handleConstantValue(Result);
+  case Type::IntegerTyID: {
+    const IntegerType *IT = cast<IntegerType>(Ty);
+    if (IT->getBitWidth() <= 32) {
+      uint32_t Val = read_vbr_uint();
+      if (IT->getBitWidth() == 1) {
+        if (Val != 0 && Val != 1)
+          error("Invalid boolean value read.");
+        Result = ConstantInt::get(Type::Int1Ty, Val == 1);
+        if (Handler) Handler->handleConstantValue(Result);
+      } else {
+        if (!ConstantInt::isValueValidForType(Ty, uint64_t(Val)))
+          error("Integer value read is invalid for type.");
+        Result = ConstantInt::get(IT, Val);
+        if (Handler) Handler->handleConstantValue(Result);
+      }
+    } else if (IT->getBitWidth() <= 64) {
+      uint64_t Val = read_vbr_uint64();
+      if (!ConstantInt::isValueValidForType(Ty, Val))
+        error("Invalid constant integer read.");
+      Result = ConstantInt::get(IT, Val);
+      if (Handler) Handler->handleConstantValue(Result);
+    } else 
+      assert("Integer types > 64 bits not supported");
     break;
   }
   case Type::FloatTyID: {
diff --git a/lib/Bytecode/Reader/Reader.h b/lib/Bytecode/Reader/Reader.h
index 677c39f..3e64f2d 100644
--- a/lib/Bytecode/Reader/Reader.h
+++ b/lib/Bytecode/Reader/Reader.h
@@ -415,6 +415,20 @@
   BytecodeReader(const BytecodeReader &);  // DO NOT IMPLEMENT
   void operator=(const BytecodeReader &);  // DO NOT IMPLEMENT
 
+  // This enum provides the values of the well-known type slots that are always
+  // emitted as the first few types in the table by the BytecodeWriter class.
+  enum WellKnownTypeSlots {
+    VoidTypeSlot = 0, ///< TypeID == VoidTyID
+    FloatTySlot  = 1, ///< TypeID == FloatTyID
+    DoubleTySlot = 2, ///< TypeID == DoubleTyID
+    LabelTySlot  = 3, ///< TypeID == LabelTyID
+    BoolTySlot   = 4, ///< TypeID == IntegerTyID, width = 1
+    Int8TySlot   = 5, ///< TypeID == IntegerTyID, width = 8
+    Int16TySlot  = 6, ///< TypeID == IntegerTyID, width = 16
+    Int32TySlot  = 7, ///< TypeID == IntegerTyID, width = 32
+    Int64TySlot  = 8  ///< TypeID == IntegerTyID, width = 64
+  };
+
 /// @}
 /// @name Reader Primitives
 /// @{
diff --git a/lib/Bytecode/Writer/SlotCalculator.cpp b/lib/Bytecode/Writer/SlotCalculator.cpp
index fdf7174..2d4cd0c 100644
--- a/lib/Bytecode/Writer/SlotCalculator.cpp
+++ b/lib/Bytecode/Writer/SlotCalculator.cpp
@@ -31,26 +31,45 @@
 #include <functional>
 using namespace llvm;
 
-#if 0
+#ifndef NDEBUG
 #include "llvm/Support/Streams.h"
-#define SC_DEBUG(X) cerr << X
+#include "llvm/Support/CommandLine.h"
+static cl::opt<bool> SlotCalculatorDebugOption("scdebug",cl::init(false), 
+    cl::desc("Enable SlotCalculator debug output"), cl::Hidden);
+#define SC_DEBUG(X) if (SlotCalculatorDebugOption) cerr << X
 #else
 #define SC_DEBUG(X)
 #endif
 
+void SlotCalculator::insertPrimitives() {
+  // Preload the table with the built-in types. These built-in types are
+  // inserted first to ensure that they have low integer indices which helps to
+  // keep bytecode sizes small. Note that the first group of indices must match
+  // the Type::TypeIDs for the primitive types. After that the integer types are
+  // added, but the order and value is not critical. What is critical is that 
+  // the indices of these "well known" slot numbers be properly maintained in
+  // Reader.h which uses them directly to extract values of these types.
+  SC_DEBUG("Inserting primitive types:\n");
+                                    // See WellKnownTypeSlots in Reader.h
+  insertType(Type::VoidTy,   true); // 0: VoidTySlot
+  insertType(Type::FloatTy,  true); // 1: FloatTySlot
+  insertType(Type::DoubleTy, true); // 2: DoubleTySlot
+  insertType(Type::LabelTy,  true); // 3: LabelTySlot
+  assert(TypeMap.size() == Type::FirstDerivedTyID && "Invalid primitive insert");
+  // Above here *must* correspond 1:1 with the primitive types.
+  insertType(Type::Int1Ty,   true); // 4: BoolTySlot
+  insertType(Type::Int8Ty,   true); // 5: Int8TySlot
+  insertType(Type::Int16Ty,  true); // 6: Int16TySlot
+  insertType(Type::Int32Ty,  true); // 7: Int32TySlot
+  insertType(Type::Int64Ty,  true); // 8: Int64TySlot
+}
+
 SlotCalculator::SlotCalculator(const Module *M ) {
   ModuleContainsAllFunctionConstants = false;
   ModuleTypeLevel = 0;
   TheModule = M;
 
-  // Preload table... Make sure that all of the primitive types are in the table
-  // and that their Primitive ID is equal to their slot #
-  //
-  SC_DEBUG("Inserting primitive types:\n");
-  for (unsigned i = 0; i < Type::FirstDerivedTyID; ++i) {
-    assert(Type::getPrimitiveType((Type::TypeID)i));
-    insertType(Type::getPrimitiveType((Type::TypeID)i), true);
-  }
+  insertPrimitives();
 
   if (M == 0) return;   // Empty table...
   processModule();
@@ -60,14 +79,7 @@
   ModuleContainsAllFunctionConstants = false;
   TheModule = M ? M->getParent() : 0;
 
-  // Preload table... Make sure that all of the primitive types are in the table
-  // and that their Primitive ID is equal to their slot #
-  //
-  SC_DEBUG("Inserting primitive types:\n");
-  for (unsigned i = 0; i < Type::FirstDerivedTyID; ++i) {
-    assert(Type::getPrimitiveType((Type::TypeID)i));
-    insertType(Type::getPrimitiveType((Type::TypeID)i), true);
-  }
+  insertPrimitives();
 
   if (TheModule == 0) return;   // Empty table...
 
@@ -423,15 +435,14 @@
 /// getOrCreateCompactionTableSlot - This method is used to build up the initial
 /// approximation of the compaction table.
 unsigned SlotCalculator::getOrCreateCompactionTableSlot(const Type *T) {
-  std::map<const Type*, unsigned>::iterator I =
-    CompactionTypeMap.lower_bound(T);
+  CompactionTypeMapType::iterator I = CompactionTypeMap.lower_bound(T);
   if (I != CompactionTypeMap.end() && I->first == T)
     return I->second;  // Already exists?
 
   unsigned SlotNo = CompactionTypes.size();
-  SC_DEBUG("Inserting Compaction Type #" << SlotNo << ": " << T << "\n");
+  SC_DEBUG("Inserting Compaction Type #" << SlotNo << ": " << *T << "\n");
   CompactionTypes.push_back(T);
-  CompactionTypeMap.insert(std::make_pair(T, SlotNo));
+  CompactionTypeMap[T] = SlotNo; 
   return SlotNo;
 }
 
@@ -452,6 +463,16 @@
     CompactionTypes.push_back(PrimTy);
     CompactionTypeMap[PrimTy] = i;
   }
+  CompactionTypeMap[Type::Int1Ty] = CompactionTypes.size();
+  CompactionTypes.push_back(Type::Int1Ty);
+  CompactionTypeMap[Type::Int8Ty] = CompactionTypes.size();
+  CompactionTypes.push_back(Type::Int8Ty);
+  CompactionTypeMap[Type::Int16Ty] = CompactionTypes.size();
+  CompactionTypes.push_back(Type::Int16Ty);
+  CompactionTypeMap[Type::Int32Ty] = CompactionTypes.size();
+  CompactionTypes.push_back(Type::Int32Ty);
+  CompactionTypeMap[Type::Int64Ty] = CompactionTypes.size();
+  CompactionTypes.push_back(Type::Int64Ty);
 
   // Next, include any types used by function arguments.
   for (Function::const_arg_iterator I = F->arg_begin(), E = F->arg_end();
@@ -485,7 +506,7 @@
     if (CompactionTable[i].empty() && (i != Type::VoidTyID) &&
         i != Type::LabelTyID) {
       const Type *Ty = CompactionTypes[i];
-      SC_DEBUG("Getting Null Value #" << i << " for Type " << Ty << "\n");
+      SC_DEBUG("Getting Null Value #" << i << " for Type " << *Ty << "\n");
       assert(Ty->getTypeID() != Type::VoidTyID);
       assert(Ty->getTypeID() != Type::LabelTyID);
       getOrCreateCompactionTableSlot(Constant::getNullValue(Ty));
@@ -618,7 +639,8 @@
 /// to determine if its actually empty.
 bool SlotCalculator::CompactionTableIsEmpty() const {
   // Check a degenerate case, just in case.
-  if (CompactionTable.size() == 0) return true;
+  if (CompactionTable.size() == 0) 
+    return true;
 
   // Check each plane
   for (unsigned i = 0, e = CompactionTable.size(); i < e; ++i) {
@@ -830,7 +852,7 @@
   unsigned DestSlot = NodeMap[D] = Table[Ty].size();
   Table[Ty].push_back(D);
 
-  SC_DEBUG("  Inserting value [" << Ty << "] = " << D << " slot=" <<
+  SC_DEBUG("  Inserting value [" << Ty << "] = " << *D << " slot=" <<
            DestSlot << " [");
   // G = Global, C = Constant, T = Type, F = Function, o = other
   SC_DEBUG((isa<GlobalVariable>(D) ? "G" : (isa<Constant>(D) ? "C" :
@@ -848,7 +870,6 @@
   unsigned DestSlot = TypeMap[Ty] = Types.size();
   Types.push_back(Ty);
 
-  SC_DEBUG("  Inserting type [" << DestSlot << "] = " << Ty << "\n" );
+  SC_DEBUG("  Inserting type [" << DestSlot << "] = " << *Ty << "\n" );
   return (int)DestSlot;
 }
-
diff --git a/lib/Bytecode/Writer/SlotCalculator.h b/lib/Bytecode/Writer/SlotCalculator.h
index 405c0ed..de91d2e 100644
--- a/lib/Bytecode/Writer/SlotCalculator.h
+++ b/lib/Bytecode/Writer/SlotCalculator.h
@@ -177,6 +177,9 @@
   unsigned getOrCreateCompactionTableSlot(const Value *V);
   unsigned getOrCreateCompactionTableSlot(const Type *V);
   void pruneCompactionTable();
+
+  // insertPrimitives - helper for constructors to insert primitive types.
+  void insertPrimitives();
 };
 
 } // End llvm namespace
diff --git a/lib/Bytecode/Writer/Writer.cpp b/lib/Bytecode/Writer/Writer.cpp
index 9a04428..c7003cd 100644
--- a/lib/Bytecode/Writer/Writer.cpp
+++ b/lib/Bytecode/Writer/Writer.cpp
@@ -200,16 +200,18 @@
 void BytecodeWriter::outputType(const Type *T) {
   const StructType* STy = dyn_cast<StructType>(T);
   if(STy && STy->isPacked())
-    output_vbr((unsigned)Type::BC_ONLY_PackedStructTyID);
+    output_vbr((unsigned)Type::PackedStructTyID);
   else
     output_vbr((unsigned)T->getTypeID());
 
   // That's all there is to handling primitive types...
-  if (T->isPrimitiveType()) {
+  if (T->isPrimitiveType())
     return;     // We might do this if we alias a prim type: %x = type int
-  }
 
   switch (T->getTypeID()) {   // Handle derived types now.
+  case Type::IntegerTyID:
+    output_vbr(cast<IntegerType>(T)->getBitWidth());
+    break;
   case Type::FunctionTyID: {
     const FunctionType *MT = cast<FunctionType>(T);
     int Slot = Table.getSlot(MT->getReturnType());
@@ -290,8 +292,8 @@
 }
 
 void BytecodeWriter::outputConstant(const Constant *CPV) {
-  assert((CPV->getType()->isPrimitiveType() || !CPV->isNullValue()) &&
-         "Shouldn't output null constants!");
+  assert(((CPV->getType()->isPrimitiveType() || CPV->getType()->isIntegral()) ||
+          !CPV->isNullValue()) && "Shouldn't output null constants!");
 
   // We must check for a ConstantExpr before switching by type because
   // a ConstantExpr can be of any type, and has no explicit value.
@@ -321,19 +323,21 @@
   }
 
   switch (CPV->getType()->getTypeID()) {
-  case Type::Int1TyID:    // Boolean Types
-    if (cast<ConstantInt>(CPV)->getZExtValue())
-      output_vbr(1U);
-    else
-      output_vbr(0U);
+  case Type::IntegerTyID: { // Integer types...
+    unsigned NumBits = cast<IntegerType>(CPV->getType())->getBitWidth();
+    if (NumBits == 1)
+      if (cast<ConstantInt>(CPV)->getZExtValue())
+        output_vbr(1U);
+      else
+        output_vbr(0U);
+    else if (NumBits <= 32)
+      output_vbr(uint32_t(cast<ConstantInt>(CPV)->getZExtValue()));
+    else if (NumBits <= 64)
+      output_vbr(uint64_t(cast<ConstantInt>(CPV)->getZExtValue()));
+    else 
+      assert("Integer types > 64 bits not supported.");
     break;
-
-  case Type::Int8TyID:   // Unsigned integer types...
-  case Type::Int16TyID:
-  case Type::Int32TyID:
-  case Type::Int64TyID:
-    output_vbr(cast<ConstantInt>(CPV)->getZExtValue());
-    break;
+  }
 
   case Type::ArrayTyID: {
     const ConstantArray *CPA = cast<ConstantArray>(CPV);
@@ -484,12 +488,12 @@
       assert(Slot >= 0 && "No slot number for value!?!?");
 
       if (isa<SequentialType>(*TI)) {
-        unsigned IdxId;
-        switch (I->getOperand(Idx)->getType()->getTypeID()) {
-        default: assert(0 && "Unknown index type!");
-        case Type::Int32TyID:  IdxId = 0; break;
-        case Type::Int64TyID:  IdxId = 1; break;
-        }
+        // These should be either 32-bits or 64-bits, however, with bit
+        // accurate types we just distinguish between less than or equal to
+        // 32-bits or greater than 32-bits.
+        const IntegerType *IdxTy = 
+          cast<IntegerType>(I->getOperand(Idx)->getType());
+        unsigned IdxId = IdxTy->getBitWidth() <= 32 ? 0 : 1;
         Slot = (Slot << 1) | IdxId;
       }
       output_vbr(unsigned(Slot));
@@ -735,12 +739,12 @@
       for (gep_type_iterator I = gep_type_begin(GEP), E = gep_type_end(GEP);
            I != E; ++I, ++Idx)
         if (isa<SequentialType>(*I)) {
-          unsigned IdxId;
-          switch (GEP->getOperand(Idx)->getType()->getTypeID()) {
-          default: assert(0 && "Unknown index type!");
-          case Type::Int32TyID: IdxId = 0; break;
-          case Type::Int64TyID: IdxId = 1; break;
-          }
+          // These should be either 32-bits or 64-bits, however, with bit
+          // accurate types we just distinguish between less than or equal to
+          // 32-bits or greater than 32-bits.
+          const IntegerType *IdxTy = 
+            cast<IntegerType>(GEP->getOperand(Idx)->getType());
+          unsigned IdxId = IdxTy->getBitWidth() <= 32 ? 0 : 1;
           Slots[Idx] = (Slots[Idx] << 1) | IdxId;
           if (Slots[Idx] > MaxOpSlot) MaxOpSlot = Slots[Idx];
         }
diff --git a/lib/CodeGen/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter.cpp
index d7a134e..aba97c1 100644
--- a/lib/CodeGen/AsmPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter.cpp
@@ -459,7 +459,7 @@
       // We can emit the pointer value into this slot if the slot is an
       // integer slot greater or equal to the size of the pointer.
       if (Ty->isIntegral() &&
-          Ty->getPrimitiveSize() >= TD->getTypeSize(Op->getType()))
+          TD->getTypeSize(Ty) >= TD->getTypeSize(Op->getType()))
         return EmitConstantValueOnly(Op);
       
       assert(0 && "FIXME: Don't yet support this kind of constant cast expr");
@@ -917,28 +917,29 @@
 void AsmPrinter::printDataDirective(const Type *type) {
   const TargetData *TD = TM.getTargetData();
   switch (type->getTypeID()) {
-  case Type::Int1TyID:
-  case Type::Int8TyID:
-    O << TAI->getData8bitsDirective();
+  case Type::IntegerTyID: {
+    unsigned BitWidth = cast<IntegerType>(type)->getBitWidth();
+    if (BitWidth <= 8)
+      O << TAI->getData8bitsDirective();
+    else if (BitWidth <= 16)
+      O << TAI->getData16bitsDirective();
+    else if (BitWidth <= 32)
+      O << TAI->getData32bitsDirective();
+    else if (BitWidth <= 64) {
+      assert(TAI->getData64bitsDirective() &&
+             "Target cannot handle 64-bit constant exprs!");
+      O << TAI->getData64bitsDirective();
+    }
     break;
-  case Type::Int16TyID: 
-    O << TAI->getData16bitsDirective();
-    break;
+  }
   case Type::PointerTyID:
     if (TD->getPointerSize() == 8) {
       assert(TAI->getData64bitsDirective() &&
              "Target cannot handle 64-bit pointer exprs!");
       O << TAI->getData64bitsDirective();
-      break;
+    } else {
+      O << TAI->getData32bitsDirective();
     }
-    //Fall through for pointer size == int size
-  case Type::Int32TyID: 
-    O << TAI->getData32bitsDirective();
-    break;
-  case Type::Int64TyID:
-    assert(TAI->getData64bitsDirective() &&
-           "Target cannot handle 64-bit constant exprs!");
-    O << TAI->getData64bitsDirective();
     break;
   case Type::FloatTyID: case Type::DoubleTyID:
     assert (0 && "Should have already output floating point constant.");
diff --git a/lib/CodeGen/MachOWriter.cpp b/lib/CodeGen/MachOWriter.cpp
index af870e4..49c7457 100644
--- a/lib/CodeGen/MachOWriter.cpp
+++ b/lib/CodeGen/MachOWriter.cpp
@@ -708,8 +708,7 @@
     if (isa<UndefValue>(PC)) {
       continue;
     } else if (const ConstantPacked *CP = dyn_cast<ConstantPacked>(PC)) {
-      unsigned ElementSize = 
-        CP->getType()->getElementType()->getPrimitiveSize();
+      unsigned ElementSize = TD->getTypeSize(CP->getType()->getElementType());
       for (unsigned i = 0, e = CP->getNumOperands(); i != e; ++i)
         WorkList.push_back(CPair(CP->getOperand(i), PA+i*ElementSize));
     } else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(PC)) {
@@ -726,27 +725,42 @@
       }
     } else if (PC->getType()->isFirstClassType()) {
       unsigned char *ptr = (unsigned char *)PA;
-      uint64_t val;
-      
       switch (PC->getType()->getTypeID()) {
-      case Type::Int1TyID:
-      case Type::Int8TyID:
-        ptr[0] = cast<ConstantInt>(PC)->getZExtValue();
-        break;
-      case Type::Int16TyID:
-        val = cast<ConstantInt>(PC)->getZExtValue();
-        if (TD->isBigEndian())
-          val = ByteSwap_16(val);
-        ptr[0] = val;
-        ptr[1] = val >> 8;
-        break;
-      case Type::Int32TyID:
-      case Type::FloatTyID:
-        if (PC->getType()->getTypeID() == Type::FloatTyID) {
-          val = FloatToBits(cast<ConstantFP>(PC)->getValue());
+      case Type::IntegerTyID: {
+        unsigned NumBits = cast<IntegerType>(PC->getType())->getBitWidth();
+        uint64_t val = cast<ConstantInt>(PC)->getZExtValue();
+        if (NumBits <= 8)
+          ptr[0] = val;
+        else if (NumBits <= 16) {
+          if (TD->isBigEndian())
+            val = ByteSwap_16(val);
+          ptr[0] = val;
+          ptr[1] = val >> 8;
+        } else if (NumBits <= 32) {
+          if (TD->isBigEndian())
+            val = ByteSwap_32(val);
+          ptr[0] = val;
+          ptr[1] = val >> 8;
+          ptr[2] = val >> 16;
+          ptr[3] = val >> 24;
+        } else if (NumBits <= 64) {
+          if (TD->isBigEndian())
+            val = ByteSwap_64(val);
+          ptr[0] = val;
+          ptr[1] = val >> 8;
+          ptr[2] = val >> 16;
+          ptr[3] = val >> 24;
+          ptr[4] = val >> 32;
+          ptr[5] = val >> 40;
+          ptr[6] = val >> 48;
+          ptr[7] = val >> 56;
         } else {
-          val = cast<ConstantInt>(PC)->getZExtValue();
+          assert(0 && "Not implemented: bit widths > 64");
         }
+        break;
+      }
+      case Type::FloatTyID: {
+        uint64_t val = FloatToBits(cast<ConstantFP>(PC)->getValue());
         if (TD->isBigEndian())
           val = ByteSwap_32(val);
         ptr[0] = val;
@@ -754,13 +768,9 @@
         ptr[2] = val >> 16;
         ptr[3] = val >> 24;
         break;
-      case Type::DoubleTyID:
-      case Type::Int64TyID:
-        if (PC->getType()->getTypeID() == Type::DoubleTyID) {
-          val = DoubleToBits(cast<ConstantFP>(PC)->getValue());
-        } else {
-          val = cast<ConstantInt>(PC)->getZExtValue();
-        }
+      }
+      case Type::DoubleTyID: {
+        uint64_t val = DoubleToBits(cast<ConstantFP>(PC)->getValue());
         if (TD->isBigEndian())
           val = ByteSwap_64(val);
         ptr[0] = val;
@@ -772,6 +782,7 @@
         ptr[6] = val >> 48;
         ptr[7] = val >> 56;
         break;
+      }
       case Type::PointerTyID:
         if (isa<ConstantPointerNull>(C))
           memset(ptr, 0, TD->getPointerSize());
@@ -790,8 +801,7 @@
     } else if (isa<ConstantAggregateZero>(PC)) {
       memset((void*)PA, 0, (size_t)TD->getTypeSize(PC->getType()));
     } else if (const ConstantArray *CPA = dyn_cast<ConstantArray>(PC)) {
-      unsigned ElementSize = 
-        CPA->getType()->getElementType()->getPrimitiveSize();
+      unsigned ElementSize = TD->getTypeSize(CPA->getType()->getElementType());
       for (unsigned i = 0, e = CPA->getNumOperands(); i != e; ++i)
         WorkList.push_back(CPair(CPA->getOperand(i), PA+i*ElementSize));
     } else if (const ConstantStruct *CPS = dyn_cast<ConstantStruct>(PC)) {
diff --git a/lib/ExecutionEngine/ExecutionEngine.cpp b/lib/ExecutionEngine/ExecutionEngine.cpp
index e5f9ea1..26f51d0 100644
--- a/lib/ExecutionEngine/ExecutionEngine.cpp
+++ b/lib/ExecutionEngine/ExecutionEngine.cpp
@@ -296,6 +296,28 @@
   return state.getGlobalAddressMap(locked)[GV];
 }
 
+/// This macro is used to handle a variety of situations involing integer
+/// values where the action should be done to one of the GenericValue members.
+/// THEINTTY is a const Type * for the integer type. ACTION1 comes before
+/// the GenericValue, ACTION2 comes after.
+#define DO_FOR_INTEGER(THEINTTY, ACTION) \
+   { \
+      unsigned BitWidth = cast<IntegerType>(THEINTTY)->getBitWidth(); \
+      if (BitWidth == 1) {\
+        ACTION(Int1Val); \
+      } else if (BitWidth <= 8) {\
+        ACTION(Int8Val); \
+      } else if (BitWidth <= 16) {\
+        ACTION(Int16Val); \
+      } else if (BitWidth <= 32) { \
+        ACTION(Int32Val); \
+      } else if (BitWidth <= 64) { \
+        ACTION(Int64Val); \
+      } else   {\
+        assert(0 && "Not implemented: integer types > 64 bits"); \
+      } \
+   }
+
 /// This function converts a Constant* into a GenericValue. The interesting 
 /// part is if C is a ConstantExpr.
 /// @brief Get a GenericValue for a Constnat*
@@ -350,34 +372,21 @@
       // IntToPtr casts are just so special. Cast to intptr_t first.
       Constant *Op = CE->getOperand(0);
       GenericValue GV = getConstantValue(Op);
-      switch (Op->getType()->getTypeID()) {
-        case Type::Int1TyID:    return PTOGV((void*)(uintptr_t)GV.Int1Val);
-        case Type::Int8TyID:   return PTOGV((void*)(uintptr_t)GV.Int8Val);
-        case Type::Int16TyID:  return PTOGV((void*)(uintptr_t)GV.Int16Val);
-        case Type::Int32TyID:    return PTOGV((void*)(uintptr_t)GV.Int32Val);
-        case Type::Int64TyID:   return PTOGV((void*)(uintptr_t)GV.Int64Val);
-        default: assert(0 && "Unknown integral type!");
-      }
+#define INT_TO_PTR_ACTION(FIELD) \
+        return PTOGV((void*)(uintptr_t)GV.FIELD)
+      DO_FOR_INTEGER(Op->getType(), INT_TO_PTR_ACTION)
+#undef INT_TO_PTR_ACTION
       break;
     }
     case Instruction::Add:
       switch (CE->getOperand(0)->getType()->getTypeID()) {
       default: assert(0 && "Bad add type!"); abort();
-      case Type::Int64TyID:
-        Result.Int64Val = getConstantValue(CE->getOperand(0)).Int64Val +
-                         getConstantValue(CE->getOperand(1)).Int64Val;
-        break;
-      case Type::Int32TyID:
-        Result.Int32Val = getConstantValue(CE->getOperand(0)).Int32Val +
-                        getConstantValue(CE->getOperand(1)).Int32Val;
-        break;
-      case Type::Int16TyID:
-        Result.Int16Val = getConstantValue(CE->getOperand(0)).Int16Val +
-                          getConstantValue(CE->getOperand(1)).Int16Val;
-        break;
-      case Type::Int8TyID:
-        Result.Int8Val = getConstantValue(CE->getOperand(0)).Int8Val +
-                          getConstantValue(CE->getOperand(1)).Int8Val;
+      case Type::IntegerTyID:
+#define ADD_ACTION(FIELD) \
+        Result.FIELD = getConstantValue(CE->getOperand(0)).FIELD + \
+                       getConstantValue(CE->getOperand(1)).FIELD;
+        DO_FOR_INTEGER(CE->getOperand(0)->getType(),ADD_ACTION);
+#undef ADD_ACTION
         break;
       case Type::FloatTyID:
         Result.FloatVal = getConstantValue(CE->getOperand(0)).FloatVal +
@@ -399,14 +408,26 @@
   switch (C->getType()->getTypeID()) {
 #define GET_CONST_VAL(TY, CTY, CLASS, GETMETH) \
   case Type::TY##TyID: Result.TY##Val = (CTY)cast<CLASS>(C)->GETMETH(); break
-    GET_CONST_VAL(Int1  , bool          , ConstantInt, getZExtValue);
-    GET_CONST_VAL(Int8  , unsigned char , ConstantInt, getZExtValue);
-    GET_CONST_VAL(Int16 , unsigned short, ConstantInt, getZExtValue);
-    GET_CONST_VAL(Int32 , unsigned int  , ConstantInt, getZExtValue);
-    GET_CONST_VAL(Int64 , uint64_t      , ConstantInt, getZExtValue);
     GET_CONST_VAL(Float , float         , ConstantFP, getValue);
     GET_CONST_VAL(Double, double        , ConstantFP, getValue);
 #undef GET_CONST_VAL
+  case Type::IntegerTyID: {
+    unsigned BitWidth = cast<IntegerType>(C->getType())->getBitWidth();
+    if (BitWidth == 1)
+      Result.Int1Val = (bool)cast<ConstantInt>(C)->getZExtValue();
+    else if (BitWidth <= 8)
+      Result.Int8Val = (uint8_t )cast<ConstantInt>(C)->getZExtValue();
+    else if (BitWidth <= 16)
+      Result.Int16Val = (uint16_t )cast<ConstantInt>(C)->getZExtValue();
+    else if (BitWidth <= 32)
+      Result.Int32Val = (uint32_t )cast<ConstantInt>(C)->getZExtValue();
+    else if (BitWidth <= 64)
+      Result.Int64Val = (uint64_t )cast<ConstantInt>(C)->getZExtValue();
+    else
+      assert("Integers with > 64-bits not implemented");
+    break;
+  }
+
   case Type::PointerTyID:
     if (isa<ConstantPointerNull>(C))
       Result.PointerVal = 0;
@@ -433,22 +454,43 @@
                                          const Type *Ty) {
   if (getTargetData()->isLittleEndian()) {
     switch (Ty->getTypeID()) {
-    case Type::Int1TyID:
-    case Type::Int8TyID:    Ptr->Untyped[0] = Val.Int8Val; break;
-    case Type::Int16TyID:   Ptr->Untyped[0] = Val.Int16Val & 255;
-                            Ptr->Untyped[1] = (Val.Int16Val >> 8) & 255;
-                            break;
-    Store4BytesLittleEndian:
+    case Type::IntegerTyID: {
+      unsigned BitWidth = cast<IntegerType>(Ty)->getBitWidth();
+      if (BitWidth <= 8)
+        Ptr->Untyped[0] = Val.Int8Val;
+      else if (BitWidth <= 16) {
+        Ptr->Untyped[0] = Val.Int16Val        & 255;
+        Ptr->Untyped[1] = (Val.Int16Val >> 8) & 255;
+      } else if (BitWidth <= 32) {
+        Ptr->Untyped[0] =  Val.Int32Val        & 255;
+        Ptr->Untyped[1] = (Val.Int32Val >>  8) & 255;
+        Ptr->Untyped[2] = (Val.Int32Val >> 16) & 255;
+        Ptr->Untyped[3] = (Val.Int32Val >> 24) & 255;
+      } else if (BitWidth <= 64) {
+        Ptr->Untyped[0] = (unsigned char)(Val.Int64Val      );
+        Ptr->Untyped[1] = (unsigned char)(Val.Int64Val >>  8);
+        Ptr->Untyped[2] = (unsigned char)(Val.Int64Val >> 16);
+        Ptr->Untyped[3] = (unsigned char)(Val.Int64Val >> 24);
+        Ptr->Untyped[4] = (unsigned char)(Val.Int64Val >> 32);
+        Ptr->Untyped[5] = (unsigned char)(Val.Int64Val >> 40);
+        Ptr->Untyped[6] = (unsigned char)(Val.Int64Val >> 48);
+        Ptr->Untyped[7] = (unsigned char)(Val.Int64Val >> 56);
+      } else
+        assert(0 && "Integer types > 64 bits not supported");
+      break;
+    }
+Store4BytesLittleEndian:
     case Type::FloatTyID:
-    case Type::Int32TyID:   Ptr->Untyped[0] =  Val.Int32Val       & 255;
-                            Ptr->Untyped[1] = (Val.Int32Val >>  8) & 255;
-                            Ptr->Untyped[2] = (Val.Int32Val >> 16) & 255;
-                            Ptr->Untyped[3] = (Val.Int32Val >> 24) & 255;
-                            break;
-    case Type::PointerTyID: if (getTargetData()->getPointerSize() == 4)
-                              goto Store4BytesLittleEndian;
+      Ptr->Untyped[0] =  Val.Int32Val        & 255;
+      Ptr->Untyped[1] = (Val.Int32Val >>  8) & 255;
+      Ptr->Untyped[2] = (Val.Int32Val >> 16) & 255;
+      Ptr->Untyped[3] = (Val.Int32Val >> 24) & 255;
+      break;
+    case Type::PointerTyID: 
+      if (getTargetData()->getPointerSize() == 4)
+        goto Store4BytesLittleEndian;
+      /* FALL THROUGH */
     case Type::DoubleTyID:
-    case Type::Int64TyID:
       Ptr->Untyped[0] = (unsigned char)(Val.Int64Val      );
       Ptr->Untyped[1] = (unsigned char)(Val.Int64Val >>  8);
       Ptr->Untyped[2] = (unsigned char)(Val.Int64Val >> 16);
@@ -463,22 +505,43 @@
     }
   } else {
     switch (Ty->getTypeID()) {
-    case Type::Int1TyID:
-    case Type::Int8TyID:    Ptr->Untyped[0] = Val.Int8Val; break;
-    case Type::Int16TyID:   Ptr->Untyped[1] = Val.Int16Val & 255;
-                            Ptr->Untyped[0] = (Val.Int16Val >> 8) & 255;
-                            break;
+    case Type::IntegerTyID: {
+      unsigned BitWidth = cast<IntegerType>(Ty)->getBitWidth();
+      if (BitWidth <= 8)
+        Ptr->Untyped[0] = Val.Int8Val;
+      else if (BitWidth <= 16) {
+        Ptr->Untyped[1] =  Val.Int16Val       & 255;
+        Ptr->Untyped[0] = (Val.Int16Val >> 8) & 255;
+      } else if (BitWidth <= 32) {
+        Ptr->Untyped[3] =  Val.Int32Val        & 255;
+        Ptr->Untyped[2] = (Val.Int32Val >>  8) & 255;
+        Ptr->Untyped[1] = (Val.Int32Val >> 16) & 255;
+        Ptr->Untyped[0] = (Val.Int32Val >> 24) & 255;
+      } else if (BitWidth <= 64) {
+        Ptr->Untyped[7] = (unsigned char)(Val.Int64Val      );
+        Ptr->Untyped[6] = (unsigned char)(Val.Int64Val >>  8);
+        Ptr->Untyped[5] = (unsigned char)(Val.Int64Val >> 16);
+        Ptr->Untyped[4] = (unsigned char)(Val.Int64Val >> 24);
+        Ptr->Untyped[3] = (unsigned char)(Val.Int64Val >> 32);
+        Ptr->Untyped[2] = (unsigned char)(Val.Int64Val >> 40);
+        Ptr->Untyped[1] = (unsigned char)(Val.Int64Val >> 48);
+        Ptr->Untyped[0] = (unsigned char)(Val.Int64Val >> 56);
+      } else
+        assert(0 && "Integer types > 64 bits not supported");
+      break;
+    }
     Store4BytesBigEndian:
     case Type::FloatTyID:
-    case Type::Int32TyID:   Ptr->Untyped[3] =  Val.Int32Val        & 255;
-                            Ptr->Untyped[2] = (Val.Int32Val >>  8) & 255;
-                            Ptr->Untyped[1] = (Val.Int32Val >> 16) & 255;
-                            Ptr->Untyped[0] = (Val.Int32Val >> 24) & 255;
-                            break;
-    case Type::PointerTyID: if (getTargetData()->getPointerSize() == 4)
-                              goto Store4BytesBigEndian;
+      Ptr->Untyped[3] =  Val.Int32Val        & 255;
+      Ptr->Untyped[2] = (Val.Int32Val >>  8) & 255;
+      Ptr->Untyped[1] = (Val.Int32Val >> 16) & 255;
+      Ptr->Untyped[0] = (Val.Int32Val >> 24) & 255;
+      break;
+    case Type::PointerTyID: 
+      if (getTargetData()->getPointerSize() == 4)
+        goto Store4BytesBigEndian;
+      /* FALL THROUGH */
     case Type::DoubleTyID:
-    case Type::Int64TyID:
       Ptr->Untyped[7] = (unsigned char)(Val.Int64Val      );
       Ptr->Untyped[6] = (unsigned char)(Val.Int64Val >>  8);
       Ptr->Untyped[5] = (unsigned char)(Val.Int64Val >> 16);
@@ -501,60 +564,104 @@
   GenericValue Result;
   if (getTargetData()->isLittleEndian()) {
     switch (Ty->getTypeID()) {
-    case Type::Int1TyID:
-    case Type::Int8TyID:    Result.Int8Val  = Ptr->Untyped[0]; break;
-    case Type::Int16TyID:   Result.Int16Val = (unsigned)Ptr->Untyped[0] |
-                                              ((unsigned)Ptr->Untyped[1] << 8);
-                            break;
+    case Type::IntegerTyID: {
+      unsigned BitWidth = cast<IntegerType>(Ty)->getBitWidth();
+      if (BitWidth <= 8)
+        Result.Int8Val  = Ptr->Untyped[0];
+      else if (BitWidth <= 16) {
+        Result.Int16Val =  (unsigned)Ptr->Untyped[0] |
+                          ((unsigned)Ptr->Untyped[1] << 8);
+      } else if (BitWidth <= 32) {
+        Result.Int32Val =  (unsigned)Ptr->Untyped[0] |
+                          ((unsigned)Ptr->Untyped[1] <<  8) |
+                          ((unsigned)Ptr->Untyped[2] << 16) |
+                          ((unsigned)Ptr->Untyped[3] << 24);
+      } else if (BitWidth <= 64) {
+        Result.Int64Val =  (uint64_t)Ptr->Untyped[0] |
+                          ((uint64_t)Ptr->Untyped[1] <<  8) |
+                          ((uint64_t)Ptr->Untyped[2] << 16) |
+                          ((uint64_t)Ptr->Untyped[3] << 24) |
+                          ((uint64_t)Ptr->Untyped[4] << 32) |
+                          ((uint64_t)Ptr->Untyped[5] << 40) |
+                          ((uint64_t)Ptr->Untyped[6] << 48) |
+                          ((uint64_t)Ptr->Untyped[7] << 56);
+      } else
+        assert(0 && "Integer types > 64 bits not supported");
+      break;
+    }
     Load4BytesLittleEndian:
     case Type::FloatTyID:
-    case Type::Int32TyID:    Result.Int32Val = (unsigned)Ptr->Untyped[0] |
-                                            ((unsigned)Ptr->Untyped[1] <<  8) |
-                                            ((unsigned)Ptr->Untyped[2] << 16) |
-                                            ((unsigned)Ptr->Untyped[3] << 24);
-                            break;
-    case Type::PointerTyID: if (getTargetData()->getPointerSize() == 4)
-                              goto Load4BytesLittleEndian;
+      Result.Int32Val =  (unsigned)Ptr->Untyped[0] |
+                        ((unsigned)Ptr->Untyped[1] <<  8) |
+                        ((unsigned)Ptr->Untyped[2] << 16) |
+                        ((unsigned)Ptr->Untyped[3] << 24);
+      break;
+    case Type::PointerTyID: 
+      if (getTargetData()->getPointerSize() == 4)
+        goto Load4BytesLittleEndian;
+      /* FALL THROUGH */
     case Type::DoubleTyID:
-    case Type::Int64TyID:    Result.Int64Val = (uint64_t)Ptr->Untyped[0] |
-                                             ((uint64_t)Ptr->Untyped[1] <<  8) |
-                                             ((uint64_t)Ptr->Untyped[2] << 16) |
-                                             ((uint64_t)Ptr->Untyped[3] << 24) |
-                                             ((uint64_t)Ptr->Untyped[4] << 32) |
-                                             ((uint64_t)Ptr->Untyped[5] << 40) |
-                                             ((uint64_t)Ptr->Untyped[6] << 48) |
-                                             ((uint64_t)Ptr->Untyped[7] << 56);
-                            break;
+      Result.Int64Val =  (uint64_t)Ptr->Untyped[0] |
+                        ((uint64_t)Ptr->Untyped[1] <<  8) |
+                        ((uint64_t)Ptr->Untyped[2] << 16) |
+                        ((uint64_t)Ptr->Untyped[3] << 24) |
+                        ((uint64_t)Ptr->Untyped[4] << 32) |
+                        ((uint64_t)Ptr->Untyped[5] << 40) |
+                        ((uint64_t)Ptr->Untyped[6] << 48) |
+                        ((uint64_t)Ptr->Untyped[7] << 56);
+       break;
     default:
       cerr << "Cannot load value of type " << *Ty << "!\n";
       abort();
     }
   } else {
     switch (Ty->getTypeID()) {
-    case Type::Int1TyID:
-    case Type::Int8TyID:    Result.Int8Val  = Ptr->Untyped[0]; break;
-    case Type::Int16TyID:   Result.Int16Val = (unsigned)Ptr->Untyped[1] |
-                                             ((unsigned)Ptr->Untyped[0] << 8);
-                            break;
+    case Type::IntegerTyID: {
+      unsigned BitWidth = cast<IntegerType>(Ty)->getBitWidth();
+      if (BitWidth <= 8)
+        Result.Int8Val  = Ptr->Untyped[0];
+      else if (BitWidth <= 16) {
+        Result.Int16Val =  (unsigned)Ptr->Untyped[1] |
+                          ((unsigned)Ptr->Untyped[0] << 8);
+      } else if (BitWidth <= 32) {
+        Result.Int32Val =  (unsigned)Ptr->Untyped[3] |
+                          ((unsigned)Ptr->Untyped[2] <<  8) |
+                          ((unsigned)Ptr->Untyped[1] << 16) |
+                          ((unsigned)Ptr->Untyped[0] << 24);
+      } else if (BitWidth <= 64) {
+        Result.Int64Val =  (uint64_t)Ptr->Untyped[7] |
+                          ((uint64_t)Ptr->Untyped[6] <<  8) |
+                          ((uint64_t)Ptr->Untyped[5] << 16) |
+                          ((uint64_t)Ptr->Untyped[4] << 24) |
+                          ((uint64_t)Ptr->Untyped[3] << 32) |
+                          ((uint64_t)Ptr->Untyped[2] << 40) |
+                          ((uint64_t)Ptr->Untyped[1] << 48) |
+                          ((uint64_t)Ptr->Untyped[0] << 56);
+      } else
+        assert(0 && "Integer types > 64 bits not supported");
+      break;
+    }
     Load4BytesBigEndian:
     case Type::FloatTyID:
-    case Type::Int32TyID:   Result.Int32Val =(unsigned)Ptr->Untyped[3] |
-                                            ((unsigned)Ptr->Untyped[2] <<  8) |
-                                            ((unsigned)Ptr->Untyped[1] << 16) |
-                                            ((unsigned)Ptr->Untyped[0] << 24);
+      Result.Int32Val =  (unsigned)Ptr->Untyped[3] |
+                        ((unsigned)Ptr->Untyped[2] <<  8) |
+                        ((unsigned)Ptr->Untyped[1] << 16) |
+                        ((unsigned)Ptr->Untyped[0] << 24);
                             break;
-    case Type::PointerTyID: if (getTargetData()->getPointerSize() == 4)
-                              goto Load4BytesBigEndian;
+    case Type::PointerTyID: 
+      if (getTargetData()->getPointerSize() == 4)
+        goto Load4BytesBigEndian;
+      /* FALL THROUGH */
     case Type::DoubleTyID:
-    case Type::Int64TyID:   Result.Int64Val = (uint64_t)Ptr->Untyped[7] |
-                                             ((uint64_t)Ptr->Untyped[6] <<  8) |
-                                             ((uint64_t)Ptr->Untyped[5] << 16) |
-                                             ((uint64_t)Ptr->Untyped[4] << 24) |
-                                             ((uint64_t)Ptr->Untyped[3] << 32) |
-                                             ((uint64_t)Ptr->Untyped[2] << 40) |
-                                             ((uint64_t)Ptr->Untyped[1] << 48) |
-                                             ((uint64_t)Ptr->Untyped[0] << 56);
-                            break;
+      Result.Int64Val =  (uint64_t)Ptr->Untyped[7] |
+                        ((uint64_t)Ptr->Untyped[6] <<  8) |
+                        ((uint64_t)Ptr->Untyped[5] << 16) |
+                        ((uint64_t)Ptr->Untyped[4] << 24) |
+                        ((uint64_t)Ptr->Untyped[3] << 32) |
+                        ((uint64_t)Ptr->Untyped[2] << 40) |
+                        ((uint64_t)Ptr->Untyped[1] << 48) |
+                        ((uint64_t)Ptr->Untyped[0] << 56);
+      break;
     default:
       cerr << "Cannot load value of type " << *Ty << "!\n";
       abort();
@@ -708,8 +815,8 @@
       }
     }
     
-    // Now that all of the globals are set up in memory, loop through them all and
-    // initialize their contents.
+    // Now that all of the globals are set up in memory, loop through them all 
+    // and initialize their contents.
     for (Module::const_global_iterator I = M.global_begin(), E = M.global_end();
          I != E; ++I) {
       if (!I->isExternal()) {
diff --git a/lib/ExecutionEngine/Interpreter/Execution.cpp b/lib/ExecutionEngine/Interpreter/Execution.cpp
index 0a0fbce..681fb67 100644
--- a/lib/ExecutionEngine/Interpreter/Execution.cpp
+++ b/lib/ExecutionEngine/Interpreter/Execution.cpp
@@ -20,6 +20,7 @@
 #include "llvm/Support/GetElementPtrTypeIterator.h"
 #include "llvm/ADT/Statistic.h"
 #include "llvm/Support/Debug.h"
+#include "llvm/Support/MathExtras.h"
 #include <cmath>
 using namespace llvm;
 
@@ -69,20 +70,30 @@
 GenericValue Interpreter::getConstantExprValue (ConstantExpr *CE,
                                                 ExecutionContext &SF) {
   switch (CE->getOpcode()) {
-  case Instruction::Trunc:
+  case Instruction::Trunc:   
+      return executeTruncInst(CE->getOperand(0), CE->getType(), SF);
   case Instruction::ZExt:
+      return executeZExtInst(CE->getOperand(0), CE->getType(), SF);
   case Instruction::SExt:
+      return executeSExtInst(CE->getOperand(0), CE->getType(), SF);
   case Instruction::FPTrunc:
+      return executeFPTruncInst(CE->getOperand(0), CE->getType(), SF);
   case Instruction::FPExt:
+      return executeFPExtInst(CE->getOperand(0), CE->getType(), SF);
   case Instruction::UIToFP:
+      return executeUIToFPInst(CE->getOperand(0), CE->getType(), SF);
   case Instruction::SIToFP:
+      return executeSIToFPInst(CE->getOperand(0), CE->getType(), SF);
   case Instruction::FPToUI:
+      return executeFPToUIInst(CE->getOperand(0), CE->getType(), SF);
   case Instruction::FPToSI:
+      return executeFPToSIInst(CE->getOperand(0), CE->getType(), SF);
   case Instruction::PtrToInt:
+      return executePtrToIntInst(CE->getOperand(0), CE->getType(), SF);
   case Instruction::IntToPtr:
+      return executeIntToPtrInst(CE->getOperand(0), CE->getType(), SF);
   case Instruction::BitCast:
-    return executeCastOperation(Instruction::CastOps(CE->getOpcode()), 
-                                CE->getOperand(0), CE->getType(), SF);
+      return executeBitCastInst(CE->getOperand(0), CE->getType(), SF);
   case Instruction::GetElementPtr:
     return executeGEPOperation(CE->getOperand(0), gep_type_begin(CE),
                                gep_type_end(CE), SF);
@@ -190,14 +201,69 @@
 #define IMPLEMENT_BINARY_OPERATOR(OP, TY) \
    case Type::TY##TyID: Dest.TY##Val = Src1.TY##Val OP Src2.TY##Val; break
 
+#define IMPLEMENT_INTEGER_BINOP(OP, TY) \
+   case Type::IntegerTyID: { \
+     unsigned BitWidth = cast<IntegerType>(TY)->getBitWidth(); \
+     if (BitWidth == 1) \
+       Dest.Int1Val = Src1.Int1Val OP Src2.Int1Val; \
+     else if (BitWidth <= 8) \
+       Dest.Int8Val = Src1.Int8Val OP Src2.Int8Val; \
+     else if (BitWidth <= 16) \
+       Dest.Int16Val = Src1.Int16Val OP Src2.Int16Val; \
+     else if (BitWidth <= 32) \
+       Dest.Int32Val = Src1.Int32Val OP Src2.Int32Val; \
+     else if (BitWidth <= 64) \
+       Dest.Int64Val = Src1.Int64Val OP Src2.Int64Val; \
+     else \
+      cerr << "Integer types > 64 bits not supported: " << *Ty << "\n"; \
+     break; \
+   }
+
+#define IMPLEMENT_SIGNED_BINOP(OP, TY) \
+   if (const IntegerType *ITy = dyn_cast<IntegerType>(TY)) { \
+     unsigned BitWidth = ITy->getBitWidth(); \
+     if (BitWidth <= 8) \
+       Dest.Int8Val  = ((int8_t)Src1.Int8Val)   OP ((int8_t)Src2.Int8Val); \
+     else if (BitWidth <= 16) \
+       Dest.Int16Val = ((int16_t)Src1.Int16Val) OP ((int16_t)Src2.Int16Val); \
+     else if (BitWidth <= 32) \
+       Dest.Int32Val = ((int32_t)Src1.Int32Val) OP ((int32_t)Src2.Int32Val); \
+     else if (BitWidth <= 64) \
+       Dest.Int64Val = ((int64_t)Src1.Int64Val) OP ((int64_t)Src2.Int64Val); \
+     else { \
+      cerr << "Integer types > 64 bits not supported: " << *Ty << "\n"; \
+       abort(); \
+     } \
+   } else { \
+    cerr << "Unhandled type for " #OP " operator: " << *Ty << "\n"; \
+    abort(); \
+   }
+
+#define IMPLEMENT_UNSIGNED_BINOP(OP, TY) \
+   if (const IntegerType *ITy = dyn_cast<IntegerType>(TY)) { \
+     unsigned BitWidth = ITy->getBitWidth(); \
+     if (BitWidth <= 8) \
+       Dest.Int8Val  = ((uint8_t)Src1.Int8Val)   OP ((uint8_t)Src2.Int8Val); \
+     else if (BitWidth <= 16) \
+       Dest.Int16Val = ((uint16_t)Src1.Int16Val) OP ((uint16_t)Src2.Int16Val); \
+     else if (BitWidth <= 32) \
+       Dest.Int32Val = ((uint32_t)Src1.Int32Val) OP ((uint32_t)Src2.Int32Val); \
+     else if (BitWidth <= 64) \
+       Dest.Int64Val = ((uint64_t)Src1.Int64Val) OP ((uint64_t)Src2.Int64Val); \
+     else { \
+      cerr << "Integer types > 64 bits not supported: " << *Ty << "\n"; \
+       abort(); \
+     } \
+   } else { \
+    cerr << "Unhandled type for " #OP " operator: " << *Ty << "\n"; \
+    abort(); \
+  }
+
 static GenericValue executeAddInst(GenericValue Src1, GenericValue Src2,
                                    const Type *Ty) {
   GenericValue Dest;
   switch (Ty->getTypeID()) {
-    IMPLEMENT_BINARY_OPERATOR(+, Int8);
-    IMPLEMENT_BINARY_OPERATOR(+, Int16);
-    IMPLEMENT_BINARY_OPERATOR(+, Int32);
-    IMPLEMENT_BINARY_OPERATOR(+, Int64);
+    IMPLEMENT_INTEGER_BINOP(+, Ty);
     IMPLEMENT_BINARY_OPERATOR(+, Float);
     IMPLEMENT_BINARY_OPERATOR(+, Double);
   default:
@@ -211,10 +277,7 @@
                                    const Type *Ty) {
   GenericValue Dest;
   switch (Ty->getTypeID()) {
-    IMPLEMENT_BINARY_OPERATOR(-, Int8);
-    IMPLEMENT_BINARY_OPERATOR(-, Int16);
-    IMPLEMENT_BINARY_OPERATOR(-, Int32);
-    IMPLEMENT_BINARY_OPERATOR(-, Int64);
+    IMPLEMENT_INTEGER_BINOP(-, Ty);
     IMPLEMENT_BINARY_OPERATOR(-, Float);
     IMPLEMENT_BINARY_OPERATOR(-, Double);
   default:
@@ -228,10 +291,7 @@
                                    const Type *Ty) {
   GenericValue Dest;
   switch (Ty->getTypeID()) {
-    IMPLEMENT_BINARY_OPERATOR(*, Int8);
-    IMPLEMENT_BINARY_OPERATOR(*, Int16);
-    IMPLEMENT_BINARY_OPERATOR(*, Int32);
-    IMPLEMENT_BINARY_OPERATOR(*, Int64);
+    IMPLEMENT_INTEGER_BINOP(*, Ty);
     IMPLEMENT_BINARY_OPERATOR(*, Float);
     IMPLEMENT_BINARY_OPERATOR(*, Double);
   default:
@@ -241,37 +301,17 @@
   return Dest;
 }
 
-#define IMPLEMENT_SIGNLESS_BINOP(OP, TY, CAST) \
-   case Type::TY##TyID: Dest.TY##Val = \
-    ((CAST)Src1.TY##Val) OP ((CAST)Src2.TY##Val); break
-
 static GenericValue executeUDivInst(GenericValue Src1, GenericValue Src2,
                                    const Type *Ty) {
   GenericValue Dest;
-  switch (Ty->getTypeID()) {
-    IMPLEMENT_SIGNLESS_BINOP(/, Int8,  uint8_t);
-    IMPLEMENT_SIGNLESS_BINOP(/, Int16, uint16_t);
-    IMPLEMENT_SIGNLESS_BINOP(/, Int32, uint32_t);
-    IMPLEMENT_SIGNLESS_BINOP(/, Int64, uint64_t);
-  default:
-    cerr << "Unhandled type for UDiv instruction: " << *Ty << "\n";
-    abort();
-  }
+  IMPLEMENT_UNSIGNED_BINOP(/,Ty)
   return Dest;
 }
 
 static GenericValue executeSDivInst(GenericValue Src1, GenericValue Src2,
                                    const Type *Ty) {
   GenericValue Dest;
-  switch (Ty->getTypeID()) {
-    IMPLEMENT_SIGNLESS_BINOP(/, Int8,  int8_t);
-    IMPLEMENT_SIGNLESS_BINOP(/, Int16, int16_t);
-    IMPLEMENT_SIGNLESS_BINOP(/, Int32, int32_t);
-    IMPLEMENT_SIGNLESS_BINOP(/, Int64, int64_t);
-  default:
-    cerr << "Unhandled type for SDiv instruction: " << *Ty << "\n";
-    abort();
-  }
+  IMPLEMENT_SIGNED_BINOP(/,Ty)
   return Dest;
 }
 
@@ -282,7 +322,7 @@
     IMPLEMENT_BINARY_OPERATOR(/, Float);
     IMPLEMENT_BINARY_OPERATOR(/, Double);
   default:
-    cerr << "Unhandled type for Div instruction: " << *Ty << "\n";
+    cerr << "Unhandled type for FDiv instruction: " << *Ty << "\n";
     abort();
   }
   return Dest;
@@ -291,30 +331,14 @@
 static GenericValue executeURemInst(GenericValue Src1, GenericValue Src2,
                                    const Type *Ty) {
   GenericValue Dest;
-  switch (Ty->getTypeID()) {
-    IMPLEMENT_SIGNLESS_BINOP(%, Int8,  uint8_t);
-    IMPLEMENT_SIGNLESS_BINOP(%, Int16, uint16_t);
-    IMPLEMENT_SIGNLESS_BINOP(%, Int32, uint32_t);
-    IMPLEMENT_SIGNLESS_BINOP(%, Int64, uint64_t );
-  default:
-    cerr << "Unhandled type for URem instruction: " << *Ty << "\n";
-    abort();
-  }
+  IMPLEMENT_UNSIGNED_BINOP(%, Ty)
   return Dest;
 }
 
 static GenericValue executeSRemInst(GenericValue Src1, GenericValue Src2,
                                    const Type *Ty) {
   GenericValue Dest;
-  switch (Ty->getTypeID()) {
-    IMPLEMENT_SIGNLESS_BINOP(%, Int8,  int8_t);
-    IMPLEMENT_SIGNLESS_BINOP(%, Int16, int16_t);
-    IMPLEMENT_SIGNLESS_BINOP(%, Int32, int32_t);
-    IMPLEMENT_SIGNLESS_BINOP(%, Int64, int64_t);
-  default:
-    cerr << "Unhandled type for Rem instruction: " << *Ty << "\n";
-    abort();
-  }
+  IMPLEMENT_SIGNED_BINOP(%, Ty)
   return Dest;
 }
 
@@ -338,60 +362,69 @@
 static GenericValue executeAndInst(GenericValue Src1, GenericValue Src2,
                                    const Type *Ty) {
   GenericValue Dest;
-  switch (Ty->getTypeID()) {
-    IMPLEMENT_BINARY_OPERATOR(&, Int1);
-    IMPLEMENT_BINARY_OPERATOR(&, Int8);
-    IMPLEMENT_BINARY_OPERATOR(&, Int16);
-    IMPLEMENT_BINARY_OPERATOR(&, Int32);
-    IMPLEMENT_BINARY_OPERATOR(&, Int64);
-  default:
-    cerr << "Unhandled type for And instruction: " << *Ty << "\n";
-    abort();
-  }
+  IMPLEMENT_UNSIGNED_BINOP(&, Ty)
   return Dest;
 }
 
 static GenericValue executeOrInst(GenericValue Src1, GenericValue Src2,
                                   const Type *Ty) {
   GenericValue Dest;
-  switch (Ty->getTypeID()) {
-    IMPLEMENT_BINARY_OPERATOR(|, Int1);
-    IMPLEMENT_BINARY_OPERATOR(|, Int8);
-    IMPLEMENT_BINARY_OPERATOR(|, Int16);
-    IMPLEMENT_BINARY_OPERATOR(|, Int32);
-    IMPLEMENT_BINARY_OPERATOR(|, Int64);
-  default:
-    cerr << "Unhandled type for Or instruction: " << *Ty << "\n";
-    abort();
-  }
+  IMPLEMENT_UNSIGNED_BINOP(|, Ty)
   return Dest;
 }
 
 static GenericValue executeXorInst(GenericValue Src1, GenericValue Src2,
                                    const Type *Ty) {
   GenericValue Dest;
-  switch (Ty->getTypeID()) {
-    IMPLEMENT_BINARY_OPERATOR(^, Int1);
-    IMPLEMENT_BINARY_OPERATOR(^, Int8);
-    IMPLEMENT_BINARY_OPERATOR(^, Int16);
-    IMPLEMENT_BINARY_OPERATOR(^, Int32);
-    IMPLEMENT_BINARY_OPERATOR(^, Int64);
-  default:
-    cerr << "Unhandled type for Xor instruction: " << *Ty << "\n";
-    abort();
-  }
+  IMPLEMENT_UNSIGNED_BINOP(^, Ty)
   return Dest;
 }
 
-#define IMPLEMENT_ICMP(OP, TY, CAST) \
-   case Type::TY##TyID: Dest.Int1Val = \
-     ((CAST)Src1.TY##Val) OP ((CAST)Src2.TY##Val); break
+#define IMPLEMENT_SIGNED_ICMP(OP, TY) \
+   case Type::IntegerTyID: {  \
+     unsigned BitWidth = cast<IntegerType>(TY)->getBitWidth(); \
+     if (BitWidth == 1) \
+       Dest.Int1Val = ((int8_t)Src1.Int1Val)   OP ((int8_t)Src2.Int1Val); \
+     else if (BitWidth <= 8) \
+       Dest.Int1Val = ((int8_t)Src1.Int8Val)   OP ((int8_t)Src2.Int8Val); \
+     else if (BitWidth <= 16) \
+       Dest.Int1Val = ((int16_t)Src1.Int16Val) OP ((int16_t)Src2.Int16Val); \
+     else if (BitWidth <= 32) \
+       Dest.Int1Val = ((int32_t)Src1.Int32Val) OP ((int32_t)Src2.Int32Val); \
+     else if (BitWidth <= 64) \
+       Dest.Int1Val = ((int64_t)Src1.Int64Val) OP ((int64_t)Src2.Int64Val); \
+     else { \
+      cerr << "Integer types > 64 bits not supported: " << *Ty << "\n"; \
+       abort(); \
+     } \
+     break; \
+   }
+
+#define IMPLEMENT_UNSIGNED_ICMP(OP, TY) \
+   case Type::IntegerTyID: { \
+     unsigned BitWidth = cast<IntegerType>(TY)->getBitWidth(); \
+     if (BitWidth == 1) \
+       Dest.Int1Val = ((uint8_t)Src1.Int1Val)   OP ((uint8_t)Src2.Int1Val); \
+     else if (BitWidth <= 8) \
+       Dest.Int1Val = ((uint8_t)Src1.Int8Val)   OP ((uint8_t)Src2.Int8Val); \
+     else if (BitWidth <= 16) \
+       Dest.Int1Val = ((uint16_t)Src1.Int16Val) OP ((uint16_t)Src2.Int16Val); \
+     else if (BitWidth <= 32) \
+       Dest.Int1Val = ((uint32_t)Src1.Int32Val) OP ((uint32_t)Src2.Int32Val); \
+     else if (BitWidth <= 64) \
+       Dest.Int1Val = ((uint64_t)Src1.Int64Val) OP ((uint64_t)Src2.Int64Val); \
+     else { \
+      cerr << "Integer types > 64 bits not supported: " << *Ty << "\n"; \
+       abort(); \
+     } \
+     break; \
+   }
 
 // Handle pointers specially because they must be compared with only as much
 // width as the host has.  We _do not_ want to be comparing 64 bit values when
 // running on a 32-bit target, otherwise the upper 32 bits might mess up
 // comparisons if they contain garbage.
-#define IMPLEMENT_POINTERCMP(OP) \
+#define IMPLEMENT_POINTER_ICMP(OP) \
    case Type::PointerTyID: \
         Dest.Int1Val = (void*)(intptr_t)Src1.PointerVal OP \
                        (void*)(intptr_t)Src2.PointerVal; break
@@ -400,11 +433,8 @@
                                    const Type *Ty) {
   GenericValue Dest;
   switch (Ty->getTypeID()) {
-    IMPLEMENT_ICMP(==, Int8,  uint8_t);
-    IMPLEMENT_ICMP(==, Int16, uint16_t);
-    IMPLEMENT_ICMP(==, Int32, uint32_t);
-    IMPLEMENT_ICMP(==, Int64, uint64_t);
-    IMPLEMENT_POINTERCMP(==);
+    IMPLEMENT_UNSIGNED_ICMP(==, Ty);
+    IMPLEMENT_POINTER_ICMP(==);
   default:
     cerr << "Unhandled type for ICMP_EQ predicate: " << *Ty << "\n";
     abort();
@@ -416,11 +446,8 @@
                                    const Type *Ty) {
   GenericValue Dest;
   switch (Ty->getTypeID()) {
-    IMPLEMENT_ICMP(!=, Int8,  uint8_t);
-    IMPLEMENT_ICMP(!=, Int16, uint16_t);
-    IMPLEMENT_ICMP(!=, Int32, uint32_t);
-    IMPLEMENT_ICMP(!=, Int64, uint64_t);
-    IMPLEMENT_POINTERCMP(!=);
+    IMPLEMENT_UNSIGNED_ICMP(!=, Ty);
+    IMPLEMENT_POINTER_ICMP(!=);
   default:
     cerr << "Unhandled type for ICMP_NE predicate: " << *Ty << "\n";
     abort();
@@ -432,11 +459,8 @@
                                     const Type *Ty) {
   GenericValue Dest;
   switch (Ty->getTypeID()) {
-    IMPLEMENT_ICMP(<, Int8,  uint8_t);
-    IMPLEMENT_ICMP(<, Int16, uint16_t);
-    IMPLEMENT_ICMP(<, Int32, uint32_t);
-    IMPLEMENT_ICMP(<, Int64, uint64_t);
-    IMPLEMENT_POINTERCMP(<);
+    IMPLEMENT_UNSIGNED_ICMP(<, Ty);
+    IMPLEMENT_POINTER_ICMP(<);
   default:
     cerr << "Unhandled type for ICMP_ULT predicate: " << *Ty << "\n";
     abort();
@@ -448,11 +472,8 @@
                                     const Type *Ty) {
   GenericValue Dest;
   switch (Ty->getTypeID()) {
-    IMPLEMENT_ICMP(<, Int8,  int8_t);
-    IMPLEMENT_ICMP(<, Int16, int16_t);
-    IMPLEMENT_ICMP(<, Int32, int32_t);
-    IMPLEMENT_ICMP(<, Int64, int64_t);
-    IMPLEMENT_POINTERCMP(<);
+    IMPLEMENT_SIGNED_ICMP(<, Ty);
+    IMPLEMENT_POINTER_ICMP(<);
   default:
     cerr << "Unhandled type for ICMP_SLT predicate: " << *Ty << "\n";
     abort();
@@ -464,11 +485,8 @@
                                     const Type *Ty) {
   GenericValue Dest;
   switch (Ty->getTypeID()) {
-    IMPLEMENT_ICMP(>, Int8,  uint8_t);
-    IMPLEMENT_ICMP(>, Int16, uint16_t);
-    IMPLEMENT_ICMP(>, Int32, uint32_t);
-    IMPLEMENT_ICMP(>, Int64, uint64_t);
-    IMPLEMENT_POINTERCMP(>);
+    IMPLEMENT_UNSIGNED_ICMP(>, Ty);
+    IMPLEMENT_POINTER_ICMP(>);
   default:
     cerr << "Unhandled type for ICMP_UGT predicate: " << *Ty << "\n";
     abort();
@@ -480,11 +498,8 @@
                                     const Type *Ty) {
   GenericValue Dest;
   switch (Ty->getTypeID()) {
-    IMPLEMENT_ICMP(>, Int8,  int8_t);
-    IMPLEMENT_ICMP(>, Int16, int16_t);
-    IMPLEMENT_ICMP(>, Int32, int32_t);
-    IMPLEMENT_ICMP(>, Int64, int64_t);
-    IMPLEMENT_POINTERCMP(>);
+    IMPLEMENT_SIGNED_ICMP(>, Ty);
+    IMPLEMENT_POINTER_ICMP(>);
   default:
     cerr << "Unhandled type for ICMP_SGT predicate: " << *Ty << "\n";
     abort();
@@ -496,11 +511,8 @@
                                     const Type *Ty) {
   GenericValue Dest;
   switch (Ty->getTypeID()) {
-    IMPLEMENT_ICMP(<=, Int8,  uint8_t);
-    IMPLEMENT_ICMP(<=, Int16, uint16_t);
-    IMPLEMENT_ICMP(<=, Int32, uint32_t);
-    IMPLEMENT_ICMP(<=, Int64, uint64_t);
-    IMPLEMENT_POINTERCMP(<=);
+    IMPLEMENT_UNSIGNED_ICMP(<=, Ty);
+    IMPLEMENT_POINTER_ICMP(<=);
   default:
     cerr << "Unhandled type for ICMP_ULE predicate: " << *Ty << "\n";
     abort();
@@ -512,11 +524,8 @@
                                     const Type *Ty) {
   GenericValue Dest;
   switch (Ty->getTypeID()) {
-    IMPLEMENT_ICMP(<=, Int8,  int8_t);
-    IMPLEMENT_ICMP(<=, Int16, int16_t);
-    IMPLEMENT_ICMP(<=, Int32, int32_t);
-    IMPLEMENT_ICMP(<=, Int64, int64_t);
-    IMPLEMENT_POINTERCMP(<=);
+    IMPLEMENT_SIGNED_ICMP(<=, Ty);
+    IMPLEMENT_POINTER_ICMP(<=);
   default:
     cerr << "Unhandled type for ICMP_SLE predicate: " << *Ty << "\n";
     abort();
@@ -528,11 +537,8 @@
                                     const Type *Ty) {
   GenericValue Dest;
   switch (Ty->getTypeID()) {
-    IMPLEMENT_ICMP(>=, Int8,  uint8_t);
-    IMPLEMENT_ICMP(>=, Int16, uint16_t);
-    IMPLEMENT_ICMP(>=, Int32, uint32_t);
-    IMPLEMENT_ICMP(>=, Int64, uint64_t);
-    IMPLEMENT_POINTERCMP(>=);
+    IMPLEMENT_UNSIGNED_ICMP(>=,Ty);
+    IMPLEMENT_POINTER_ICMP(>=);
   default:
     cerr << "Unhandled type for ICMP_UGE predicate: " << *Ty << "\n";
     abort();
@@ -544,11 +550,8 @@
                                     const Type *Ty) {
   GenericValue Dest;
   switch (Ty->getTypeID()) {
-    IMPLEMENT_ICMP(>=, Int8,  int8_t);
-    IMPLEMENT_ICMP(>=, Int16, int16_t);
-    IMPLEMENT_ICMP(>=, Int32, int32_t);
-    IMPLEMENT_ICMP(>=, Int64, int64_t);
-    IMPLEMENT_POINTERCMP(>=);
+    IMPLEMENT_SIGNED_ICMP(>=, Ty);
+    IMPLEMENT_POINTER_ICMP(>=);
   default:
     cerr << "Unhandled type for ICMP_SGE predicate: " << *Ty << "\n";
     abort();
@@ -564,8 +567,8 @@
   GenericValue R;   // Result
   
   switch (I.getPredicate()) {
-  case ICmpInst::ICMP_EQ:  R = executeICMP_EQ(Src1, Src2, Ty);  break;
-  case ICmpInst::ICMP_NE:  R = executeICMP_NE(Src1, Src2, Ty);  break;
+  case ICmpInst::ICMP_EQ:  R = executeICMP_EQ(Src1,  Src2, Ty); break;
+  case ICmpInst::ICMP_NE:  R = executeICMP_NE(Src1,  Src2, Ty); break;
   case ICmpInst::ICMP_ULT: R = executeICMP_ULT(Src1, Src2, Ty); break;
   case ICmpInst::ICMP_SLT: R = executeICMP_SLT(Src1, Src2, Ty); break;
   case ICmpInst::ICMP_UGT: R = executeICMP_UGT(Src1, Src2, Ty); break;
@@ -585,20 +588,20 @@
 #define IMPLEMENT_FCMP(OP, TY) \
    case Type::TY##TyID: Dest.Int1Val = Src1.TY##Val OP Src2.TY##Val; break
 
-static GenericValue executeFCMP_EQ(GenericValue Src1, GenericValue Src2,
+static GenericValue executeFCMP_OEQ(GenericValue Src1, GenericValue Src2,
                                    const Type *Ty) {
   GenericValue Dest;
   switch (Ty->getTypeID()) {
     IMPLEMENT_FCMP(==, Float);
     IMPLEMENT_FCMP(==, Double);
   default:
-    cerr << "Unhandled type for SetEQ instruction: " << *Ty << "\n";
+    cerr << "Unhandled type for FCmp EQ instruction: " << *Ty << "\n";
     abort();
   }
   return Dest;
 }
 
-static GenericValue executeFCMP_NE(GenericValue Src1, GenericValue Src2,
+static GenericValue executeFCMP_ONE(GenericValue Src1, GenericValue Src2,
                                    const Type *Ty) {
   GenericValue Dest;
   switch (Ty->getTypeID()) {
@@ -606,64 +609,142 @@
     IMPLEMENT_FCMP(!=, Double);
 
   default:
-    cerr << "Unhandled type for SetNE instruction: " << *Ty << "\n";
+    cerr << "Unhandled type for FCmp NE instruction: " << *Ty << "\n";
     abort();
   }
   return Dest;
 }
 
-static GenericValue executeFCMP_LE(GenericValue Src1, GenericValue Src2,
+static GenericValue executeFCMP_OLE(GenericValue Src1, GenericValue Src2,
                                    const Type *Ty) {
   GenericValue Dest;
   switch (Ty->getTypeID()) {
     IMPLEMENT_FCMP(<=, Float);
     IMPLEMENT_FCMP(<=, Double);
   default:
-    cerr << "Unhandled type for SetLE instruction: " << *Ty << "\n";
+    cerr << "Unhandled type for FCmp LE instruction: " << *Ty << "\n";
     abort();
   }
   return Dest;
 }
 
-static GenericValue executeFCMP_GE(GenericValue Src1, GenericValue Src2,
+static GenericValue executeFCMP_OGE(GenericValue Src1, GenericValue Src2,
                                    const Type *Ty) {
   GenericValue Dest;
   switch (Ty->getTypeID()) {
     IMPLEMENT_FCMP(>=, Float);
     IMPLEMENT_FCMP(>=, Double);
   default:
-    cerr << "Unhandled type for SetGE instruction: " << *Ty << "\n";
+    cerr << "Unhandled type for FCmp GE instruction: " << *Ty << "\n";
     abort();
   }
   return Dest;
 }
 
-static GenericValue executeFCMP_LT(GenericValue Src1, GenericValue Src2,
+static GenericValue executeFCMP_OLT(GenericValue Src1, GenericValue Src2,
                                    const Type *Ty) {
   GenericValue Dest;
   switch (Ty->getTypeID()) {
     IMPLEMENT_FCMP(<, Float);
     IMPLEMENT_FCMP(<, Double);
   default:
-    cerr << "Unhandled type for SetLT instruction: " << *Ty << "\n";
+    cerr << "Unhandled type for FCmp LT instruction: " << *Ty << "\n";
     abort();
   }
   return Dest;
 }
 
-static GenericValue executeFCMP_GT(GenericValue Src1, GenericValue Src2,
+static GenericValue executeFCMP_OGT(GenericValue Src1, GenericValue Src2,
                                      const Type *Ty) {
   GenericValue Dest;
   switch (Ty->getTypeID()) {
     IMPLEMENT_FCMP(>, Float);
     IMPLEMENT_FCMP(>, Double);
   default:
-    cerr << "Unhandled type for SetGT instruction: " << *Ty << "\n";
+    cerr << "Unhandled type for FCmp GT instruction: " << *Ty << "\n";
     abort();
   }
   return Dest;
 }
 
+#define IMPLEMENT_UNORDERED(TY, X,Y) \
+   if (TY == Type::FloatTy) \
+     if (X.FloatVal != X.FloatVal || Y.FloatVal != Y.FloatVal) { \
+       Dest.Int1Val = true; \
+       return Dest; \
+     } \
+   else if (X.DoubleVal != X.DoubleVal || Y.DoubleVal != Y.DoubleVal) { \
+     Dest.Int1Val = true; \
+     return Dest; \
+   }
+
+
+static GenericValue executeFCMP_UEQ(GenericValue Src1, GenericValue Src2,
+                                   const Type *Ty) {
+  GenericValue Dest;
+  IMPLEMENT_UNORDERED(Ty, Src1, Src2)
+  return executeFCMP_OEQ(Src1, Src2, Ty);
+}
+
+static GenericValue executeFCMP_UNE(GenericValue Src1, GenericValue Src2,
+                                   const Type *Ty) {
+  GenericValue Dest;
+  IMPLEMENT_UNORDERED(Ty, Src1, Src2)
+  return executeFCMP_ONE(Src1, Src2, Ty);
+}
+
+static GenericValue executeFCMP_ULE(GenericValue Src1, GenericValue Src2,
+                                   const Type *Ty) {
+  GenericValue Dest;
+  IMPLEMENT_UNORDERED(Ty, Src1, Src2)
+  return executeFCMP_OLE(Src1, Src2, Ty);
+}
+
+static GenericValue executeFCMP_UGE(GenericValue Src1, GenericValue Src2,
+                                   const Type *Ty) {
+  GenericValue Dest;
+  IMPLEMENT_UNORDERED(Ty, Src1, Src2)
+  return executeFCMP_OGE(Src1, Src2, Ty);
+}
+
+static GenericValue executeFCMP_ULT(GenericValue Src1, GenericValue Src2,
+                                   const Type *Ty) {
+  GenericValue Dest;
+  IMPLEMENT_UNORDERED(Ty, Src1, Src2)
+  return executeFCMP_OLT(Src1, Src2, Ty);
+}
+
+static GenericValue executeFCMP_UGT(GenericValue Src1, GenericValue Src2,
+                                     const Type *Ty) {
+  GenericValue Dest;
+  IMPLEMENT_UNORDERED(Ty, Src1, Src2)
+  return executeFCMP_OGT(Src1, Src2, Ty);
+}
+
+static GenericValue executeFCMP_ORD(GenericValue Src1, GenericValue Src2,
+                                     const Type *Ty) {
+  GenericValue Dest;
+  if (Ty == Type::FloatTy)
+    Dest.Int1Val = (Src1.FloatVal == Src1.FloatVal && 
+                    Src2.FloatVal == Src2.FloatVal);
+  else
+    Dest.Int1Val = (Src1.DoubleVal == Src1.DoubleVal && 
+                    Src2.DoubleVal == Src2.DoubleVal);
+  return Dest;
+}
+
+static GenericValue executeFCMP_UNO(GenericValue Src1, GenericValue Src2,
+                                     const Type *Ty) {
+  GenericValue Dest;
+  if (Ty == Type::FloatTy)
+    Dest.Int1Val = (Src1.FloatVal != Src1.FloatVal || 
+                    Src2.FloatVal != Src2.FloatVal);
+  else
+    Dest.Int1Val = (Src1.DoubleVal != Src1.DoubleVal || 
+                    Src2.DoubleVal != Src2.DoubleVal);
+  return Dest;
+}
+
 void Interpreter::visitFCmpInst(FCmpInst &I) {
   ExecutionContext &SF = ECStack.back();
   const Type *Ty    = I.getOperand(0)->getType();
@@ -672,22 +753,22 @@
   GenericValue R;   // Result
   
   switch (I.getPredicate()) {
-  case FCmpInst::FCMP_FALSE: R.Int1Val = false;
-  case FCmpInst::FCMP_ORD:   R = executeFCMP_EQ(Src1, Src2, Ty); break; ///???
-  case FCmpInst::FCMP_UNO:   R = executeFCMP_NE(Src1, Src2, Ty); break; ///???
-  case FCmpInst::FCMP_OEQ:
-  case FCmpInst::FCMP_UEQ:   R = executeFCMP_EQ(Src1, Src2, Ty);  break;
-  case FCmpInst::FCMP_ONE:
-  case FCmpInst::FCMP_UNE:   R = executeFCMP_NE(Src1, Src2, Ty);  break;
-  case FCmpInst::FCMP_OLT:
-  case FCmpInst::FCMP_ULT:   R = executeFCMP_LT(Src1, Src2, Ty); break;
-  case FCmpInst::FCMP_OGT:
-  case FCmpInst::FCMP_UGT:   R = executeFCMP_GT(Src1, Src2, Ty); break;
-  case FCmpInst::FCMP_OLE:
-  case FCmpInst::FCMP_ULE:   R = executeFCMP_LE(Src1, Src2, Ty); break;
-  case FCmpInst::FCMP_OGE:
-  case FCmpInst::FCMP_UGE:   R = executeFCMP_GE(Src1, Src2, Ty); break;
-  case FCmpInst::FCMP_TRUE:  R.Int1Val = true;
+  case FCmpInst::FCMP_FALSE: R.Int1Val = false; break;
+  case FCmpInst::FCMP_TRUE:  R.Int1Val = true; break;
+  case FCmpInst::FCMP_ORD:   R = executeFCMP_ORD(Src1, Src2, Ty); break;
+  case FCmpInst::FCMP_UNO:   R = executeFCMP_UNO(Src1, Src2, Ty); break;
+  case FCmpInst::FCMP_UEQ:   R = executeFCMP_UEQ(Src1, Src2, Ty); break;
+  case FCmpInst::FCMP_OEQ:   R = executeFCMP_OEQ(Src1, Src2, Ty); break;
+  case FCmpInst::FCMP_UNE:   R = executeFCMP_UNE(Src1, Src2, Ty); break;
+  case FCmpInst::FCMP_ONE:   R = executeFCMP_ONE(Src1, Src2, Ty); break;
+  case FCmpInst::FCMP_ULT:   R = executeFCMP_ULT(Src1, Src2, Ty); break;
+  case FCmpInst::FCMP_OLT:   R = executeFCMP_OLT(Src1, Src2, Ty); break;
+  case FCmpInst::FCMP_UGT:   R = executeFCMP_UGT(Src1, Src2, Ty); break;
+  case FCmpInst::FCMP_OGT:   R = executeFCMP_OGT(Src1, Src2, Ty); break;
+  case FCmpInst::FCMP_ULE:   R = executeFCMP_ULE(Src1, Src2, Ty); break;
+  case FCmpInst::FCMP_OLE:   R = executeFCMP_OLE(Src1, Src2, Ty); break;
+  case FCmpInst::FCMP_UGE:   R = executeFCMP_UGE(Src1, Src2, Ty); break;
+  case FCmpInst::FCMP_OGE:   R = executeFCMP_OGE(Src1, Src2, Ty); break;
   default:
     cerr << "Don't know how to handle this FCmp predicate!\n-->" << I;
     abort();
@@ -710,20 +791,20 @@
   case ICmpInst::ICMP_SGE:   return executeICMP_SGE(Src1, Src2, Ty);
   case ICmpInst::ICMP_ULE:   return executeICMP_ULE(Src1, Src2, Ty);
   case ICmpInst::ICMP_SLE:   return executeICMP_SLE(Src1, Src2, Ty);
-  case FCmpInst::FCMP_ORD:   return executeFCMP_EQ(Src1, Src2, Ty); break; 
-  case FCmpInst::FCMP_UNO:   return executeFCMP_NE(Src1, Src2, Ty); break; 
-  case FCmpInst::FCMP_OEQ:
-  case FCmpInst::FCMP_UEQ:   return executeFCMP_EQ(Src1, Src2, Ty);  break;
-  case FCmpInst::FCMP_ONE:
-  case FCmpInst::FCMP_UNE:   return executeFCMP_NE(Src1, Src2, Ty);  break;
-  case FCmpInst::FCMP_OLT:
-  case FCmpInst::FCMP_ULT:   return executeFCMP_LT(Src1, Src2, Ty); break;
-  case FCmpInst::FCMP_OGT:
-  case FCmpInst::FCMP_UGT:   return executeFCMP_GT(Src1, Src2, Ty); break;
-  case FCmpInst::FCMP_OLE:
-  case FCmpInst::FCMP_ULE:   return executeFCMP_LE(Src1, Src2, Ty); break;
-  case FCmpInst::FCMP_OGE:
-  case FCmpInst::FCMP_UGE:   return executeFCMP_GE(Src1, Src2, Ty); break;
+  case FCmpInst::FCMP_ORD:   return executeFCMP_ORD(Src1, Src2, Ty);
+  case FCmpInst::FCMP_UNO:   return executeFCMP_UNO(Src1, Src2, Ty);
+  case FCmpInst::FCMP_OEQ:   return executeFCMP_OEQ(Src1, Src2, Ty);
+  case FCmpInst::FCMP_UEQ:   return executeFCMP_UEQ(Src1, Src2, Ty);
+  case FCmpInst::FCMP_ONE:   return executeFCMP_ONE(Src1, Src2, Ty);
+  case FCmpInst::FCMP_UNE:   return executeFCMP_UNE(Src1, Src2, Ty);
+  case FCmpInst::FCMP_OLT:   return executeFCMP_OLT(Src1, Src2, Ty);
+  case FCmpInst::FCMP_ULT:   return executeFCMP_ULT(Src1, Src2, Ty);
+  case FCmpInst::FCMP_OGT:   return executeFCMP_OGT(Src1, Src2, Ty);
+  case FCmpInst::FCMP_UGT:   return executeFCMP_UGT(Src1, Src2, Ty);
+  case FCmpInst::FCMP_OLE:   return executeFCMP_OLE(Src1, Src2, Ty);
+  case FCmpInst::FCMP_ULE:   return executeFCMP_ULE(Src1, Src2, Ty);
+  case FCmpInst::FCMP_OGE:   return executeFCMP_OGE(Src1, Src2, Ty);
+  case FCmpInst::FCMP_UGE:   return executeFCMP_UGE(Src1, Src2, Ty);
   case FCmpInst::FCMP_FALSE: { 
     GenericValue Result;
     Result.Int1Val = false; 
@@ -989,14 +1070,19 @@
       // Get the index number for the array... which must be long type...
       GenericValue IdxGV = getOperandValue(I.getOperand(), SF);
 
-      uint64_t Idx;
-      switch (I.getOperand()->getType()->getTypeID()) {
-      default: assert(0 && "Illegal getelementptr index for sequential type!");
-      case Type::Int8TyID:  Idx = IdxGV.Int8Val; break;
-      case Type::Int16TyID: Idx = IdxGV.Int16Val; break;
-      case Type::Int32TyID: Idx = IdxGV.Int32Val; break;
-      case Type::Int64TyID: Idx = IdxGV.Int64Val; break;
-      }
+      int64_t Idx;
+      unsigned BitWidth = 
+        cast<IntegerType>(I.getOperand()->getType())->getBitWidth();
+      if (BitWidth <= 8)
+        Idx = (int64_t)(int8_t)IdxGV.Int8Val;
+      else if (BitWidth <= 16)
+        Idx = (int64_t)(int16_t)IdxGV.Int16Val;
+      else if (BitWidth <= 32)
+        Idx = (int64_t)(int32_t)IdxGV.Int32Val;
+      else if (BitWidth <= 64)
+        Idx = (int64_t)IdxGV.Int64Val;
+      else 
+        assert(0 && "Integer types >64 bits not supported");
       Total += PointerTy(TD.getTypeSize(ST->getElementType())*Idx);
     }
   }
@@ -1084,15 +1170,13 @@
     // this by zero or sign extending the value as appropriate according to the
     // source type.
     const Type *Ty = V->getType();
-    if (Ty->isIntegral() && Ty->getPrimitiveSize() < 4) {
-      if (Ty == Type::Int16Ty)
-        ArgVals.back().Int32Val = ArgVals.back().Int16Val;
-      else if (Ty == Type::Int8Ty)
-        ArgVals.back().Int32Val = ArgVals.back().Int8Val;
-      else if (Ty == Type::Int1Ty)
+    if (Ty->isIntegral()) {
+      if (Ty->getPrimitiveSizeInBits() == 1)
         ArgVals.back().Int32Val = ArgVals.back().Int1Val;
-      else
-        assert(0 && "Unknown type!");
+      else if (Ty->getPrimitiveSizeInBits() <= 8)
+        ArgVals.back().Int32Val = ArgVals.back().Int8Val;
+      else if (Ty->getPrimitiveSizeInBits() <= 16)
+        ArgVals.back().Int32Val = ArgVals.back().Int16Val;
     }
   }
 
@@ -1102,23 +1186,26 @@
   callFunction((Function*)GVTOP(SRC), ArgVals);
 }
 
-#define IMPLEMENT_SHIFT(OP, TY) \
-   case Type::TY##TyID: Dest.TY##Val = Src1.TY##Val OP Src2.Int8Val; break
-
-#define IMPLEMENT_SIGNLESS_SHIFT(OP, TY, CAST) \
-   case Type::TY##TyID: Dest.TY##Val = ((CAST)Src1.TY##Val) OP Src2.Int8Val; \
-     break
-
 static GenericValue executeShlInst(GenericValue Src1, GenericValue Src2,
                                    const Type *Ty) {
   GenericValue Dest;
-  switch (Ty->getTypeID()) {
-    IMPLEMENT_SHIFT(<<, Int8);
-    IMPLEMENT_SHIFT(<<, Int16);
-    IMPLEMENT_SHIFT(<<, Int32);
-    IMPLEMENT_SHIFT(<<, Int64);
-  default:
+  if (const IntegerType *ITy = cast<IntegerType>(Ty)) {
+    unsigned BitWidth = ITy->getBitWidth();
+    if (BitWidth <= 8)
+      Dest.Int8Val  = ((uint8_t)Src1.Int8Val)   << ((uint32_t)Src2.Int8Val);
+    else if (BitWidth <= 16)
+      Dest.Int16Val = ((uint16_t)Src1.Int16Val) << ((uint32_t)Src2.Int8Val);
+    else if (BitWidth <= 32)
+      Dest.Int32Val = ((uint32_t)Src1.Int32Val) << ((uint32_t)Src2.Int8Val);
+    else if (BitWidth <= 64)
+      Dest.Int64Val = ((uint64_t)Src1.Int64Val) << ((uint32_t)Src2.Int8Val);
+    else {
+      cerr << "Integer types > 64 bits not supported: " << *Ty << "\n";
+      abort();
+    }
+  } else {
     cerr << "Unhandled type for Shl instruction: " << *Ty << "\n";
+    abort();
   }
   return Dest;
 }
@@ -1126,12 +1213,21 @@
 static GenericValue executeLShrInst(GenericValue Src1, GenericValue Src2,
                                     const Type *Ty) {
   GenericValue Dest;
-  switch (Ty->getTypeID()) {
-    IMPLEMENT_SIGNLESS_SHIFT(>>, Int8,  uint8_t);
-    IMPLEMENT_SIGNLESS_SHIFT(>>, Int16, uint16_t);
-    IMPLEMENT_SIGNLESS_SHIFT(>>, Int32, uint32_t);
-    IMPLEMENT_SIGNLESS_SHIFT(>>, Int64, uint64_t);
-  default:
+  if (const IntegerType *ITy = cast<IntegerType>(Ty)) {
+    unsigned BitWidth = ITy->getBitWidth();
+    if (BitWidth <= 8)
+      Dest.Int8Val = ((uint8_t)Src1.Int8Val)   >> ((uint32_t)Src2.Int8Val);
+    else if (BitWidth <= 16)
+      Dest.Int16Val = ((uint16_t)Src1.Int16Val) >> ((uint32_t)Src2.Int8Val);
+    else if (BitWidth <= 32)
+      Dest.Int32Val = ((uint32_t)Src1.Int32Val) >> ((uint32_t)Src2.Int8Val);
+    else if (BitWidth <= 64)
+      Dest.Int64Val = ((uint64_t)Src1.Int64Val) >> ((uint32_t)Src2.Int8Val);
+    else {
+      cerr << "Integer types > 64 bits not supported: " << *Ty << "\n";
+      abort();
+    }
+  } else {
     cerr << "Unhandled type for LShr instruction: " << *Ty << "\n";
     abort();
   }
@@ -1141,12 +1237,21 @@
 static GenericValue executeAShrInst(GenericValue Src1, GenericValue Src2,
                                     const Type *Ty) {
   GenericValue Dest;
-  switch (Ty->getTypeID()) {
-    IMPLEMENT_SIGNLESS_SHIFT(>>, Int8,  int8_t);
-    IMPLEMENT_SIGNLESS_SHIFT(>>, Int16, int16_t);
-    IMPLEMENT_SIGNLESS_SHIFT(>>, Int32, int32_t);
-    IMPLEMENT_SIGNLESS_SHIFT(>>, Int64, int64_t);
-  default:
+  if (const IntegerType *ITy = cast<IntegerType>(Ty)) {
+    unsigned BitWidth = ITy->getBitWidth();
+    if (BitWidth <= 8)
+      Dest.Int8Val  = ((int8_t)Src1.Int8Val)   >> ((int32_t)Src2.Int8Val);
+    else if (BitWidth <= 16)
+      Dest.Int16Val = ((int16_t)Src1.Int16Val) >> ((int32_t)Src2.Int8Val);
+    else if (BitWidth <= 32)
+      Dest.Int32Val = ((int32_t)Src1.Int32Val) >> ((int32_t)Src2.Int8Val);
+    else if (BitWidth <= 64)
+      Dest.Int64Val = ((int64_t)Src1.Int64Val) >> ((int32_t)Src2.Int8Val);
+    else {
+      cerr << "Integer types > 64 bits not supported: " << *Ty << "\n"; \
+      abort();
+    } 
+  } else { 
     cerr << "Unhandled type for AShr instruction: " << *Ty << "\n";
     abort();
   }
@@ -1183,165 +1288,357 @@
   SetValue(&I, Dest, SF);
 }
 
-#define IMPLEMENT_CAST_START \
-  switch (DstTy->getTypeID()) {
+#define INTEGER_ASSIGN(DEST, BITWIDTH, VAL)   \
+  if (BITWIDTH == 1) {                        \
+    Dest.Int1Val = (bool) VAL;                \
+  } else if (BITWIDTH <= 8) {                 \
+    Dest.Int8Val = (uint8_t) VAL;             \
+  } else if (BITWIDTH <= 16) {                \
+    Dest.Int16Val = (uint16_t) VAL;           \
+  } else if (BITWIDTH <= 32) {                \
+    Dest.Int32Val = (uint32_t) VAL;           \
+  } else                                      \
+    Dest.Int64Val = (uint64_t) VAL;          
 
-#define IMPLEMENT_CAST(STY, DTY, CAST) \
-     case Type::STY##TyID: Dest.DTY##Val = (CAST(Src.STY##Val)); break;
-
-#define IMPLEMENT_CAST_CASE(DTY, CAST)          \
-  case Type::DTY##TyID:                         \
-    switch (SrcTy->getTypeID()) {               \
-      IMPLEMENT_CAST(Int1,   DTY, CAST);        \
-      IMPLEMENT_CAST(Int8,   DTY, CAST);        \
-      IMPLEMENT_CAST(Int16,  DTY, CAST);        \
-      IMPLEMENT_CAST(Int32,  DTY, CAST);        \
-      IMPLEMENT_CAST(Int64,  DTY, CAST);        \
-      IMPLEMENT_CAST(Pointer,DTY, CAST);        \
-      IMPLEMENT_CAST(Float,  DTY, CAST);        \
-      IMPLEMENT_CAST(Double, DTY, CAST);        \
-    default:                                    \
-      cerr << "Unhandled cast: "                \
-        << *SrcTy << " to " << *DstTy << "\n";  \
-      abort();                                  \
-    }                                           \
-    break
-
-#define IMPLEMENT_CAST_END                      \
-  default: cerr                                 \
-      << "Unhandled dest type for cast instruction: "  \
-      << *DstTy << "\n";                        \
-    abort();                                    \
-  }
-
-GenericValue Interpreter::executeCastOperation(Instruction::CastOps opcode,
-                                               Value *SrcVal, const Type *DstTy,
-                                               ExecutionContext &SF) {
+GenericValue Interpreter::executeTruncInst(Value *SrcVal, const Type *DstTy,
+                                           ExecutionContext &SF) {
   const Type *SrcTy = SrcVal->getType();
   GenericValue Dest, Src = getOperandValue(SrcVal, SF);
+  const IntegerType *DITy = cast<IntegerType>(DstTy);
+  const IntegerType *SITy = cast<IntegerType>(SrcTy);
+  unsigned DBitWidth = DITy->getBitWidth();
+  unsigned SBitWidth = SITy->getBitWidth();
+  assert(SBitWidth <= 64 && DBitWidth <= 64  && 
+         "Integer types > 64 bits not supported");
+  assert(SBitWidth > DBitWidth && "Invalid truncate");
 
-  if (opcode == Instruction::Trunc && DstTy->getTypeID() == Type::Int1TyID) {
-    // For truncations to bool, we must clear the high order bits of the source
-    switch (SrcTy->getTypeID()) {
-      case Type::Int1TyID:  Src.Int1Val  &= 1; break;
-      case Type::Int8TyID:  Src.Int8Val  &= 1; break;
-      case Type::Int16TyID: Src.Int16Val &= 1; break;
-      case Type::Int32TyID: Src.Int32Val &= 1; break;
-      case Type::Int64TyID: Src.Int64Val &= 1; break;
-      default:
-        assert(0 && "Can't trunc a non-integer!");
-        break;
-    }
-  } else if (opcode == Instruction::SExt && 
-             SrcTy->getTypeID() == Type::Int1TyID) {
-    // For sign extension from bool, we must extend the source bits.
-    SrcTy = Type::Int64Ty;
-    Src.Int64Val = 0 - Src.Int1Val;
-  }
+  // Mask the source value to its actual bit width. This ensures that any
+  // high order bits are cleared.
+  uint64_t Mask = (1ULL << DBitWidth) - 1;
+  uint64_t MaskedVal = 0;
+  if (SBitWidth <= 8)
+    MaskedVal = Src.Int8Val  & Mask;
+  else if (SBitWidth <= 16)
+    MaskedVal = Src.Int16Val & Mask;
+  else if (SBitWidth <= 32)
+    MaskedVal = Src.Int32Val & Mask;
+  else 
+    MaskedVal = Src.Int64Val & Mask;
 
-  switch (opcode) {
-    case Instruction::Trunc:     // src integer, dest integral (can't be long)
-      IMPLEMENT_CAST_START
-      IMPLEMENT_CAST_CASE(Int1 , (bool));
-      IMPLEMENT_CAST_CASE(Int8 , (uint8_t));
-      IMPLEMENT_CAST_CASE(Int16, (uint16_t));
-      IMPLEMENT_CAST_CASE(Int32, (uint32_t));
-      IMPLEMENT_CAST_CASE(Int64, (uint64_t));
-      IMPLEMENT_CAST_END
-      break;
-    case Instruction::ZExt:      // src integral (can't be long), dest integer
-      IMPLEMENT_CAST_START
-      IMPLEMENT_CAST_CASE(Int8 , (uint8_t));
-      IMPLEMENT_CAST_CASE(Int16, (uint16_t));
-      IMPLEMENT_CAST_CASE(Int32, (uint32_t));
-      IMPLEMENT_CAST_CASE(Int64, (uint64_t));
-      IMPLEMENT_CAST_END
-      break;
-    case Instruction::SExt:      // src integral (can't be long), dest integer
-      IMPLEMENT_CAST_START
-      IMPLEMENT_CAST_CASE(Int8 , (uint8_t)(int8_t));
-      IMPLEMENT_CAST_CASE(Int16, (uint16_t)(int16_t));
-      IMPLEMENT_CAST_CASE(Int32, (uint32_t)(int32_t));
-      IMPLEMENT_CAST_CASE(Int64, (uint64_t)(int64_t));
-      IMPLEMENT_CAST_END
-      break;
-    case Instruction::FPTrunc:   // src double, dest float
-      IMPLEMENT_CAST_START
-      IMPLEMENT_CAST_CASE(Float  , (float));
-      IMPLEMENT_CAST_END
-      break;
-    case Instruction::FPExt:     // src float, dest double
-      IMPLEMENT_CAST_START
-      IMPLEMENT_CAST_CASE(Double , (double));
-      IMPLEMENT_CAST_END
-      break;
-    case Instruction::UIToFP:    // src integral, dest floating
-      IMPLEMENT_CAST_START
-      IMPLEMENT_CAST_CASE(Float  , (float)(uint64_t));
-      IMPLEMENT_CAST_CASE(Double , (double)(uint64_t));
-      IMPLEMENT_CAST_END
-      break;
-    case Instruction::SIToFP:    // src integeral, dest floating
-      IMPLEMENT_CAST_START
-      IMPLEMENT_CAST_CASE(Float  , (float)(int64_t));
-      IMPLEMENT_CAST_CASE(Double , (double)(int64_t));
-      IMPLEMENT_CAST_END
-      break;
-    case Instruction::FPToUI:    // src floating, dest integral
-      IMPLEMENT_CAST_START
-      IMPLEMENT_CAST_CASE(Int1 , (bool));
-      IMPLEMENT_CAST_CASE(Int8 , (uint8_t));
-      IMPLEMENT_CAST_CASE(Int16, (uint16_t));
-      IMPLEMENT_CAST_CASE(Int32, (uint32_t ));
-      IMPLEMENT_CAST_CASE(Int64, (uint64_t));
-      IMPLEMENT_CAST_END
-      break;
-    case Instruction::FPToSI:    // src floating, dest integral
-      IMPLEMENT_CAST_START
-      IMPLEMENT_CAST_CASE(Int1 , (bool));
-      IMPLEMENT_CAST_CASE(Int8 , (uint8_t) (int8_t));
-      IMPLEMENT_CAST_CASE(Int16, (uint16_t)(int16_t));
-      IMPLEMENT_CAST_CASE(Int32, (uint32_t)(int32_t));
-      IMPLEMENT_CAST_CASE(Int64, (uint64_t)(int64_t));
-      IMPLEMENT_CAST_END
-      break;
-    case Instruction::PtrToInt:  // src pointer,  dest integral
-      IMPLEMENT_CAST_START
-      IMPLEMENT_CAST_CASE(Int1 , (bool));
-      IMPLEMENT_CAST_CASE(Int8 , (uint8_t));
-      IMPLEMENT_CAST_CASE(Int16, (uint16_t));
-      IMPLEMENT_CAST_CASE(Int32, (uint32_t));
-      IMPLEMENT_CAST_CASE(Int64, (uint64_t));
-      IMPLEMENT_CAST_END
-      break;
-    case Instruction::IntToPtr:  // src integral, dest pointer
-      IMPLEMENT_CAST_START
-      IMPLEMENT_CAST_CASE(Pointer, (PointerTy));
-      IMPLEMENT_CAST_END
-      break;
-    case Instruction::BitCast:   // src any, dest any (same size)
-      IMPLEMENT_CAST_START
-      IMPLEMENT_CAST_CASE(Int1   , (bool));
-      IMPLEMENT_CAST_CASE(Int8   , (uint8_t));
-      IMPLEMENT_CAST_CASE(Int16  , (uint16_t));
-      IMPLEMENT_CAST_CASE(Int32  , (uint32_t));
-      IMPLEMENT_CAST_CASE(Int64  , (uint64_t));
-      IMPLEMENT_CAST_CASE(Pointer, (PointerTy));
-      IMPLEMENT_CAST_CASE(Float  , (float));
-      IMPLEMENT_CAST_CASE(Double , (double));
-      IMPLEMENT_CAST_END
-      break;
-    default:
-      cerr << "Invalid cast opcode for cast instruction: " << opcode << "\n";
-      abort();
-  }
+  INTEGER_ASSIGN(Dest, DBitWidth, MaskedVal);
   return Dest;
 }
 
-void Interpreter::visitCastInst(CastInst &I) {
+GenericValue Interpreter::executeSExtInst(Value *SrcVal, const Type *DstTy,
+                                          ExecutionContext &SF) {
+  const Type *SrcTy = SrcVal->getType();
+  GenericValue Dest, Src = getOperandValue(SrcVal, SF);
+  const IntegerType *DITy = cast<IntegerType>(DstTy);
+  const IntegerType *SITy = cast<IntegerType>(SrcTy);
+  unsigned DBitWidth = DITy->getBitWidth();
+  unsigned SBitWidth = SITy->getBitWidth();
+  assert(SBitWidth <= 64 && DBitWidth <= 64  && 
+         "Integer types > 64 bits not supported");
+  assert(SBitWidth < DBitWidth && "Invalid sign extend");
+  int64_t Extended = 0;
+  if (SBitWidth == 1)
+    // For sign extension from bool, we must extend the source bits.
+    Extended = 0 - (Src.Int1Val & 1);
+  else if (SBitWidth <= 8)
+    Extended = (int64_t) (int8_t)Src.Int8Val;
+  else if (SBitWidth <= 16)
+    Extended = (int64_t) (int16_t)Src.Int16Val;
+  else if (SBitWidth <= 32)
+    Extended = (int64_t) (int32_t)Src.Int32Val;
+  else 
+    Extended = (int64_t) Src.Int64Val;
+
+  // Now that we have a sign extended value, assign it to the destination
+  INTEGER_ASSIGN(Dest, DBitWidth, Extended);
+  return Dest;
+}
+
+GenericValue Interpreter::executeZExtInst(Value *SrcVal, const Type *DstTy,
+                                          ExecutionContext &SF) {
+  const Type *SrcTy = SrcVal->getType();
+  GenericValue Dest, Src = getOperandValue(SrcVal, SF);
+  const IntegerType *DITy = cast<IntegerType>(DstTy);
+  const IntegerType *SITy = cast<IntegerType>(SrcTy);
+  unsigned DBitWidth = DITy->getBitWidth();
+  unsigned SBitWidth = SITy->getBitWidth();
+  assert(SBitWidth <= 64 && DBitWidth <= 64  && 
+         "Integer types > 64 bits not supported");
+  assert(SBitWidth < DBitWidth && "Invalid sign extend");
+  uint64_t Extended = 0;
+  if (SBitWidth == 1)
+    // For sign extension from bool, we must extend the source bits.
+    Extended = (uint64_t) (Src.Int1Val & 1);
+  else if (SBitWidth <= 8)
+    Extended = (uint64_t) (uint8_t)Src.Int8Val;
+  else if (SBitWidth <= 16)
+    Extended = (uint64_t) (uint16_t)Src.Int16Val;
+  else if (SBitWidth <= 32)
+    Extended = (uint64_t) (uint32_t)Src.Int32Val;
+  else 
+    Extended = (uint64_t) Src.Int64Val;
+
+  // Now that we have a sign extended value, assign it to the destination
+  INTEGER_ASSIGN(Dest, DBitWidth, Extended);
+  return Dest;
+}
+
+GenericValue Interpreter::executeFPTruncInst(Value *SrcVal, const Type *DstTy,
+                                             ExecutionContext &SF) {
+  const Type *SrcTy = SrcVal->getType();
+  GenericValue Dest, Src = getOperandValue(SrcVal, SF);
+  assert(SrcTy == Type::DoubleTy && DstTy == Type::FloatTy &&
+         "Invalid FPTrunc instruction");
+  Dest.FloatVal = (float) Src.DoubleVal;
+  return Dest;
+}
+
+GenericValue Interpreter::executeFPExtInst(Value *SrcVal, const Type *DstTy,
+                                           ExecutionContext &SF) {
+  const Type *SrcTy = SrcVal->getType();
+  GenericValue Dest, Src = getOperandValue(SrcVal, SF);
+  assert(SrcTy == Type::FloatTy && DstTy == Type::DoubleTy &&
+         "Invalid FPTrunc instruction");
+  Dest.DoubleVal = (double) Src.FloatVal;
+  return Dest;
+}
+
+GenericValue Interpreter::executeFPToUIInst(Value *SrcVal, const Type *DstTy,
+                                            ExecutionContext &SF) {
+  const Type *SrcTy = SrcVal->getType();
+  GenericValue Dest, Src = getOperandValue(SrcVal, SF);
+  const IntegerType *DITy = cast<IntegerType>(DstTy);
+  unsigned DBitWidth = DITy->getBitWidth();
+  assert(DBitWidth <= 64  && "Integer types > 64 bits not supported");
+  assert(SrcTy->isFloatingPoint() && "Invalid FPToUI instruction");
+  uint64_t Converted = 0;
+  if (SrcTy->getTypeID() == Type::FloatTyID)
+    Converted = (uint64_t) Src.FloatVal;
+  else
+    Converted = (uint64_t) Src.DoubleVal;
+
+  INTEGER_ASSIGN(Dest, DBitWidth, Converted);
+  return Dest;
+}
+
+GenericValue Interpreter::executeFPToSIInst(Value *SrcVal, const Type *DstTy,
+                                            ExecutionContext &SF) {
+  const Type *SrcTy = SrcVal->getType();
+  GenericValue Dest, Src = getOperandValue(SrcVal, SF);
+  const IntegerType *DITy = cast<IntegerType>(DstTy);
+  unsigned DBitWidth = DITy->getBitWidth();
+  assert(DBitWidth <= 64  && "Integer types > 64 bits not supported");
+  assert(SrcTy->isFloatingPoint() && "Invalid FPToSI instruction");
+  int64_t Converted = 0;
+  if (SrcTy->getTypeID() == Type::FloatTyID)
+    Converted = (int64_t) Src.FloatVal;
+  else
+    Converted = (int64_t) Src.DoubleVal;
+
+  INTEGER_ASSIGN(Dest, DBitWidth, Converted);
+  return Dest;
+}
+
+GenericValue Interpreter::executeUIToFPInst(Value *SrcVal, const Type *DstTy,
+                                            ExecutionContext &SF) {
+  const Type *SrcTy = SrcVal->getType();
+  GenericValue Dest, Src = getOperandValue(SrcVal, SF);
+  const IntegerType *SITy = cast<IntegerType>(SrcTy);
+  unsigned SBitWidth = SITy->getBitWidth();
+  assert(SBitWidth <= 64  && "Integer types > 64 bits not supported");
+  assert(DstTy->isFloatingPoint() && "Invalid UIToFP instruction");
+  uint64_t Converted = 0;
+  if (SBitWidth == 1)
+    Converted = (uint64_t) Src.Int1Val;
+  else if (SBitWidth <= 8)
+    Converted = (uint64_t) Src.Int8Val;
+  else if (SBitWidth <= 16)
+    Converted = (uint64_t) Src.Int16Val;
+  else if (SBitWidth <= 32)
+    Converted = (uint64_t) Src.Int32Val;
+  else 
+    Converted = (uint64_t) Src.Int64Val;
+
+  if (DstTy->getTypeID() == Type::FloatTyID)
+    Dest.FloatVal = (float) Converted;
+  else
+    Dest.DoubleVal = (double) Converted;
+  return Dest;
+}
+
+GenericValue Interpreter::executeSIToFPInst(Value *SrcVal, const Type *DstTy,
+                                            ExecutionContext &SF) {
+  const Type *SrcTy = SrcVal->getType();
+  GenericValue Dest, Src = getOperandValue(SrcVal, SF);
+  const IntegerType *SITy = cast<IntegerType>(SrcTy);
+  unsigned SBitWidth = SITy->getBitWidth();
+  assert(SBitWidth <= 64  && "Integer types > 64 bits not supported");
+  assert(DstTy->isFloatingPoint() && "Invalid UIToFP instruction");
+  int64_t Converted = 0;
+  if (SBitWidth == 1)
+    Converted = 0LL - Src.Int1Val;
+  else if (SBitWidth <= 8)
+    Converted = (int64_t) (int8_t)Src.Int8Val;
+  else if (SBitWidth <= 16)
+    Converted = (int64_t) (int16_t)Src.Int16Val;
+  else if (SBitWidth <= 32)
+    Converted = (int64_t) (int32_t)Src.Int32Val;
+  else 
+    Converted = (int64_t) Src.Int64Val;
+
+  if (DstTy->getTypeID() == Type::FloatTyID)
+    Dest.FloatVal = (float) Converted;
+  else
+    Dest.DoubleVal = (double) Converted;
+  return Dest;
+}
+
+GenericValue Interpreter::executePtrToIntInst(Value *SrcVal, const Type *DstTy,
+                                              ExecutionContext &SF) {
+  const Type *SrcTy = SrcVal->getType();
+  GenericValue Dest, Src = getOperandValue(SrcVal, SF);
+  const IntegerType *DITy = cast<IntegerType>(DstTy);
+  unsigned DBitWidth = DITy->getBitWidth();
+  assert(DBitWidth <= 64  && "Integer types > 64 bits not supported");
+  assert(isa<PointerType>(SrcTy) && "Invalid PtrToInt instruction");
+  INTEGER_ASSIGN(Dest, DBitWidth, (intptr_t) Src.PointerVal);
+  return Dest;
+}
+
+GenericValue Interpreter::executeIntToPtrInst(Value *SrcVal, const Type *DstTy,
+                                              ExecutionContext &SF) {
+  const Type *SrcTy = SrcVal->getType();
+  GenericValue Dest, Src = getOperandValue(SrcVal, SF);
+  const IntegerType *SITy = cast<IntegerType>(SrcTy);
+  unsigned SBitWidth = SITy->getBitWidth();
+  assert(SBitWidth <= 64  && "Integer types > 64 bits not supported");
+  assert(isa<PointerType>(DstTy) && "Invalid PtrToInt instruction");
+  uint64_t Converted = 0;
+  if (SBitWidth == 1)
+    Converted = (uint64_t) Src.Int1Val;
+  else if (SBitWidth <= 8)
+    Converted = (uint64_t) Src.Int8Val;
+  else if (SBitWidth <= 16)
+    Converted = (uint64_t) Src.Int16Val;
+  else if (SBitWidth <= 32)
+    Converted = (uint64_t) Src.Int32Val;
+  else 
+    Converted = (uint64_t) Src.Int64Val;
+
+  Dest.PointerVal = (PointerTy) Converted;
+  return Dest;
+}
+
+GenericValue Interpreter::executeBitCastInst(Value *SrcVal, const Type *DstTy,
+                                             ExecutionContext &SF) {
+  
+  const Type *SrcTy = SrcVal->getType();
+  GenericValue Dest, Src = getOperandValue(SrcVal, SF);
+  if (isa<PointerType>(DstTy)) {
+    assert(isa<PointerType>(SrcTy) && "Invalid BitCast");
+    Dest.PointerVal = Src.PointerVal;
+  } else if (DstTy->isInteger()) {
+    const IntegerType *DITy = cast<IntegerType>(DstTy);
+    unsigned DBitWidth = DITy->getBitWidth();
+    if (SrcTy == Type::FloatTy) {
+      Dest.Int32Val = FloatToBits(Src.FloatVal);
+    } else if (SrcTy == Type::DoubleTy) {
+      Dest.Int64Val = DoubleToBits(Src.DoubleVal);
+    } else if (SrcTy->isInteger()) {
+      const IntegerType *SITy = cast<IntegerType>(SrcTy);
+      unsigned SBitWidth = SITy->getBitWidth();
+      assert(SBitWidth <= 64  && "Integer types > 64 bits not supported");
+      assert(SBitWidth == DBitWidth && "Invalid BitCast");
+      if (SBitWidth == 1)
+        Dest.Int1Val = Src.Int1Val;
+      else if (SBitWidth <= 8)
+        Dest.Int8Val =  Src.Int8Val;
+      else if (SBitWidth <= 16)
+        Dest.Int16Val = Src.Int16Val;
+      else if (SBitWidth <= 32)
+        Dest.Int32Val = Src.Int32Val;
+      else 
+        Dest.Int64Val = Src.Int64Val;
+    } else 
+      assert(0 && "Invalid BitCast");
+  } else if (DstTy == Type::FloatTy) {
+    if (SrcTy->isInteger())
+      Dest.FloatVal = BitsToFloat(Src.Int32Val);
+    else
+      Dest.FloatVal = Src.FloatVal;
+  } else if (DstTy == Type::DoubleTy) {
+    if (SrcTy->isInteger())
+      Dest.DoubleVal = BitsToDouble(Src.Int64Val);
+    else
+      Dest.DoubleVal = Src.DoubleVal;
+  } else
+    assert(0 && "Invalid Bitcast");
+
+  return Dest;
+}
+
+void Interpreter::visitTruncInst(TruncInst &I) {
   ExecutionContext &SF = ECStack.back();
-  SetValue(&I, executeCastOperation(I.getOpcode(), I.getOperand(0), 
-                                    I.getType(), SF), SF);
+  SetValue(&I, executeTruncInst(I.getOperand(0), I.getType(), SF), SF);
+}
+
+void Interpreter::visitSExtInst(SExtInst &I) {
+  ExecutionContext &SF = ECStack.back();
+  SetValue(&I, executeSExtInst(I.getOperand(0), I.getType(), SF), SF);
+}
+
+void Interpreter::visitZExtInst(ZExtInst &I) {
+  ExecutionContext &SF = ECStack.back();
+  SetValue(&I, executeZExtInst(I.getOperand(0), I.getType(), SF), SF);
+}
+
+void Interpreter::visitFPTruncInst(FPTruncInst &I) {
+  ExecutionContext &SF = ECStack.back();
+  SetValue(&I, executeFPTruncInst(I.getOperand(0), I.getType(), SF), SF);
+}
+
+void Interpreter::visitFPExtInst(FPExtInst &I) {
+  ExecutionContext &SF = ECStack.back();
+  SetValue(&I, executeFPExtInst(I.getOperand(0), I.getType(), SF), SF);
+}
+
+void Interpreter::visitUIToFPInst(UIToFPInst &I) {
+  ExecutionContext &SF = ECStack.back();
+  SetValue(&I, executeUIToFPInst(I.getOperand(0), I.getType(), SF), SF);
+}
+
+void Interpreter::visitSIToFPInst(SIToFPInst &I) {
+  ExecutionContext &SF = ECStack.back();
+  SetValue(&I, executeSIToFPInst(I.getOperand(0), I.getType(), SF), SF);
+}
+
+void Interpreter::visitFPToUIInst(FPToUIInst &I) {
+  ExecutionContext &SF = ECStack.back();
+  SetValue(&I, executeFPToUIInst(I.getOperand(0), I.getType(), SF), SF);
+}
+
+void Interpreter::visitFPToSIInst(FPToSIInst &I) {
+  ExecutionContext &SF = ECStack.back();
+  SetValue(&I, executeFPToSIInst(I.getOperand(0), I.getType(), SF), SF);
+}
+
+void Interpreter::visitPtrToIntInst(PtrToIntInst &I) {
+  ExecutionContext &SF = ECStack.back();
+  SetValue(&I, executePtrToIntInst(I.getOperand(0), I.getType(), SF), SF);
+}
+
+void Interpreter::visitIntToPtrInst(IntToPtrInst &I) {
+  ExecutionContext &SF = ECStack.back();
+  SetValue(&I, executeIntToPtrInst(I.getOperand(0), I.getType(), SF), SF);
+}
+
+void Interpreter::visitBitCastInst(BitCastInst &I) {
+  ExecutionContext &SF = ECStack.back();
+  SetValue(&I, executeBitCastInst(I.getOperand(0), I.getType(), SF), SF);
 }
 
 #define IMPLEMENT_VAARG(TY) \
@@ -1358,14 +1655,24 @@
    .VarArgs[VAList.UIntPairVal.second];
   const Type *Ty = I.getType();
   switch (Ty->getTypeID()) {
-    IMPLEMENT_VAARG(Int8);
-    IMPLEMENT_VAARG(Int16);
-    IMPLEMENT_VAARG(Int32);
-    IMPLEMENT_VAARG(Int64);
+    case Type::IntegerTyID: {
+      unsigned BitWidth = cast<IntegerType>(Ty)->getBitWidth();
+      if (BitWidth == 1)
+        Dest.Int1Val = Src.Int1Val;
+      else if (BitWidth <= 8)
+        Dest.Int8Val = Src.Int8Val;
+      else if (BitWidth <= 16)
+        Dest.Int16Val = Src.Int16Val;
+      else if (BitWidth <= 32)
+        Dest.Int32Val = Src.Int32Val;
+      else if (BitWidth <= 64)
+        Dest.Int64Val = Src.Int64Val;
+      else
+        assert("Integer types > 64 bits not supported");
+    }
     IMPLEMENT_VAARG(Pointer);
     IMPLEMENT_VAARG(Float);
     IMPLEMENT_VAARG(Double);
-    IMPLEMENT_VAARG(Int1);
   default:
     cerr << "Unhandled dest type for vaarg instruction: " << *Ty << "\n";
     abort();
diff --git a/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp b/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
index 52d3cfa..b1c2ee4 100644
--- a/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
+++ b/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
@@ -41,11 +41,15 @@
 static char getTypeID(const Type *Ty) {
   switch (Ty->getTypeID()) {
   case Type::VoidTyID:    return 'V';
-  case Type::Int1TyID:    return 'o';
-  case Type::Int8TyID:    return 'B';
-  case Type::Int16TyID:   return 'S';
-  case Type::Int32TyID:   return 'I';
-  case Type::Int64TyID:   return 'L';
+  case Type::IntegerTyID:
+    switch (cast<IntegerType>(Ty)->getBitWidth()) {
+      case 1:  return 'o';
+      case 8:  return 'B';
+      case 16: return 'S';
+      case 32: return 'I';
+      case 64: return 'L';
+      default: return 'N';
+    }
   case Type::FloatTyID:   return 'F';
   case Type::DoubleTyID:  return 'D';
   case Type::PointerTyID: return 'P';
diff --git a/lib/ExecutionEngine/Interpreter/Interpreter.h b/lib/ExecutionEngine/Interpreter/Interpreter.h
index 559c7dc..c62249b 100644
--- a/lib/ExecutionEngine/Interpreter/Interpreter.h
+++ b/lib/ExecutionEngine/Interpreter/Interpreter.h
@@ -144,7 +144,18 @@
   void visitStoreInst(StoreInst &I);
   void visitGetElementPtrInst(GetElementPtrInst &I);
   void visitPHINode(PHINode &PN) { assert(0 && "PHI nodes already handled!"); }
-  void visitCastInst(CastInst &I);
+  void visitTruncInst(TruncInst &I);
+  void visitZExtInst(ZExtInst &I);
+  void visitSExtInst(SExtInst &I);
+  void visitFPTruncInst(FPTruncInst &I);
+  void visitFPExtInst(FPExtInst &I);
+  void visitUIToFPInst(UIToFPInst &I);
+  void visitSIToFPInst(SIToFPInst &I);
+  void visitFPToUIInst(FPToUIInst &I);
+  void visitFPToSIInst(FPToSIInst &I);
+  void visitPtrToIntInst(PtrToIntInst &I);
+  void visitIntToPtrInst(IntToPtrInst &I);
+  void visitBitCastInst(BitCastInst &I);
   void visitSelectInst(SelectInst &I);
 
 
@@ -193,6 +204,30 @@
   void initializeExternalFunctions();
   GenericValue getConstantExprValue(ConstantExpr *CE, ExecutionContext &SF);
   GenericValue getOperandValue(Value *V, ExecutionContext &SF);
+  GenericValue executeTruncInst(Value *SrcVal, const Type *DstTy,
+                                ExecutionContext &SF);
+  GenericValue executeSExtInst(Value *SrcVal, const Type *DstTy,
+                               ExecutionContext &SF);
+  GenericValue executeZExtInst(Value *SrcVal, const Type *DstTy,
+                               ExecutionContext &SF);
+  GenericValue executeFPTruncInst(Value *SrcVal, const Type *DstTy,
+                                  ExecutionContext &SF);
+  GenericValue executeFPExtInst(Value *SrcVal, const Type *DstTy,
+                                ExecutionContext &SF);
+  GenericValue executeFPToUIInst(Value *SrcVal, const Type *DstTy,
+                                 ExecutionContext &SF);
+  GenericValue executeFPToSIInst(Value *SrcVal, const Type *DstTy,
+                                 ExecutionContext &SF);
+  GenericValue executeUIToFPInst(Value *SrcVal, const Type *DstTy,
+                                 ExecutionContext &SF);
+  GenericValue executeSIToFPInst(Value *SrcVal, const Type *DstTy,
+                                 ExecutionContext &SF);
+  GenericValue executePtrToIntInst(Value *SrcVal, const Type *DstTy,
+                                   ExecutionContext &SF);
+  GenericValue executeIntToPtrInst(Value *SrcVal, const Type *DstTy,
+                                   ExecutionContext &SF);
+  GenericValue executeBitCastInst(Value *SrcVal, const Type *DstTy,
+                                  ExecutionContext &SF);
   GenericValue executeCastOperation(Instruction::CastOps opcode, Value *SrcVal, 
                                     const Type *Ty, ExecutionContext &SF);
   void popStackAndReturnValueToCaller(const Type *RetTy, GenericValue Result);
diff --git a/lib/ExecutionEngine/JIT/JIT.cpp b/lib/ExecutionEngine/JIT/JIT.cpp
index 13ee719..7fd62cc 100644
--- a/lib/ExecutionEngine/JIT/JIT.cpp
+++ b/lib/ExecutionEngine/JIT/JIT.cpp
@@ -142,22 +142,25 @@
     GenericValue rv;
     switch (RetTy->getTypeID()) {
     default: assert(0 && "Unknown return type for function call!");
-    case Type::Int1TyID:
-      rv.Int1Val = ((bool(*)())(intptr_t)FPtr)();
+    case Type::IntegerTyID: {
+      unsigned BitWidth = cast<IntegerType>(RetTy)->getBitWidth();
+      if (BitWidth == 1)
+        rv.Int1Val = ((bool(*)())(intptr_t)FPtr)();
+      else if (BitWidth <= 8)
+        rv.Int8Val = ((char(*)())(intptr_t)FPtr)();
+      else if (BitWidth <= 16)
+        rv.Int16Val = ((short(*)())(intptr_t)FPtr)();
+      else if (BitWidth <= 32)
+        rv.Int32Val = ((int(*)())(intptr_t)FPtr)();
+      else if (BitWidth <= 64)
+        rv.Int64Val = ((int64_t(*)())(intptr_t)FPtr)();
+      else 
+        assert(0 && "Integer types > 64 bits not supported");
       return rv;
-    case Type::Int8TyID:
-      rv.Int8Val = ((char(*)())(intptr_t)FPtr)();
-      return rv;
-    case Type::Int16TyID:
-      rv.Int16Val = ((short(*)())(intptr_t)FPtr)();
-      return rv;
+    }
     case Type::VoidTyID:
-    case Type::Int32TyID:
       rv.Int32Val = ((int(*)())(intptr_t)FPtr)();
       return rv;
-    case Type::Int64TyID:
-      rv.Int64Val = ((int64_t(*)())(intptr_t)FPtr)();
-      return rv;
     case Type::FloatTyID:
       rv.FloatVal = ((float(*)())(intptr_t)FPtr)();
       return rv;
@@ -191,11 +194,22 @@
     const GenericValue &AV = ArgValues[i];
     switch (ArgTy->getTypeID()) {
     default: assert(0 && "Unknown argument type for function call!");
-    case Type::Int1TyID:   C = ConstantInt::get(ArgTy, AV.Int1Val); break;
-    case Type::Int8TyID:   C = ConstantInt::get(ArgTy, AV.Int8Val);  break;
-    case Type::Int16TyID:  C = ConstantInt::get(ArgTy, AV.Int16Val);  break;
-    case Type::Int32TyID:  C = ConstantInt::get(ArgTy, AV.Int32Val);    break;
-    case Type::Int64TyID:  C = ConstantInt::get(ArgTy, AV.Int64Val);   break;
+    case Type::IntegerTyID: {
+      unsigned BitWidth = cast<IntegerType>(ArgTy)->getBitWidth();
+      if (BitWidth == 1)
+        C = ConstantInt::get(ArgTy, AV.Int1Val);
+      else if (BitWidth <= 8)
+        C = ConstantInt::get(ArgTy, AV.Int8Val);
+      else if (BitWidth <= 16)
+        C = ConstantInt::get(ArgTy, AV.Int16Val);
+      else if (BitWidth <= 32)
+        C = ConstantInt::get(ArgTy, AV.Int32Val); 
+      else if (BitWidth <= 64)
+        C = ConstantInt::get(ArgTy, AV.Int64Val);
+      else
+        assert(0 && "Integer types > 64 bits not supported");
+      break;
+    }
     case Type::FloatTyID:  C = ConstantFP ::get(ArgTy, AV.FloatVal);  break;
     case Type::DoubleTyID: C = ConstantFP ::get(ArgTy, AV.DoubleVal); break;
     case Type::PointerTyID:
diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp
index 4e29889..753ebcc 100644
--- a/lib/Linker/LinkModules.cpp
+++ b/lib/Linker/LinkModules.cpp
@@ -111,6 +111,12 @@
 
   // Otherwise, resolve the used type used by this derived type...
   switch (DestTyT->getTypeID()) {
+  case Type::IntegerTyID: {
+    if (cast<IntegerType>(DestTyT)->getBitWidth() !=
+        cast<IntegerType>(SrcTyT)->getBitWidth())
+      return true;
+    return false;
+  }
   case Type::FunctionTyID: {
     if (cast<FunctionType>(DestTyT)->isVarArg() !=
         cast<FunctionType>(SrcTyT)->isVarArg() ||
@@ -275,7 +281,7 @@
   Value *Result = 0;
   if (const Constant *CPV = dyn_cast<Constant>(In)) {
     if ((!isa<DerivedType>(CPV->getType()) && !isa<ConstantExpr>(CPV)) ||
-        isa<ConstantAggregateZero>(CPV))
+        isa<ConstantInt>(CPV) || isa<ConstantAggregateZero>(CPV))
       return const_cast<Constant*>(CPV);   // Simple constants stay identical.
 
     if (const ConstantArray *CPA = dyn_cast<ConstantArray>(CPV)) {
diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp
index 23465c5..a0b4ceb 100644
--- a/lib/Target/CBackend/CBackend.cpp
+++ b/lib/Target/CBackend/CBackend.cpp
@@ -118,7 +118,7 @@
                             bool isSigned = false,
                             const std::string &VariableName = "",
                             bool IgnoreName = false);
-    std::ostream &printPrimitiveType(std::ostream &Out, const Type *Ty, 
+    std::ostream &printSimpleType(std::ostream &Out, const Type *Ty, 
                                      bool isSigned, 
                                      const std::string &NameSoFar = "");
 
@@ -364,22 +364,29 @@
 }
 
 std::ostream &
-CWriter::printPrimitiveType(std::ostream &Out, const Type *Ty, bool isSigned,
+CWriter::printSimpleType(std::ostream &Out, const Type *Ty, bool isSigned,
                             const std::string &NameSoFar) {
-  assert(Ty->isPrimitiveType() && "Invalid type for printPrimitiveType");
+  assert((Ty->isPrimitiveType() || Ty->isIntegral()) && 
+         "Invalid type for printSimpleType");
   switch (Ty->getTypeID()) {
-  case Type::VoidTyID:   return Out << "void "               << NameSoFar;
-  case Type::Int1TyID:   return Out << "bool "               << NameSoFar;
-  case Type::Int8TyID:
-    return Out << (isSigned?"signed":"unsigned") << " char " << NameSoFar;
-  case Type::Int16TyID:  
-    return Out << (isSigned?"signed":"unsigned") << " short " << NameSoFar;
-  case Type::Int32TyID:    
-    return Out << (isSigned?"signed":"unsigned") << " int " << NameSoFar;
-  case Type::Int64TyID:   
-    return Out << (isSigned?"signed":"unsigned") << " long long " << NameSoFar;
-  case Type::FloatTyID:  return Out << "float "              << NameSoFar;
-  case Type::DoubleTyID: return Out << "double "             << NameSoFar;
+  case Type::VoidTyID:   return Out << "void " << NameSoFar;
+  case Type::IntegerTyID: {
+    unsigned NumBits = cast<IntegerType>(Ty)->getBitWidth();
+    if (NumBits == 1) 
+      return Out << "bool " << NameSoFar;
+    else if (NumBits <= 8)
+      return Out << (isSigned?"signed":"unsigned") << " char " << NameSoFar;
+    else if (NumBits <= 16)
+      return Out << (isSigned?"signed":"unsigned") << " short " << NameSoFar;
+    else if (NumBits <= 32)
+      return Out << (isSigned?"signed":"unsigned") << " int " << NameSoFar;
+    else { 
+      assert(NumBits <= 64 && "Bit widths > 64 not implemented yet");
+      return Out << (isSigned?"signed":"unsigned") << " long long "<< NameSoFar;
+    }
+  }
+  case Type::FloatTyID:  return Out << "float "   << NameSoFar;
+  case Type::DoubleTyID: return Out << "double "  << NameSoFar;
   default :
     cerr << "Unknown primitive type: " << *Ty << "\n";
     abort();
@@ -392,11 +399,11 @@
 std::ostream &CWriter::printType(std::ostream &Out, const Type *Ty,
                                  bool isSigned, const std::string &NameSoFar,
                                  bool IgnoreName) {
-  if (Ty->isPrimitiveType()) {
+  if (Ty->isPrimitiveType() || Ty->isIntegral()) {
     // FIXME:Signedness. When integer types are signless, this should just
     // always pass "false" for the sign of the primitive type. The instructions
     // will figure out how the value is to be interpreted.
-    printPrimitiveType(Out, Ty, isSigned, NameSoFar);
+    printSimpleType(Out, Ty, isSigned, NameSoFar);
     return Out;
   }
 
@@ -624,13 +631,13 @@
     case Instruction::PtrToInt:
     case Instruction::FPToUI: // For these, make sure we get an unsigned dest
       Out << '(';
-      printPrimitiveType(Out, DstTy, false);
+      printSimpleType(Out, DstTy, false);
       Out << ')';
       break;
     case Instruction::SExt: 
     case Instruction::FPToSI: // For these, make sure we get a signed dest
       Out << '(';
-      printPrimitiveType(Out, DstTy, true);
+      printSimpleType(Out, DstTy, true);
       Out << ')';
       break;
     default:
@@ -642,13 +649,13 @@
     case Instruction::UIToFP:
     case Instruction::ZExt:
       Out << '(';
-      printPrimitiveType(Out, SrcTy, false);
+      printSimpleType(Out, SrcTy, false);
       Out << ')';
       break;
     case Instruction::SIToFP:
     case Instruction::SExt:
       Out << '(';
-      printPrimitiveType(Out, SrcTy, true); 
+      printSimpleType(Out, SrcTy, true); 
       Out << ')';
       break;
     case Instruction::IntToPtr:
@@ -832,7 +839,7 @@
       Out << (CI->getZExtValue() ? '1' : '0') ;
     else {
       Out << "((";
-      printPrimitiveType(Out, Ty, false) << ')';
+      printSimpleType(Out, Ty, false) << ')';
       if (CI->isMinValue(true)) 
         Out << CI->getZExtValue() << 'u';
       else
@@ -1019,7 +1026,7 @@
   if (NeedsExplicitCast) {
     Out << "((";
     if (Ty->isInteger())
-      printPrimitiveType(Out, Ty, TypeIsSigned);
+      printSimpleType(Out, Ty, TypeIsSigned);
     else
       printType(Out, Ty); // not integer, sign doesn't matter
     Out << ")(";
@@ -1064,7 +1071,7 @@
   // operand.
   if (shouldCast) {
     Out << "((";
-    printPrimitiveType(Out, OpTy, typeIsSigned);
+    printSimpleType(Out, OpTy, typeIsSigned);
     Out << ")";
     printConstant(CPV);
     Out << ")";
@@ -1120,14 +1127,14 @@
   case Instruction::URem: 
   case Instruction::UDiv: 
     Out << "((";
-    printPrimitiveType(Out, Ty, false);
+    printSimpleType(Out, Ty, false);
     Out << ")(";
     return true;
   case Instruction::AShr:
   case Instruction::SRem: 
   case Instruction::SDiv: 
     Out << "((";
-    printPrimitiveType(Out, Ty, true);
+    printSimpleType(Out, Ty, true);
     Out << ")(";
     return true;
   default: break;
@@ -1174,7 +1181,7 @@
   // operand.
   if (shouldCast) {
     Out << "((";
-    printPrimitiveType(Out, OpTy, castIsSigned);
+    printSimpleType(Out, OpTy, castIsSigned);
     Out << ")";
     writeOperand(Operand);
     Out << ")";
@@ -1222,7 +1229,7 @@
   if (shouldCast) {
     Out << "((";
     if (OpTy->isInteger())
-      printPrimitiveType(Out, OpTy, castIsSigned);
+      printSimpleType(Out, OpTy, castIsSigned);
     else
       printType(Out, OpTy); // not integer, sign doesn't matter
     Out << ")";
@@ -1711,7 +1718,7 @@
 void CWriter::printContainedStructs(const Type *Ty,
                                     std::set<const StructType*> &StructPrinted){
   // Don't walk through pointers.
-  if (isa<PointerType>(Ty) || Ty->isPrimitiveType()) return;
+  if (isa<PointerType>(Ty) || Ty->isPrimitiveType() || Ty->isIntegral()) return;
   
   // Print all contained types first.
   for (Type::subtype_iterator I = Ty->subtype_begin(),
@@ -2237,9 +2244,14 @@
   switch (Ty->getTypeID()) {
     default: assert(0 && "Invalid Type");
     case Type::FloatTyID:  return "Float";
-    case Type::Int32TyID:  return "Int32";
     case Type::DoubleTyID: return "Double";
-    case Type::Int64TyID:  return "Int64";
+    case Type::IntegerTyID: {
+      unsigned NumBits = cast<IntegerType>(Ty)->getBitWidth();
+      if (NumBits <= 32)
+        return "Int32";
+      else
+        return "Int64";
+    }
   }
 }
 
diff --git a/lib/Target/TargetData.cpp b/lib/Target/TargetData.cpp
index 59dc0dc..c0b0670 100644
--- a/lib/Target/TargetData.cpp
+++ b/lib/Target/TargetData.cpp
@@ -241,12 +241,21 @@
                                uint64_t &Size, unsigned char &Alignment) {
   assert(Ty->isSized() && "Cannot getTypeInfo() on a type that is unsized!");
   switch (Ty->getTypeID()) {
-  case Type::Int1TyID:   Size = 1; Alignment = TD->getBoolAlignment(); return;
-  case Type::VoidTyID:
-  case Type::Int8TyID:   Size = 1; Alignment = TD->getByteAlignment(); return;
-  case Type::Int16TyID:  Size = 2; Alignment = TD->getShortAlignment(); return;
-  case Type::Int32TyID:  Size = 4; Alignment = TD->getIntAlignment(); return;
-  case Type::Int64TyID:  Size = 8; Alignment = TD->getLongAlignment(); return;
+  case Type::IntegerTyID: {
+    unsigned BitWidth = cast<IntegerType>(Ty)->getBitWidth();
+    if (BitWidth <= 8) {
+      Size = 1; Alignment = TD->getByteAlignment();
+    } else if (BitWidth <= 16) {
+      Size = 2; Alignment = TD->getShortAlignment();
+    } else if (BitWidth <= 32) {
+      Size = 4; Alignment = TD->getIntAlignment();
+    } else if (BitWidth <= 64) {
+      Size = 8; Alignment = TD->getLongAlignment();
+    } else
+      assert(0 && "Integer types > 64 bits not supported.");
+    return;
+  }
+  case Type::VoidTyID:   Size = 1; Alignment = TD->getByteAlignment(); return;
   case Type::FloatTyID:  Size = 4; Alignment = TD->getFloatAlignment(); return;
   case Type::DoubleTyID: Size = 8; Alignment = TD->getDoubleAlignment(); return;
   case Type::LabelTyID:
diff --git a/lib/Target/X86/X86TargetAsmInfo.cpp b/lib/Target/X86/X86TargetAsmInfo.cpp
index 8c212b6..9249b8d 100644
--- a/lib/Target/X86/X86TargetAsmInfo.cpp
+++ b/lib/Target/X86/X86TargetAsmInfo.cpp
@@ -176,12 +176,18 @@
   
   const Type *Ty = CI->getType();
   const char *IntName;
-  switch (Ty->getTypeID()) {
-  default: return false;
-  case Type::Int16TyID: IntName = "llvm.bswap.i16"; break;
-  case Type::Int32TyID:   IntName = "llvm.bswap.i32"; break;
-  case Type::Int64TyID:  IntName = "llvm.bswap.i64"; break;
-  }
+  if (const IntegerType *ITy = dyn_cast<IntegerType>(Ty)) {
+    unsigned BitWidth = ITy->getBitWidth();
+    if (BitWidth > 8 && BitWidth <= 16)
+      IntName = "llvm.bswap.i16";
+    else if (BitWidth > 24  && BitWidth <= 32)
+      IntName = "llvm.bswap.i32";
+    else if (BitWidth > 56 && BitWidth <= 64)
+      IntName = "llvm.bswap.i64";
+    else
+      return false;
+  } else
+    return false;
 
   // Okay, we can do this xform, do so now.
   Module *M = CI->getParent()->getParent()->getParent();
diff --git a/lib/Transforms/IPO/DeadTypeElimination.cpp b/lib/Transforms/IPO/DeadTypeElimination.cpp
index 871bcff..b599e5a 100644
--- a/lib/Transforms/IPO/DeadTypeElimination.cpp
+++ b/lib/Transforms/IPO/DeadTypeElimination.cpp
@@ -52,11 +52,14 @@
 //
 static inline bool ShouldNukeSymtabEntry(const Type *Ty){
   // Nuke all names for primitive types!
-  if (Ty->isPrimitiveType()) return true;
+  if (Ty->isPrimitiveType() || Ty->isIntegral()) 
+    return true;
 
   // Nuke all pointers to primitive types as well...
   if (const PointerType *PT = dyn_cast<PointerType>(Ty))
-    if (PT->getElementType()->isPrimitiveType()) return true;
+    if (PT->getElementType()->isPrimitiveType() ||
+        PT->getElementType()->isIntegral()) 
+      return true;
 
   return false;
 }
diff --git a/lib/Transforms/IPO/SimplifyLibCalls.cpp b/lib/Transforms/IPO/SimplifyLibCalls.cpp
index d2ab638..70821f8 100644
--- a/lib/Transforms/IPO/SimplifyLibCalls.cpp
+++ b/lib/Transforms/IPO/SimplifyLibCalls.cpp
@@ -1820,13 +1820,17 @@
     // ffsll(x) -> x == 0 ? 0 : llvm.cttz(x)+1
     const Type *ArgType = TheCall->getOperand(1)->getType();
     const char *CTTZName;
-    switch (ArgType->getTypeID()) {
-    default: assert(0 && "Unknown unsigned type!");
-    case Type::Int8TyID : CTTZName = "llvm.cttz.i8" ; break;
-    case Type::Int16TyID: CTTZName = "llvm.cttz.i16"; break;
-    case Type::Int32TyID  : CTTZName = "llvm.cttz.i32"; break;
-    case Type::Int64TyID : CTTZName = "llvm.cttz.i64"; break;
-    }
+    assert(ArgType->getTypeID() == Type::IntegerTyID &&
+           "llvm.cttz argument is not an integer?");
+    unsigned BitWidth = cast<IntegerType>(ArgType)->getBitWidth();
+    if (BitWidth <= 8)
+      CTTZName = "llvm.cttz.i8";
+    else if (BitWidth <= 16)
+      CTTZName = "llvm.cttz.i16"; 
+    else if (BitWidth <= 32)
+      CTTZName = "llvm.cttz.i32";
+    else
+      CTTZName = "llvm.cttz.i64";
     
     Constant *F = SLC.getModule()->getOrInsertFunction(CTTZName, ArgType,
                                                        ArgType, NULL);
diff --git a/lib/Transforms/Scalar/IndVarSimplify.cpp b/lib/Transforms/Scalar/IndVarSimplify.cpp
index a5a9f69..0643e75 100644
--- a/lib/Transforms/Scalar/IndVarSimplify.cpp
+++ b/lib/Transforms/Scalar/IndVarSimplify.cpp
@@ -50,6 +50,7 @@
 #include "llvm/Support/GetElementPtrTypeIterator.h"
 #include "llvm/Transforms/Utils/Local.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/Statistic.h"
 using namespace llvm;
 
@@ -528,18 +529,27 @@
   // induction variable to the right size for them, avoiding the need for the
   // code evaluation methods to insert induction variables of different sizes.
   if (DifferingSizes) {
-    bool InsertedSizes[17] = { false };
-    InsertedSizes[LargestType->getPrimitiveSize()] = true;
-    for (unsigned i = 0, e = IndVars.size(); i != e; ++i)
-      if (!InsertedSizes[IndVars[i].first->getType()->getPrimitiveSize()]) {
+    SmallVector<unsigned,4> InsertedSizes;
+    InsertedSizes.push_back(LargestType->getPrimitiveSizeInBits());
+    for (unsigned i = 0, e = IndVars.size(); i != e; ++i) {
+      unsigned ithSize = IndVars[i].first->getType()->getPrimitiveSizeInBits();
+      bool alreadyInsertedSize = false;
+      for (SmallVector<unsigned,4>::iterator I = InsertedSizes.begin(), 
+           E = InsertedSizes.end(); I != E; ++I)
+        if (*I == ithSize) {
+          alreadyInsertedSize = true;
+          break;
+        }
+      if (!alreadyInsertedSize) {
         PHINode *PN = IndVars[i].first;
-        InsertedSizes[PN->getType()->getPrimitiveSize()] = true;
+        InsertedSizes.push_back(ithSize);
         Instruction *New = new TruncInst(IndVar, PN->getType(), "indvar",
                                          InsertPt);
         Rewriter.addInsertedValue(New, SE->getSCEV(New));
         DOUT << "INDVARS: Made trunc IV for " << *PN
              << "   NewVal = " << *New << "\n";
       }
+    }
   }
 
   // Rewrite all induction variables in terms of the canonical induction
diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp
index c039b39..aecc9a9 100644
--- a/lib/Transforms/Scalar/InstructionCombining.cpp
+++ b/lib/Transforms/Scalar/InstructionCombining.cpp
@@ -339,12 +339,12 @@
 // getPromotedType - Return the specified type promoted as it would be to pass
 // though a va_arg area...
 static const Type *getPromotedType(const Type *Ty) {
-  switch (Ty->getTypeID()) {
-  case Type::Int8TyID:
-  case Type::Int16TyID:  return Type::Int32Ty;
-  case Type::FloatTyID:  return Type::DoubleTy;
-  default:               return Ty;
-  }
+  if (const IntegerType* ITy = dyn_cast<IntegerType>(Ty)) {
+    if (ITy->getBitWidth() < 32)
+      return Type::Int32Ty;
+  } else if (Ty == Type::FloatTy)
+    return Type::DoubleTy;
+  return Ty;
 }
 
 /// getBitCastOperand - If the specified operand is a CastInst or a constant 
@@ -531,7 +531,6 @@
                                          ConstantInt::get(C->getType(), 1)));
 }
 
-
 /// ComputeMaskedBits - Determine which of the bits specified in Mask are
 /// known to be either zero or one and return them in the KnownZero/KnownOne
 /// bitsets.  This code only analyzes bits in Mask, in order to short-circuit
@@ -3516,7 +3515,7 @@
   /// ByteValues - For each byte of the result, we keep track of which value
   /// defines each byte.
   std::vector<Value*> ByteValues;
-  ByteValues.resize(I.getType()->getPrimitiveSize());
+  ByteValues.resize(TD->getTypeSize(I.getType()));
     
   // Try to find all the pieces corresponding to the bswap.
   if (CollectBSwapParts(I.getOperand(0), ByteValues) ||
@@ -6580,9 +6579,7 @@
   }
 
   if (SI.getType() == Type::Int1Ty) {
-    ConstantInt *C;
-    if ((C = dyn_cast<ConstantInt>(TrueVal)) && 
-        C->getType() == Type::Int1Ty) {
+    if (ConstantInt *C = dyn_cast<ConstantInt>(TrueVal)) {
       if (C->getZExtValue()) {
         // Change: A = select B, true, C --> A = or B, C
         return BinaryOperator::createOr(CondVal, FalseVal);
@@ -6593,8 +6590,7 @@
                                              "not."+CondVal->getName()), SI);
         return BinaryOperator::createAnd(NotCond, FalseVal);
       }
-    } else if ((C = dyn_cast<ConstantInt>(FalseVal)) &&
-               C->getType() == Type::Int1Ty) {
+    } else if (ConstantInt *C = dyn_cast<ConstantInt>(FalseVal)) {
       if (C->getZExtValue() == false) {
         // Change: A = select B, C, false --> A = and B, C
         return BinaryOperator::createAnd(CondVal, TrueVal);
@@ -7649,7 +7645,7 @@
             }
           } else if (SrcTy->getPrimitiveSizeInBits() < 
                      DestTy->getPrimitiveSizeInBits() &&
-                     SrcTy->getPrimitiveSize() == 4) {
+                     SrcTy->getPrimitiveSizeInBits() == 32) {
             // We can eliminate a cast from [u]int to [u]long iff the target 
             // is a 32-bit pointer target.
             if (SrcTy->getPrimitiveSizeInBits() >= TD->getPointerSizeInBits()) {
@@ -7664,7 +7660,7 @@
       // insert it.  This explicit cast can make subsequent optimizations more
       // obvious.
       Value *Op = GEP.getOperand(i);
-      if (Op->getType()->getPrimitiveSize() > TD->getPointerSize())
+      if (TD->getTypeSize(Op->getType()) > TD->getPointerSize())
         if (Constant *C = dyn_cast<Constant>(Op)) {
           GEP.setOperand(i, ConstantExpr::getTrunc(C, TD->getIntPtrType()));
           MadeChange = true;
@@ -7722,11 +7718,11 @@
             GO1 = ConstantExpr::getIntegerCast(GO1C, SO1->getType(), true);
           } else {
             unsigned PS = TD->getPointerSize();
-            if (SO1->getType()->getPrimitiveSize() == PS) {
+            if (TD->getTypeSize(SO1->getType()) == PS) {
               // Convert GO1 to SO1's type.
               GO1 = InsertCastToIntPtrTy(GO1, SO1->getType(), &GEP, this);
 
-            } else if (GO1->getType()->getPrimitiveSize() == PS) {
+            } else if (TD->getTypeSize(GO1->getType()) == PS) {
               // Convert SO1 to GO1's type.
               SO1 = InsertCastToIntPtrTy(SO1, GO1->getType(), &GEP, this);
             } else {
@@ -9056,8 +9052,7 @@
   // only visit the reachable successor.
   TerminatorInst *TI = BB->getTerminator();
   if (BranchInst *BI = dyn_cast<BranchInst>(TI)) {
-    if (BI->isConditional() && isa<ConstantInt>(BI->getCondition()) &&
-        BI->getCondition()->getType() == Type::Int1Ty) {
+    if (BI->isConditional() && isa<ConstantInt>(BI->getCondition())) {
       bool CondVal = cast<ConstantInt>(BI->getCondition())->getZExtValue();
       AddReachableCodeToWorklist(BI->getSuccessor(!CondVal), Visited, WorkList,
                                  TD);
diff --git a/lib/Transforms/Scalar/SCCP.cpp b/lib/Transforms/Scalar/SCCP.cpp
index 2bc0004..1ebc1cf 100644
--- a/lib/Transforms/Scalar/SCCP.cpp
+++ b/lib/Transforms/Scalar/SCCP.cpp
@@ -1611,7 +1611,7 @@
         Instruction *I = cast<Instruction>(DeadBB->use_back());
         bool Folded = ConstantFoldTerminator(I->getParent());
         if (!Folded) {
-          // The constant folder may not have been able to fold the termiantor
+          // The constant folder may not have been able to fold the terminator
           // if this is a branch or switch on undef.  Fold it manually as a
           // branch to the first successor.
           if (BranchInst *BI = dyn_cast<BranchInst>(I)) {
diff --git a/lib/Transforms/Scalar/ScalarReplAggregates.cpp b/lib/Transforms/Scalar/ScalarReplAggregates.cpp
index 00e5818..a92459b 100644
--- a/lib/Transforms/Scalar/ScalarReplAggregates.cpp
+++ b/lib/Transforms/Scalar/ScalarReplAggregates.cpp
@@ -444,7 +444,8 @@
     // Noop.
   } else if (In->isIntegral() && Accum->isIntegral()) {   // integer union.
     // Otherwise pick whichever type is larger.
-    if (In->getTypeID() > Accum->getTypeID())
+    if (cast<IntegerType>(In)->getBitWidth() > 
+        cast<IntegerType>(Accum)->getBitWidth())
       Accum = In;
   } else if (isa<PointerType>(In) && isa<PointerType>(Accum)) {
     // Pointer unions just stay as one of the pointers.
@@ -643,8 +644,8 @@
           } else {
             // Must be an element access.
             unsigned Elt = Offset/(TD.getTypeSize(PTy->getElementType())*8);
-            NV = new ExtractElementInst(NV, ConstantInt::get(Type::Int32Ty, Elt),
-                                        "tmp", LI);
+            NV = new ExtractElementInst(
+                           NV, ConstantInt::get(Type::Int32Ty, Elt), "tmp", LI);
           }
         } else if (isa<PointerType>(NV->getType())) {
           assert(isa<PointerType>(LI->getType()));
diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp
index 138ab35..4730c31 100644
--- a/lib/VMCore/AsmWriter.cpp
+++ b/lib/VMCore/AsmWriter.cpp
@@ -222,6 +222,7 @@
     const Type *Ty = cast<Type>(TI->second);
     if (!isa<PointerType>(Ty) ||
         !cast<PointerType>(Ty)->getElementType()->isPrimitiveType() ||
+        !cast<PointerType>(Ty)->getElementType()->isIntegral() ||
         isa<OpaqueType>(cast<PointerType>(Ty)->getElementType()))
       TypeNames.insert(std::make_pair(Ty, getLLVMName(TI->first)));
   }
@@ -233,7 +234,7 @@
                          std::vector<const Type *> &TypeStack,
                          std::map<const Type *, std::string> &TypeNames,
                          std::string & Result){
-  if (Ty->isPrimitiveType() && !isa<OpaqueType>(Ty)) {
+  if (Ty->isIntegral() || (Ty->isPrimitiveType() && !isa<OpaqueType>(Ty))) {
     Result += Ty->getDescription();  // Base case
     return;
   }
@@ -265,6 +266,15 @@
   TypeStack.push_back(Ty);    // Recursive case: Add us to the stack..
 
   switch (Ty->getTypeID()) {
+  case Type::IntegerTyID: {
+    unsigned BitWidth = cast<IntegerType>(Ty)->getBitWidth();
+    if (BitWidth == 1)
+      Result += "bool";
+    else {
+      Result += "i" + utostr(BitWidth);
+    }
+    break;
+  }
   case Type::FunctionTyID: {
     const FunctionType *FTy = cast<FunctionType>(Ty);
     calcTypeName(FTy->getReturnType(), TypeStack, TypeNames, Result);
@@ -347,7 +357,7 @@
   // Primitive types always print out their description, regardless of whether
   // they have been named or not.
   //
-  if (Ty->isPrimitiveType() && !isa<OpaqueType>(Ty))
+  if (Ty->isIntegral() || (Ty->isPrimitiveType() && !isa<OpaqueType>(Ty)))
     return Out << Ty->getDescription();
 
   // Check to see if the type is named.
@@ -706,7 +716,9 @@
 /// without considering any symbolic types that we may have equal to it.
 ///
 std::ostream &AssemblyWriter::printTypeAtLeastOneLevel(const Type *Ty) {
-  if (const FunctionType *FTy = dyn_cast<FunctionType>(Ty)) {
+  if (const IntegerType *ITy = dyn_cast<IntegerType>(Ty))
+    Out << "i" << utostr(ITy->getBitWidth());
+  else if (const FunctionType *FTy = dyn_cast<FunctionType>(Ty)) {
     printType(FTy->getReturnType());
     Out << " (";
     unsigned Idx = 1;
diff --git a/lib/VMCore/ConstantFold.cpp b/lib/VMCore/ConstantFold.cpp
index 1f5aeb3..8aeca7b 100644
--- a/lib/VMCore/ConstantFold.cpp
+++ b/lib/VMCore/ConstantFold.cpp
@@ -1364,22 +1364,6 @@
       assert(Ty != 0 && "Invalid indices for GEP!");
       return ConstantPointerNull::get(PointerType::get(Ty));
     }
-
-    if (IdxList.size() == 1) {
-      const Type *ElTy = cast<PointerType>(C->getType())->getElementType();
-      if (uint32_t ElSize = ElTy->getPrimitiveSize()) {
-        // gep null, C is equal to C*sizeof(nullty).  If nullty is a known llvm
-        // type, we can statically fold this.
-        Constant *R = ConstantInt::get(Type::Int32Ty, ElSize);
-        // We know R is unsigned, Idx0 is signed because it must be an index
-        // through a sequential type (gep pointer operand) which is always
-        // signed.
-        R = ConstantExpr::getSExtOrBitCast(R, Idx0->getType());
-        R = ConstantExpr::getMul(R, Idx0); // signed multiply
-        // R is a signed integer, C is the GEP pointer so -> IntToPtr
-        return ConstantExpr::getIntToPtr(R, C->getType());
-      }
-    }
   }
 
   if (ConstantExpr *CE = dyn_cast<ConstantExpr>(const_cast<Constant*>(C))) {
diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp
index 7349091..c2332c6 100644
--- a/lib/VMCore/Constants.cpp
+++ b/lib/VMCore/Constants.cpp
@@ -92,25 +92,32 @@
 // Static constructor to create a '0' constant of arbitrary type...
 Constant *Constant::getNullValue(const Type *Ty) {
   switch (Ty->getTypeID()) {
-  case Type::Int1TyID: {
-    static Constant *NullBool = ConstantInt::get(Type::Int1Ty, false);
-    return NullBool;
-  }
-  case Type::Int8TyID: {
-    static Constant *NullInt8 = ConstantInt::get(Type::Int8Ty, 0);
-    return NullInt8;
-  }
-  case Type::Int16TyID: {
-    static Constant *NullInt16 = ConstantInt::get(Type::Int16Ty, 0);
-    return NullInt16;
-  }
-  case Type::Int32TyID: {
-    static Constant *NullInt32 = ConstantInt::get(Type::Int32Ty, 0);
-    return NullInt32;
-  }
-  case Type::Int64TyID: {
-    static Constant *NullInt64 = ConstantInt::get(Type::Int64Ty, 0);
-    return NullInt64;
+  case Type::IntegerTyID: {
+    const IntegerType *ITy = dyn_cast<IntegerType>(Ty);
+    switch (ITy->getBitWidth()) {
+    case 1: {
+      static Constant *NullBool = ConstantInt::get(Ty, false);
+      return NullBool;
+    } 
+    case 8: {
+      static Constant *NullInt8 = ConstantInt::get(Ty, 0);
+      return NullInt8;
+    } 
+    case 16: {
+      static Constant *NullInt16 = ConstantInt::get(Ty, 0);
+      return NullInt16;
+    } 
+    case 32: {
+      static Constant *NullInt32 = ConstantInt::get(Ty, 0);
+      return NullInt32;
+    } 
+    case 64: {
+      static Constant *NullInt64 = ConstantInt::get(Ty, 0);
+      return NullInt64;
+    }
+    default:
+      return ConstantInt::get(Ty, 0);
+    }
   }
   case Type::FloatTyID: {
     static Constant *NullFloat = ConstantFP::get(Type::FloatTy, 0);
@@ -136,14 +143,12 @@
 
 // Static constructor to create an integral constant with all bits set
 ConstantInt *ConstantInt::getAllOnesValue(const Type *Ty) {
-  switch (Ty->getTypeID()) {
-  case Type::Int1TyID:   return ConstantInt::getTrue();
-  case Type::Int8TyID:
-  case Type::Int16TyID:
-  case Type::Int32TyID:
-  case Type::Int64TyID:   return ConstantInt::get(Ty, int64_t(-1));
-  default: return 0;
-  }
+  if (const IntegerType* ITy = dyn_cast<IntegerType>(Ty))
+    if (ITy->getBitWidth() == 1)
+      return ConstantInt::getTrue();
+    else
+      return ConstantInt::get(Ty, int64_t(-1));
+  return 0;
 }
 
 /// @returns the value for an packed integer constant of the given type that
@@ -549,25 +554,26 @@
 //                      isValueValidForType implementations
 
 bool ConstantInt::isValueValidForType(const Type *Ty, uint64_t Val) {
-  switch (Ty->getTypeID()) {
-  default:              return false; // These can't be represented as integers!
-  case Type::Int1TyID:  return Val == 0 || Val == 1;
-  case Type::Int8TyID:  return Val <= UINT8_MAX;
-  case Type::Int16TyID: return Val <= UINT16_MAX;
-  case Type::Int32TyID: return Val <= UINT32_MAX;
-  case Type::Int64TyID: return true; // always true, has to fit in largest type
-  }
+  unsigned NumBits = cast<IntegerType>(Ty)->getBitWidth(); // assert okay
+  assert(NumBits <= 64 && "Not implemented: integers > 64-bits");
+  if (Ty == Type::Int1Ty)
+    return Val == 0 || Val == 1;
+  if (NumBits == 64)
+    return true; // always true, has to fit in largest type
+  uint64_t Max = (1ll << NumBits) - 1;
+  return Val <= Max;
 }
 
 bool ConstantInt::isValueValidForType(const Type *Ty, int64_t Val) {
-  switch (Ty->getTypeID()) {
-  default:              return false; // These can't be represented as integers!
-  case Type::Int1TyID:  return (Val == 0 || Val == 1);
-  case Type::Int8TyID:  return (Val >= INT8_MIN && Val <= INT8_MAX);
-  case Type::Int16TyID: return (Val >= INT16_MIN && Val <= UINT16_MAX);
-  case Type::Int32TyID: return (Val >= INT32_MIN && Val <= UINT32_MAX);
-  case Type::Int64TyID: return true; // always true, has to fit in largest type
-  }
+  unsigned NumBits = cast<IntegerType>(Ty)->getBitWidth(); // assert okay
+  assert(NumBits <= 64 && "Not implemented: integers > 64-bits");
+  if (Ty == Type::Int1Ty)
+    return Val == 0 || Val == 1;
+  if (NumBits == 64)
+    return true; // always true, has to fit in largest type
+  int64_t Min = -(1ll << (NumBits-1));
+  int64_t Max = (1ll << (NumBits-1)) - 1;
+  return (Val >= Min && Val <= Max);
 }
 
 bool ConstantFP::isValueValidForType(const Type *Ty, double Val) {
@@ -1441,8 +1447,7 @@
 
 Constant *ConstantExpr::getPointerCast(Constant *S, const Type *Ty) {
   assert(isa<PointerType>(S->getType()) && "Invalid cast");
-  assert((Ty->isIntegral() || Ty->getTypeID() == Type::PointerTyID) &&
-         "Invalid cast");
+  assert((Ty->isIntegral() || isa<PointerType>(Ty)) && "Invalid cast");
 
   if (Ty->isIntegral())
     return getCast(Instruction::PtrToInt, S, Ty);
diff --git a/lib/VMCore/Instructions.cpp b/lib/VMCore/Instructions.cpp
index b9a4770..9486fb8 100644
--- a/lib/VMCore/Instructions.cpp
+++ b/lib/VMCore/Instructions.cpp
@@ -1528,7 +1528,7 @@
                                       const std::string &Name,
                                       BasicBlock *InsertAtEnd) {
   assert(isa<PointerType>(S->getType()) && "Invalid cast");
-  assert((Ty->isIntegral() || Ty->getTypeID() == Type::PointerTyID) &&
+  assert((Ty->isIntegral() || isa<PointerType>(Ty)) &&
          "Invalid cast");
 
   if (Ty->isIntegral())
@@ -1541,7 +1541,7 @@
                                       const std::string &Name, 
                                       Instruction *InsertBefore) {
   assert(isa<PointerType>(S->getType()) && "Invalid cast");
-  assert((Ty->isIntegral() || Ty->getTypeID() == Type::PointerTyID) &&
+  assert((Ty->isIntegral() || isa<PointerType>(Ty)) &&
          "Invalid cast");
 
   if (Ty->isIntegral())
@@ -1913,7 +1913,7 @@
     assert(Op0Ty == Op1Ty &&
            "Both operands to ICmp instruction are not of the same type!");
     // Check that the operands are the right type
-    assert(Op0Ty->isIntegral() || Op0Ty->getTypeID() == Type::PointerTyID ||
+    assert(Op0Ty->isIntegral() || isa<PointerType>(Op0Ty) ||
            (isa<PackedType>(Op0Ty) && 
             cast<PackedType>(Op0Ty)->getElementType()->isIntegral()) &&
            "Invalid operand types for ICmp instruction");
@@ -1948,7 +1948,7 @@
     assert(Op0Ty == Op1Ty &&
           "Both operands to ICmp instruction are not of the same type!");
     // Check that the operands are the right type
-    assert(Op0Ty->isIntegral() || Op0Ty->getTypeID() == Type::PointerTyID ||
+    assert(Op0Ty->isIntegral() || isa<PointerType>(Op0Ty) ||
            (isa<PackedType>(Op0Ty) && 
             cast<PackedType>(Op0Ty)->getElementType()->isIntegral()) &&
            "Invalid operand types for ICmp instruction");
diff --git a/lib/VMCore/Type.cpp b/lib/VMCore/Type.cpp
index 8ab1afd..b70cd5f 100644
--- a/lib/VMCore/Type.cpp
+++ b/lib/VMCore/Type.cpp
@@ -64,7 +64,7 @@
                               std::string> > AbstractTypeDescriptions;
 
 Type::Type(const char *Name, TypeID id)
-  : ID(id), Abstract(false),  RefCount(0), ForwardType(0) {
+  : ID(id), Abstract(false),  SubclassData(0), RefCount(0), ForwardType(0) {
   assert(Name && Name[0] && "Should use other ctor if no name!");
   (*ConcreteTypeDescriptions)[this] = Name;
 }
@@ -73,11 +73,6 @@
 const Type *Type::getPrimitiveType(TypeID IDNumber) {
   switch (IDNumber) {
   case VoidTyID  : return VoidTy;
-  case Int1TyID  : return Int1Ty;
-  case Int8TyID  : return Int8Ty; 
-  case Int16TyID : return Int16Ty; 
-  case Int32TyID : return Int32Ty;
-  case Int64TyID : return Int64Ty;
   case FloatTyID : return FloatTy;
   case DoubleTyID: return DoubleTy;
   case LabelTyID : return LabelTy;
@@ -116,41 +111,17 @@
   // At this point we have only various mismatches of the first class types
   // remaining and ptr->ptr. Just select the lossless conversions. Everything
   // else is not lossless.
-  if (getTypeID() == Type::PointerTyID)
+  if (isa<PointerType>(this))
     return isa<PointerType>(Ty);
   return false;  // Other types have no identity values
 }
 
-// getPrimitiveSize - Return the basic size of this type if it is a primitive
-// type.  These are fixed by LLVM and are not target dependent.  This will
-// return zero if the type does not have a size or is not a primitive type.
-//
-unsigned Type::getPrimitiveSize() const {
-  switch (getTypeID()) {
-  case Type::Int1TyID:
-  case Type::Int8TyID:  return 1;
-  case Type::Int16TyID: return 2;
-  case Type::FloatTyID:
-  case Type::Int32TyID: return 4;
-  case Type::Int64TyID:
-  case Type::DoubleTyID: return 8;
-  default: return 0;
-  }
-}
-
 unsigned Type::getPrimitiveSizeInBits() const {
   switch (getTypeID()) {
-  case Type::Int1TyID:  return 1;
-  case Type::Int8TyID:  return 8;
-  case Type::Int16TyID: return 16;
-  case Type::FloatTyID:
-  case Type::Int32TyID:return 32;
-  case Type::Int64TyID:
+  case Type::FloatTyID: return 32;
   case Type::DoubleTyID: return 64;
-  case Type::PackedTyID: {
-    const PackedType *PTy = cast<PackedType>(this);
-    return PTy->getBitWidth();
-  }
+  case Type::IntegerTyID: return cast<IntegerType>(this)->getBitWidth();
+  case Type::PackedTyID:  return cast<PackedType>(this)->getBitWidth();
   default: return 0;
   }
 }
@@ -165,11 +136,13 @@
   if (const PackedType *PTy = dyn_cast<PackedType>(this))
     return PTy->getElementType()->isSized();
 
-  if (!isa<StructType>(this)) return false;
+  if (!isa<StructType>(this)) 
+    return false;
 
   // Okay, our struct is sized if all of the elements are...
   for (subtype_iterator I = subtype_begin(), E = subtype_end(); I != E; ++I)
-    if (!(*I)->isSized()) return false;
+    if (!(*I)->isSized()) 
+      return false;
 
   return true;
 }
@@ -243,6 +216,14 @@
   TypeStack.push_back(Ty);    // Add us to the stack..
 
   switch (Ty->getTypeID()) {
+  case Type::IntegerTyID: {
+    const IntegerType *ITy = cast<IntegerType>(Ty);
+    if (ITy->getBitWidth() == 1)
+      Result = "bool"; // FIXME: eventually this becomes i1
+    else
+      Result = "i" + utostr(ITy->getBitWidth());
+    break;
+  }
   case Type::FunctionTyID: {
     const FunctionType *FTy = cast<FunctionType>(Ty);
     if (!Result.empty())
@@ -267,6 +248,7 @@
     }
     break;
   }
+  case Type::PackedStructTyID:
   case Type::StructTyID: {
     const StructType *STy = cast<StructType>(Ty);
     if (STy->isPacked())
@@ -353,7 +335,6 @@
   return ContainedTys[Idx];
 }
 
-
 //===----------------------------------------------------------------------===//
 //                          Primitive 'Type' data
 //===----------------------------------------------------------------------===//
@@ -365,17 +346,26 @@
     };                                                 \
   }                                                    \
   static ManagedStatic<TY##Type> The##TY##Ty;          \
-  Type *Type::TY##Ty = &*The##TY##Ty
+  const Type *Type::TY##Ty = &*The##TY##Ty
+
+#define DeclareIntegerType(TY, BitWidth)                     \
+  namespace {                                                \
+    struct VISIBILITY_HIDDEN TY##Type : public IntegerType { \
+      TY##Type() : IntegerType(BitWidth) {}                  \
+    };                                                       \
+  }                                                          \
+  static ManagedStatic<TY##Type> The##TY##Ty;                \
+  const Type *Type::TY##Ty = &*The##TY##Ty
 
 DeclarePrimType(Void,   "void");
-DeclarePrimType(Int1,   "bool");
-DeclarePrimType(Int8,   "i8");
-DeclarePrimType(Int16,  "i16");
-DeclarePrimType(Int32,  "i32");
-DeclarePrimType(Int64,  "i64");
 DeclarePrimType(Float,  "float");
 DeclarePrimType(Double, "double");
 DeclarePrimType(Label,  "label");
+DeclareIntegerType(Int1,    1);
+DeclareIntegerType(Int8,    8);
+DeclareIntegerType(Int16,  16);
+DeclareIntegerType(Int32,  32);
+DeclareIntegerType(Int64,  64);
 #undef DeclarePrimType
 
 
@@ -584,7 +574,10 @@
   // algorithm is the fact that arraytypes have sizes that differentiates types,
   // and that function types can be varargs or not.  Consider this now.
   //
-  if (const PointerType *PTy = dyn_cast<PointerType>(Ty)) {
+  if (const IntegerType *ITy = dyn_cast<IntegerType>(Ty)) {
+    const IntegerType *ITy2 = cast<IntegerType>(Ty2);
+    return ITy->getBitWidth() == ITy2->getBitWidth();
+  } else if (const PointerType *PTy = dyn_cast<PointerType>(Ty)) {
     return TypesEqual(PTy->getElementType(),
                       cast<PointerType>(Ty2)->getElementType(), EqTypes);
   } else if (const StructType *STy = dyn_cast<StructType>(Ty)) {
@@ -695,6 +688,9 @@
     switch (SubTy->getTypeID()) {
     default: break;
     case Type::OpaqueTyID: return 0;    // Opaque -> hash = 0 no matter what.
+    case Type::IntegerTyID:
+      HashVal ^= (cast<IntegerType>(SubTy)->getBitWidth() << 3);
+      break;
     case Type::FunctionTyID:
       HashVal ^= cast<FunctionType>(SubTy)->getNumParams()*2 + 
                  cast<FunctionType>(SubTy)->isVarArg();
@@ -928,6 +924,60 @@
 // Function Type Factory and Value Class...
 //
 
+//===----------------------------------------------------------------------===//
+// Integer Type Factory...
+//
+namespace llvm {
+class IntegerValType {
+  uint16_t bits;
+public:
+  IntegerValType(uint16_t numbits) : bits(numbits) {}
+
+  static IntegerValType get(const IntegerType *Ty) {
+    return IntegerValType(Ty->getBitWidth());
+  }
+
+  static unsigned hashTypeStructure(const IntegerType *Ty) {
+    return (unsigned)Ty->getBitWidth();
+  }
+
+  inline bool operator<(const IntegerValType &IVT) const {
+    return bits < IVT.bits;
+  }
+};
+}
+
+static ManagedStatic<TypeMap<IntegerValType, IntegerType> > IntegerTypes;
+
+const IntegerType *IntegerType::get(unsigned NumBits) {
+  assert(NumBits >= MIN_INT_BITS && "bitwidth too small");
+  assert(NumBits <= MAX_INT_BITS && "bitwidth too large");
+
+  // Check for the built-in integer types
+  switch (NumBits) {
+    case  1: return cast<IntegerType>(Type::Int1Ty);
+    case  8: return cast<IntegerType>(Type::Int8Ty);
+    case 16: return cast<IntegerType>(Type::Int16Ty);
+    case 32: return cast<IntegerType>(Type::Int32Ty);
+    case 64: return cast<IntegerType>(Type::Int64Ty);
+    default: 
+      break;
+  }
+
+  IntegerValType IVT(NumBits);
+  IntegerType *ITy = IntegerTypes->get(IVT);
+  if (ITy) return ITy;           // Found a match, return it!
+
+  // Value not found.  Derive a new type!
+  ITy = new IntegerType(NumBits);
+  IntegerTypes->add(IVT, ITy);
+
+#ifdef DEBUG_MERGE_TYPES
+  DOUT << "Derived new type: " << *ITy << "\n";
+#endif
+  return ITy;
+}
+
 // FunctionValType - Define a class to hold the key that goes into the TypeMap
 //
 namespace llvm {
@@ -1440,14 +1490,9 @@
 }
 
 bool SequentialType::indexValid(const Value *V) const {
-  const Type *Ty = V->getType();
-  switch (Ty->getTypeID()) {
-  case Type::Int32TyID:
-  case Type::Int64TyID:
-    return true;
-  default:
-    return false;
-  }
+  if (const IntegerType *IT = dyn_cast<IntegerType>(V->getType())) 
+    return IT->getBitWidth() == 32 || IT->getBitWidth() == 64;
+  return false;
 }
 
 namespace llvm {
diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp
index 4431c81..05b8514 100644
--- a/lib/VMCore/Verifier.cpp
+++ b/lib/VMCore/Verifier.cpp
@@ -743,7 +743,7 @@
   Assert1(Op0Ty == Op1Ty,
           "Both operands to ICmp instruction are not of the same type!", &IC);
   // Check that the operands are the right type
-  Assert1(Op0Ty->isIntegral() || Op0Ty->getTypeID() == Type::PointerTyID,
+  Assert1(Op0Ty->isIntegral() || isa<PointerType>(Op0Ty),
           "Invalid operand types for ICmp instruction", &IC);
   visitInstruction(IC);
 }
@@ -1005,7 +1005,7 @@
     else
       Ty = FTy->getParamType(ArgNo-1);
     
-    if (Ty->getTypeID() != TypeID) {
+    if (TypeID != Ty->getTypeID()) {
       if (ArgNo == 0)
         CheckFailed("Intrinsic prototype has incorrect result type!", F);
       else
@@ -1013,18 +1013,43 @@
       break;
     }
 
-    // If this is a packed argument, verify the number and type of elements.
-    if (TypeID == Type::PackedTyID) {
-      const PackedType *PTy = cast<PackedType>(Ty);
-      if (va_arg(VA, int) != PTy->getElementType()->getTypeID()) {
-        CheckFailed("Intrinsic prototype has incorrect vector element type!",F);
+    if (TypeID == Type::IntegerTyID) {
+      unsigned GotBits = (unsigned) va_arg(VA, int);
+      unsigned ExpectBits = cast<IntegerType>(Ty)->getBitWidth();
+      if (GotBits != ExpectBits) {
+        std::string bitmsg = " Expecting " + utostr(ExpectBits) + " but got " +
+                             utostr(GotBits) + " bits.";
+        if (ArgNo == 0)
+          CheckFailed("Intrinsic prototype has incorrect integer result width!"
+                      + bitmsg, F);
+        else
+          CheckFailed("Intrinsic parameter #" + utostr(ArgNo-1) + " has "
+                      "incorrect integer width!" + bitmsg, F);
         break;
       }
-
+    } else if (TypeID == Type::PackedTyID) {
+      // If this is a packed argument, verify the number and type of elements.
+      const PackedType *PTy = cast<PackedType>(Ty);
+      int ElemTy = va_arg(VA, int);
+      if (ElemTy != PTy->getElementType()->getTypeID()) {
+        CheckFailed("Intrinsic prototype has incorrect vector element type!",
+                    F);
+        break;
+      }
+      if (ElemTy == Type::IntegerTyID) {
+        unsigned NumBits = (unsigned)va_arg(VA, int);
+        unsigned ExpectedBits = 
+          cast<IntegerType>(PTy->getElementType())->getBitWidth();
+        if (NumBits != ExpectedBits) {
+          CheckFailed("Intrinsic prototype has incorrect vector element type!",
+                      F);
+          break;
+        }
+      }
       if ((unsigned)va_arg(VA, int) != PTy->getNumElements()) {
         CheckFailed("Intrinsic prototype has incorrect number of "
                     "vector elements!",F);
-        break;
+          break;
       }
     }
   }
diff --git a/tools/llvm2cpp/CppWriter.cpp b/tools/llvm2cpp/CppWriter.cpp
index 1f6cbaf..82997ce 100644
--- a/tools/llvm2cpp/CppWriter.cpp
+++ b/tools/llvm2cpp/CppWriter.cpp
@@ -161,28 +161,25 @@
       str[i] = '_';
 }
 
-inline const char* 
+inline std::string
 getTypePrefix(const Type* Ty ) {
-  const char* prefix;
   switch (Ty->getTypeID()) {
-    case Type::VoidTyID:     prefix = "void_"; break;
-    case Type::Int1TyID:     prefix = "bool_"; break; 
-    case Type::Int8TyID:     prefix = "int8_"; break;
-    case Type::Int16TyID:    prefix = "int16_"; break;
-    case Type::Int32TyID:    prefix = "int32_"; break;
-    case Type::Int64TyID:    prefix = "int64_"; break;
-    case Type::FloatTyID:    prefix = "float_"; break;
-    case Type::DoubleTyID:   prefix = "double_"; break;
-    case Type::LabelTyID:    prefix = "label_"; break;
-    case Type::FunctionTyID: prefix = "func_"; break;
-    case Type::StructTyID:   prefix = "struct_"; break;
-    case Type::ArrayTyID:    prefix = "array_"; break;
-    case Type::PointerTyID:  prefix = "ptr_"; break;
-    case Type::PackedTyID:   prefix = "packed_"; break;
-    case Type::OpaqueTyID:   prefix = "opaque_"; break;
-    default:                 prefix = "other_"; break;
+    case Type::VoidTyID:     return "void_";
+    case Type::IntegerTyID:  
+      return std::string("int") + utostr(cast<IntegerType>(Ty)->getBitWidth()) +
+        "_";
+    case Type::FloatTyID:    return "float_"; 
+    case Type::DoubleTyID:   return "double_"; 
+    case Type::LabelTyID:    return "label_"; 
+    case Type::FunctionTyID: return "func_"; 
+    case Type::StructTyID:   return "struct_"; 
+    case Type::ArrayTyID:    return "array_"; 
+    case Type::PointerTyID:  return "ptr_"; 
+    case Type::PackedTyID:   return "packed_"; 
+    case Type::OpaqueTyID:   return "opaque_"; 
+    default:                 return "other_"; 
   }
-  return prefix;
+  return "unknown_";
 }
 
 // Looks up the type in the symbol table and returns a pointer to its name or
@@ -313,14 +310,13 @@
 CppWriter::getCppName(const Type* Ty)
 {
   // First, handle the primitive types .. easy
-  if (Ty->isPrimitiveType()) {
+  if (Ty->isPrimitiveType() || Ty->isIntegral()) {
     switch (Ty->getTypeID()) {
       case Type::VoidTyID:   return "Type::VoidTy";
-      case Type::Int1TyID:   return "Type::Int1Ty"; 
-      case Type::Int8TyID:   return "Type::Int8Ty";
-      case Type::Int16TyID:  return "Type::Int16Ty";
-      case Type::Int32TyID:  return "Type::Int32Ty";
-      case Type::Int64TyID:  return "Type::Int64Ty";
+      case Type::IntegerTyID: {
+        unsigned BitWidth = cast<IntegerType>(Ty)->getBitWidth();
+        return "IntegerType::get(" + utostr(BitWidth) + ")";
+      }
       case Type::FloatTyID:  return "Type::FloatTy";
       case Type::DoubleTyID: return "Type::DoubleTy";
       case Type::LabelTyID:  return "Type::LabelTy";
@@ -414,7 +410,7 @@
 bool
 CppWriter::printTypeInternal(const Type* Ty) {
   // We don't print definitions for primitive types
-  if (Ty->isPrimitiveType())
+  if (Ty->isPrimitiveType() || Ty->isIntegral())
     return false;
 
   // If we already defined this type, we don't need to define it again.
@@ -603,7 +599,8 @@
 
     // For primitive types and types already defined, just add a name
     TypeMap::const_iterator TNI = TypeNames.find(TI->second);
-    if (TI->second->isPrimitiveType() || TNI != TypeNames.end()) {
+    if (TI->second->isIntegral() || TI->second->isPrimitiveType() || 
+        TNI != TypeNames.end()) {
       Out << "mod->addTypeName(\"";
       printEscapedString(TI->first);
       Out << "\", " << getCppName(TI->second) << ");";
diff --git a/utils/TableGen/IntrinsicEmitter.cpp b/utils/TableGen/IntrinsicEmitter.cpp
index fabb7e7..7cd0375 100644
--- a/utils/TableGen/IntrinsicEmitter.cpp
+++ b/utils/TableGen/IntrinsicEmitter.cpp
@@ -110,12 +110,14 @@
 
 static void EmitTypeVerify(std::ostream &OS, Record *ArgType) {
   OS << "(int)" << ArgType->getValueAsString("TypeVal") << ", ";
+  // If this is an integer type, check the width is correct.
+  if (ArgType->isSubClassOf("LLVMIntegerType"))
+    OS << ArgType->getValueAsInt("Width") << ", ";
 
   // If this is a packed type, check that the subtype and size are correct.
-  if (ArgType->isSubClassOf("LLVMPackedType")) {
-    Record *SubType = ArgType->getValueAsDef("ElTy");
-    OS << "(int)" << SubType->getValueAsString("TypeVal") << ", "
-       << ArgType->getValueAsInt("NumElts") << ", ";
+  else if (ArgType->isSubClassOf("LLVMPackedType")) {
+    EmitTypeVerify(OS, ArgType->getValueAsDef("ElTy"));
+    OS << ArgType->getValueAsInt("NumElts") << ", ";
   }
 }