[llvm-commits] CVS: llvm/lib/AsmParser/llvmAsmParser.cpp.cvs llvmAsmParser.h.cvs llvmAsmParser.y.cvs

Reid Spencer reid at x10sys.com
Mon Nov 27 23:29:58 PST 2006



Changes in directory llvm/lib/AsmParser:

llvmAsmParser.cpp.cvs updated: 1.26 -> 1.27
llvmAsmParser.h.cvs updated: 1.21 -> 1.22
llvmAsmParser.y.cvs updated: 1.27 -> 1.28
---
Log message:

Regenerate.


---
Diffs of the changes:  (+672 -580)

 llvmAsmParser.cpp.cvs |  845 ++++++++++++++++++++++++++------------------------
 llvmAsmParser.h.cvs   |   18 -
 llvmAsmParser.y.cvs   |  389 ++++++++++++-----------
 3 files changed, 672 insertions(+), 580 deletions(-)


Index: llvm/lib/AsmParser/llvmAsmParser.cpp.cvs
diff -u llvm/lib/AsmParser/llvmAsmParser.cpp.cvs:1.26 llvm/lib/AsmParser/llvmAsmParser.cpp.cvs:1.27
--- llvm/lib/AsmParser/llvmAsmParser.cpp.cvs:1.26	Sun Nov 26 19:05:09 2006
+++ llvm/lib/AsmParser/llvmAsmParser.cpp.cvs	Tue Nov 28 01:29:44 2006
@@ -316,7 +316,7 @@
 
 
 /* Copy the first part of user declarations.  */
-#line 14 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 14 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
 
 #include "ParserInternals.h"
 #include "llvm/CallingConv.h"
@@ -389,8 +389,8 @@
   Module *CurrentModule;
   std::map<const Type *, ValueList> Values; // Module level numbered definitions
   std::map<const Type *,ValueList> LateResolveValues;
-  std::vector<TypeInfo>    Types;
-  std::map<ValID, TypeInfo> LateResolveTypes;
+  std::vector<PATypeHolder>    Types;
+  std::map<ValID, PATypeHolder> LateResolveTypes;
 
   /// PlaceHolderInfo - When temporary placeholder objects are created, remember
   /// how they were referenced and on which line of the input they came from so
@@ -523,7 +523,7 @@
   case ValID::NumberVal:               // Is it a numbered definition?
     // Module constants occupy the lowest numbered slots...
     if ((unsigned)D.Num < CurModule.Types.size())
-      return CurModule.Types[(unsigned)D.Num].type->get();
+      return CurModule.Types[(unsigned)D.Num];
     break;
   case ValID::NameVal:                 // Is it a named definition?
     if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) {
@@ -553,16 +553,14 @@
     }
   }
 
-  std::map<ValID, TypeInfo>::iterator I =CurModule.LateResolveTypes.find(D);
+  std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
   if (I != CurModule.LateResolveTypes.end())
-    return I->second.type->get();
+    return I->second;
 
-  TypeInfo TI;
-  TI.type = new PATypeHolder(OpaqueType::get());
-  TI.signedness = isSignless;
-  CurModule.LateResolveTypes.insert(std::make_pair(D, TI));
-  return TI.type->get();
- }
+  Type *Typ = OpaqueType::get();
+  CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
+  return Typ;
+}
 
 static Value *lookupInSymbolTable(const Type *Ty, const std::string &Name) {
   SymbolTable &SymTab =
@@ -865,10 +863,10 @@
   if (Name) D = ValID::create(Name);
   else      D = ValID::create((int)CurModule.Types.size());
 
-  std::map<ValID, TypeInfo>::iterator I =
+  std::map<ValID, PATypeHolder>::iterator I =
     CurModule.LateResolveTypes.find(D);
   if (I != CurModule.LateResolveTypes.end()) {
-    ((DerivedType*)I->second.type->get())->refineAbstractTypeTo(ToTy);
+    ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
     CurModule.LateResolveTypes.erase(I);
   }
 }
@@ -1362,7 +1360,7 @@
 #endif
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 1040 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1038 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
 typedef union YYSTYPE {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
@@ -1370,19 +1368,17 @@
   llvm::BasicBlock                       *BasicBlockVal;
   llvm::TerminatorInst                   *TermInstVal;
   llvm::Instruction                      *InstVal;
-  llvm::Constant                         *ConstVal;
-
-  TypeInfo                                TypeVal;
-  llvm::Value                            *ValueVal;
+  ConstInfo                              ConstVal;
+  TypeInfo                               TypeVal;
+  ValueInfo                              ValueVal;
 
   std::vector<std::pair<TypeInfo,char*> >*ArgList;
-  std::vector<llvm::Value*>              *ValueList;
+  std::vector<ValueInfo>                 *ValueList;
   std::list<TypeInfo>                    *TypeList;
   // Represent the RHS of PHI node
-  std::list<std::pair<llvm::Value*,
-                      llvm::BasicBlock*> > *PHIList;
+  std::list<std::pair<llvm::Value*, llvm::BasicBlock*> > *PHIList;
   std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
-  std::vector<llvm::Constant*>           *ConstVector;
+  std::vector<ConstInfo>                 *ConstVector;
 
   llvm::GlobalValue::LinkageTypes         Linkage;
   int64_t                           SInt64Val;
@@ -1403,7 +1399,7 @@
   llvm::Module::Endianness          Endianness;
 } YYSTYPE;
 /* Line 196 of yacc.c.  */
-#line 1407 "llvmAsmParser.tab.c"
+#line 1403 "llvmAsmParser.tab.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -1415,7 +1411,7 @@
 
 
 /* Line 219 of yacc.c.  */
-#line 1419 "llvmAsmParser.tab.c"
+#line 1415 "llvmAsmParser.tab.c"
 
 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
 # define YYSIZE_T __SIZE_TYPE__
@@ -1755,33 +1751,33 @@
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short int yyrline[] =
 {
-       0,  1168,  1168,  1169,  1177,  1178,  1188,  1188,  1188,  1188,
-    1188,  1188,  1188,  1188,  1188,  1189,  1189,  1189,  1190,  1190,
-    1190,  1190,  1190,  1190,  1191,  1191,  1191,  1191,  1191,  1191,
-    1192,  1192,  1192,  1192,  1192,  1192,  1193,  1193,  1193,  1197,
-    1197,  1197,  1197,  1198,  1198,  1198,  1198,  1199,  1199,  1200,
-    1200,  1203,  1207,  1212,  1213,  1214,  1215,  1216,  1217,  1218,
-    1219,  1221,  1222,  1223,  1224,  1225,  1226,  1227,  1228,  1237,
-    1238,  1244,  1245,  1253,  1261,  1262,  1267,  1268,  1269,  1274,
-    1288,  1288,  1292,  1292,  1297,  1308,  1308,  1308,  1308,  1308,
-    1308,  1308,  1309,  1309,  1309,  1309,  1309,  1309,  1310,  1315,
-    1319,  1328,  1337,  1352,  1359,  1373,  1384,  1389,  1401,  1406,
-    1412,  1413,  1419,  1425,  1436,  1462,  1476,  1506,  1532,  1553,
-    1566,  1576,  1581,  1642,  1649,  1658,  1664,  1670,  1674,  1678,
-    1686,  1712,  1744,  1752,  1779,  1790,  1796,  1807,  1813,  1819,
-    1828,  1832,  1840,  1840,  1850,  1858,  1863,  1867,  1871,  1875,
-    1890,  1912,  1915,  1918,  1918,  1926,  1926,  1935,  1935,  1944,
-    1944,  1954,  1957,  1960,  1964,  1977,  1978,  1980,  1984,  1993,
-    1997,  2002,  2004,  2009,  2014,  2023,  2023,  2024,  2024,  2026,
-    2033,  2039,  2046,  2050,  2058,  2066,  2071,  2165,  2165,  2167,
-    2175,  2175,  2177,  2182,  2183,  2184,  2186,  2186,  2196,  2200,
-    2205,  2209,  2213,  2217,  2221,  2225,  2229,  2233,  2237,  2257,
-    2261,  2275,  2279,  2285,  2285,  2291,  2296,  2300,  2309,  2320,
-    2329,  2341,  2354,  2358,  2362,  2367,  2376,  2395,  2404,  2460,
-    2464,  2471,  2482,  2495,  2504,  2513,  2523,  2527,  2534,  2534,
-    2536,  2540,  2545,  2567,  2582,  2596,  2609,  2620,  2646,  2654,
-    2660,  2680,  2703,  2709,  2715,  2721,  2736,  2796,  2803,  2806,
-    2811,  2815,  2822,  2827,  2833,  2838,  2844,  2852,  2864,  2879
+       0,  1164,  1164,  1165,  1173,  1174,  1184,  1184,  1184,  1184,
+    1184,  1184,  1184,  1184,  1184,  1185,  1185,  1185,  1186,  1186,
+    1186,  1186,  1186,  1186,  1187,  1187,  1187,  1187,  1187,  1187,
+    1188,  1188,  1188,  1188,  1188,  1188,  1189,  1189,  1189,  1193,
+    1193,  1193,  1193,  1194,  1194,  1194,  1194,  1195,  1195,  1196,
+    1196,  1199,  1203,  1208,  1209,  1210,  1211,  1212,  1213,  1214,
+    1215,  1217,  1218,  1219,  1220,  1221,  1222,  1223,  1224,  1233,
+    1234,  1240,  1241,  1249,  1257,  1258,  1263,  1264,  1265,  1270,
+    1284,  1284,  1288,  1288,  1293,  1304,  1304,  1304,  1304,  1304,
+    1304,  1304,  1305,  1305,  1305,  1305,  1305,  1305,  1306,  1311,
+    1315,  1324,  1333,  1348,  1355,  1369,  1380,  1385,  1397,  1402,
+    1408,  1409,  1415,  1421,  1432,  1463,  1478,  1509,  1539,  1564,
+    1578,  1589,  1595,  1657,  1664,  1674,  1681,  1688,  1693,  1698,
+    1707,  1733,  1755,  1764,  1793,  1805,  1812,  1824,  1831,  1838,
+    1848,  1852,  1860,  1860,  1870,  1878,  1883,  1887,  1891,  1895,
+    1910,  1932,  1935,  1938,  1938,  1946,  1946,  1955,  1955,  1964,
+    1964,  1974,  1977,  1980,  1984,  1997,  1998,  2000,  2004,  2013,
+    2017,  2022,  2024,  2029,  2034,  2043,  2043,  2044,  2044,  2046,
+    2053,  2059,  2066,  2070,  2078,  2086,  2091,  2185,  2185,  2187,
+    2195,  2195,  2197,  2202,  2203,  2204,  2206,  2206,  2216,  2220,
+    2225,  2229,  2233,  2237,  2241,  2245,  2249,  2253,  2257,  2280,
+    2284,  2298,  2302,  2308,  2308,  2314,  2321,  2325,  2334,  2345,
+    2354,  2366,  2379,  2383,  2387,  2392,  2401,  2420,  2429,  2494,
+    2498,  2505,  2516,  2529,  2538,  2547,  2557,  2561,  2568,  2571,
+    2575,  2579,  2584,  2606,  2621,  2635,  2648,  2659,  2685,  2693,
+    2699,  2719,  2742,  2748,  2754,  2760,  2775,  2848,  2855,  2858,
+    2863,  2867,  2874,  2879,  2885,  2890,  2896,  2904,  2916,  2931
 };
 #endif
 
