For PR1064:
authorReid Spencer <rspencer@reidspencer.com>
Fri, 12 Jan 2007 07:05:14 +0000 (07:05 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Fri, 12 Jan 2007 07:05:14 +0000 (07:05 +0000)
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

41 files changed:
include/llvm/DerivedTypes.h
include/llvm/Intrinsics.td
include/llvm/Target/TargetLowering.h
include/llvm/Type.h
lib/AsmParser/Lexer.cpp.cvs
lib/AsmParser/Lexer.l
lib/AsmParser/Lexer.l.cvs
lib/AsmParser/llvmAsmParser.cpp.cvs
lib/AsmParser/llvmAsmParser.h.cvs
lib/AsmParser/llvmAsmParser.y
lib/AsmParser/llvmAsmParser.y.cvs
lib/Bytecode/Reader/Reader.cpp
lib/Bytecode/Reader/Reader.h
lib/Bytecode/Writer/SlotCalculator.cpp
lib/Bytecode/Writer/SlotCalculator.h
lib/Bytecode/Writer/Writer.cpp
lib/CodeGen/AsmPrinter.cpp
lib/CodeGen/MachOWriter.cpp
lib/ExecutionEngine/ExecutionEngine.cpp
lib/ExecutionEngine/Interpreter/Execution.cpp
lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
lib/ExecutionEngine/Interpreter/Interpreter.h
lib/ExecutionEngine/JIT/JIT.cpp
lib/Linker/LinkModules.cpp
lib/Target/CBackend/CBackend.cpp
lib/Target/TargetData.cpp
lib/Target/X86/X86TargetAsmInfo.cpp
lib/Transforms/IPO/DeadTypeElimination.cpp
lib/Transforms/IPO/SimplifyLibCalls.cpp
lib/Transforms/Scalar/IndVarSimplify.cpp
lib/Transforms/Scalar/InstructionCombining.cpp
lib/Transforms/Scalar/SCCP.cpp
lib/Transforms/Scalar/ScalarReplAggregates.cpp
lib/VMCore/AsmWriter.cpp
lib/VMCore/ConstantFold.cpp
lib/VMCore/Constants.cpp
lib/VMCore/Instructions.cpp
lib/VMCore/Type.cpp
lib/VMCore/Verifier.cpp
tools/llvm2cpp/CppWriter.cpp
utils/TableGen/IntrinsicEmitter.cpp

index f8d9a1bf9460a231e4cfd0a726e06d20ae2e80b3..78759f1dea97fd3d1c5cc3268f7c8313ee6605bd 100644 (file)
@@ -29,6 +29,7 @@ class ArrayValType;
 class StructValType;
 class PointerValType;
 class PackedValType;
+class IntegerValType;
 
 class DerivedType : public Type {
   friend class Type;
@@ -71,6 +72,40 @@ public:
   }
 };
 
+/// 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
 ///
index ca6725b648ffa688b0f8e6a05d5106d970ef08c9..6bcbd6895fd7ac0ee1540af0b5c236d36ce3de0d 100644 (file)
@@ -57,6 +57,11 @@ class LLVMType<ValueType vt, string typeval> {
   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 @@ class LLVMPackedType<ValueType VT, int numelts, LLVMType elty>
 } 
 
 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.
index 5749d520d83619657aa1c4c0c7ee7b8e2b0378ae..fd2caf8bf8fe19bf6d5f73d1dbd7e3a4bbdcccad 100644 (file)
@@ -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 @@ public:
     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;
index 29180a00e59e05b52680afd482931df33fe9263b..b95f146deb7f4ee1a2073d45958ed61d58a5ed37 100644 (file)
@@ -71,32 +71,31 @@ public:
   ///
   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 @@ private:
   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 @@ protected:
 
   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 @@ public:
 
   /// 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 @@ public:
   ///
   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 @@ public:
   ///
   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 @@ public:
   /// 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 @@ public:
   /// 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 @@ public:
   //===--------------------------------------------------------------------===//
   // 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; }
index 55d32cdc224d7339fe47085c46e30630f75fe58c..b849caedbccfa111984088ac0a29c27eaa172577 100644 (file)
@@ -317,99 +317,99 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
        *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,
-
-        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,
-
-       15,   14,   30,   38,   16,   29,  115,  121,  123,  124,
-       44,  122,   18,   45,   19
+      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,
+
+       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,
+
+       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,
-
-      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,
-
-      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,
-
-      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,
-
-      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
+       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,
+
+      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,  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,
+
+      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,
+
+      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 @@ static yyconst int yy_ec[256] =
         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 @@ static yyconst int yy_ec[256] =
         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,
-
-      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,
-
-      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,
-
-      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,
-
-     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,
-
-      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
+        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,
+
+      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,
+
+      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,
+
+     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,
+
+      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,
+
+      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,
-
-      558,  558,  558,  558,  558,  558,  558,  558,  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,
-
-      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,
-
-      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,
-
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
-      558,  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
+      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,
+
+      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,
+
+      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,
+
+      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,
+
+      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,
+
+      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,
-
-       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,
-
-      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,
-
-       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,
-
-      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,
-
-      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,
-
-       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,
-
-      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,  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,
-
-      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,
-
-      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,
+       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,
+
+       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,
+
+      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,   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,
+
+      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,
+
+      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,
+
+      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,
+
+       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,  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,
+
+      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,
+
+      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 @@ static yyconst short int yy_nxt[1245] =
        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,