@@ -3088,7 +3084,7 @@
   switch (yyn)
     {
         case 3:
-#line 1169 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1165 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
   if ((yyvsp[0].UIntVal) > (uint32_t)INT32_MAX)     // Outside of my range!
     GEN_ERROR("Value too large for type!");
@@ -3098,7 +3094,7 @@
     break;
 
   case 5:
-#line 1178 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1174 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
   if ((yyvsp[0].UInt64Val) > (uint64_t)INT64_MAX)     // Outside of my range!
     GEN_ERROR("Value too large for type!");
@@ -3108,7 +3104,7 @@
     break;
 
   case 51:
-#line 1203 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1199 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.StrVal) = (yyvsp[-1].StrVal);
     CHECK_FOR_ERROR
@@ -3116,7 +3112,7 @@
     break;
 
   case 52:
-#line 1207 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1203 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.StrVal) = 0;
     CHECK_FOR_ERROR
@@ -3124,82 +3120,82 @@
     break;
 
   case 53:
-#line 1212 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1208 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
     break;
 
   case 54:
-#line 1213 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1209 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
     break;
 
   case 55:
-#line 1214 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1210 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
     break;
 
   case 56:
-#line 1215 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1211 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
     break;
 
   case 57:
-#line 1216 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1212 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
     break;
 
   case 58:
-#line 1217 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1213 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
     break;
 
   case 59:
-#line 1218 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1214 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
     break;
 
   case 60:
-#line 1219 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1215 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
     break;
 
   case 61:
-#line 1221 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1217 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::C; ;}
     break;
 
   case 62:
-#line 1222 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1218 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::C; ;}
     break;
 
   case 63:
-#line 1223 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1219 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::CSRet; ;}
     break;
 
   case 64:
-#line 1224 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1220 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::Fast; ;}
     break;
 
   case 65:
-#line 1225 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1221 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::Cold; ;}
     break;
 
   case 66:
-#line 1226 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1222 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
     break;
 
   case 67:
-#line 1227 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1223 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
     break;
 
   case 68:
-#line 1228 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1224 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
                    if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
                      GEN_ERROR("Calling conv too large!");
@@ -3209,12 +3205,12 @@
     break;
 
   case 69:
-#line 1237 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1233 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = 0; ;}
     break;
 
   case 70:
-#line 1238 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1234 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
   (yyval.UIntVal) = (yyvsp[0].UInt64Val);
   if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
@@ -3224,12 +3220,12 @@
     break;
 
   case 71:
-#line 1244 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1240 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.UIntVal) = 0; ;}
     break;
 
   case 72:
-#line 1245 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1241 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
   (yyval.UIntVal) = (yyvsp[0].UInt64Val);
   if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
@@ -3239,7 +3235,7 @@
     break;
 
   case 73:
-#line 1253 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1249 "/proj/llvm/llvm-4/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] == '\\')
@@ -3250,27 +3246,27 @@
     break;
 
   case 74:
-#line 1261 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1257 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.StrVal) = 0; ;}
     break;
 
   case 75:
-#line 1262 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1258 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
     break;
 
   case 76:
-#line 1267 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1263 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {;}
     break;
 
   case 77:
-#line 1268 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1264 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {;}
     break;
 
   case 78:
-#line 1269 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1265 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV->setSection((yyvsp[0].StrVal));
     free((yyvsp[0].StrVal));
@@ -3279,7 +3275,7 @@
     break;
 
   case 79:
-#line 1274 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1270 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
       GEN_ERROR("Alignment must be a power of two!");
@@ -3289,7 +3285,7 @@
     break;
 
   case 81:
-#line 1288 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1284 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { 
     (yyval.TypeVal).type = new PATypeHolder((yyvsp[0].TypeVal).type->get());
     (yyval.TypeVal).signedness = (yyvsp[0].TypeVal).signedness;
@@ -3297,7 +3293,7 @@
     break;
 
   case 83:
-#line 1292 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1288 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { 
     (yyval.TypeVal).type = new PATypeHolder((yyvsp[0].TypeVal).type->get()); 
     (yyval.TypeVal).signedness = (yyvsp[0].TypeVal).signedness;
@@ -3305,7 +3301,7 @@
     break;
 
   case 84:
-#line 1297 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1293 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     if (!UpRefs.empty())
       GEN_ERROR("Invalid upreference in type: " + 
@@ -3316,7 +3312,7 @@
     break;
 
   case 98:
-#line 1310 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1306 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeVal).type = new PATypeHolder(OpaqueType::get());
     (yyval.TypeVal).signedness = isSignless;
@@ -3325,7 +3321,7 @@
     break;
 
   case 99:
-#line 1315 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1311 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeVal) = (yyvsp[0].TypeVal);
     CHECK_FOR_ERROR
@@ -3333,7 +3329,7 @@
     break;
 
   case 100:
-#line 1319 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1315 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {            // Named types are also simple types...
   const Type* tmp = getTypeVal((yyvsp[0].ValIDVal));
   CHECK_FOR_ERROR
@@ -3343,7 +3339,7 @@
     break;
 
   case 101:
-#line 1328 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1324 "/proj/llvm/llvm-4/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
@@ -3356,7 +3352,7 @@
     break;
 
   case 102:
-#line 1337 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1333 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {           // Function derived type?
     std::vector<const Type*> Params;
     for (std::list<TypeInfo>::iterator I = (yyvsp[-1].TypeList)->begin(),
@@ -3375,7 +3371,7 @@
     break;
 
   case 103:
-#line 1352 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1348 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {          // Sized array type?
     (yyval.TypeVal).type = new PATypeHolder(HandleUpRefs(
       ArrayType::get((yyvsp[-1].TypeVal).type->get(), (unsigned)(yyvsp[-3].UInt64Val))));
@@ -3386,7 +3382,7 @@
     break;
 
   case 104:
-#line 1359 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1355 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {          // Packed array type?
     const llvm::Type* ElemTy = (yyvsp[-1].TypeVal).type->get();
     if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
@@ -3404,12 +3400,12 @@
     break;
 
   case 105:
-#line 1373 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1369 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {                        // Structure type?
     std::vector<const Type*> Elements;
     for (std::list<TypeInfo>::iterator I = (yyvsp[-1].TypeList)->begin(),
            E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
-      Elements.push_back(I->type->get());
+      Elements.push_back((*I).type->get());
 
     (yyval.TypeVal).type = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
     (yyval.TypeVal).signedness = isSignless;
@@ -3419,7 +3415,7 @@
     break;
 
   case 106:
-#line 1384 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1380 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {                                  // Empty structure type?
     (yyval.TypeVal).type = new PATypeHolder(StructType::get(std::vector<const Type*>()));
     (yyval.TypeVal).signedness = isSignless;
@@ -3428,19 +3424,19 @@
     break;
 
   case 107:
-#line 1389 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1385 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {                             // Pointer type?
     if ((yyvsp[-1].TypeVal).type->get() == Type::LabelTy)
       GEN_ERROR("Cannot form a pointer to a basic block");
     (yyval.TypeVal).type = new PATypeHolder(HandleUpRefs(PointerType::get((yyvsp[-1].TypeVal).type->get())));
-    (yyval.TypeVal).signedness = (yyvsp[-1].TypeVal).signedness;
+    (yyval.TypeVal).signedness = isSignless;
     delete (yyvsp[-1].TypeVal).type;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 108:
-#line 1401 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1397 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeList) = new std::list<TypeInfo>();
     (yyval.TypeList)->push_back((yyvsp[0].TypeVal));
@@ -3449,7 +3445,7 @@
     break;
 
   case 109:
-#line 1406 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1402 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back((yyvsp[0].TypeVal));
     CHECK_FOR_ERROR
@@ -3457,7 +3453,7 @@
     break;
 
   case 111:
-#line 1413 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1409 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     TypeInfo TI; 
     TI.type = new PATypeHolder(Type::VoidTy); TI.signedness = isSignless;
@@ -3467,7 +3463,7 @@
     break;
 
   case 112:
-#line 1419 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1415 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     TypeInfo TI; 
     TI.type = new PATypeHolder(Type::VoidTy); TI.signedness = isSignless;
@@ -3477,7 +3473,7 @@
     break;
 
   case 113:
-#line 1425 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1421 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TypeList) = new std::list<TypeInfo>();
     CHECK_FOR_ERROR
@@ -3485,7 +3481,7 @@
     break;
 
   case 114:
-#line 1436 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1432 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { // Nonempty unsized arr
     const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal).type->get());
     if (ATy == 0)
@@ -3501,21 +3497,26 @@
                      itostr(NumElements) + "!");
 
     // Verify all elements are correct type!
+    std::vector<Constant*> elems;
     for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
-      if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
+      if (ETy != (*(yyvsp[-1].ConstVector))[i].cnst->getType()) {
         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
                        ETy->getDescription() +"' as required!\nIt is of type '"+
-                       (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
+                       (*(yyvsp[-1].ConstVector))[i].cnst->getType()->getDescription() + "'.");
+      } else {
+        elems.push_back((*(yyvsp[-1].ConstVector))[i].cnst);
+      }
     }
 
-    (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[-1].ConstVector));
+    (yyval.ConstVal).cnst = ConstantArray::get(ATy, elems);
+    (yyval.ConstVal).signedness = isSignless;
     delete (yyvsp[-3].TypeVal).type; delete (yyvsp[-1].ConstVector);
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 115:
-#line 1462 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1463 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal).type->get());
     if (ATy == 0)
@@ -3526,14 +3527,15 @@
     if (NumElements != -1 && NumElements != 0) 
       GEN_ERROR("Type mismatch: constant sized array initialized with 0"
                      " arguments, but has size of " + itostr(NumElements) +"!");
-    (yyval.ConstVal) = ConstantArray::get(ATy, std::vector<Constant*>());
+    (yyval.ConstVal).cnst = ConstantArray::get(ATy, std::vector<llvm::Constant*>());
+    (yyval.ConstVal).signedness = isSignless;
     delete (yyvsp[-2].TypeVal).type;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 116:
-#line 1476 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1478 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal).type->get());
     if (ATy == 0)
@@ -3560,14 +3562,15 @@
       GEN_ERROR("Cannot build string arrays of non byte sized elements!");
     }
     free((yyvsp[0].StrVal));
-    (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
+    (yyval.ConstVal).cnst = ConstantArray::get(ATy, Vals);
+    (yyval.ConstVal).signedness = isSignless;
     delete (yyvsp[-2].TypeVal).type;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 117:
-#line 1506 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1509 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { // Nonempty unsized arr
     const PackedType *PTy = dyn_cast<PackedType>((yyvsp[-3].TypeVal).type->get());
     if (PTy == 0)
@@ -3583,21 +3586,25 @@
                      itostr(NumElements) + "!");
 
     // Verify all elements are correct type!
+    std::vector<Constant*> elems;
     for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
-      if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
+      if (ETy != (*(yyvsp[-1].ConstVector))[i].cnst->getType()) {
         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
            ETy->getDescription() +"' as required!\nIt is of type '"+
-           (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
+           (*(yyvsp[-1].ConstVector))[i].cnst->getType()->getDescription() + "'.");
+      } else
+        elems.push_back((*(yyvsp[-1].ConstVector))[i].cnst);
     }
 
-    (yyval.ConstVal) = ConstantPacked::get(PTy, *(yyvsp[-1].ConstVector));
+    (yyval.ConstVal).cnst = ConstantPacked::get(PTy, elems);
+    (yyval.ConstVal).signedness = isSignless;
     delete (yyvsp[-3].TypeVal).type; delete (yyvsp[-1].ConstVector);
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 118:
-#line 1532 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1539 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal).type->get());
     if (STy == 0)
@@ -3608,21 +3615,25 @@
       GEN_ERROR("Illegal number of initializers for structure type!");
 
     // Check to ensure that constants are compatible with the type initializer!
+    std::vector<Constant*> elems;
     for (unsigned i = 0, e = (yyvsp[-1].ConstVector)->size(); i != e; ++i)
-      if ((*(yyvsp[-1].ConstVector))[i]->getType() != STy->getElementType(i))
+      if ((*(yyvsp[-1].ConstVector))[i].cnst->getType() != STy->getElementType(i)) {
         GEN_ERROR("Expected type '" +
                        STy->getElementType(i)->getDescription() +
                        "' for element #" + utostr(i) +
                        " of structure initializer!");
+      } else
+        elems.push_back((*(yyvsp[-1].ConstVector))[i].cnst);
 
-    (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-1].ConstVector));
+    (yyval.ConstVal).cnst = ConstantStruct::get(STy, elems);
+    (yyval.ConstVal).signedness = isSignless;
     delete (yyvsp[-3].TypeVal).type; delete (yyvsp[-1].ConstVector);
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 119:
-#line 1553 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1564 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal).type->get());
     if (STy == 0)
@@ -3632,37 +3643,40 @@
     if (STy->getNumContainedTypes() != 0)
       GEN_ERROR("Illegal number of initializers for structure type!");
 
-    (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
+    (yyval.ConstVal).cnst = ConstantStruct::get(STy, std::vector<Constant*>());
+    (yyval.ConstVal).signedness = isSignless;
     delete (yyvsp[-2].TypeVal).type;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 120:
-#line 1566 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1578 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal).type->get());
     if (PTy == 0)
       GEN_ERROR("Cannot make null pointer constant with type: '" + 
                      (yyvsp[-1].TypeVal).type->get()->getDescription() + "'!");
 
-    (yyval.ConstVal) = ConstantPointerNull::get(PTy);
+    (yyval.ConstVal).cnst = ConstantPointerNull::get(PTy);
+    (yyval.ConstVal).signedness = isSignless;
     delete (yyvsp[-1].TypeVal).type;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 121:
-#line 1576 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1589 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal).type->get());
+    (yyval.ConstVal).cnst = UndefValue::get((yyvsp[-1].TypeVal).type->get());
+    (yyval.ConstVal).signedness = isSignless;
     delete (yyvsp[-1].TypeVal).type;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 122:
-#line 1581 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1595 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal).type->get());
     if (Ty == 0)
@@ -3720,16 +3734,17 @@
       }
     }
 
-    (yyval.ConstVal) = cast<GlobalValue>(V);
+    (yyval.ConstVal).cnst = cast<GlobalValue>(V);
+    (yyval.ConstVal).signedness = (yyvsp[-1].TypeVal).signedness;
     delete (yyvsp[-1].TypeVal).type;            // Free the type handle
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 123:
-#line 1642 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1657 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    if ((yyvsp[-1].TypeVal).type->get() != (yyvsp[0].ConstVal)->getType())
+    if ((yyvsp[-1].TypeVal).type->get() != (yyvsp[0].ConstVal).cnst->getType())
       GEN_ERROR("Mismatched types for constant expression!");
     (yyval.ConstVal) = (yyvsp[0].ConstVal);
     delete (yyvsp[-1].TypeVal).type;
@@ -3738,67 +3753,73 @@
     break;
 
   case 124:
-#line 1649 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1664 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     const Type *Ty = (yyvsp[-1].TypeVal).type->get();
     if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
       GEN_ERROR("Cannot create a null initialized value of this type!");
-    (yyval.ConstVal) = Constant::getNullValue(Ty);
+    (yyval.ConstVal).cnst = Constant::getNullValue(Ty);
+    (yyval.ConstVal).signedness = isSignless;
     delete (yyvsp[-1].TypeVal).type;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 125:
-#line 1658 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1674 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {      // integral constants
     if (!ConstantInt::isValueValidForType((yyvsp[-1].TypeVal).type->get(), (yyvsp[0].SInt64Val)))
       GEN_ERROR("Constant value doesn't fit in type!");
-    (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].TypeVal).type->get(), (yyvsp[0].SInt64Val));
+    (yyval.ConstVal).cnst = ConstantInt::get((yyvsp[-1].TypeVal).type->get(), (yyvsp[0].SInt64Val));
+    (yyval.ConstVal).signedness = (yyvsp[-1].TypeVal).signedness;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 126:
-#line 1664 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1681 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {            // integral constants
     if (!ConstantInt::isValueValidForType((yyvsp[-1].TypeVal).type->get(), (yyvsp[0].UInt64Val)))
       GEN_ERROR("Constant value doesn't fit in type!");
-    (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].TypeVal).type->get(), (yyvsp[0].UInt64Val));
+    (yyval.ConstVal).cnst = ConstantInt::get((yyvsp[-1].TypeVal).type->get(), (yyvsp[0].UInt64Val));
+    (yyval.ConstVal).signedness = (yyvsp[-1].TypeVal).signedness;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 127:
-#line 1670 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1688 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {                      // Boolean constants
-    (yyval.ConstVal) = ConstantBool::getTrue();
+    (yyval.ConstVal).cnst = ConstantBool::getTrue();
+    (yyval.ConstVal).signedness = isSignless;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 128:
-#line 1674 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1693 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {                     // Boolean constants
-    (yyval.ConstVal) = ConstantBool::getFalse();
+    (yyval.ConstVal).cnst = ConstantBool::getFalse();
+    (yyval.ConstVal).signedness = isSignless;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 129:
-#line 1678 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1698 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {                   // Float & Double constants
     if (!ConstantFP::isValueValidForType((yyvsp[-1].TypeVal).type->get(), (yyvsp[0].FPVal)))
       GEN_ERROR("Floating point constant invalid for type!!");
-    (yyval.ConstVal) = ConstantFP::get((yyvsp[-1].TypeVal).type->get(), (yyvsp[0].FPVal));
+    (yyval.ConstVal).cnst = ConstantFP::get((yyvsp[-1].TypeVal).type->get(), (yyvsp[0].FPVal));
+    (yyval.ConstVal).signedness = isSignless;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 130:
-#line 1686 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1707 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    Constant *Val = (yyvsp[-3].ConstVal);
+    Constant *Val = (yyvsp[-3].ConstVal).cnst;
     const Type *Ty = (yyvsp[-1].TypeVal).type->get();
     if (!Val->getType()->isFirstClassType())
       GEN_ERROR("cast constant expression from a non-primitive type: '" +
@@ -3810,85 +3831,76 @@
       if (Ty == Type::BoolTy) {
         // The previous definition of cast to bool was a compare against zero. 
         // We have to retain that semantic so we do it here.
-        (yyval.ConstVal) = ConstantExpr::get(Instruction::SetNE, Val, 
+        (yyval.ConstVal).cnst = ConstantExpr::get(Instruction::SetNE, Val, 
                                Constant::getNullValue(Val->getType()));
       } else if (Val->getType()->isFloatingPoint() && isa<PointerType>(Ty)) {
         Constant *CE = ConstantExpr::getFPToUI(Val, Type::ULongTy);
-        (yyval.ConstVal) = ConstantExpr::getIntToPtr(CE, Ty);
+        (yyval.ConstVal).cnst = ConstantExpr::getIntToPtr(CE, Ty);
       } else {
-        (yyval.ConstVal) = ConstantExpr::getCast(Val, Ty);
+        (yyval.ConstVal).cnst = ConstantExpr::getCast(Val, Ty);
       }
     } else {
-      (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[-5].CastOpVal).opcode, (yyvsp[-3].ConstVal), (yyvsp[-1].TypeVal).type->get());
+      (yyval.ConstVal).cnst = ConstantExpr::getCast((yyvsp[-5].CastOpVal).opcode, (yyvsp[-3].ConstVal).cnst, (yyvsp[-1].TypeVal).type->get());
     }
     delete (yyvsp[-1].TypeVal).type;
   ;}
     break;
 
   case 131:
-#line 1712 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1733 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
+    if (!isa<PointerType>((yyvsp[-2].ConstVal).cnst->getType()))
       GEN_ERROR("GetElementPtr requires a pointer operand!");
 
-    // LLVM 1.2 and earlier used ubyte struct indices.  Convert any ubyte struct
-    // indices to uint struct indices for compatibility.
-    generic_gep_type_iterator<std::vector<Value*>::iterator>
-      GTI = gep_type_begin((yyvsp[-2].ConstVal)->getType(), (yyvsp[-1].ValueList)->begin(), (yyvsp[-1].ValueList)->end()),
-      GTE = gep_type_end((yyvsp[-2].ConstVal)->getType(), (yyvsp[-1].ValueList)->begin(), (yyvsp[-1].ValueList)->end());
-    for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e && GTI != GTE; ++i, ++GTI)
-      if (isa<StructType>(*GTI))        // Only change struct indices
-        if (ConstantInt *CUI = dyn_cast<ConstantInt>((*(yyvsp[-1].ValueList))[i]))
-          if (CUI->getType() == Type::UByteTy)
-            (*(yyvsp[-1].ValueList))[i] = ConstantExpr::getCast(CUI, Type::UIntTy);
+    std::vector<llvm::Value*> IdxVec;
+    for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i < e; ++i)
+      if (Constant *C = dyn_cast<Constant>((*(yyvsp[-1].ValueList))[i].val))
+        IdxVec.push_back(C);
+      else
+        GEN_ERROR("Indices to constant getelementptr must be constants!");
 
     const Type *IdxTy =
-      GetElementPtrInst::getIndexedType((yyvsp[-2].ConstVal)->getType(), *(yyvsp[-1].ValueList), true);
+      GetElementPtrInst::getIndexedType((yyvsp[-2].ConstVal).cnst->getType(), IdxVec, true);
     if (!IdxTy)
       GEN_ERROR("Index list invalid for constant getelementptr!");
 
-    std::vector<Constant*> IdxVec;
-    for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e; ++i)
-      if (Constant *C = dyn_cast<Constant>((*(yyvsp[-1].ValueList))[i]))
-        IdxVec.push_back(C);
-      else
-        GEN_ERROR("Indices to constant getelementptr must be constants!");
-
     delete (yyvsp[-1].ValueList);
 
-    (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal), IdxVec);
+    (yyval.ConstVal).cnst = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal).cnst, IdxVec);
+    (yyval.ConstVal).signedness = isSignless;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 132:
-#line 1744 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1755 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    if ((yyvsp[-5].ConstVal)->getType() != Type::BoolTy)
+    if ((yyvsp[-5].ConstVal).cnst->getType() != Type::BoolTy)
       GEN_ERROR("Select condition must be of boolean type!");
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+    if ((yyvsp[-3].ConstVal).cnst->getType() != (yyvsp[-1].ConstVal).cnst->getType())
       GEN_ERROR("Select operand types must match!");
-    (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    (yyval.ConstVal).cnst = ConstantExpr::getSelect((yyvsp[-5].ConstVal).cnst, (yyvsp[-3].ConstVal).cnst, (yyvsp[-1].ConstVal).cnst);
+    (yyval.ConstVal).signedness = isSignless;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 133:
-#line 1752 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1764 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+    if ((yyvsp[-3].ConstVal).cnst->getType() != (yyvsp[-1].ConstVal).cnst->getType())
       GEN_ERROR("Binary operator types must match!");
     // First, make sure we're dealing with the right opcode by upgrading from
     // obsolete versions.
-    sanitizeOpcode((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal)->getType());
+    sanitizeOpcode((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal).cnst->getType());
     CHECK_FOR_ERROR;
 
     // HACK: llvm 1.3 and earlier used to emit invalid pointer constant exprs.
     // To retain backward compatibility with these early compilers, we emit a
     // cast to the appropriate integer type automatically if we are in the
     // broken case.  See PR424 for more information.
-    if (!isa<PointerType>((yyvsp[-3].ConstVal)->getType())) {
-      (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal).opcode, (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    if (!isa<PointerType>((yyvsp[-3].ConstVal).cnst->getType())) {
+      (yyval.ConstVal).cnst = ConstantExpr::get((yyvsp[-5].BinaryOpVal).opcode, (yyvsp[-3].ConstVal).cnst, (yyvsp[-1].ConstVal).cnst);
     } else {
       const Type *IntPtrTy = 0;
       switch (CurModule.CurrentModule->getPointerSize()) {
@@ -3896,86 +3908,94 @@
       case Module::Pointer64: IntPtrTy = Type::LongTy; break;
       default: GEN_ERROR("invalid pointer binary constant expr!");
       }
-      (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal).opcode, ConstantExpr::getCast((yyvsp[-3].ConstVal), IntPtrTy),
-                             ConstantExpr::getCast((yyvsp[-1].ConstVal), IntPtrTy));
-      (yyval.ConstVal) = ConstantExpr::getCast((yyval.ConstVal), (yyvsp[-3].ConstVal)->getType());
+      (yyval.ConstVal).cnst = ConstantExpr::get((yyvsp[-5].BinaryOpVal).opcode, 
+                                  ConstantExpr::getCast((yyvsp[-3].ConstVal).cnst, IntPtrTy),
+                                  ConstantExpr::getCast((yyvsp[-1].ConstVal).cnst, IntPtrTy));
+      (yyval.ConstVal).cnst = ConstantExpr::getCast((yyval.ConstVal).cnst, (yyvsp[-3].ConstVal).cnst->getType());
     }
+    (yyval.ConstVal).signedness = (yyvsp[-3].ConstVal).signedness;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 134:
-#line 1779 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1793 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+    if ((yyvsp[-3].ConstVal).cnst->getType() != (yyvsp[-1].ConstVal).cnst->getType())
       GEN_ERROR("Logical operator types must match!");
-    if (!(yyvsp[-3].ConstVal)->getType()->isIntegral()) {
-      if (!isa<PackedType>((yyvsp[-3].ConstVal)->getType()) || 
-          !cast<PackedType>((yyvsp[-3].ConstVal)->getType())->getElementType()->isIntegral())
+    if (!(yyvsp[-3].ConstVal).cnst->getType()->isIntegral()) {
+      if (!isa<PackedType>((yyvsp[-3].ConstVal).cnst->getType()) || 
+          !cast<PackedType>((yyvsp[-3].ConstVal).cnst->getType())->getElementType()->isIntegral())
         GEN_ERROR("Logical operator requires integral operands!");
     }
-    (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal).opcode, (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    (yyval.ConstVal).cnst = ConstantExpr::get((yyvsp[-5].BinaryOpVal).opcode, (yyvsp[-3].ConstVal).cnst, (yyvsp[-1].ConstVal).cnst);
+    (yyval.ConstVal).signedness = (yyvsp[-3].ConstVal).signedness;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 135:
-#line 1790 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1805 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
+    if ((yyvsp[-3].ConstVal).cnst->getType() != (yyvsp[-1].ConstVal).cnst->getType())
       GEN_ERROR("setcc operand types must match!");
-    (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal).opcode, (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    (yyval.ConstVal).cnst = ConstantExpr::get((yyvsp[-5].BinaryOpVal).opcode, (yyvsp[-3].ConstVal).cnst, (yyvsp[-1].ConstVal).cnst);
+    (yyval.ConstVal).signedness = isSignless;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 136:
-#line 1796 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1812 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    if ((yyvsp[-1].ConstVal)->getType() != Type::UByteTy)
+    if ((yyvsp[-1].ConstVal).cnst->getType() != Type::UByteTy)
       GEN_ERROR("Shift count for shift constant must be unsigned byte!");
-    if (!(yyvsp[-3].ConstVal)->getType()->isInteger())
+    if (!(yyvsp[-3].ConstVal).cnst->getType()->isInteger())
       GEN_ERROR("Shift constant expression requires integer operand!");
     // Handle opcode upgrade situations
-    sanitizeOpcode((yyvsp[-5].OtherOpVal), (yyvsp[-3].ConstVal)->getType());
+    sanitizeOpcode((yyvsp[-5].OtherOpVal), (yyvsp[-3].ConstVal).cnst->getType());
     CHECK_FOR_ERROR;
-    (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].OtherOpVal).opcode, (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    (yyval.ConstVal).cnst = ConstantExpr::get((yyvsp[-5].OtherOpVal).opcode, (yyvsp[-3].ConstVal).cnst, (yyvsp[-1].ConstVal).cnst);
+    (yyval.ConstVal).signedness = (yyvsp[-3].ConstVal).signedness;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 137:
-#line 1807 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1824 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
+    if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal).cnst, (yyvsp[-1].ConstVal).cnst))
       GEN_ERROR("Invalid extractelement operands!");
-    (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    (yyval.ConstVal).cnst = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal).cnst, (yyvsp[-1].ConstVal).cnst);
+    (yyval.ConstVal).signedness = (yyvsp[-3].ConstVal).signedness;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 138:
-#line 1813 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1831 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
+    if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal).cnst, (yyvsp[-3].ConstVal).cnst, (yyvsp[-1].ConstVal).cnst))
       GEN_ERROR("Invalid insertelement operands!");
-    (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    (yyval.ConstVal).cnst = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal).cnst, (yyvsp[-3].ConstVal).cnst, (yyvsp[-1].ConstVal).cnst);
+    (yyval.ConstVal).signedness = isSignless;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 139:
-#line 1819 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1838 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
+    if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal).cnst, (yyvsp[-3].ConstVal).cnst, (yyvsp[-1].ConstVal).cnst))
       GEN_ERROR("Invalid shufflevector operands!");
-    (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
+    (yyval.ConstVal).cnst = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal).cnst, (yyvsp[-3].ConstVal).cnst, (yyvsp[-1].ConstVal).cnst);
+    (yyval.ConstVal).signedness = isSignless;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 140:
-#line 1828 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1848 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
     CHECK_FOR_ERROR
@@ -3983,26 +4003,26 @@
     break;
 
   case 141:
-#line 1832 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1852 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    (yyval.ConstVector) = new std::vector<Constant*>();
+    (yyval.ConstVector) = new std::vector<ConstInfo>();
     (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 142:
-#line 1840 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1860 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.BoolVal) = false; ;}
     break;
 
   case 143:
-#line 1840 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1860 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.BoolVal) = true; ;}
     break;
 
   case 144:
-#line 1850 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1870 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
   (yyval.ModuleVal) = ParserResult = (yyvsp[0].ModuleVal);
   CurModule.ModuleDone();
@@ -4011,7 +4031,7 @@
     break;
 
   case 145:
-#line 1858 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1878 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
     CurFun.FunctionDone();
@@ -4020,7 +4040,7 @@
     break;
 
   case 146:
-#line 1863 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1883 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
     CHECK_FOR_ERROR
@@ -4028,7 +4048,7 @@
     break;
 
   case 147:
-#line 1867 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1887 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ModuleVal) = (yyvsp[-3].ModuleVal);
     CHECK_FOR_ERROR
@@ -4036,7 +4056,7 @@
     break;
 
   case 148:
-#line 1871 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1891 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
     CHECK_FOR_ERROR
@@ -4044,7 +4064,7 @@
     break;
 
   case 149:
-#line 1875 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1895 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ModuleVal) = CurModule.CurrentModule;
     // Emit an error if there are any unresolved types left.
@@ -4061,7 +4081,7 @@
     break;
 
   case 150:
-#line 1890 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1910 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     // Eagerly resolve types.  This is not an optimization, this is a
     // requirement that is due to the fact that we could have this:
@@ -4078,7 +4098,7 @@
       CHECK_FOR_ERROR
       // If this is a named type that is not a redefinition, add it to the slot
       // table.
-      CurModule.Types.push_back((yyvsp[0].TypeVal));
+      CurModule.Types.push_back(*((yyvsp[0].TypeVal).type));
     } else {
       delete (yyvsp[0].TypeVal).type;
     }
@@ -4087,38 +4107,38 @@
     break;
 
   case 151:
-#line 1912 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1932 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {       // Function prototypes can be in const pool
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 152:
-#line 1915 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1935 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {  // Asm blocks can be in the const pool
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 153:
-#line 1918 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1938 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    if ((yyvsp[0].ConstVal) == 0) 
+    if ((yyvsp[0].ConstVal).cnst == 0) 
       GEN_ERROR("Global value initializer is not a constant!");
-    CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), (yyvsp[-2].Linkage), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal));
+    CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), (yyvsp[-2].Linkage), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal).cnst->getType(), (yyvsp[0].ConstVal).cnst);
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 154:
-#line 1923 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1943 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV = 0;
   ;}
     break;
 
   case 155:
-#line 1926 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1946 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage, (yyvsp[-1].BoolVal),
       (yyvsp[0].TypeVal).type->get(), 0);
@@ -4128,7 +4148,7 @@
     break;
 
   case 156:
-#line 1931 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1951 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV = 0;
     CHECK_FOR_ERROR
@@ -4136,7 +4156,7 @@
     break;
 
   case 157:
-#line 1935 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1955 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::DLLImportLinkage, (yyvsp[-1].BoolVal),
       (yyvsp[0].TypeVal).type->get(), 0);
@@ -4146,7 +4166,7 @@
     break;
 
   case 158:
-#line 1940 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1960 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV = 0;
     CHECK_FOR_ERROR
@@ -4154,7 +4174,7 @@
     break;
 
   case 159:
-#line 1944 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1964 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV = 
       ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalWeakLinkage, (yyvsp[-1].BoolVal),
@@ -4165,7 +4185,7 @@
     break;
 
   case 160:
-#line 1950 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1970 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     CurGV = 0;
     CHECK_FOR_ERROR
@@ -4173,27 +4193,27 @@
     break;
 
   case 161:
-#line 1954 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1974 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { 
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 162:
-#line 1957 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1977 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 163:
-#line 1960 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1980 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { 
   ;}
     break;
 
   case 164:
-#line 1964 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1984 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
   const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
   char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
@@ -4209,17 +4229,17 @@
     break;
 
   case 165:
-#line 1977 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1997 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Endianness) = Module::BigEndian; ;}
     break;
 
   case 166:
-#line 1978 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1998 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.Endianness) = Module::LittleEndian; ;}
     break;
 
   case 167:
-#line 1980 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2000 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     CurModule.CurrentModule->setEndianness((yyvsp[0].Endianness));
     CHECK_FOR_ERROR
@@ -4227,7 +4247,7 @@
     break;
 
   case 168:
-#line 1984 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2004 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     if ((yyvsp[0].UInt64Val) == 32)
       CurModule.CurrentModule->setPointerSize(Module::Pointer32);