-
-      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
+       40,   40,   40,   40,   40,  241,   40,   40,   40,   40,
+       40,  130,   40,   38,  550,    3,  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,  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,
-
-       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,
-
-       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,
-
-       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,
-
-      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,
-
-      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,
-
-      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,
-
-      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,
-
-      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,
-
-      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,
-
-      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,
-
-      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,
-
-      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
+        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,
+
+       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,   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,
+
+       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,
+
+      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,
+
+      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,
+
+      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,
+
+      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,
+
+      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,
+
+      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,
+
+      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,
+
+      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,
+
+      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 @@ goto find_rule; \
 #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 @@ char *yytext;
 //
 //===----------------------------------------------------------------------===*/
 #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 @@ using namespace llvm;
 /* 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 @@ YY_DECL
        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 @@ yy_match:
                        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 @@ do_action:    /* This label is used only to access EOF actions. */
        { /* 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); }
-       YY_BREAK
-case 55:
-YY_RULE_SETUP
-#line 245 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return TYPE;   }
-       YY_BREAK
-case 56:
-YY_RULE_SETUP
-#line 246 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return OPAQUE; }
-       YY_BREAK
-case 57:
-YY_RULE_SETUP
-#line 248 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 253 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, Add, ADD); }
        YY_BREAK
-case 58:
+case 55:
 YY_RULE_SETUP
-#line 249 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 254 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, Sub, SUB); }
        YY_BREAK
-case 59:
+case 56:
 YY_RULE_SETUP
-#line 250 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 255 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, Mul, MUL); }
        YY_BREAK
-case 60:
+case 57:
 YY_RULE_SETUP
-#line 251 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 256 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, UDiv, UDIV); }
        YY_BREAK
-case 61:
+case 58:
 YY_RULE_SETUP
-#line 252 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 257 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, SDiv, SDIV); }
        YY_BREAK
-case 62:
+case 59:
 YY_RULE_SETUP
-#line 253 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 258 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, FDiv, FDIV); }
        YY_BREAK
-case 63:
+case 60:
 YY_RULE_SETUP
-#line 254 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 259 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, URem, UREM); }
        YY_BREAK
-case 64:
+case 61:
 YY_RULE_SETUP
-#line 255 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 260 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, SRem, SREM); }
        YY_BREAK
-case 65:
+case 62:
 YY_RULE_SETUP
-#line 256 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 261 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, FRem, FREM); }
        YY_BREAK
-case 66:
+case 63:
 YY_RULE_SETUP
-#line 257 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 262 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, And, AND); }
        YY_BREAK
-case 67:
+case 64:
 YY_RULE_SETUP
-#line 258 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 263 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, Or , OR ); }
        YY_BREAK
-case 68:
+case 65:
 YY_RULE_SETUP
-#line 259 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 264 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, Xor, XOR); }
        YY_BREAK
-case 69:
+case 66:
 YY_RULE_SETUP
-#line 260 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 265 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal,  ICmp,  ICMP); }
        YY_BREAK
-case 70:
+case 67:
 YY_RULE_SETUP
-#line 261 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 266 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal,  FCmp,  FCMP); }
        YY_BREAK
-case 71:
+case 68:
 YY_RULE_SETUP
-#line 262 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 267 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return EQ;  }
        YY_BREAK
-case 72:
+case 69:
 YY_RULE_SETUP
-#line 263 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 268 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return NE;  }
        YY_BREAK
-case 73:
+case 70:
 YY_RULE_SETUP
-#line 264 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 269 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return SLT; }
        YY_BREAK
-case 74:
+case 71:
 YY_RULE_SETUP
-#line 265 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 270 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return SGT; }
        YY_BREAK
-case 75:
+case 72:
 YY_RULE_SETUP
-#line 266 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 271 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return SLE; }
        YY_BREAK
-case 76:
+case 73:
 YY_RULE_SETUP
-#line 267 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 272 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return SGE; }
        YY_BREAK
-case 77:
+case 74:
 YY_RULE_SETUP
-#line 268 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 273 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return ULT; }
        YY_BREAK
-case 78:
+case 75:
 YY_RULE_SETUP
-#line 269 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 274 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return UGT; }
        YY_BREAK
-case 79:
+case 76:
 YY_RULE_SETUP
-#line 270 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 275 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return ULE; }
        YY_BREAK
-case 80:
+case 77:
 YY_RULE_SETUP
-#line 271 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 276 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return UGE; }
        YY_BREAK
-case 81:
+case 78:
 YY_RULE_SETUP
-#line 272 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 277 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return OEQ; }
        YY_BREAK
-case 82:
+case 79:
 YY_RULE_SETUP
-#line 273 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 278 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return ONE; }
        YY_BREAK
-case 83:
+case 80:
 YY_RULE_SETUP
-#line 274 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 279 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return OLT; }
        YY_BREAK
-case 84:
+case 81:
 YY_RULE_SETUP
-#line 275 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 280 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return OGT; }
        YY_BREAK
-case 85:
+case 82:
 YY_RULE_SETUP
-#line 276 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 281 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return OLE; }
        YY_BREAK
-case 86:
+case 83:
 YY_RULE_SETUP
-#line 277 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 282 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return OGE; }
        YY_BREAK
-case 87:
+case 84:
 YY_RULE_SETUP
-#line 278 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 283 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return ORD; }
        YY_BREAK
-case 88:
+case 85:
 YY_RULE_SETUP
-#line 279 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 284 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return UNO; }
        YY_BREAK
-case 89:
+case 86:
 YY_RULE_SETUP
-#line 280 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 285 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return UEQ; }
        YY_BREAK
-case 90:
+case 87:
 YY_RULE_SETUP
-#line 281 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 286 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { return UNE; }
        YY_BREAK
-case 91:
+case 88:
 YY_RULE_SETUP
-#line 283 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 288 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, PHI, PHI_TOK); }
        YY_BREAK
-case 92:
+case 89:
 YY_RULE_SETUP
-#line 284 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 289 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, Call, CALL); }
        YY_BREAK
-case 93:
+case 90:
 YY_RULE_SETUP
-#line 285 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 290 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, Trunc, TRUNC); }
        YY_BREAK
-case 94:
+case 91:
 YY_RULE_SETUP
-#line 286 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 291 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, ZExt, ZEXT); }
        YY_BREAK
-case 95:
+case 92:
 YY_RULE_SETUP
-#line 287 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 292 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, SExt, SEXT); }
        YY_BREAK
-case 96:
+case 93:
 YY_RULE_SETUP
-#line 288 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 293 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, FPTrunc, FPTRUNC); }
        YY_BREAK
-case 97:
+case 94:
 YY_RULE_SETUP
-#line 289 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 294 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, FPExt, FPEXT); }
        YY_BREAK
-case 98:
+case 95:
 YY_RULE_SETUP
-#line 290 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 295 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, UIToFP, UITOFP); }
        YY_BREAK
-case 99:
+case 96:
 YY_RULE_SETUP
-#line 291 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 296 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, SIToFP, SITOFP); }
        YY_BREAK
-case 100:
+case 97:
 YY_RULE_SETUP
-#line 292 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 297 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, FPToUI, FPTOUI); }
        YY_BREAK
-case 101:
+case 98:
 YY_RULE_SETUP
-#line 293 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 298 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, FPToSI, FPTOSI); }
        YY_BREAK
-case 102:
+case 99:
 YY_RULE_SETUP
-#line 294 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 299 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, IntToPtr, INTTOPTR); }
        YY_BREAK
-case 103:
+case 100:
 YY_RULE_SETUP
-#line 295 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 300 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, PtrToInt, PTRTOINT); }
        YY_BREAK
-case 104:
+case 101:
 YY_RULE_SETUP
-#line 296 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 301 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(CastOpVal, BitCast, BITCAST); }
        YY_BREAK
-case 105:
+case 102:
 YY_RULE_SETUP
-#line 297 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 302 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, Select, SELECT); }
        YY_BREAK
-case 106:
+case 103:
 YY_RULE_SETUP
-#line 298 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 303 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, Shl, SHL); }
        YY_BREAK
-case 107:
+case 104:
 YY_RULE_SETUP
-#line 299 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 304 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, LShr, LSHR); }
        YY_BREAK
-case 108:
+case 105:
 YY_RULE_SETUP
-#line 300 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 305 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, AShr, ASHR); }
        YY_BREAK
-case 109:
+case 106:
 YY_RULE_SETUP
-#line 301 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 306 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, VAArg , VAARG); }
        YY_BREAK
-case 110:
+case 107:
 YY_RULE_SETUP
-#line 302 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 307 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(TermOpVal, Ret, RET); }
        YY_BREAK
-case 111:
+case 108:
 YY_RULE_SETUP
-#line 303 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 308 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(TermOpVal, Br, BR); }
        YY_BREAK
-case 112:
+case 109:
 YY_RULE_SETUP
-#line 304 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 309 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(TermOpVal, Switch, SWITCH); }
        YY_BREAK
-case 113:
+case 110:
 YY_RULE_SETUP
-#line 305 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 310 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(TermOpVal, Invoke, INVOKE); }
        YY_BREAK
-case 114:
+case 111:
 YY_RULE_SETUP
-#line 306 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 311 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(TermOpVal, Unwind, UNWIND); }
        YY_BREAK
-case 115:
+case 112:
 YY_RULE_SETUP
-#line 307 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 312 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(TermOpVal, Unreachable, UNREACHABLE); }
        YY_BREAK
-case 116:
+case 113:
 YY_RULE_SETUP
-#line 309 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 314 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(MemOpVal, Malloc, MALLOC); }
        YY_BREAK
-case 117:
+case 114:
 YY_RULE_SETUP
-#line 310 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 315 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(MemOpVal, Alloca, ALLOCA); }
        YY_BREAK
-case 118:
+case 115:
 YY_RULE_SETUP
-#line 311 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 316 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(MemOpVal, Free, FREE); }
        YY_BREAK
-case 119:
+case 116:
 YY_RULE_SETUP
-#line 312 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 317 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(MemOpVal, Load, LOAD); }
        YY_BREAK
-case 120:
+case 117:
 YY_RULE_SETUP
-#line 313 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 318 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(MemOpVal, Store, STORE); }
        YY_BREAK
-case 121:
+case 118:
 YY_RULE_SETUP
-#line 314 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 319 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(MemOpVal, GetElementPtr, GETELEMENTPTR); }
        YY_BREAK
-case 122:
+case 119:
 YY_RULE_SETUP
-#line 316 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 321 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, ExtractElement, EXTRACTELEMENT); }
        YY_BREAK
-case 123:
+case 120:
 YY_RULE_SETUP
-#line 317 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 322 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, InsertElement, INSERTELEMENT); }
        YY_BREAK
-case 124:
+case 121:
 YY_RULE_SETUP
-#line 318 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 323 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, ShuffleVector, SHUFFLEVECTOR); }
        YY_BREAK
-case 125:
+case 122:
 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 @@ YY_RULE_SETUP
                   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 @@ YY_RULE_SETUP
                   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 @@ YY_RULE_SETUP
                    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 @@ YY_RULE_SETUP
                   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 @@ YY_RULE_SETUP
                   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 @@ YY_RULE_SETUP
                   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 @@ case YY_STATE_EOF(INITIAL):
                   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 @@ static yy_state_type yy_get_previous_state()
                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 @@ yy_state_type yy_current_state;
        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 @@ int main()
        return 0;
        }
 #endif
-#line 394 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 399 "/proj/llvm/llvm-1/lib/AsmParser/Lexer.l"
 
index e13c56b7e7c48f235750811cab123470acb2b705..9f1eddd0f47bd42855b45b1d82537ae2ab20881f 100644 (file)
@@ -165,6 +165,8 @@ StringConstant \"[^\"]*\"
 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 @@ x86_fastcallcc  { return X86_FASTCALLCC_TOK; }
 
 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); }
index e13c56b7e7c48f235750811cab123470acb2b705..9f1eddd0f47bd42855b45b1d82537ae2ab20881f 100644 (file)
@@ -165,6 +165,8 @@ StringConstant \"[^\"]*\"
 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 @@ x86_fastcallcc  { return X86_FASTCALLCC_TOK; }
 
 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); }
index 70910184427f5c43902d152791307300648fc654..2e540c350cc130a969021a3c5ba518dfb9c76083 100644 (file)
      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.  */
 #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 @@ Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
 #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 @@ typedef union YYSTYPE {
   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 @@ typedef union YYSTYPE {
 
 
 /* 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 @@ union yyalloc
 /* 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 @@ static const unsigned char yytranslate[] =
        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 @@ static const unsigned char yytranslate[] =
       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 @@ static const unsigned short int yyprhs[] =
       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 @@ static const unsigned short int yyrline[] =
     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 unsigned short int yyrline[] =
 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 @@ static const unsigned short int yytoknum[] =
      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 @@ static const unsigned char yyr2[] =
        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 @@ static const unsigned char yyr2[] =
    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,
-       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,     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,
+      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,     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,
-     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,
+       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,
-     394,   395,     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,
-       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,
+     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,
-       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,
+      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,     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,
-      -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,    -1,    -1,
-      -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,   139,
-      -1,    -1,   142,    44,    -1,   145,    -1,   147,   148,    -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,
+      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,    -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,
-      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,
+      -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,
-      35,    36,    -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,    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,
-      -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,
+     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,
-      -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,
+     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,
-      -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 @@ yyreduce:
   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 @@ yyreduce:
     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 73:
-#line 1085 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 70:
+#line 1085 "/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"
+  case 71:
+#line 1086 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
     break;
 
-  case 75:
-#line 1087 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 72:
+#line 1087 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
     break;
 
-  case 76:
-#line 1091 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 73:
+#line 1091 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
     break;
 
-  case 77:
-#line 1092 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 74:
+#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,52 +3272,52 @@ yyreduce:
                  ;}
     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 98:
-#line 1135 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  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)))
@@ -3355,13 +3326,13 @@ yyreduce:
 ;}
     break;
 
-  case 99:
-#line 1141 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 96:
+#line 1141 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = 0; ;}
     break;
 
-  case 100:
-#line 1142 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  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)))
@@ -3370,8 +3341,8 @@ yyreduce:
 ;}
     break;
 
-  case 101:
-#line 1150 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 98:
+#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 @@ yyreduce:
 ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
 ;}
     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,24 +4422,24 @@ yyreduce:
   ;}
     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 201:
-#line 1962 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 195:
+#line 1962 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
           CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
           free((yyvsp[0].StrVal));
@@ -4476,8 +4447,8 @@ yyreduce:
         ;}
     break;
 
-  case 202:
-#line 1967 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 196:
+#line 1967 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
           CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
           free((yyvsp[0].StrVal));
@@ -4485,20 +4456,20 @@ yyreduce:
         ;}
     break;
 
-  case 203:
-#line 1972 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 197:
+#line 1972 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
     {
           CHECK_FOR_ERROR
         ;}
     break;
 
-  case 207:
-#line 1982 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 201:
+#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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
 ;}
     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 @@ yyreduce:
 ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
 ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
   ;}
     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 @@ yyreduce:
     }
 
 /* Line 1126 of yacc.c.  */
-#line 5638 "llvmAsmParser.tab.c"
+#line 5609 "llvmAsmParser.tab.c"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -5902,7 +5873,7 @@ yyreturn:
 }
 
 
-#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
index 645b041ff0c5029fd338de296fdb1a1d0f5302db..5433242db5e2ff404e2266d7212472ee6eec5ac0 100644 (file)
      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.  */
 #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 @@ typedef union YYSTYPE {
   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
index dbd61884a758bd8b98f0a82b15e474b19817e641..57ab7c5ec0d82475681803952055755901df857c 100644 (file)
@@ -961,7 +961,7 @@ Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
 // 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 @@ FPredicates
 
 // 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 @@ GlobalVarAttribute : SectionString {
 
 // 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 @@ Types
      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 @@ MemoryInst : MALLOC Types OptCAlign {
     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 @@ MemoryInst : MALLOC Types OptCAlign {
     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);
index dbd61884a758bd8b98f0a82b15e474b19817e641..57ab7c5ec0d82475681803952055755901df857c 100644 (file)
@@ -961,7 +961,7 @@ Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
 // 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 @@ FPredicates
 
 // 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 @@ GlobalVarAttribute : SectionString {
 
 // 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 @@ Types
      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 @@ MemoryInst : MALLOC Types OptCAlign {
     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 @@ MemoryInst : MALLOC Types OptCAlign {
     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);
index 787d000c231697c2933866d5e63564e47bebf977..ce3826cb249204028ecdd8e2c5c9113e90160381 100644 (file)
@@ -189,7 +189,7 @@ inline bool BytecodeReader::hasImplicitNull(unsigned TyID) {
 /// 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 @@ void BytecodeReader::ParseInstruction(std::vector<unsigned> &Oprnds,
       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 @@ void BytecodeReader::ParseInstruction(std::vector<unsigned> &Oprnds,
       
       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 @@ void BytecodeReader::ParseInstruction(std::vector<unsigned> &Oprnds,
     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 @@ void BytecodeReader::ParseInstruction(std::vector<unsigned> &Oprnds,
     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 @@ void BytecodeReader::ParseInstruction(std::vector<unsigned> &Oprnds,
         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 @@ void BytecodeReader::ParseInstruction(std::vector<unsigned> &Oprnds,
         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 @@ void BytecodeReader::ParseInstruction(std::vector<unsigned> &Oprnds,
         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 @@ void BytecodeReader::ParseInstruction(std::vector<unsigned> &Oprnds,
         // 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 @@ void BytecodeReader::ParseValueSymbolTable(Function *CurrentFunction,
       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 @@ const Type *BytecodeReader::ParseType() {
     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 @@ const Type *BytecodeReader::ParseType() {
     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 @@ Value *BytecodeReader::ParseConstantPoolValue(unsigned TypeID) {
   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: {
index 677c39f99f4f0f1a63d2b853a13747f18a09b70c..3e64f2d027d59890e6b2550f245c0b49b5198872 100644 (file)
@@ -415,6 +415,20 @@ private:
   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
 /// @{
index fdf7174b8551becb917eba948de3a3dadde6c6ac..2d4cd0c4cb4c15f9cecb6212085cefd60c91b502 100644 (file)
 #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 @@ SlotCalculator::SlotCalculator(const Function *M ) {
   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 @@ unsigned SlotCalculator::getOrCreateCompactionTableSlot(const Value *V) {
 /// 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 @@ void SlotCalculator::buildCompactionTable(const Function *F) {
     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 @@ void SlotCalculator::buildCompactionTable(const Function *F) {
     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 @@ void SlotCalculator::pruneCompactionTable() {
 /// 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 @@ int SlotCalculator::doInsertValue(const Value *D) {
   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 @@ int SlotCalculator::doInsertType(const Type *Ty) {
   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;
 }
-
index 405c0edbd3a9678901cce91c23abb2e63435a3a9..de91d2e8f5a1a087cff9f3959e58a65551cd00a9 100644 (file)
@@ -177,6 +177,9 @@ private:
   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
index 9a04428007901b8b93d0ca7c370b8e14eecccc38..c7003cdd7f263d5c7df82feaa4e11f7831051647 100644 (file)
@@ -200,16 +200,18 @@ inline BytecodeBlock::~BytecodeBlock() { // Do backpatch when block goes out
 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::outputType(const Type *T) {
 }
 
 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 @@ void BytecodeWriter::outputConstant(const Constant *CPV) {
   }
 
   switch (CPV->getType()->getTypeID()) {
-  case Type::Int1TyID:    // Boolean Types
-    if (cast<ConstantInt>(CPV)->getZExtValue())
-      output_vbr(1U);
-    else
-      output_vbr(0U);
-    break;
-
-  case Type::Int8TyID:   // Unsigned integer types...
-  case Type::Int16TyID:
-  case Type::Int32TyID:
-  case Type::Int64TyID:
-    output_vbr(cast<ConstantInt>(CPV)->getZExtValue());
+  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::ArrayTyID: {
     const ConstantArray *CPA = cast<ConstantArray>(CPV);
@@ -484,12 +488,12 @@ void BytecodeWriter::outputInstructionFormat0(const Instruction *I,
       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 @@ void BytecodeWriter::outputInstruction(const Instruction &I) {
       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];
         }
index d7a134e46df656303d90d3f09e6ad5940e20e33f..aba97c1cfc8f33f43e6f8a3b682a9fe0401964e3 100644 (file)
@@ -459,7 +459,7 @@ void AsmPrinter::EmitConstantValueOnly(const Constant *CV) {
       // 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::printSetLabel(unsigned uid, unsigned uid2,
 void AsmPrinter::printDataDirective(const Type *type) {
   const TargetData *TD = TM.getTargetData();
   switch (type->getTypeID()) {
-  case Type::Int1TyID:
-  case Type::Int8TyID:
-    O << TAI->getData8bitsDirective();
-    break;
-  case Type::Int16TyID: 
-    O << TAI->getData16bitsDirective();
+  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::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.");
index af870e4e3b33200cd2a80d7b29bc3dcd097f95f0..49c7457e41edcf4e622a47ea44a8d3b128d4382c 100644 (file)
@@ -708,8 +708,7 @@ void MachOWriter::InitMem(const Constant *C, void *Addr, intptr_t Offset,
     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 @@ void MachOWriter::InitMem(const Constant *C, void *Addr, intptr_t Offset,
       }
     } 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 @@ void MachOWriter::InitMem(const Constant *C, void *Addr, intptr_t Offset,
         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 @@ void MachOWriter::InitMem(const Constant *C, void *Addr, intptr_t Offset,
         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 @@ void MachOWriter::InitMem(const Constant *C, void *Addr, intptr_t Offset,
     } 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)) {
index e5f9ea1f40e71e0328532b996f9865f854ca23d4..26f51d0502d1a4d78930cba2ed0f8cb31844461d 100644 (file)
@@ -296,6 +296,28 @@ void *ExecutionEngine::getPointerToGlobal(const GlobalValue *GV) {
   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 @@ GenericValue ExecutionEngine::getConstantValue(const Constant *C) {
       // 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 @@ GenericValue ExecutionEngine::getConstantValue(const Constant *C) {
   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 @@ void ExecutionEngine::StoreValueToMemory(GenericValue Val, GenericValue *Ptr,
                                          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 @@ void ExecutionEngine::StoreValueToMemory(GenericValue Val, GenericValue *Ptr,
     }
   } 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 ExecutionEngine::LoadValueFromMemory(GenericValue *Ptr,
   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 @@ void ExecutionEngine::emitGlobals() {
       }
     }
     
-    // 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()) {
index 0a0fbce134f1131f4356cffa75d3644cc9716af0..681fb67b9223c41958c79ec38198197e34acdca3 100644 (file)
@@ -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 @@ static GenericValue executeSelectInst(GenericValue Src1, GenericValue Src2,
 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 @@ void Interpreter::initializeExecutionEngine() {
 #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 @@ static GenericValue executeSubInst(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:
@@ -228,10 +291,7 @@ static GenericValue executeMulInst(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:
@@ -241,37 +301,17 @@ static GenericValue executeMulInst(GenericValue Src1, GenericValue Src2,
   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 @@ static GenericValue executeFDivInst(GenericValue Src1, GenericValue Src2,
     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 executeFDivInst(GenericValue Src1, GenericValue Src2,
 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 executeFRemInst(GenericValue Src1, GenericValue Src2,
 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 @@ static GenericValue executeICMP_EQ(GenericValue Src1, GenericValue Src2,
                                    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 @@ static GenericValue executeICMP_NE(GenericValue Src1, GenericValue Src2,
                                    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 @@ static GenericValue executeICMP_ULT(GenericValue Src1, GenericValue Src2,
                                     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 @@ static GenericValue executeICMP_SLT(GenericValue Src1, GenericValue Src2,
                                     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 @@ static GenericValue executeICMP_UGT(GenericValue Src1, GenericValue Src2,
                                     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 @@ static GenericValue executeICMP_SGT(GenericValue Src1, GenericValue Src2,
                                     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 @@ static GenericValue executeICMP_ULE(GenericValue Src1, GenericValue Src2,
                                     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 @@ static GenericValue executeICMP_SLE(GenericValue Src1, GenericValue Src2,
                                     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 @@ static GenericValue executeICMP_UGE(GenericValue Src1, GenericValue Src2,
                                     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 @@ static GenericValue executeICMP_SGE(GenericValue Src1, GenericValue Src2,
                                     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 @@ void Interpreter::visitICmpInst(ICmpInst &I) {
   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 @@ void Interpreter::visitICmpInst(ICmpInst &I) {
 #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 @@ static GenericValue executeFCMP_NE(GenericValue Src1, GenericValue Src2,
     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 @@ void Interpreter::visitFCmpInst(FCmpInst &I) {
   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 @@ static GenericValue executeCmpInst(unsigned predicate, GenericValue Src1,
   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 @@ GenericValue Interpreter::executeGEPOperation(Value *Ptr, gep_type_iterator I,
       // 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 @@ void Interpreter::visitCallSite(CallSite CS) {
     // 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 @@ void Interpreter::visitCallSite(CallSite CS) {
   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 executeShlInst(GenericValue Src1, GenericValue Src2,
 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 executeLShrInst(GenericValue Src1, GenericValue Src2,
 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 @@ void Interpreter::visitAShr(ShiftInst &I) {
   SetValue(&I, Dest, SF);
 }
 
-#define IMPLEMENT_CAST_START \
-  switch (DstTy->getTypeID()) {
-
-#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();                                    \
-  }
+#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;          
+
+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");
+
+  // 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;
+
+  INTEGER_ASSIGN(Dest, DBitWidth, MaskedVal);
+  return Dest;
+}
 
-GenericValue Interpreter::executeCastOperation(Instruction::CastOps opcode,
-                                               Value *SrcVal, const Type *DstTy,
-                                               ExecutionContext &SF) {
+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;
+}
 
-  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) {
+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.
-    SrcTy = Type::Int64Ty;
-    Src.Int64Val = 0 - Src.Int1Val;
-  }
+    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;
+}
 
-  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();
-  }
+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;
 }
 
-void Interpreter::visitCastInst(CastInst &I) {
+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, 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, executeCastOperation(I.getOpcode(), I.getOperand(0), 
-                                    I.getType(), SF), SF);
+  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 @@ void Interpreter::visitVAArgInst(VAArgInst &I) {
    .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();
index 52d3cfa684d1eaab36046874fb44e0a1ea4ec0ca..b1c2ee4b6a84f5e0205a44e33ab7655402bcf131 100644 (file)
@@ -41,11 +41,15 @@ static Interpreter *TheInterpreter;
 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';
index 559c7dc50579767d4f767090da4af37abd71221a..c62249bdb93f5aa8e8a56080ffeac9e92856530c 100644 (file)
@@ -144,7 +144,18 @@ public:
   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 @@ private:  // Helper functions
   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);
index 13ee7199d9f908d3abc9a539a6f94abc89bafc73..7fd62cc6e0c9a672b839c7065c42e63b3abeffbe 100644 (file)
@@ -142,22 +142,25 @@ GenericValue JIT::runFunction(Function *F,
     GenericValue rv;
     switch (RetTy->getTypeID()) {
     default: assert(0 && "Unknown return type for function call!");
-    case Type::Int1TyID:
-      rv.Int1Val = ((bool(*)())(intptr_t)FPtr)();
-      return rv;
-    case Type::Int8TyID:
-      rv.Int8Val = ((char(*)())(intptr_t)FPtr)();
-      return rv;
-    case Type::Int16TyID:
-      rv.Int16Val = ((short(*)())(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::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 @@ GenericValue JIT::runFunction(Function *F,
     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:
index 4e298898b121eb9e2a6c5bb297982731340be475..753ebcc955ffb9ba82269acb3ecf47eaaeb45c3d 100644 (file)
@@ -111,6 +111,12 @@ static bool RecursiveResolveTypesI(const PATypeHolder &DestTy,
 
   // 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 @@ static Value *RemapOperand(const Value *In,
   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)) {
index 23465c5f6e4d5d5091e47e319246981266883fd2..a0b4ceb7f198a9400a10a57084231df749a24f2b 100644 (file)
@@ -118,7 +118,7 @@ namespace {
                             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 @@ void CWriter::printStructReturnPointerFunctionType(std::ostream &Out,
 }
 
 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 @@ CWriter::printPrimitiveType(std::ostream &Out, const Type *Ty, bool isSigned,
 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 @@ void CWriter::printCast(unsigned opc, const Type *SrcTy, const Type *DstTy) {
     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 @@ void CWriter::printCast(unsigned opc, const Type *SrcTy, const Type *DstTy) {
     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 @@ void CWriter::printConstant(Constant *CPV) {
       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 @@ bool CWriter::printConstExprCast(const ConstantExpr* CE) {
   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 @@ void CWriter::printConstantWithCast(Constant* CPV, unsigned Opcode) {
   // operand.
   if (shouldCast) {
     Out << "((";
-    printPrimitiveType(Out, OpTy, typeIsSigned);
+    printSimpleType(Out, OpTy, typeIsSigned);
     Out << ")";
     printConstant(CPV);
     Out << ")";
@@ -1120,14 +1127,14 @@ bool CWriter::writeInstructionCast(const Instruction &I) {
   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 @@ void CWriter::writeOperandWithCast(Value* Operand, unsigned Opcode) {
   // operand.
   if (shouldCast) {
     Out << "((";
-    printPrimitiveType(Out, OpTy, castIsSigned);
+    printSimpleType(Out, OpTy, castIsSigned);
     Out << ")";
     writeOperand(Operand);
     Out << ")";
@@ -1222,7 +1229,7 @@ void CWriter::writeOperandWithCast(Value* Operand, ICmpInst::Predicate predicate
   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::printModuleTypes(const TypeSymbolTable &TST) {
 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 @@ static const char * getFloatBitCastField(const Type *Ty) {
   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";
+    }
   }
 }
 
index 59dc0dca50ace10ab877640b955e1c9869d9f20b..c0b0670b96946bcc7387c9ec22b8066633a68613 100644 (file)
@@ -241,12 +241,21 @@ static inline void getTypeInfo(const Type *Ty, const TargetData *TD,
                                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:
index 8c212b62247580366cd901f616040f542d1cdb67..9249b8d4ca34a7f242cd3ccb33c72be546bb7dc8 100644 (file)
@@ -176,12 +176,18 @@ bool X86TargetAsmInfo::LowerToBSwap(CallInst *CI) const {
   
   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();
index 871bcff1585bad7f74d1fd80998e945f68710e26..b599e5a089c8d7b66494e35febc667b3c21e7f35 100644 (file)
@@ -52,11 +52,14 @@ ModulePass *llvm::createDeadTypeEliminationPass() {
 //
 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;
 }
index d2ab638288ca4c8f0e6ce0bbb026f83b0db9f3a7..70821f8f90133a9ae8613d29612720cfcd5021b7 100644 (file)
@@ -1820,13 +1820,17 @@ public:
     // 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);
index a5a9f69c2a69a34d62b3fcbd5e3fbb9783459dd1..0643e75ab34beacd87d94dbefd13f909d441beff 100644 (file)
@@ -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 @@ void IndVarSimplify::runOnLoop(Loop *L) {
   // 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
index c039b3999a3bdd3ec69a9bfcc11a6a84b40222fb..aecc9a93ef1aa6ad401899dd3bb6c6caf93dc8a5 100644 (file)
@@ -339,12 +339,12 @@ static bool isOnlyUse(Value *V) {
 // 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 @@ static ConstantInt *SubOne(ConstantInt *C) {
                                          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 @@ Instruction *InstCombiner::MatchBSwap(BinaryOperator &I) {
   /// 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 @@ Instruction *InstCombiner::visitSelectInst(SelectInst &SI) {
   }
 
   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 @@ Instruction *InstCombiner::visitSelectInst(SelectInst &SI) {
                                              "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 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
             }
           } 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 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
       // 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 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
             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 @@ static void AddReachableCodeToWorklist(BasicBlock *BB,
   // 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);
index 2bc000440ae1380f548c51c0e5666521428c7d1f..1ebc1cf4a9e0b098c74fe17e29a7d7e011158593 100644 (file)
@@ -1611,7 +1611,7 @@ bool IPSCCP::runOnModule(Module &M) {
         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)) {
index 00e58180bd025b27f132d5938dfa8e8278861008..a92459b8094111462d1cf15c5c76082c4c341f8e 100644 (file)
@@ -444,7 +444,8 @@ static bool MergeInType(const Type *In, const Type *&Accum,
     // 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 @@ void SROA::ConvertUsesToScalar(Value *Ptr, AllocaInst *NewAI, unsigned Offset) {
           } 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()));
index 138ab3520fd37d0714176d1dc5ced65a9bb275aa..4730c3166b43b04bdd96ae67c0d7003ebe516c3c 100644 (file)
@@ -222,6 +222,7 @@ static void fillTypeNameTable(const Module *M,
     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 @@ static void calcTypeName(const Type *Ty,
                          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 @@ static void calcTypeName(const Type *Ty,
   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 @@ static std::ostream &printTypeInt(std::ostream &Out, const Type *Ty,
   // 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 @@ private:
 /// 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;
index 1f5aeb35caf8ccffb4d0ad3c8860e9e53a6eb923..8aeca7b47a51b747351c4cce1f3b70ec2489032f 100644 (file)
@@ -1364,22 +1364,6 @@ Constant *llvm::ConstantFoldGetElementPtr(const Constant *C,
       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))) {
index 73490912a5f47dbd60b165123edca8a09a90d236..c2332c6e6146b4d46b1d59335dc58ce90b603c72 100644 (file)
@@ -92,25 +92,32 @@ bool Constant::canTrap() const {
 // 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 @@ Constant *Constant::getNullValue(const Type *Ty) {
 
 // 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 @@ getWithOperands(const std::vector<Constant*> &Ops) const {
 //                      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::getTruncOrBitCast(Constant *C, const Type *Ty) {
 
 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);
index b9a4770b3d06405f82e9800f8db9fd9778d4c377..9486fb86d7d36a6097053f37b3eaf6994454164f 100644 (file)
@@ -1528,7 +1528,7 @@ CastInst *CastInst::createPointerCast(Value *S, const Type *Ty,
                                       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 @@ CastInst *CastInst::createPointerCast(Value *S, const Type *Ty,
                                       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 @@ CmpInst::CmpInst(OtherOps op, unsigned short predicate, Value *LHS, Value *RHS,
     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 @@ CmpInst::CmpInst(OtherOps op, unsigned short predicate, Value *LHS, Value *RHS,
     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");
index 8ab1afd34380e2955b7e95bc86ed34e09457a9b7..b70cd5f4312d2660a0dcf3689028dcccb5a2cbf2 100644 (file)
@@ -64,7 +64,7 @@ static ManagedStatic<std::map<const Type*,
                               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 @@ Type::Type(const char *Name, TypeID id)
 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 @@ bool Type::canLosslesslyBitCastTo(const Type *Ty) const {
   // 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 @@ bool Type::isSizedDerivedType() const {
   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 @@ static std::string getTypeDescription(const Type *Ty,
   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 @@ static std::string getTypeDescription(const Type *Ty,
     }
     break;
   }
+  case Type::PackedStructTyID:
   case Type::StructTyID: {
     const StructType *STy = cast<StructType>(Ty);
     if (STy->isPacked())
@@ -353,7 +335,6 @@ const Type *StructType::getTypeAtIndex(const Value *V) const {
   return ContainedTys[Idx];
 }
 
-
 //===----------------------------------------------------------------------===//
 //                          Primitive 'Type' data
 //===----------------------------------------------------------------------===//
@@ -365,17 +346,26 @@ const Type *StructType::getTypeAtIndex(const Value *V) const {
     };                                                 \
   }                                                    \
   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 @@ static bool TypesEqual(const Type *Ty, const Type *Ty2,
   // 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 @@ static unsigned getSubElementHash(const Type *Ty) {
     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 @@ public:
 // 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 @@ void PointerType::typeBecameConcrete(const DerivedType *AbsTy) {
 }
 
 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 {
index 4431c81d294c0a9ca01bca4853b86cf834a571f8..05b8514d9d629102fa9cc1b1d98f9e0fbd5e5edc 100644 (file)
@@ -743,7 +743,7 @@ void Verifier::visitICmpInst(ICmpInst& IC) {
   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 @@ void Verifier::VerifyIntrinsicPrototype(Function *F, ...) {
     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 @@ void Verifier::VerifyIntrinsicPrototype(Function *F, ...) {
       break;
     }
 
-    // If this is a packed argument, verify the number and type of elements.
-    if (TypeID == Type::PackedTyID) {
+    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);
-      if (va_arg(VA, int) != PTy->getElementType()->getTypeID()) {
-        CheckFailed("Intrinsic prototype has incorrect vector element type!",F);
+      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;
       }
     }
   }
index 1f6cbaf2885e6e71d9546b7e28aff1b43f6a3b6d..82997cebcc5057b935802584663c8def9bffbeef 100644 (file)
@@ -161,28 +161,25 @@ sanitize(std::string& str) {
       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 @@ std::string
 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 @@ CppWriter::printCppName(const Value* val) {
 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 @@ CppWriter::printTypes(const Module* M) {
 
     // 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) << ");";
index fabb7e7714304c637d94c4d3e603263931f1af83..7cd03751de38b4890e713a9ff751b01308af002a 100644 (file)
@@ -110,12 +110,14 @@ EmitIntrinsicToNameTable(const std::vector<CodeGenIntrinsic> &Ints,
 
 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") << ", ";
   }
 }