@@ -4240,7 +4260,7 @@
     break;
 
   case 169:
-#line 1993 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2013 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
     free((yyvsp[0].StrVal));
@@ -4248,7 +4268,7 @@
     break;
 
   case 170:
-#line 1997 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2017 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
     free((yyvsp[0].StrVal));
@@ -4256,7 +4276,7 @@
     break;
 
   case 172:
-#line 2004 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2024 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
           CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
           free((yyvsp[0].StrVal));
@@ -4265,7 +4285,7 @@
     break;
 
   case 173:
-#line 2009 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2029 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
           CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
           free((yyvsp[0].StrVal));
@@ -4274,19 +4294,19 @@
     break;
 
   case 174:
-#line 2014 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2034 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
           CHECK_FOR_ERROR
         ;}
     break;
 
   case 178:
-#line 2024 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2044 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { (yyval.StrVal) = 0; ;}
     break;
 
   case 179:
-#line 2026 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2046 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
   if ((yyvsp[-1].TypeVal).type->get() == Type::VoidTy)
     GEN_ERROR("void typed arguments are invalid!");
@@ -4296,7 +4316,7 @@
     break;
 
   case 180:
-#line 2033 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2053 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = (yyvsp[-2].ArgList);
     (yyvsp[-2].ArgList)->push_back(*(yyvsp[0].ArgVal));
@@ -4306,7 +4326,7 @@
     break;
 
   case 181:
-#line 2039 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2059 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = new std::vector<std::pair<TypeInfo,char*> >();
     (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal));
@@ -4316,7 +4336,7 @@
     break;
 
   case 182:
-#line 2046 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2066 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = (yyvsp[0].ArgList);
     CHECK_FOR_ERROR
@@ -4324,7 +4344,7 @@
     break;
 
   case 183:
-#line 2050 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2070 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = (yyvsp[-2].ArgList);
     TypeInfo TI;
@@ -4336,7 +4356,7 @@
     break;
 
   case 184:
-#line 2058 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2078 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = new std::vector<std::pair<TypeInfo,char*> >();
     TypeInfo TI;
@@ -4348,7 +4368,7 @@
     break;
 
   case 185:
-#line 2066 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2086 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ArgList) = 0;
     CHECK_FOR_ERROR
@@ -4356,7 +4376,7 @@
     break;
 
   case 186:
-#line 2072 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2092 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
   UnEscapeLexed((yyvsp[-5].StrVal));
   std::string FunctionName((yyvsp[-5].StrVal));
@@ -4452,7 +4472,7 @@
     break;
 
   case 189:
-#line 2167 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2187 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
   (yyval.FunctionVal) = CurFun.CurrentFunction;
 
@@ -4463,7 +4483,7 @@
     break;
 
   case 192:
-#line 2177 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2197 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
   (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
   CHECK_FOR_ERROR
@@ -4471,22 +4491,22 @@
     break;
 
   case 194:
-#line 2183 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2203 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { CurFun.Linkage = GlobalValue::DLLImportLinkage; ;}
     break;
 
   case 195:
-#line 2184 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2204 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { CurFun.Linkage = GlobalValue::DLLImportLinkage; ;}
     break;
 
   case 196:
-#line 2186 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2206 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { CurFun.isDeclare = true; ;}
     break;
 
   case 197:
-#line 2186 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2206 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.FunctionVal) = CurFun.CurrentFunction;
     CurFun.FunctionDone();
@@ -4495,7 +4515,7 @@
     break;
 
   case 198:
-#line 2196 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2216 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
@@ -4503,7 +4523,7 @@
     break;
 
   case 199:
-#line 2200 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2220 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
@@ -4511,7 +4531,7 @@
     break;
 
   case 200:
-#line 2205 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2225 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {    // A reference to a direct constant
     (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
     CHECK_FOR_ERROR
@@ -4519,7 +4539,7 @@
     break;
 
   case 201:
-#line 2209 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2229 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
     CHECK_FOR_ERROR
@@ -4527,7 +4547,7 @@
     break;
 
   case 202:
-#line 2213 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2233 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {                     // Perhaps it's an FP constant?
     (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
     CHECK_FOR_ERROR
@@ -4535,7 +4555,7 @@
     break;
 
   case 203:
-#line 2217 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2237 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::create(ConstantBool::getTrue());
     CHECK_FOR_ERROR
@@ -4543,7 +4563,7 @@
     break;
 
   case 204:
-#line 2221 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2241 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::create(ConstantBool::getFalse());
     CHECK_FOR_ERROR
@@ -4551,7 +4571,7 @@
     break;
 
   case 205:
-#line 2225 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2245 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::createNull();
     CHECK_FOR_ERROR
@@ -4559,7 +4579,7 @@
     break;
 
   case 206:
-#line 2229 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2249 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValIDVal) = ValID::createUndef();
     CHECK_FOR_ERROR
@@ -4567,7 +4587,7 @@
     break;
 
   case 207:
-#line 2233 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2253 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {     // A vector zero constant.
     (yyval.ValIDVal) = ValID::createZeroInit();
     CHECK_FOR_ERROR
@@ -4575,9 +4595,9 @@
     break;
 
   case 208:
-#line 2237 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2257 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { // Nonempty unsized packed vector
-    const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
+    const Type *ETy = (*(yyvsp[-1].ConstVector))[0].cnst->getType();
     int NumElements = (yyvsp[-1].ConstVector)->size(); 
     
     PackedType* pt = PackedType::get(ETy, NumElements);
@@ -4585,29 +4605,32 @@
        HandleUpRefs(PackedType::get( ETy, NumElements)));
     
     // Verify all elements are correct type!
+    std::vector<Constant*> elems;
     for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
-      if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
+      if (ETy != (*(yyvsp[-1].ConstVector))[i].cnst->getType()) {
         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
                      ETy->getDescription() +"' as required!\nIt is of type '" +
-                     (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
+                     (*(yyvsp[-1].ConstVector))[i].cnst->getType()->getDescription() + "'.");
+      } else
+        elems.push_back((*(yyvsp[-1].ConstVector))[i].cnst);
     }
 
-    (yyval.ValIDVal) = ValID::create(ConstantPacked::get(pt, *(yyvsp[-1].ConstVector)));
+    (yyval.ValIDVal) = ValID::create(ConstantPacked::get(pt, elems));
     delete PTy; delete (yyvsp[-1].ConstVector);
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 209:
-#line 2257 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2280 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
+    (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal).cnst);
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 210:
-#line 2261 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2284 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
     std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
@@ -4621,7 +4644,7 @@
     break;
 
   case 211:
-#line 2275 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2298 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {  // Is it an integer reference...?
     (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal));
     CHECK_FOR_ERROR
@@ -4629,7 +4652,7 @@
     break;
 
   case 212:
-#line 2279 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2302 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {                   // Is it a named reference...?
     (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal));
     CHECK_FOR_ERROR
@@ -4637,15 +4660,17 @@
     break;
 
   case 215:
-#line 2291 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2314 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    (yyval.ValueVal) = getVal((yyvsp[-1].TypeVal).type->get(), (yyvsp[0].ValIDVal)); delete (yyvsp[-1].TypeVal).type;
+    (yyval.ValueVal).val = getVal((yyvsp[-1].TypeVal).type->get(), (yyvsp[0].ValIDVal)); 
+    delete (yyvsp[-1].TypeVal).type;
     CHECK_FOR_ERROR
+    (yyval.ValueVal).signedness = (yyvsp[-1].TypeVal).signedness;
   ;}
     break;
 
   case 216:
-#line 2296 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2321 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
     CHECK_FOR_ERROR
@@ -4653,7 +4678,7 @@
     break;
 
   case 217:
-#line 2300 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2325 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { // Do not allow functions with 0 basic blocks   
     (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
     CHECK_FOR_ERROR
@@ -4661,7 +4686,7 @@
     break;
 
   case 218:
-#line 2309 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2334 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
     CHECK_FOR_ERROR
@@ -4675,7 +4700,7 @@
     break;
 
   case 219:
-#line 2320 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2345 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[0].InstVal)))
       if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
@@ -4688,7 +4713,7 @@
     break;
 
   case 220:
-#line 2329 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2354 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
     CHECK_FOR_ERROR
@@ -4704,7 +4729,7 @@
     break;
 
   case 221:
-#line 2341 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2366 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((yyvsp[0].StrVal)), true);
     CHECK_FOR_ERROR
@@ -4720,15 +4745,15 @@
     break;
 
   case 222:
-#line 2354 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2379 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {              // Return with a result...
-    (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
+    (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal).val);
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 223:
-#line 2358 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2383 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {                                       // Return with no result...
     (yyval.TermInstVal) = new ReturnInst();
     CHECK_FOR_ERROR
@@ -4736,7 +4761,7 @@
     break;
 
   case 224:
-#line 2362 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2387 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {                         // Unconditional Branch...
     BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
@@ -4745,7 +4770,7 @@
     break;
 
   case 225:
-#line 2367 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2392 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {  
     BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal));
     CHECK_FOR_ERROR
@@ -4758,7 +4783,7 @@
     break;
 
   case 226:
-#line 2376 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2401 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     Value* tmpVal = getVal((yyvsp[-7].TypeVal).type->get(), (yyvsp[-6].ValIDVal));
     CHECK_FOR_ERROR
@@ -4781,7 +4806,7 @@
     break;
 
   case 227:
-#line 2395 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2420 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     Value* tmpVal = getVal((yyvsp[-6].TypeVal).type->get(), (yyvsp[-5].ValIDVal));
     CHECK_FOR_ERROR
@@ -4794,7 +4819,7 @@
     break;
 
   case 228:
-#line 2405 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2430 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     const PointerType *PFTy;
     const FunctionType *Ty;
@@ -4804,9 +4829,9 @@
       // Pull out the types of all of the arguments...
       std::vector<const Type*> ParamTypes;
       if ((yyvsp[-7].ValueList)) {
-        for (std::vector<Value*>::iterator I = (yyvsp[-7].ValueList)->begin(), E = (yyvsp[-7].ValueList)->end();
+        for (std::vector<ValueInfo>::iterator I = (yyvsp[-7].ValueList)->begin(), E = (yyvsp[-7].ValueList)->end();
              I != E; ++I)
-          ParamTypes.push_back((*I)->getType());
+          ParamTypes.push_back((*I).val->getType());
       }
 
       bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
@@ -4832,17 +4857,26 @@
       //
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      std::vector<Value*>::iterator ArgI = (yyvsp[-7].ValueList)->begin(), ArgE = (yyvsp[-7].ValueList)->end();
-
-      for (; ArgI != ArgE && I != E; ++ArgI, ++I)
-        if ((*ArgI)->getType() != *I)
-          GEN_ERROR("Parameter " +(*ArgI)->getName()+ " is not of type '" +
-                         (*I)->getDescription() + "'!");
+      std::vector<ValueInfo>::iterator ArgI = (yyvsp[-7].ValueList)->begin(), ArgE = (yyvsp[-7].ValueList)->end();
 
-      if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
-        GEN_ERROR("Invalid number of parameters detected!");
-
-      (yyval.TermInstVal) = new InvokeInst(V, Normal, Except, *(yyvsp[-7].ValueList));
+      std::vector<Value*> args;
+      for (; ArgI != ArgE; ++ArgI)
+        if (I == E) {
+          if (Ty->isVarArg()) {
+            args.push_back((*ArgI).val);
+          } else {
+            GEN_ERROR("Too many parameters for function of type " +
+              Ty->getDescription());
+          }
+        } else {
+          if ((*ArgI).val->getType() != *I) {
+            GEN_ERROR("Parameter " + (*ArgI).val->getName() + 
+                      " is not of type '" + (*I)->getDescription() + "'!");
+          } else
+            args.push_back((*ArgI).val);
+          ++I;
+        }
+      (yyval.TermInstVal) = new InvokeInst(V, Normal, Except, args);
     }
     cast<InvokeInst>((yyval.TermInstVal))->setCallingConv((yyvsp[-11].UIntVal));
   
@@ -4853,7 +4887,7 @@
     break;
 
   case 229:
-#line 2460 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2494 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TermInstVal) = new UnwindInst();
     CHECK_FOR_ERROR
@@ -4861,7 +4895,7 @@
     break;
 
   case 230:
-#line 2464 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2498 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.TermInstVal) = new UnreachableInst();
     CHECK_FOR_ERROR
@@ -4869,7 +4903,7 @@
     break;
 
   case 231:
-#line 2471 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2505 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.JumpTable) = (yyvsp[-5].JumpTable);
     Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].TypeVal).type->get(), (yyvsp[-3].ValIDVal)));
@@ -4884,7 +4918,7 @@
     break;
 
   case 232:
-#line 2482 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2516 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
     Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].TypeVal).type->get(), (yyvsp[-3].ValIDVal)));
@@ -4900,7 +4934,7 @@
     break;
 
   case 233:
-#line 2495 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2529 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
   // Is this definition named?? if so, assign the name...
   setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
@@ -4912,7 +4946,7 @@
     break;
 
   case 234:
-#line 2504 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2538 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {    // Used for PHI nodes
     (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
     Value* tmpVal = getVal((yyvsp[-5].TypeVal).type->get(), (yyvsp[-3].ValIDVal));
@@ -4925,7 +4959,7 @@
     break;
 
   case 235:
-#line 2513 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2547 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.PHIList) = (yyvsp[-6].PHIList);
     Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal));
@@ -4937,15 +4971,15 @@
     break;
 
   case 236:
-#line 2523 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2557 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {    // Used for call statements, and memory insts...
-    (yyval.ValueList) = new std::vector<Value*>();
+    (yyval.ValueList) = new std::vector<ValueInfo>();
     (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
   ;}
     break;
 
   case 237:
-#line 2527 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2561 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.ValueList) = (yyvsp[-2].ValueList);
     (yyvsp[-2].ValueList)->push_back((yyvsp[0].ValueVal));
@@ -4953,13 +4987,22 @@
   ;}
     break;
 
+  case 238:
+#line 2568 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    {
+    (yyval.ValueList) = (yyvsp[0].ValueList);
+  ;}
+    break;
+
   case 239:
-#line 2534 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
-    { (yyval.ValueList) = 0; ;}
+#line 2571 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+    { 
+    (yyval.ValueList) = 0; 
+  ;}
     break;
 
   case 240:
-#line 2536 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2575 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
@@ -4967,7 +5010,7 @@
     break;
 
   case 241:
-#line 2540 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2579 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
@@ -4975,7 +5018,7 @@
     break;
 
   case 242:
-#line 2545 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2584 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     if (!(yyvsp[-3].TypeVal).type->get()->isInteger() && !(yyvsp[-3].TypeVal).type->get()->isFloatingPoint() && 
         !isa<PackedType>((yyvsp[-3].TypeVal).type->get()))
@@ -5001,7 +5044,7 @@
     break;
 
   case 243:
-#line 2567 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2606 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     if (!(yyvsp[-3].TypeVal).type->get()->isIntegral()) {
       if (!isa<PackedType>((yyvsp[-3].TypeVal).type->get()) ||
@@ -5020,7 +5063,7 @@
     break;
 
   case 244:
-#line 2582 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2621 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     if(isa<PackedType>((yyvsp[-3].TypeVal).type->get())) {
       GEN_ERROR(
@@ -5038,16 +5081,16 @@
     break;
 
   case 245:
-#line 2596 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2635 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     std::cerr << "WARNING: Use of eliminated 'not' instruction:"
               << " Replacing with 'xor'.\n";
 
-    Value *Ones = ConstantIntegral::getAllOnesValue((yyvsp[0].ValueVal)->getType());
+    Value *Ones = ConstantIntegral::getAllOnesValue((yyvsp[0].ValueVal).val->getType());
     if (Ones == 0)
       GEN_ERROR("Expected integral type for not instruction!");
 
-    (yyval.InstVal) = BinaryOperator::create(Instruction::Xor, (yyvsp[0].ValueVal), Ones);
+    (yyval.InstVal) = BinaryOperator::create(Instruction::Xor, (yyvsp[0].ValueVal).val, Ones);
     if ((yyval.InstVal) == 0)
       GEN_ERROR("Could not create a xor instruction!");
     CHECK_FOR_ERROR
@@ -5055,24 +5098,24 @@
     break;
 
   case 246:
-#line 2609 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2648 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    if ((yyvsp[0].ValueVal)->getType() != Type::UByteTy)
+    if ((yyvsp[0].ValueVal).val->getType() != Type::UByteTy)
       GEN_ERROR("Shift amount must be ubyte!");
-    if (!(yyvsp[-2].ValueVal)->getType()->isInteger())
+    if (!(yyvsp[-2].ValueVal).val->getType()->isInteger())
       GEN_ERROR("Shift constant expression requires integer operand!");
     // Handle opcode upgrade situations
-    sanitizeOpcode((yyvsp[-3].OtherOpVal), (yyvsp[-2].ValueVal)->getType());
+    sanitizeOpcode((yyvsp[-3].OtherOpVal), (yyvsp[-2].ValueVal).val->getType());
     CHECK_FOR_ERROR;
-    (yyval.InstVal) = new ShiftInst((yyvsp[-3].OtherOpVal).opcode, (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
+    (yyval.InstVal) = new ShiftInst((yyvsp[-3].OtherOpVal).opcode, (yyvsp[-2].ValueVal).val, (yyvsp[0].ValueVal).val);
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 247:
-#line 2620 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2659 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    Value* Val = (yyvsp[-2].ValueVal);
+    Value* Val = (yyvsp[-2].ValueVal).val;
     const Type* Ty = (yyvsp[0].TypeVal).type->get();
     if (!Val->getType()->isFirstClassType())
       GEN_ERROR("cast from a non-primitive type: '" +
@@ -5084,8 +5127,8 @@
       if (Ty == Type::BoolTy) {
         // The previous definition of cast to bool was a compare against zero. 
         // We have to retain that semantic so we do it here.
-        (yyval.InstVal) = new SetCondInst(Instruction::SetNE, (yyvsp[-2].ValueVal), 
-                               Constant::getNullValue((yyvsp[-2].ValueVal)->getType()));
+        (yyval.InstVal) = new SetCondInst(Instruction::SetNE, (yyvsp[-2].ValueVal).val, 
+                               Constant::getNullValue((yyvsp[-2].ValueVal).val->getType()));
       } else if (Val->getType()->isFloatingPoint() && isa<PointerType>(Ty)) {
         CastInst *CI = new FPToUIInst(Val, Type::ULongTy);
         (yyval.InstVal) = new IntToPtrInst(CI, Ty);
@@ -5093,39 +5136,39 @@
         (yyval.InstVal) = CastInst::createInferredCast(Val, Ty);
       }
     } else {
-      (yyval.InstVal) = CastInst::create((yyvsp[-3].CastOpVal).opcode, (yyvsp[-2].ValueVal), (yyvsp[0].TypeVal).type->get());
+      (yyval.InstVal) = CastInst::create((yyvsp[-3].CastOpVal).opcode, (yyvsp[-2].ValueVal).val, (yyvsp[0].TypeVal).type->get());
     }
     delete (yyvsp[0].TypeVal).type;
   ;}
     break;
 
   case 248:
-#line 2646 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2685 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    if ((yyvsp[-4].ValueVal)->getType() != Type::BoolTy)
+    if ((yyvsp[-4].ValueVal).val->getType() != Type::BoolTy)
       GEN_ERROR("select condition must be boolean!");
-    if ((yyvsp[-2].ValueVal)->getType() != (yyvsp[0].ValueVal)->getType())
+    if ((yyvsp[-2].ValueVal).val->getType() != (yyvsp[0].ValueVal).val->getType())
       GEN_ERROR("select value types should match!");
-    (yyval.InstVal) = new SelectInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
+    (yyval.InstVal) = new SelectInst((yyvsp[-4].ValueVal).val, (yyvsp[-2].ValueVal).val, (yyvsp[0].ValueVal).val);
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 249:
-#line 2654 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2693 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     NewVarArgs = true;
-    (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), (yyvsp[0].TypeVal).type->get());
+    (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal).val, (yyvsp[0].TypeVal).type->get());
     delete (yyvsp[0].TypeVal).type;
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 250:
-#line 2660 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2699 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     ObsoleteVarArgs = true;
-    const Type* ArgTy = (yyvsp[-2].ValueVal)->getType();
+    const Type* ArgTy = (yyvsp[-2].ValueVal).val->getType();
     Function* NF = CurModule.CurrentModule->
       getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0);
 
@@ -5136,7 +5179,7 @@
     //b = vaarg foo, t
     AllocaInst* foo = new AllocaInst(ArgTy, 0, "vaarg.fix");
     CurBB->getInstList().push_back(foo);
-    CallInst* bar = new CallInst(NF, (yyvsp[-2].ValueVal));
+    CallInst* bar = new CallInst(NF, (yyvsp[-2].ValueVal).val);
     CurBB->getInstList().push_back(bar);
     CurBB->getInstList().push_back(new StoreInst(bar, foo));
     (yyval.InstVal) = new VAArgInst(foo, (yyvsp[0].TypeVal).type->get());
@@ -5146,10 +5189,10 @@
     break;
 
   case 251:
-#line 2680 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2719 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     ObsoleteVarArgs = true;
-    const Type* ArgTy = (yyvsp[-2].ValueVal)->getType();
+    const Type* ArgTy = (yyvsp[-2].ValueVal).val->getType();
     Function* NF = CurModule.CurrentModule->
       getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0);
 
@@ -5161,7 +5204,7 @@
     //b = load foo
     AllocaInst* foo = new AllocaInst(ArgTy, 0, "vanext.fix");
     CurBB->getInstList().push_back(foo);
-    CallInst* bar = new CallInst(NF, (yyvsp[-2].ValueVal));
+    CallInst* bar = new CallInst(NF, (yyvsp[-2].ValueVal).val);
     CurBB->getInstList().push_back(bar);
     CurBB->getInstList().push_back(new StoreInst(bar, foo));
     Instruction* tmp = new VAArgInst(foo, (yyvsp[0].TypeVal).type->get());
@@ -5173,37 +5216,37 @@
     break;
 
   case 252:
-#line 2703 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2742 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
+    if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal).val, (yyvsp[0].ValueVal).val))
       GEN_ERROR("Invalid extractelement operands!");
-    (yyval.InstVal) = new ExtractElementInst((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
+    (yyval.InstVal) = new ExtractElementInst((yyvsp[-2].ValueVal).val, (yyvsp[0].ValueVal).val);
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 253:
-#line 2709 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2748 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
+    if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal).val, (yyvsp[-2].ValueVal).val, (yyvsp[0].ValueVal).val))
       GEN_ERROR("Invalid insertelement operands!");
-    (yyval.InstVal) = new InsertElementInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
+    (yyval.InstVal) = new InsertElementInst((yyvsp[-4].ValueVal).val, (yyvsp[-2].ValueVal).val, (yyvsp[0].ValueVal).val);
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 254:
-#line 2715 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2754 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
+    if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal).val, (yyvsp[-2].ValueVal).val, (yyvsp[0].ValueVal).val))
       GEN_ERROR("Invalid shufflevector operands!");
-    (yyval.InstVal) = new ShuffleVectorInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
+    (yyval.InstVal) = new ShuffleVectorInst((yyvsp[-4].ValueVal).val, (yyvsp[-2].ValueVal).val, (yyvsp[0].ValueVal).val);
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 255:
-#line 2721 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2760 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
     if (!Ty->isFirstClassType())
@@ -5222,7 +5265,7 @@
     break;
 
   case 256:
-#line 2736 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2775 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     const PointerType *PFTy = 0;
     const FunctionType *Ty = 0;
@@ -5232,9 +5275,9 @@
       // Pull out the types of all of the arguments...
       std::vector<const Type*> ParamTypes;
       if ((yyvsp[-1].ValueList)) {
-        for (std::vector<Value*>::iterator I = (yyvsp[-1].ValueList)->begin(), E = (yyvsp[-1].ValueList)->end();
+        for (std::vector<ValueInfo>::iterator I = (yyvsp[-1].ValueList)->begin(), E = (yyvsp[-1].ValueList)->end();
              I != E; ++I)
-          ParamTypes.push_back((*I)->getType());
+          ParamTypes.push_back((*I).val->getType());
       }
 
       bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
@@ -5265,17 +5308,30 @@
       //
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      std::vector<Value*>::iterator ArgI = (yyvsp[-1].ValueList)->begin(), ArgE = (yyvsp[-1].ValueList)->end();
+      std::vector<ValueInfo>::iterator ArgI = (yyvsp[-1].ValueList)->begin(), ArgE = (yyvsp[-1].ValueList)->end();
 
-      for (; ArgI != ArgE && I != E; ++ArgI, ++I)
-        if ((*ArgI)->getType() != *I)
-          GEN_ERROR("Parameter " +(*ArgI)->getName()+ " is not of type '" +
-                         (*I)->getDescription() + "'!");
+      std::vector<Value*> args;
+      for (; ArgI != ArgE ; ++ArgI)
+        if (I == E) {
+          if (Ty->isVarArg()) {
+            args.push_back((*ArgI).val);
+          } else {
+            GEN_ERROR("Too many parameters for function of type " +
+              Ty->getDescription());
+          }
+        } else {
+          if ((*ArgI).val->getType() != *I) {
+            GEN_ERROR("Parameter " + (*ArgI).val->getName() + 
+                      " is not of type '" + (*I)->getDescription() + "'!");
+          } else
+            args.push_back((*ArgI).val);
+          ++I;
+        }
 
       if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
         GEN_ERROR("Invalid number of parameters detected!");
 
-      (yyval.InstVal) = new CallInst(V, *(yyvsp[-1].ValueList));
+      (yyval.InstVal) = new CallInst(V, args);
     }
     cast<CallInst>((yyval.InstVal))->setTailCall((yyvsp[-6].BoolVal));
     cast<CallInst>((yyval.InstVal))->setCallingConv((yyvsp[-5].UIntVal));
@@ -5286,7 +5342,7 @@
     break;
 
   case 257:
-#line 2796 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2848 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.InstVal) = (yyvsp[0].InstVal);
     CHECK_FOR_ERROR
@@ -5294,7 +5350,7 @@
     break;
 
   case 258:
-#line 2803 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2855 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { 
     (yyval.ValueList) = (yyvsp[0].ValueList); 
     CHECK_FOR_ERROR
@@ -5302,15 +5358,15 @@
     break;
 
   case 259:
-#line 2806 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2858 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     { 
-    (yyval.ValueList) = new std::vector<Value*>(); 
+    (yyval.ValueList) = new std::vector<ValueInfo>(); 
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 260:
-#line 2811 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2863 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = true;
     CHECK_FOR_ERROR
@@ -5318,7 +5374,7 @@
     break;
 
   case 261:
-#line 2815 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2867 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.BoolVal) = false;
     CHECK_FOR_ERROR
@@ -5326,7 +5382,7 @@
     break;
 
   case 262:
-#line 2822 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2874 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.InstVal) = new MallocInst((yyvsp[-1].TypeVal).type->get(), 0, (yyvsp[0].UIntVal));
     delete (yyvsp[-1].TypeVal).type;
@@ -5335,7 +5391,7 @@
     break;
 
   case 263:
-#line 2827 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2879 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     Value* tmpVal = getVal((yyvsp[-2].TypeVal).type->get(), (yyvsp[-1].ValIDVal));
     CHECK_FOR_ERROR
@@ -5345,7 +5401,7 @@
     break;
 
   case 264:
-#line 2833 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2885 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     (yyval.InstVal) = new AllocaInst((yyvsp[-1].TypeVal).type->get(), 0, (yyvsp[0].UIntVal));
     delete (yyvsp[-1].TypeVal).type;
@@ -5354,7 +5410,7 @@
     break;
 
   case 265:
-#line 2838 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2890 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     Value* tmpVal = getVal((yyvsp[-2].TypeVal).type->get(), (yyvsp[-1].ValIDVal));
     CHECK_FOR_ERROR
@@ -5364,18 +5420,18 @@
     break;
 
   case 266:
-#line 2844 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2896 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
-    if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
+    if (!isa<PointerType>((yyvsp[0].ValueVal).val->getType()))
       GEN_ERROR("Trying to free nonpointer type " + 
-                     (yyvsp[0].ValueVal)->getType()->getDescription() + "!");
-    (yyval.InstVal) = new FreeInst((yyvsp[0].ValueVal));
+                     (yyvsp[0].ValueVal).val->getType()->getDescription() + "!");
+    (yyval.InstVal) = new FreeInst((yyvsp[0].ValueVal).val);
     CHECK_FOR_ERROR
   ;}
     break;
 
   case 267:
-#line 2852 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2904 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     if (!isa<PointerType>((yyvsp[-1].TypeVal).type->get()))
       GEN_ERROR("Can't load from nonpointer type: " +
@@ -5391,47 +5447,40 @@
     break;
 
   case 268:
-#line 2864 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2916 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     const PointerType *PT = dyn_cast<PointerType>((yyvsp[-1].TypeVal).type->get());
     if (!PT)
       GEN_ERROR("Can't store to a nonpointer type: " +
                      ((yyvsp[-1].TypeVal).type->get())->getDescription());
     const Type *ElTy = PT->getElementType();
-    if (ElTy != (yyvsp[-3].ValueVal)->getType())
-      GEN_ERROR("Can't store '" + (yyvsp[-3].ValueVal)->getType()->getDescription() +
+    if (ElTy != (yyvsp[-3].ValueVal).val->getType())
+      GEN_ERROR("Can't store '" + (yyvsp[-3].ValueVal).val->getType()->getDescription() +
                      "' into space of type '" + ElTy->getDescription() + "'!");
 
     Value* tmpVal = getVal((yyvsp[-1].TypeVal).type->get(), (yyvsp[0].ValIDVal));
     CHECK_FOR_ERROR
-    (yyval.InstVal) = new StoreInst((yyvsp[-3].ValueVal), tmpVal, (yyvsp[-5].BoolVal));
+    (yyval.InstVal) = new StoreInst((yyvsp[-3].ValueVal).val, tmpVal, (yyvsp[-5].BoolVal));
     delete (yyvsp[-1].TypeVal).type;
   ;}
     break;
 
   case 269:
-#line 2879 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2931 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
     {
     if (!isa<PointerType>((yyvsp[-2].TypeVal).type->get()))
       GEN_ERROR("getelementptr insn requires pointer operand!");
 
-    // LLVM 1.2 and earlier used ubyte struct indices.  Convert any ubyte struct
-    // indices to uint struct indices for compatibility.
-    generic_gep_type_iterator<std::vector<Value*>::iterator>
-      GTI = gep_type_begin((yyvsp[-2].TypeVal).type->get(), (yyvsp[0].ValueList)->begin(), (yyvsp[0].ValueList)->end()),
-      GTE = gep_type_end((yyvsp[-2].TypeVal).type->get(), (yyvsp[0].ValueList)->begin(), (yyvsp[0].ValueList)->end());
-    for (unsigned i = 0, e = (yyvsp[0].ValueList)->size(); i != e && GTI != GTE; ++i, ++GTI)
-      if (isa<StructType>(*GTI))        // Only change struct indices
-        if (ConstantInt *CUI = dyn_cast<ConstantInt>((*(yyvsp[0].ValueList))[i]))
-          if (CUI->getType() == Type::UByteTy)
-            (*(yyvsp[0].ValueList))[i] = ConstantExpr::getCast(CUI, Type::UIntTy);
+    std::vector<Value*> indices;
+    for (unsigned i = 0, e = (yyvsp[0].ValueList)->size(); i != e; ++i)
+      indices.push_back((*(yyvsp[0].ValueList))[i].val);
 
-    if (!GetElementPtrInst::getIndexedType((yyvsp[-2].TypeVal).type->get(), *(yyvsp[0].ValueList), true))
+    if (!GetElementPtrInst::getIndexedType((yyvsp[-2].TypeVal).type->get(), indices, true))
       GEN_ERROR("Invalid getelementptr indices for type '" +
                      (yyvsp[-2].TypeVal).type->get()->getDescription()+ "'!");
     Value* tmpVal = getVal((yyvsp[-2].TypeVal).type->get(), (yyvsp[-1].ValIDVal));
     CHECK_FOR_ERROR
-    (yyval.InstVal) = new GetElementPtrInst(tmpVal, *(yyvsp[0].ValueList));
+    (yyval.InstVal) = new GetElementPtrInst(tmpVal, indices);
     delete (yyvsp[-2].TypeVal).type; 
     delete (yyvsp[0].ValueList);
   ;}
@@ -5442,7 +5491,7 @@
     }
 
 /* Line 1126 of yacc.c.  */
-#line 5446 "llvmAsmParser.tab.c"
+#line 5495 "llvmAsmParser.tab.c"
 
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -5710,7 +5759,7 @@
 }
 
 
-#line 2905 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 2950 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
 
 
 void llvm::GenerateError(const std::string &message, int LineNo) {


Index: llvm/lib/AsmParser/llvmAsmParser.h.cvs
diff -u llvm/lib/AsmParser/llvmAsmParser.h.cvs:1.21 llvm/lib/AsmParser/llvmAsmParser.h.cvs:1.22
--- llvm/lib/AsmParser/llvmAsmParser.h.cvs:1.21	Sun Nov 26 19:05:09 2006
+++ llvm/lib/AsmParser/llvmAsmParser.h.cvs	Tue Nov 28 01:29:44 2006
@@ -281,7 +281,7 @@
 
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 1040 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
+#line 1038 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
 typedef union YYSTYPE {
   llvm::Module                           *ModuleVal;
   llvm::Function                         *FunctionVal;
@@ -289,19 +289,17 @@
   llvm::BasicBlock                       *BasicBlockVal;
   llvm::TerminatorInst                   *TermInstVal;
   llvm::Instruction                      *InstVal;
-  llvm::Constant                         *ConstVal;
-
-  TypeInfo                                TypeVal;
-  llvm::Value                            *ValueVal;
+  ConstInfo                              ConstVal;
+  TypeInfo                               TypeVal;
+  ValueInfo                              ValueVal;
 
   std::vector<std::pair<TypeInfo,char*> >*ArgList;
-  std::vector<llvm::Value*>              *ValueList;
+  std::vector<ValueInfo>                 *ValueList;
   std::list<TypeInfo>                    *TypeList;
   // Represent the RHS of PHI node
-  std::list<std::pair<llvm::Value*,
-                      llvm::BasicBlock*> > *PHIList;
+  std::list<std::pair<llvm::Value*, llvm::BasicBlock*> > *PHIList;
   std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
-  std::vector<llvm::Constant*>           *ConstVector;
+  std::vector<ConstInfo>                 *ConstVector;
 
   llvm::GlobalValue::LinkageTypes         Linkage;
   int64_t                           SInt64Val;
@@ -322,7 +320,7 @@
   llvm::Module::Endianness          Endianness;
 } YYSTYPE;
 /* Line 1447 of yacc.c.  */
-#line 326 "llvmAsmParser.tab.h"
+#line 324 "llvmAsmParser.tab.h"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1


Index: llvm/lib/AsmParser/llvmAsmParser.y.cvs
diff -u llvm/lib/AsmParser/llvmAsmParser.y.cvs:1.27 llvm/lib/AsmParser/llvmAsmParser.y.cvs:1.28
--- llvm/lib/AsmParser/llvmAsmParser.y.cvs:1.27	Sun Nov 26 19:05:09 2006
+++ llvm/lib/AsmParser/llvmAsmParser.y.cvs	Tue Nov 28 01:29:44 2006
@@ -83,8 +83,8 @@
   Module *CurrentModule;
   std::map<const Type *, ValueList> Values; // Module level numbered definitions
   std::map<const Type *,ValueList> LateResolveValues;
-  std::vector<TypeInfo>    Types;
-  std::map<ValID, TypeInfo> LateResolveTypes;
+  std::vector<PATypeHolder>    Types;
+  std::map<ValID, PATypeHolder> LateResolveTypes;
 
   /// PlaceHolderInfo - When temporary placeholder objects are created, remember
   /// how they were referenced and on which line of the input they came from so
@@ -217,7 +217,7 @@
   case ValID::NumberVal:               // Is it a numbered definition?
     // Module constants occupy the lowest numbered slots...
     if ((unsigned)D.Num < CurModule.Types.size())
-      return CurModule.Types[(unsigned)D.Num].type->get();
+      return CurModule.Types[(unsigned)D.Num];
     break;
   case ValID::NameVal:                 // Is it a named definition?
     if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) {
@@ -247,16 +247,14 @@
     }
   }
 
-  std::map<ValID, TypeInfo>::iterator I =CurModule.LateResolveTypes.find(D);
+  std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
   if (I != CurModule.LateResolveTypes.end())
-    return I->second.type->get();
+    return I->second;
 
-  TypeInfo TI;
-  TI.type = new PATypeHolder(OpaqueType::get());
-  TI.signedness = isSignless;
-  CurModule.LateResolveTypes.insert(std::make_pair(D, TI));
-  return TI.type->get();
- }
+  Type *Typ = OpaqueType::get();
+  CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
+  return Typ;
+}
 
 static Value *lookupInSymbolTable(const Type *Ty, const std::string &Name) {
   SymbolTable &SymTab =
@@ -559,10 +557,10 @@
   if (Name) D = ValID::create(Name);
   else      D = ValID::create((int)CurModule.Types.size());
 
-  std::map<ValID, TypeInfo>::iterator I =
+  std::map<ValID, PATypeHolder>::iterator I =
     CurModule.LateResolveTypes.find(D);
   if (I != CurModule.LateResolveTypes.end()) {
-    ((DerivedType*)I->second.type->get())->refineAbstractTypeTo(ToTy);
+    ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
     CurModule.LateResolveTypes.erase(I);
   }
 }
@@ -1044,19 +1042,17 @@
   llvm::BasicBlock                       *BasicBlockVal;
   llvm::TerminatorInst                   *TermInstVal;
   llvm::Instruction                      *InstVal;
-  llvm::Constant                         *ConstVal;
-
-  TypeInfo                                TypeVal;
-  llvm::Value                            *ValueVal;
+  ConstInfo                              ConstVal;
+  TypeInfo                               TypeVal;
+  ValueInfo                              ValueVal;
 
   std::vector<std::pair<TypeInfo,char*> >*ArgList;
-  std::vector<llvm::Value*>              *ValueList;
+  std::vector<ValueInfo>                 *ValueList;
   std::list<TypeInfo>                    *TypeList;
   // Represent the RHS of PHI node
-  std::list<std::pair<llvm::Value*,
-                      llvm::BasicBlock*> > *PHIList;
+  std::list<std::pair<llvm::Value*, llvm::BasicBlock*> > *PHIList;
   std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
-  std::vector<llvm::Constant*>           *ConstVector;
+  std::vector<ConstInfo>                 *ConstVector;
 
   llvm::GlobalValue::LinkageTypes         Linkage;
   int64_t                           SInt64Val;
@@ -1374,7 +1370,7 @@
     std::vector<const Type*> Elements;
     for (std::list<TypeInfo>::iterator I = $2->begin(),
            E = $2->end(); I != E; ++I)
-      Elements.push_back(I->type->get());
+      Elements.push_back((*I).type->get());
 
     $$.type = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
     $$.signedness = isSignless;
@@ -1390,7 +1386,7 @@
     if ($1.type->get() == Type::LabelTy)
       GEN_ERROR("Cannot form a pointer to a basic block");
     $$.type = new PATypeHolder(HandleUpRefs(PointerType::get($1.type->get())));
-    $$.signedness = $1.signedness;
+    $$.signedness = isSignless;
     delete $1.type;
     CHECK_FOR_ERROR
   };
@@ -1448,14 +1444,19 @@
                      itostr(NumElements) + "!");
 
     // Verify all elements are correct type!
+    std::vector<Constant*> elems;
     for (unsigned i = 0; i < $3->size(); i++) {
-      if (ETy != (*$3)[i]->getType())
+      if (ETy != (*$3)[i].cnst->getType()) {
         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
                        ETy->getDescription() +"' as required!\nIt is of type '"+
-                       (*$3)[i]->getType()->getDescription() + "'.");
+                       (*$3)[i].cnst->getType()->getDescription() + "'.");
+      } else {
+        elems.push_back((*$3)[i].cnst);
+      }
     }
 
-    $$ = ConstantArray::get(ATy, *$3);
+    $$.cnst = ConstantArray::get(ATy, elems);
+    $$.signedness = isSignless;
     delete $1.type; delete $3;
     CHECK_FOR_ERROR
   }
@@ -1469,7 +1470,8 @@
     if (NumElements != -1 && NumElements != 0) 
       GEN_ERROR("Type mismatch: constant sized array initialized with 0"
                      " arguments, but has size of " + itostr(NumElements) +"!");
-    $$ = ConstantArray::get(ATy, std::vector<Constant*>());
+    $$.cnst = ConstantArray::get(ATy, std::vector<llvm::Constant*>());
+    $$.signedness = isSignless;
     delete $1.type;
     CHECK_FOR_ERROR
   }
@@ -1499,7 +1501,8 @@
       GEN_ERROR("Cannot build string arrays of non byte sized elements!");
     }
     free($3);
-    $$ = ConstantArray::get(ATy, Vals);
+    $$.cnst = ConstantArray::get(ATy, Vals);
+    $$.signedness = isSignless;
     delete $1.type;
     CHECK_FOR_ERROR
   }
@@ -1518,14 +1521,18 @@
                      itostr(NumElements) + "!");
 
     // Verify all elements are correct type!
+    std::vector<Constant*> elems;
     for (unsigned i = 0; i < $3->size(); i++) {
-      if (ETy != (*$3)[i]->getType())
+      if (ETy != (*$3)[i].cnst->getType()) {
         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
            ETy->getDescription() +"' as required!\nIt is of type '"+
-           (*$3)[i]->getType()->getDescription() + "'.");
+           (*$3)[i].cnst->getType()->getDescription() + "'.");
+      } else
+        elems.push_back((*$3)[i].cnst);
     }
 
-    $$ = ConstantPacked::get(PTy, *$3);
+    $$.cnst = ConstantPacked::get(PTy, elems);
+    $$.signedness = isSignless;
     delete $1.type; delete $3;
     CHECK_FOR_ERROR
   }
@@ -1539,14 +1546,18 @@
       GEN_ERROR("Illegal number of initializers for structure type!");
 
     // Check to ensure that constants are compatible with the type initializer!
+    std::vector<Constant*> elems;
     for (unsigned i = 0, e = $3->size(); i != e; ++i)
-      if ((*$3)[i]->getType() != STy->getElementType(i))
+      if ((*$3)[i].cnst->getType() != STy->getElementType(i)) {
         GEN_ERROR("Expected type '" +
                        STy->getElementType(i)->getDescription() +
                        "' for element #" + utostr(i) +
                        " of structure initializer!");
+      } else
+        elems.push_back((*$3)[i].cnst);
 
-    $$ = ConstantStruct::get(STy, *$3);
+    $$.cnst = ConstantStruct::get(STy, elems);
+    $$.signedness = isSignless;
     delete $1.type; delete $3;
     CHECK_FOR_ERROR
   }
@@ -1559,7 +1570,8 @@
     if (STy->getNumContainedTypes() != 0)
       GEN_ERROR("Illegal number of initializers for structure type!");
 
-    $$ = ConstantStruct::get(STy, std::vector<Constant*>());
+    $$.cnst = ConstantStruct::get(STy, std::vector<Constant*>());
+    $$.signedness = isSignless;
     delete $1.type;
     CHECK_FOR_ERROR
   }
@@ -1569,12 +1581,14 @@
       GEN_ERROR("Cannot make null pointer constant with type: '" + 
                      $1.type->get()->getDescription() + "'!");
 
-    $$ = ConstantPointerNull::get(PTy);
+    $$.cnst = ConstantPointerNull::get(PTy);
+    $$.signedness = isSignless;
     delete $1.type;
     CHECK_FOR_ERROR
   }
   | Types UNDEF {
-    $$ = UndefValue::get($1.type->get());
+    $$.cnst = UndefValue::get($1.type->get());
+    $$.signedness = isSignless;
     delete $1.type;
     CHECK_FOR_ERROR
   }
@@ -1635,12 +1649,13 @@
       }
     }
 
-    $$ = cast<GlobalValue>(V);
+    $$.cnst = cast<GlobalValue>(V);
+    $$.signedness = $1.signedness;
     delete $1.type;            // Free the type handle
     CHECK_FOR_ERROR
   }
   | Types ConstExpr {
-    if ($1.type->get() != $2->getType())
+    if ($1.type->get() != $2.cnst->getType())
       GEN_ERROR("Mismatched types for constant expression!");
     $$ = $2;
     delete $1.type;
@@ -1650,7 +1665,8 @@
     const Type *Ty = $1.type->get();
     if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
       GEN_ERROR("Cannot create a null initialized value of this type!");
-    $$ = Constant::getNullValue(Ty);
+    $$.cnst = Constant::getNullValue(Ty);
+    $$.signedness = isSignless;
     delete $1.type;
     CHECK_FOR_ERROR
   };
@@ -1658,33 +1674,38 @@
 ConstVal : SIntType EINT64VAL {      // integral constants
     if (!ConstantInt::isValueValidForType($1.type->get(), $2))
       GEN_ERROR("Constant value doesn't fit in type!");
-    $$ = ConstantInt::get($1.type->get(), $2);
+    $$.cnst = ConstantInt::get($1.type->get(), $2);
+    $$.signedness = $1.signedness;
     CHECK_FOR_ERROR
   }
   | UIntType EUINT64VAL {            // integral constants
     if (!ConstantInt::isValueValidForType($1.type->get(), $2))
       GEN_ERROR("Constant value doesn't fit in type!");
-    $$ = ConstantInt::get($1.type->get(), $2);
+    $$.cnst = ConstantInt::get($1.type->get(), $2);
+    $$.signedness = $1.signedness;
     CHECK_FOR_ERROR
   }
   | BOOL TRUETOK {                      // Boolean constants
-    $$ = ConstantBool::getTrue();
+    $$.cnst = ConstantBool::getTrue();
+    $$.signedness = isSignless;
     CHECK_FOR_ERROR
   }
   | BOOL FALSETOK {                     // Boolean constants
-    $$ = ConstantBool::getFalse();
+    $$.cnst = ConstantBool::getFalse();
+    $$.signedness = isSignless;
     CHECK_FOR_ERROR
   }
   | FPType FPVAL {                   // Float & Double constants
     if (!ConstantFP::isValueValidForType($1.type->get(), $2))
       GEN_ERROR("Floating point constant invalid for type!!");
-    $$ = ConstantFP::get($1.type->get(), $2);
+    $$.cnst = ConstantFP::get($1.type->get(), $2);
+    $$.signedness = isSignless;
     CHECK_FOR_ERROR
   };
 
 
 ConstExpr: CastOps '(' ConstVal TO Types ')' {
-    Constant *Val = $3;
+    Constant *Val = $3.cnst;
     const Type *Ty = $5.type->get();
     if (!Val->getType()->isFirstClassType())
       GEN_ERROR("cast constant expression from a non-primitive type: '" +
@@ -1696,73 +1717,64 @@
       if (Ty == Type::BoolTy) {
         // The previous definition of cast to bool was a compare against zero. 
         // We have to retain that semantic so we do it here.
-        $$ = ConstantExpr::get(Instruction::SetNE, Val, 
+        $$.cnst = ConstantExpr::get(Instruction::SetNE, Val, 
                                Constant::getNullValue(Val->getType()));
       } else if (Val->getType()->isFloatingPoint() && isa<PointerType>(Ty)) {
         Constant *CE = ConstantExpr::getFPToUI(Val, Type::ULongTy);
-        $$ = ConstantExpr::getIntToPtr(CE, Ty);
+        $$.cnst = ConstantExpr::getIntToPtr(CE, Ty);
       } else {
-        $$ = ConstantExpr::getCast(Val, Ty);
+        $$.cnst = ConstantExpr::getCast(Val, Ty);
       }
     } else {
-      $$ = ConstantExpr::getCast($1.opcode, $3, $5.type->get());
+      $$.cnst = ConstantExpr::getCast($1.opcode, $3.cnst, $5.type->get());
     }
     delete $5.type;
   }
   | GETELEMENTPTR '(' ConstVal IndexList ')' {
-    if (!isa<PointerType>($3->getType()))
+    if (!isa<PointerType>($3.cnst->getType()))
       GEN_ERROR("GetElementPtr requires a pointer operand!");
 
-    // LLVM 1.2 and earlier used ubyte struct indices.  Convert any ubyte struct
-    // indices to uint struct indices for compatibility.
-    generic_gep_type_iterator<std::vector<Value*>::iterator>
-      GTI = gep_type_begin($3->getType(), $4->begin(), $4->end()),
-      GTE = gep_type_end($3->getType(), $4->begin(), $4->end());
-    for (unsigned i = 0, e = $4->size(); i != e && GTI != GTE; ++i, ++GTI)
-      if (isa<StructType>(*GTI))        // Only change struct indices
-        if (ConstantInt *CUI = dyn_cast<ConstantInt>((*$4)[i]))
-          if (CUI->getType() == Type::UByteTy)
-            (*$4)[i] = ConstantExpr::getCast(CUI, Type::UIntTy);
+    std::vector<llvm::Value*> IdxVec;
+    for (unsigned i = 0, e = $4->size(); i < e; ++i)
+      if (Constant *C = dyn_cast<Constant>((*$4)[i].val))
+        IdxVec.push_back(C);
+      else
+        GEN_ERROR("Indices to constant getelementptr must be constants!");
 
     const Type *IdxTy =
-      GetElementPtrInst::getIndexedType($3->getType(), *$4, true);
+      GetElementPtrInst::getIndexedType($3.cnst->getType(), IdxVec, true);
     if (!IdxTy)
       GEN_ERROR("Index list invalid for constant getelementptr!");
 
-    std::vector<Constant*> IdxVec;
-    for (unsigned i = 0, e = $4->size(); i != e; ++i)
-      if (Constant *C = dyn_cast<Constant>((*$4)[i]))
-        IdxVec.push_back(C);
-      else
-        GEN_ERROR("Indices to constant getelementptr must be constants!");
-
     delete $4;
 
-    $$ = ConstantExpr::getGetElementPtr($3, IdxVec);
+    $$.cnst = ConstantExpr::getGetElementPtr($3.cnst, IdxVec);
+    $$.signedness = isSignless;
     CHECK_FOR_ERROR
   }
   | SELECT '(' ConstVal ',' ConstVal ',' ConstVal ')' {
-    if ($3->getType() != Type::BoolTy)
+    if ($3.cnst->getType() != Type::BoolTy)
       GEN_ERROR("Select condition must be of boolean type!");
-    if ($5->getType() != $7->getType())
+    if ($5.cnst->getType() != $7.cnst->getType())
       GEN_ERROR("Select operand types must match!");
-    $$ = ConstantExpr::getSelect($3, $5, $7);
+    $$.cnst = ConstantExpr::getSelect($3.cnst, $5.cnst, $7.cnst);
+    $$.signedness = isSignless;
     CHECK_FOR_ERROR
   }
   | ArithmeticOps '(' ConstVal ',' ConstVal ')' {
-    if ($3->getType() != $5->getType())
+    if ($3.cnst->getType() != $5.cnst->getType())
       GEN_ERROR("Binary operator types must match!");
     // First, make sure we're dealing with the right opcode by upgrading from
     // obsolete versions.
-    sanitizeOpcode($1, $3->getType());
+    sanitizeOpcode($1, $3.cnst->getType());
     CHECK_FOR_ERROR;
 
     // HACK: llvm 1.3 and earlier used to emit invalid pointer constant exprs.
     // To retain backward compatibility with these early compilers, we emit a
     // cast to the appropriate integer type automatically if we are in the
     // broken case.  See PR424 for more information.
-    if (!isa<PointerType>($3->getType())) {
-      $$ = ConstantExpr::get($1.opcode, $3, $5);
+    if (!isa<PointerType>($3.cnst->getType())) {
+      $$.cnst = ConstantExpr::get($1.opcode, $3.cnst, $5.cnst);
     } else {
       const Type *IntPtrTy = 0;
       switch (CurModule.CurrentModule->getPointerSize()) {
@@ -1770,56 +1782,64 @@
       case Module::Pointer64: IntPtrTy = Type::LongTy; break;
       default: GEN_ERROR("invalid pointer binary constant expr!");
       }
-      $$ = ConstantExpr::get($1.opcode, ConstantExpr::getCast($3, IntPtrTy),
-                             ConstantExpr::getCast($5, IntPtrTy));
-      $$ = ConstantExpr::getCast($$, $3->getType());
+      $$.cnst = ConstantExpr::get($1.opcode, 
+                                  ConstantExpr::getCast($3.cnst, IntPtrTy),
+                                  ConstantExpr::getCast($5.cnst, IntPtrTy));
+      $$.cnst = ConstantExpr::getCast($$.cnst, $3.cnst->getType());
     }
+    $$.signedness = $3.signedness;
     CHECK_FOR_ERROR
   }
   | LogicalOps '(' ConstVal ',' ConstVal ')' {
-    if ($3->getType() != $5->getType())
+    if ($3.cnst->getType() != $5.cnst->getType())
       GEN_ERROR("Logical operator types must match!");
-    if (!$3->getType()->isIntegral()) {
-      if (!isa<PackedType>($3->getType()) || 
-          !cast<PackedType>($3->getType())->getElementType()->isIntegral())
+    if (!$3.cnst->getType()->isIntegral()) {
+      if (!isa<PackedType>($3.cnst->getType()) || 
+          !cast<PackedType>($3.cnst->getType())->getElementType()->isIntegral())
         GEN_ERROR("Logical operator requires integral operands!");
     }
-    $$ = ConstantExpr::get($1.opcode, $3, $5);
+    $$.cnst = ConstantExpr::get($1.opcode, $3.cnst, $5.cnst);
+    $$.signedness = $3.signedness;
     CHECK_FOR_ERROR
   }
   | SetCondOps '(' ConstVal ',' ConstVal ')' {
-    if ($3->getType() != $5->getType())
+    if ($3.cnst->getType() != $5.cnst->getType())
       GEN_ERROR("setcc operand types must match!");
-    $$ = ConstantExpr::get($1.opcode, $3, $5);
+    $$.cnst = ConstantExpr::get($1.opcode, $3.cnst, $5.cnst);
+    $$.signedness = isSignless;
     CHECK_FOR_ERROR
   }
   | ShiftOps '(' ConstVal ',' ConstVal ')' {
-    if ($5->getType() != Type::UByteTy)
+    if ($5.cnst->getType() != Type::UByteTy)
       GEN_ERROR("Shift count for shift constant must be unsigned byte!");
-    if (!$3->getType()->isInteger())
+    if (!$3.cnst->getType()->isInteger())
       GEN_ERROR("Shift constant expression requires integer operand!");
     // Handle opcode upgrade situations
-    sanitizeOpcode($1, $3->getType());
+    sanitizeOpcode($1, $3.cnst->getType());
     CHECK_FOR_ERROR;
-    $$ = ConstantExpr::get($1.opcode, $3, $5);
+    $$.cnst = ConstantExpr::get($1.opcode, $3.cnst, $5.cnst);
+    $$.signedness = $3.signedness;
     CHECK_FOR_ERROR
   }
   | EXTRACTELEMENT '(' ConstVal ',' ConstVal ')' {
-    if (!ExtractElementInst::isValidOperands($3, $5))
+    if (!ExtractElementInst::isValidOperands($3.cnst, $5.cnst))
       GEN_ERROR("Invalid extractelement operands!");
-    $$ = ConstantExpr::getExtractElement($3, $5);
+    $$.cnst = ConstantExpr::getExtractElement($3.cnst, $5.cnst);
+    $$.signedness = $3.signedness;
     CHECK_FOR_ERROR
   }
   | INSERTELEMENT '(' ConstVal ',' ConstVal ',' ConstVal ')' {
-    if (!InsertElementInst::isValidOperands($3, $5, $7))
+    if (!InsertElementInst::isValidOperands($3.cnst, $5.cnst, $7.cnst))
       GEN_ERROR("Invalid insertelement operands!");
-    $$ = ConstantExpr::getInsertElement($3, $5, $7);
+    $$.cnst = ConstantExpr::getInsertElement($3.cnst, $5.cnst, $7.cnst);
+    $$.signedness = isSignless;
     CHECK_FOR_ERROR
   }
   | SHUFFLEVECTOR '(' ConstVal ',' ConstVal ',' ConstVal ')' {
-    if (!ShuffleVectorInst::isValidOperands($3, $5, $7))
+    if (!ShuffleVectorInst::isValidOperands($3.cnst, $5.cnst, $7.cnst))
       GEN_ERROR("Invalid shufflevector operands!");
-    $$ = ConstantExpr::getShuffleVector($3, $5, $7);
+    $$.cnst = ConstantExpr::getShuffleVector($3.cnst, $5.cnst, $7.cnst);
+    $$.signedness = isSignless;
     CHECK_FOR_ERROR
   };
 
@@ -1830,7 +1850,7 @@
     CHECK_FOR_ERROR
   }
   | ConstVal {
-    $$ = new std::vector<Constant*>();
+    $$ = new std::vector<ConstInfo>();
     $$->push_back($1);
     CHECK_FOR_ERROR
   };
@@ -1903,7 +1923,7 @@
       CHECK_FOR_ERROR
       // If this is a named type that is not a redefinition, add it to the slot
       // table.
-      CurModule.Types.push_back($4);
+      CurModule.Types.push_back(*($4.type));
     } else {
       delete $4.type;
     }
@@ -1916,9 +1936,9 @@
     CHECK_FOR_ERROR
   }
   | ConstPool OptAssign OptLinkage GlobalType ConstVal {
-    if ($5 == 0) 
+    if ($5.cnst == 0) 
       GEN_ERROR("Global value initializer is not a constant!");
-    CurGV = ParseGlobalVariable($2, $3, $4, $5->getType(), $5);
+    CurGV = ParseGlobalVariable($2, $3, $4, $5.cnst->getType(), $5.cnst);
     CHECK_FOR_ERROR
   } GlobalVarAttributes {
     CurGV = 0;
@@ -2235,7 +2255,7 @@
     CHECK_FOR_ERROR
   }
   | '<' ConstVector '>' { // Nonempty unsized packed vector
-    const Type *ETy = (*$2)[0]->getType();
+    const Type *ETy = (*$2)[0].cnst->getType();
     int NumElements = $2->size(); 
     
     PackedType* pt = PackedType::get(ETy, NumElements);
@@ -2243,19 +2263,22 @@
        HandleUpRefs(PackedType::get( ETy, NumElements)));
     
     // Verify all elements are correct type!
+    std::vector<Constant*> elems;
     for (unsigned i = 0; i < $2->size(); i++) {
-      if (ETy != (*$2)[i]->getType())
+      if (ETy != (*$2)[i].cnst->getType()) {
         GEN_ERROR("Element #" + utostr(i) + " is not of type '" + 
                      ETy->getDescription() +"' as required!\nIt is of type '" +
-                     (*$2)[i]->getType()->getDescription() + "'.");
+                     (*$2)[i].cnst->getType()->getDescription() + "'.");
+      } else
+        elems.push_back((*$2)[i].cnst);
     }
 
-    $$ = ValID::create(ConstantPacked::get(pt, *$2));
+    $$ = ValID::create(ConstantPacked::get(pt, elems));
     delete PTy; delete $2;
     CHECK_FOR_ERROR
   }
   | ConstExpr {
-    $$ = ValID::create($1);
+    $$ = ValID::create($1.cnst);
     CHECK_FOR_ERROR
   }
   | ASM_TOK OptSideEffect STRINGCONSTANT ',' STRINGCONSTANT {
@@ -2289,8 +2312,10 @@
 // type immediately preceeds the value reference, and allows complex constant
 // pool references (for things like: 'ret [2 x int] [ int 12, int 42]')
 ResolvedVal : Types ValueRef {
-    $$ = getVal($1.type->get(), $2); delete $1.type;
+    $$.val = getVal($1.type->get(), $2); 
+    delete $1.type;
     CHECK_FOR_ERROR
+    $$.signedness = $1.signedness;
   };
 
 BasicBlockList : BasicBlockList BasicBlock {
@@ -2352,7 +2377,7 @@
   };
 
 BBTerminatorInst : RET ResolvedVal {              // Return with a result...
-    $$ = new ReturnInst($2);
+    $$ = new ReturnInst($2.val);
     CHECK_FOR_ERROR
   }
   | RET VOID {                                       // Return with no result...
@@ -2411,9 +2436,9 @@
       // Pull out the types of all of the arguments...
       std::vector<const Type*> ParamTypes;
       if ($6) {
-        for (std::vector<Value*>::iterator I = $6->begin(), E = $6->end();
+        for (std::vector<ValueInfo>::iterator I = $6->begin(), E = $6->end();
              I != E; ++I)
-          ParamTypes.push_back((*I)->getType());
+          ParamTypes.push_back((*I).val->getType());
       }
 
       bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
@@ -2439,17 +2464,26 @@
       //
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      std::vector<Value*>::iterator ArgI = $6->begin(), ArgE = $6->end();
+      std::vector<ValueInfo>::iterator ArgI = $6->begin(), ArgE = $6->end();
 
-      for (; ArgI != ArgE && I != E; ++ArgI, ++I)
-        if ((*ArgI)->getType() != *I)
-          GEN_ERROR("Parameter " +(*ArgI)->getName()+ " is not of type '" +
-                         (*I)->getDescription() + "'!");
-
-      if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
-        GEN_ERROR("Invalid number of parameters detected!");
-
-      $$ = new InvokeInst(V, Normal, Except, *$6);
+      std::vector<Value*> args;
+      for (; ArgI != ArgE; ++ArgI)
+        if (I == E) {
+          if (Ty->isVarArg()) {
+            args.push_back((*ArgI).val);
+          } else {
+            GEN_ERROR("Too many parameters for function of type " +
+              Ty->getDescription());
+          }
+        } else {
+          if ((*ArgI).val->getType() != *I) {
+            GEN_ERROR("Parameter " + (*ArgI).val->getName() + 
+                      " is not of type '" + (*I)->getDescription() + "'!");
+          } else
+            args.push_back((*ArgI).val);
+          ++I;
+        }
+      $$ = new InvokeInst(V, Normal, Except, args);
     }
     cast<InvokeInst>($$)->setCallingConv($2);
   
@@ -2521,7 +2555,7 @@
 
 
 ValueRefList : ResolvedVal {    // Used for call statements, and memory insts...
-    $$ = new std::vector<Value*>();
+    $$ = new std::vector<ValueInfo>();
     $$->push_back($1);
   }
   | ValueRefList ',' ResolvedVal {
@@ -2531,7 +2565,12 @@
   };
 
 // ValueRefListE - Just like ValueRefList, except that it may also be empty!
-ValueRefListE : ValueRefList | /*empty*/ { $$ = 0; };
+ValueRefListE : ValueRefList {
+    $$ = $1;
+  }
+  | /*empty*/ { 
+    $$ = 0; 
+  };
 
 OptTailCall : TAIL CALL {
     $$ = true;
@@ -2597,28 +2636,28 @@
     std::cerr << "WARNING: Use of eliminated 'not' instruction:"
               << " Replacing with 'xor'.\n";
 
-    Value *Ones = ConstantIntegral::getAllOnesValue($2->getType());
+    Value *Ones = ConstantIntegral::getAllOnesValue($2.val->getType());
     if (Ones == 0)
       GEN_ERROR("Expected integral type for not instruction!");
 
-    $$ = BinaryOperator::create(Instruction::Xor, $2, Ones);
+    $$ = BinaryOperator::create(Instruction::Xor, $2.val, Ones);
     if ($$ == 0)
       GEN_ERROR("Could not create a xor instruction!");
     CHECK_FOR_ERROR
   }
   | ShiftOps ResolvedVal ',' ResolvedVal {
-    if ($4->getType() != Type::UByteTy)
+    if ($4.val->getType() != Type::UByteTy)
       GEN_ERROR("Shift amount must be ubyte!");
-    if (!$2->getType()->isInteger())
+    if (!$2.val->getType()->isInteger())
       GEN_ERROR("Shift constant expression requires integer operand!");
     // Handle opcode upgrade situations
-    sanitizeOpcode($1, $2->getType());
+    sanitizeOpcode($1, $2.val->getType());
     CHECK_FOR_ERROR;
-    $$ = new ShiftInst($1.opcode, $2, $4);
+    $$ = new ShiftInst($1.opcode, $2.val, $4.val);
     CHECK_FOR_ERROR
   }
   | CastOps ResolvedVal TO Types {
-    Value* Val = $2;
+    Value* Val = $2.val;
     const Type* Ty = $4.type->get();
     if (!Val->getType()->isFirstClassType())
       GEN_ERROR("cast from a non-primitive type: '" +
@@ -2630,8 +2669,8 @@
       if (Ty == Type::BoolTy) {
         // The previous definition of cast to bool was a compare against zero. 
         // We have to retain that semantic so we do it here.
-        $$ = new SetCondInst(Instruction::SetNE, $2, 
-                               Constant::getNullValue($2->getType()));
+        $$ = new SetCondInst(Instruction::SetNE, $2.val, 
+                               Constant::getNullValue($2.val->getType()));
       } else if (Val->getType()->isFloatingPoint() && isa<PointerType>(Ty)) {
         CastInst *CI = new FPToUIInst(Val, Type::ULongTy);
         $$ = new IntToPtrInst(CI, Ty);
@@ -2639,27 +2678,27 @@
         $$ = CastInst::createInferredCast(Val, Ty);
       }
     } else {
-      $$ = CastInst::create($1.opcode, $2, $4.type->get());
+      $$ = CastInst::create($1.opcode, $2.val, $4.type->get());
     }
     delete $4.type;
   }
   | SELECT ResolvedVal ',' ResolvedVal ',' ResolvedVal {
-    if ($2->getType() != Type::BoolTy)
+    if ($2.val->getType() != Type::BoolTy)
       GEN_ERROR("select condition must be boolean!");
-    if ($4->getType() != $6->getType())
+    if ($4.val->getType() != $6.val->getType())
       GEN_ERROR("select value types should match!");
-    $$ = new SelectInst($2, $4, $6);
+    $$ = new SelectInst($2.val, $4.val, $6.val);
     CHECK_FOR_ERROR
   }
   | VAARG ResolvedVal ',' Types {
     NewVarArgs = true;
-    $$ = new VAArgInst($2, $4.type->get());
+    $$ = new VAArgInst($2.val, $4.type->get());
     delete $4.type;
     CHECK_FOR_ERROR
   }
   | VAARG_old ResolvedVal ',' Types {
     ObsoleteVarArgs = true;
-    const Type* ArgTy = $2->getType();
+    const Type* ArgTy = $2.val->getType();
     Function* NF = CurModule.CurrentModule->
       getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0);
 
@@ -2670,7 +2709,7 @@
     //b = vaarg foo, t
     AllocaInst* foo = new AllocaInst(ArgTy, 0, "vaarg.fix");
     CurBB->getInstList().push_back(foo);
-    CallInst* bar = new CallInst(NF, $2);
+    CallInst* bar = new CallInst(NF, $2.val);
     CurBB->getInstList().push_back(bar);
     CurBB->getInstList().push_back(new StoreInst(bar, foo));
     $$ = new VAArgInst(foo, $4.type->get());
@@ -2679,7 +2718,7 @@
   }
   | VANEXT_old ResolvedVal ',' Types {
     ObsoleteVarArgs = true;
-    const Type* ArgTy = $2->getType();
+    const Type* ArgTy = $2.val->getType();
     Function* NF = CurModule.CurrentModule->
       getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0);
 
@@ -2691,7 +2730,7 @@
     //b = load foo
     AllocaInst* foo = new AllocaInst(ArgTy, 0, "vanext.fix");
     CurBB->getInstList().push_back(foo);
-    CallInst* bar = new CallInst(NF, $2);
+    CallInst* bar = new CallInst(NF, $2.val);
     CurBB->getInstList().push_back(bar);
     CurBB->getInstList().push_back(new StoreInst(bar, foo));
     Instruction* tmp = new VAArgInst(foo, $4.type->get());
@@ -2701,21 +2740,21 @@
     CHECK_FOR_ERROR
   }
   | EXTRACTELEMENT ResolvedVal ',' ResolvedVal {
-    if (!ExtractElementInst::isValidOperands($2, $4))
+    if (!ExtractElementInst::isValidOperands($2.val, $4.val))
       GEN_ERROR("Invalid extractelement operands!");
-    $$ = new ExtractElementInst($2, $4);
+    $$ = new ExtractElementInst($2.val, $4.val);
     CHECK_FOR_ERROR
   }
   | INSERTELEMENT ResolvedVal ',' ResolvedVal ',' ResolvedVal {
-    if (!InsertElementInst::isValidOperands($2, $4, $6))
+    if (!InsertElementInst::isValidOperands($2.val, $4.val, $6.val))
       GEN_ERROR("Invalid insertelement operands!");
-    $$ = new InsertElementInst($2, $4, $6);
+    $$ = new InsertElementInst($2.val, $4.val, $6.val);
     CHECK_FOR_ERROR
   }
   | SHUFFLEVECTOR ResolvedVal ',' ResolvedVal ',' ResolvedVal {
-    if (!ShuffleVectorInst::isValidOperands($2, $4, $6))
+    if (!ShuffleVectorInst::isValidOperands($2.val, $4.val, $6.val))
       GEN_ERROR("Invalid shufflevector operands!");
-    $$ = new ShuffleVectorInst($2, $4, $6);
+    $$ = new ShuffleVectorInst($2.val, $4.val, $6.val);
     CHECK_FOR_ERROR
   }
   | PHI_TOK PHIList {
@@ -2742,9 +2781,9 @@
       // Pull out the types of all of the arguments...
       std::vector<const Type*> ParamTypes;
       if ($6) {
-        for (std::vector<Value*>::iterator I = $6->begin(), E = $6->end();
+        for (std::vector<ValueInfo>::iterator I = $6->begin(), E = $6->end();
              I != E; ++I)
-          ParamTypes.push_back((*I)->getType());
+          ParamTypes.push_back((*I).val->getType());
       }
 
       bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
@@ -2775,17 +2814,30 @@
       //
       FunctionType::param_iterator I = Ty->param_begin();
       FunctionType::param_iterator E = Ty->param_end();
-      std::vector<Value*>::iterator ArgI = $6->begin(), ArgE = $6->end();
+      std::vector<ValueInfo>::iterator ArgI = $6->begin(), ArgE = $6->end();
 
-      for (; ArgI != ArgE && I != E; ++ArgI, ++I)
-        if ((*ArgI)->getType() != *I)
-          GEN_ERROR("Parameter " +(*ArgI)->getName()+ " is not of type '" +
-                         (*I)->getDescription() + "'!");
+      std::vector<Value*> args;
+      for (; ArgI != ArgE ; ++ArgI)
+        if (I == E) {
+          if (Ty->isVarArg()) {
+            args.push_back((*ArgI).val);
+          } else {
+            GEN_ERROR("Too many parameters for function of type " +
+              Ty->getDescription());
+          }
+        } else {
+          if ((*ArgI).val->getType() != *I) {
+            GEN_ERROR("Parameter " + (*ArgI).val->getName() + 
+                      " is not of type '" + (*I)->getDescription() + "'!");
+          } else
+            args.push_back((*ArgI).val);
+          ++I;
+        }
 
       if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
         GEN_ERROR("Invalid number of parameters detected!");
 
-      $$ = new CallInst(V, *$6);
+      $$ = new CallInst(V, args);
     }
     cast<CallInst>($$)->setTailCall($1);
     cast<CallInst>($$)->setCallingConv($2);
@@ -2804,7 +2856,7 @@
     $$ = $2; 
     CHECK_FOR_ERROR
   } | /* empty */ { 
-    $$ = new std::vector<Value*>(); 
+    $$ = new std::vector<ValueInfo>(); 
     CHECK_FOR_ERROR
   };
 
@@ -2842,10 +2894,10 @@
     delete $2.type;
   }
   | FREE ResolvedVal {
-    if (!isa<PointerType>($2->getType()))
+    if (!isa<PointerType>($2.val->getType()))
       GEN_ERROR("Trying to free nonpointer type " + 
-                     $2->getType()->getDescription() + "!");
-    $$ = new FreeInst($2);
+                     $2.val->getType()->getDescription() + "!");
+    $$ = new FreeInst($2.val);
     CHECK_FOR_ERROR
   }
 
@@ -2867,36 +2919,29 @@
       GEN_ERROR("Can't store to a nonpointer type: " +
                      ($5.type->get())->getDescription());
     const Type *ElTy = PT->getElementType();
-    if (ElTy != $3->getType())
-      GEN_ERROR("Can't store '" + $3->getType()->getDescription() +
+    if (ElTy != $3.val->getType())
+      GEN_ERROR("Can't store '" + $3.val->getType()->getDescription() +
                      "' into space of type '" + ElTy->getDescription() + "'!");
 
     Value* tmpVal = getVal($5.type->get(), $6);
     CHECK_FOR_ERROR
-    $$ = new StoreInst($3, tmpVal, $1);
+    $$ = new StoreInst($3.val, tmpVal, $1);
     delete $5.type;
   }
   | GETELEMENTPTR Types ValueRef IndexList {
     if (!isa<PointerType>($2.type->get()))
       GEN_ERROR("getelementptr insn requires pointer operand!");
 
-    // LLVM 1.2 and earlier used ubyte struct indices.  Convert any ubyte struct
-    // indices to uint struct indices for compatibility.
-    generic_gep_type_iterator<std::vector<Value*>::iterator>
-      GTI = gep_type_begin($2.type->get(), $4->begin(), $4->end()),
-      GTE = gep_type_end($2.type->get(), $4->begin(), $4->end());
-    for (unsigned i = 0, e = $4->size(); i != e && GTI != GTE; ++i, ++GTI)
-      if (isa<StructType>(*GTI))        // Only change struct indices
-        if (ConstantInt *CUI = dyn_cast<ConstantInt>((*$4)[i]))
-          if (CUI->getType() == Type::UByteTy)
-            (*$4)[i] = ConstantExpr::getCast(CUI, Type::UIntTy);
+    std::vector<Value*> indices;
+    for (unsigned i = 0, e = $4->size(); i != e; ++i)
+      indices.push_back((*$4)[i].val);
 
-    if (!GetElementPtrInst::getIndexedType($2.type->get(), *$4, true))
+    if (!GetElementPtrInst::getIndexedType($2.type->get(), indices, true))
       GEN_ERROR("Invalid getelementptr indices for type '" +
                      $2.type->get()->getDescription()+ "'!");
     Value* tmpVal = getVal($2.type->get(), $3);
     CHECK_FOR_ERROR
-    $$ = new GetElementPtrInst(tmpVal, *$4);
+    $$ = new GetElementPtrInst(tmpVal, indices);
     delete $2.type; 
     delete $4;
   };






More information about the llvm-commits mailing list