[llvm-commits] CVS: llvm/tools/llvm-upgrade/UpgradeParser.cpp UpgradeParser.cpp.cvs UpgradeParser.h.cvs UpgradeParser.y.cvs

Reid Spencer reid at x10sys.com
Sat Dec 2 08:20:06 PST 2006



Changes in directory llvm/tools/llvm-upgrade:

UpgradeParser.cpp updated: 1.12 -> 1.13
UpgradeParser.cpp.cvs updated: 1.12 -> 1.13
UpgradeParser.h.cvs updated: 1.8 -> 1.9
UpgradeParser.y.cvs updated: 1.12 -> 1.13
---
Log message:

Regenerate.


---
Diffs of the changes:  (+623 -520)

 UpgradeParser.cpp     |  501 ++++++++++++++++++++++++++------------------------
 UpgradeParser.cpp.cvs |  501 ++++++++++++++++++++++++++------------------------
 UpgradeParser.h.cvs   |    2 
 UpgradeParser.y.cvs   |  139 ++++++++-----
 4 files changed, 623 insertions(+), 520 deletions(-)


Index: llvm/tools/llvm-upgrade/UpgradeParser.cpp
diff -u llvm/tools/llvm-upgrade/UpgradeParser.cpp:1.12 llvm/tools/llvm-upgrade/UpgradeParser.cpp:1.13
--- llvm/tools/llvm-upgrade/UpgradeParser.cpp:1.12	Sat Dec  2 09:16:01 2006
+++ llvm/tools/llvm-upgrade/UpgradeParser.cpp	Sat Dec  2 10:19:52 2006
@@ -337,6 +337,7 @@
 static std::ostream *O = 0;
 std::istream* LexInput = 0;
 unsigned SizeOfPointer = 32;
+static uint64_t unique = 1;
 
 typedef std::vector<TypeInfo> TypeVector;
 static TypeVector EnumeratedTypes;
@@ -479,8 +480,9 @@
     if (isConst)
       Source = "ulong fptoui(" + Source + " to ulong)";
     else {
-      *O << "    %cast_upgrade = fptoui " + Source + " to ulong\n";
-      Source = "ulong %cast_upgrade";
+      *O << "    %cast_upgrade" << unique << " = fptoui " << Source 
+         << " to ulong\n";
+      Source = "ulong %cast_upgrade" + llvm::utostr(unique);
     }
     // Update the SrcTy for the getCastOpcode call below
     SrcTy.destroy();
@@ -529,7 +531,7 @@
 #endif
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 209 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 211 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
 typedef union YYSTYPE {
   std::string*    String;
   TypeInfo        Type;
@@ -538,7 +540,7 @@
   ValueList*      ValList;
 } YYSTYPE;
 /* Line 196 of yacc.c.  */
-#line 542 "UpgradeParser.tab.c"
+#line 544 "UpgradeParser.tab.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -550,7 +552,7 @@
 
 
 /* Line 219 of yacc.c.  */
-#line 554 "UpgradeParser.tab.c"
+#line 556 "UpgradeParser.tab.c"
 
 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
 # define YYSIZE_T __SIZE_TYPE__
@@ -888,33 +890,33 @@
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short int yyrline[] =
 {
-       0,   269,   269,   269,   270,   270,   274,   274,   274,   274,
-     274,   274,   274,   274,   274,   275,   275,   275,   276,   276,
-     276,   276,   276,   276,   277,   277,   277,   277,   278,   278,
-     278,   278,   278,   278,   278,   279,   279,   279,   279,   279,
-     279,   284,   284,   284,   284,   285,   285,   285,   285,   286,
-     286,   287,   287,   290,   293,   298,   298,   298,   298,   298,
-     298,   299,   300,   303,   303,   303,   303,   303,   304,   305,
-     310,   315,   316,   319,   320,   328,   334,   335,   338,   339,
-     348,   349,   362,   362,   363,   363,   364,   368,   368,   368,
-     368,   368,   368,   368,   369,   369,   369,   369,   369,   371,
-     375,   379,   384,   389,   395,   402,   409,   415,   419,   429,
-     432,   440,   441,   446,   449,   459,   465,   470,   476,   482,
-     488,   493,   499,   505,   511,   517,   523,   529,   535,   541,
-     547,   555,   569,   581,   586,   591,   596,   601,   609,   614,
-     619,   629,   634,   639,   639,   649,   654,   657,   662,   666,
-     670,   673,   684,   689,   694,   701,   708,   715,   722,   727,
-     732,   737,   739,   739,   742,   747,   754,   759,   766,   773,
-     778,   779,   787,   787,   788,   788,   790,   797,   801,   805,
-     808,   813,   816,   818,   838,   841,   845,   854,   855,   857,
-     865,   866,   867,   871,   884,   885,   888,   888,   888,   888,
-     888,   888,   888,   889,   890,   895,   896,   905,   905,   908,
-     908,   914,   921,   924,   932,   936,   941,   944,   950,   955,
-     960,   965,   972,   978,   984,  1004,  1009,  1015,  1020,  1028,
-    1037,  1043,  1051,  1055,  1062,  1063,  1067,  1072,  1075,  1080,
-    1085,  1090,  1095,  1103,  1117,  1122,  1127,  1132,  1137,  1142,
-    1147,  1164,  1169,  1170,  1174,  1175,  1178,  1185,  1192,  1199,
-    1206,  1211,  1218,  1225
+       0,   271,   271,   271,   272,   272,   276,   276,   276,   276,
+     276,   276,   276,   276,   276,   277,   277,   277,   278,   278,
+     278,   278,   278,   278,   279,   279,   279,   279,   280,   280,
+     280,   280,   280,   280,   280,   281,   281,   281,   281,   281,
+     281,   286,   286,   286,   286,   287,   287,   287,   287,   288,
+     288,   289,   289,   292,   295,   300,   300,   300,   300,   300,
+     300,   301,   302,   305,   305,   305,   305,   305,   306,   307,
+     312,   317,   318,   321,   322,   330,   336,   337,   340,   341,
+     350,   351,   364,   364,   365,   365,   366,   370,   370,   370,
+     370,   370,   370,   370,   371,   371,   371,   371,   371,   373,
+     377,   381,   386,   391,   397,   404,   411,   417,   421,   431,
+     434,   442,   443,   448,   451,   461,   467,   472,   478,   484,
+     490,   495,   501,   507,   513,   519,   525,   531,   537,   543,
+     549,   557,   571,   583,   588,   593,   598,   603,   611,   616,
+     621,   631,   636,   641,   641,   651,   656,   659,   664,   668,
+     672,   675,   686,   691,   696,   703,   710,   717,   724,   729,
+     734,   739,   741,   741,   744,   749,   756,   761,   768,   775,
+     780,   781,   789,   789,   790,   790,   792,   799,   803,   807,
+     810,   815,   818,   820,   840,   843,   847,   856,   857,   859,
+     867,   868,   869,   873,   886,   887,   890,   890,   890,   890,
+     890,   890,   890,   891,   892,   897,   898,   907,   907,   911,
+     917,   928,   934,   937,   945,   949,   954,   957,   963,   968,
+     973,   978,   986,   993,   999,  1019,  1024,  1030,  1035,  1043,
+    1052,  1059,  1067,  1071,  1078,  1079,  1083,  1088,  1091,  1096,
+    1101,  1106,  1111,  1119,  1133,  1138,  1143,  1148,  1153,  1158,
+    1163,  1180,  1185,  1186,  1190,  1191,  1194,  1201,  1208,  1215,
+    1222,  1227,  1234,  1241
 };
 #endif
 
@@ -2201,26 +2203,26 @@
   switch (yyn)
     {
         case 53:
-#line 290 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 292 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[-1].String);
   ;}
     break;
 
   case 54:
-#line 293 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 295 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = new std::string(""); 
   ;}
     break;
 
   case 62:
-#line 300 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 302 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(""); ;}
     break;
 
   case 69:
-#line 305 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 307 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     *(yyvsp[-1].String) += *(yyvsp[0].String); 
     delete (yyvsp[0].String);
@@ -2229,27 +2231,27 @@
     break;
 
   case 70:
-#line 310 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 312 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(""); ;}
     break;
 
   case 71:
-#line 315 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 317 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 72:
-#line 316 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 318 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { *(yyvsp[-1].String) += " " + *(yyvsp[0].String); delete (yyvsp[0].String); (yyval.String) = (yyvsp[-1].String); ;}
     break;
 
   case 73:
-#line 319 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 321 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 74:
-#line 320 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 322 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyvsp[-1].String)->insert(0, ", "); 
     *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
@@ -2259,7 +2261,7 @@
     break;
 
   case 75:
-#line 328 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 330 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -2268,17 +2270,17 @@
     break;
 
   case 76:
-#line 334 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 336 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 78:
-#line 338 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 340 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 79:
-#line 339 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 341 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
       (yyvsp[-1].String)->insert(0, ", ");
       if (!(yyvsp[0].String)->empty())
@@ -2289,7 +2291,7 @@
     break;
 
   case 81:
-#line 349 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 351 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
       *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
       delete (yyvsp[0].String);
@@ -2298,7 +2300,7 @@
     break;
 
   case 99:
-#line 371 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 373 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyval.Type).newTy = (yyvsp[0].String); 
     (yyval.Type).oldTy = OpaqueTy; 
@@ -2306,7 +2308,7 @@
     break;
 
   case 100:
-#line 375 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 377 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyval.Type).newTy = (yyvsp[0].String);
     (yyval.Type).oldTy = UnresolvedTy;
@@ -2314,7 +2316,7 @@
     break;
 
   case 102:
-#line 384 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 386 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {                   // Type UpReference
     (yyvsp[0].String)->insert(0, "\\");
     (yyval.Type).newTy = (yyvsp[0].String);
@@ -2323,7 +2325,7 @@
     break;
 
   case 103:
-#line 389 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 391 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {           // Function derived type?
     *(yyvsp[-3].Type).newTy += "( " + *(yyvsp[-1].String) + " )";
     delete (yyvsp[-1].String);
@@ -2333,7 +2335,7 @@
     break;
 
   case 104:
-#line 395 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 397 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {          // Sized array type?
     (yyvsp[-3].String)->insert(0,"[ ");
     *(yyvsp[-3].String) += " x " + *(yyvsp[-1].Type).newTy + " ]";
@@ -2344,7 +2346,7 @@
     break;
 
   case 105:
-#line 402 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 404 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {          // Packed array type?
     (yyvsp[-3].String)->insert(0,"< ");
     *(yyvsp[-3].String) += " x " + *(yyvsp[-1].Type).newTy + " >";
@@ -2355,7 +2357,7 @@
     break;
 
   case 106:
-#line 409 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 411 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {                        // Structure type?
     (yyvsp[-1].String)->insert(0, "{ ");
     *(yyvsp[-1].String) += " }";
@@ -2365,7 +2367,7 @@
     break;
 
   case 107:
-#line 415 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 417 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {                                  // Empty structure type?
     (yyval.Type).newTy = new std::string("{}");
     (yyval.Type).oldTy = StructTy;
@@ -2373,7 +2375,7 @@
     break;
 
   case 108:
-#line 419 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 421 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {                             // Pointer type?
     *(yyvsp[-1].Type).newTy += '*';
     (yyvsp[-1].Type).oldTy = PointerTy;
@@ -2382,14 +2384,14 @@
     break;
 
   case 109:
-#line 429 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 431 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[0].Type).newTy;
   ;}
     break;
 
   case 110:
-#line 432 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 434 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", " + *(yyvsp[0].Type).newTy;
     delete (yyvsp[0].Type).newTy;
@@ -2398,7 +2400,7 @@
     break;
 
   case 112:
-#line 441 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 443 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", ...";
     delete (yyvsp[0].String);
@@ -2407,21 +2409,21 @@
     break;
 
   case 113:
-#line 446 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 448 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[0].String);
   ;}
     break;
 
   case 114:
-#line 449 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 451 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = new std::string();
   ;}
     break;
 
   case 115:
-#line 459 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 461 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { // Nonempty unsized arr
     (yyval.Const).type = (yyvsp[-3].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-3].Type).newTy);
@@ -2431,7 +2433,7 @@
     break;
 
   case 116:
-#line 465 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 467 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-2].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-2].Type).newTy);
@@ -2440,7 +2442,7 @@
     break;
 
   case 117:
-#line 470 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 472 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-2].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-2].Type).newTy);
@@ -2450,7 +2452,7 @@
     break;
 
   case 118:
-#line 476 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 478 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { // Nonempty unsized arr
     (yyval.Const).type = (yyvsp[-3].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-3].Type).newTy);
@@ -2460,7 +2462,7 @@
     break;
 
   case 119:
-#line 482 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 484 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-3].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-3].Type).newTy);
@@ -2470,7 +2472,7 @@
     break;
 
   case 120:
-#line 488 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 490 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-2].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-2].Type).newTy);
@@ -2479,7 +2481,7 @@
     break;
 
   case 121:
-#line 493 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 495 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2489,7 +2491,7 @@
     break;
 
   case 122:
-#line 499 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 501 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2499,7 +2501,7 @@
     break;
 
   case 123:
-#line 505 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 507 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2509,7 +2511,7 @@
     break;
 
   case 124:
-#line 511 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 513 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2519,7 +2521,7 @@
     break;
 
   case 125:
-#line 517 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 519 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2529,7 +2531,7 @@
     break;
 
   case 126:
-#line 523 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 525 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {      // integral constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2539,7 +2541,7 @@
     break;
 
   case 127:
-#line 529 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 531 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {            // integral constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2549,7 +2551,7 @@
     break;
 
   case 128:
-#line 535 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 537 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {                      // Boolean constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2559,7 +2561,7 @@
     break;
 
   case 129:
-#line 541 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 543 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {                     // Boolean constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2569,7 +2571,7 @@
     break;
 
   case 130:
-#line 547 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 549 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {                   // Float & Double constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2579,7 +2581,7 @@
     break;
 
   case 131:
-#line 555 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 557 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string source = *(yyvsp[-3].Const).cnst;
     TypeInfo DstTy = (yyvsp[-1].Type);
@@ -2597,7 +2599,7 @@
     break;
 
   case 132:
-#line 569 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 571 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-4].String) += "(" + *(yyvsp[-2].Const).cnst;
     for (unsigned i = 0; i < (yyvsp[-1].ValList)->size(); ++i) {
@@ -2613,7 +2615,7 @@
     break;
 
   case 133:
-#line 581 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 583 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     (yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -2622,7 +2624,7 @@
     break;
 
   case 134:
-#line 586 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 588 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -2631,7 +2633,7 @@
     break;
 
   case 135:
-#line 591 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 593 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -2640,7 +2642,7 @@
     break;
 
   case 136:
-#line 596 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 598 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -2649,7 +2651,7 @@
     break;
 
   case 137:
-#line 601 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 603 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     const char* shiftop = (yyvsp[-5].String)->c_str();
     if (*(yyvsp[-5].String) == "shr")
@@ -2661,7 +2663,7 @@
     break;
 
   case 138:
-#line 609 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 611 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -2670,7 +2672,7 @@
     break;
 
   case 139:
-#line 614 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 616 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     (yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -2679,7 +2681,7 @@
     break;
 
   case 140:
-#line 619 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 621 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     (yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -2688,7 +2690,7 @@
     break;
 
   case 141:
-#line 629 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 631 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", " + *(yyvsp[0].Const).cnst;
     (yyvsp[0].Const).destroy();
@@ -2697,25 +2699,25 @@
     break;
 
   case 142:
-#line 634 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 636 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(*(yyvsp[0].Const).cnst); (yyvsp[0].Const).destroy(); ;}
     break;
 
   case 145:
-#line 649 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 651 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
 ;}
     break;
 
   case 146:
-#line 654 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 656 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = 0;
   ;}
     break;
 
   case 147:
-#line 657 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 659 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << *(yyvsp[0].String) << "\n";
     delete (yyvsp[0].String);
@@ -2724,7 +2726,7 @@
     break;
 
   case 148:
-#line 662 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 664 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "module asm " << " " << *(yyvsp[0].String) << "\n";
     (yyval.String) = 0;
@@ -2732,7 +2734,7 @@
     break;
 
   case 149:
-#line 666 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 668 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "implementation\n";
     (yyval.String) = 0;
@@ -2740,12 +2742,12 @@
     break;
 
   case 150:
-#line 670 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 672 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = 0; ;}
     break;
 
   case 151:
-#line 673 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 675 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     EnumeratedTypes.push_back((yyvsp[0].Type));
     if (!(yyvsp[-2].String)->empty()) {
@@ -2760,7 +2762,7 @@
     break;
 
   case 152:
-#line 684 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 686 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {       // Function prototypes can be in const pool
     *O << *(yyvsp[0].String) << "\n";
     delete (yyvsp[0].String);
@@ -2769,7 +2771,7 @@
     break;
 
   case 153:
-#line 689 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 691 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {  // Asm blocks can be in the const pool
     *O << *(yyvsp[-2].String) << " " << *(yyvsp[-1].String) << " " << *(yyvsp[0].String) << "\n";
     delete (yyvsp[-2].String); delete (yyvsp[-1].String); delete (yyvsp[0].String); 
@@ -2778,7 +2780,7 @@
     break;
 
   case 154:
-#line 694 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 696 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-4].String)->empty())
       *O << *(yyvsp[-4].String) << " = ";
@@ -2789,7 +2791,7 @@
     break;
 
   case 155:
-#line 701 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 703 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-4].String)->empty())
       *O << *(yyvsp[-4].String) << " = ";
@@ -2800,7 +2802,7 @@
     break;
 
   case 156:
-#line 708 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 710 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-4].String)->empty())
       *O << *(yyvsp[-4].String) << " = ";
@@ -2811,7 +2813,7 @@
     break;
 
   case 157:
-#line 715 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 717 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-4].String)->empty())
       *O << *(yyvsp[-4].String) << " = ";
@@ -2822,7 +2824,7 @@
     break;
 
   case 158:
-#line 722 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 724 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     *O << *(yyvsp[-1].String) << " " << *(yyvsp[0].String) << "\n";
     delete (yyvsp[-1].String); delete (yyvsp[0].String);
@@ -2831,7 +2833,7 @@
     break;
 
   case 159:
-#line 727 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 729 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << *(yyvsp[-2].String) << " = " << *(yyvsp[0].String) << "\n";
     delete (yyvsp[-2].String); delete (yyvsp[0].String);
@@ -2840,14 +2842,14 @@
     break;
 
   case 160:
-#line 732 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 734 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyval.String) = 0;
   ;}
     break;
 
   case 164:
-#line 742 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 744 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -2856,7 +2858,7 @@
     break;
 
   case 165:
-#line 747 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 749 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
     if (*(yyvsp[0].String) == "64")
@@ -2867,7 +2869,7 @@
     break;
 
   case 166:
-#line 754 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 756 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -2876,7 +2878,7 @@
     break;
 
   case 167:
-#line 759 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 761 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -2885,7 +2887,7 @@
     break;
 
   case 168:
-#line 766 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 768 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyvsp[-1].String)->insert(0, "[ ");
     *(yyvsp[-1].String) += " ]";
@@ -2894,7 +2896,7 @@
     break;
 
   case 169:
-#line 773 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 775 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -2903,19 +2905,19 @@
     break;
 
   case 171:
-#line 779 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 781 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = new std::string();
   ;}
     break;
 
   case 175:
-#line 788 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 790 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 176:
-#line 790 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 792 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
   (yyval.String) = (yyvsp[-1].Type).newTy;
   if (!(yyvsp[0].String)->empty())
@@ -2925,7 +2927,7 @@
     break;
 
   case 177:
-#line 797 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 799 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -2933,21 +2935,21 @@
     break;
 
   case 178:
-#line 801 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 803 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[0].String);
   ;}
     break;
 
   case 179:
-#line 805 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 807 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[0].String);
   ;}
     break;
 
   case 180:
-#line 808 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 810 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", ...";
     (yyval.String) = (yyvsp[-2].String);
@@ -2956,19 +2958,19 @@
     break;
 
   case 181:
-#line 813 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 815 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[0].String);
   ;}
     break;
 
   case 182:
-#line 816 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 818 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 183:
-#line 819 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 821 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-7].String)->empty()) {
       *(yyvsp[-7].String) += " ";
@@ -2990,21 +2992,21 @@
     break;
 
   case 184:
-#line 838 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 840 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = new std::string("begin");
   ;}
     break;
 
   case 185:
-#line 841 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 843 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyval.String) = new std::string ("{");
   ;}
     break;
 
   case 186:
-#line 845 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 847 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
   if (!(yyvsp[-2].String)->empty()) {
     *O << *(yyvsp[-2].String) << " ";
@@ -3016,17 +3018,17 @@
     break;
 
   case 187:
-#line 854 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 856 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string("end"); ;}
     break;
 
   case 188:
-#line 855 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 857 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string("}"); ;}
     break;
 
   case 189:
-#line 857 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 859 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
   if ((yyvsp[-1].String))
     *O << *(yyvsp[-1].String);
@@ -3036,12 +3038,12 @@
     break;
 
   case 190:
-#line 865 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 867 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 193:
-#line 871 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 873 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     if (!(yyvsp[-1].String)->empty())
       *(yyvsp[-2].String) += " " + *(yyvsp[-1].String);
@@ -3053,12 +3055,12 @@
     break;
 
   case 194:
-#line 884 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 886 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 204:
-#line 890 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 892 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyvsp[-1].String)->insert(0, "<");
     *(yyvsp[-1].String) += ">";
@@ -3067,7 +3069,7 @@
     break;
 
   case 206:
-#line 896 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 898 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-3].String)->empty()) {
       *(yyvsp[-4].String) += " " + *(yyvsp[-3].String);
@@ -3078,39 +3080,58 @@
   ;}
     break;
 
+  case 209:
+#line 911 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.Value).val = (yyvsp[0].String);
+    (yyval.Value).constant = false;
+    (yyval.Value).type.newTy = 0;
+    (yyval.Value).type.oldTy = UnresolvedTy;
+  ;}
+    break;
+
+  case 210:
+#line 917 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.Value).val = (yyvsp[0].String);
+    (yyval.Value).constant = true;
+    (yyval.Value).type.newTy = 0;
+    (yyval.Value).type.oldTy = UnresolvedTy;
+  ;}
+    break;
+
   case 211:
-#line 914 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 928 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
+    (yyval.Value) = (yyvsp[0].Value);
     (yyval.Value).type = (yyvsp[-1].Type);
-    (yyval.Value).val = new std::string(*(yyvsp[-1].Type).newTy + " ");
-    *(yyval.Value).val += *(yyvsp[0].String);
-    delete (yyvsp[0].String);
+    (yyval.Value).val->insert(0, *(yyvsp[-1].Type).newTy + " ");
   ;}
     break;
 
   case 212:
-#line 921 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 934 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = 0;
   ;}
     break;
 
   case 213:
-#line 924 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 937 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { // Do not allow functions with 0 basic blocks   
     (yyval.String) = 0;
   ;}
     break;
 
   case 214:
-#line 932 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 945 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = 0;
   ;}
     break;
 
   case 215:
-#line 936 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 949 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "    " << *(yyvsp[0].String) << "\n";
     delete (yyvsp[0].String);
@@ -3119,14 +3140,14 @@
     break;
 
   case 216:
-#line 941 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 954 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = 0;
   ;}
     break;
 
   case 217:
-#line 944 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 957 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << *(yyvsp[0].String) << "\n";
     delete (yyvsp[0].String);
@@ -3135,7 +3156,7 @@
     break;
 
   case 218:
-#line 950 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 963 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {              // Return with a result...
     *O << "    " << *(yyvsp[-1].String) << " " << *(yyvsp[0].Value).val << "\n";
     delete (yyvsp[-1].String); (yyvsp[0].Value).destroy();
@@ -3144,7 +3165,7 @@
     break;
 
   case 219:
-#line 955 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 968 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {                                       // Return with no result...
     *O << "    " << *(yyvsp[-1].String) << " " << *(yyvsp[0].Type).newTy << "\n";
     delete (yyvsp[-1].String); (yyvsp[0].Type).destroy();
@@ -3153,52 +3174,54 @@
     break;
 
   case 220:
-#line 960 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 973 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {                         // Unconditional Branch...
-    *O << "    " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].String) << "\n";
-    delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
+    *O << "    " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].Value).val << "\n";
+    delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy();
     (yyval.String) = 0;
   ;}
     break;
 
   case 221:
-#line 965 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 978 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {  
-    *O << "    " << *(yyvsp[-8].String) << " " << *(yyvsp[-7].Type).newTy << " " << *(yyvsp[-6].String) << ", " 
-       << *(yyvsp[-4].Type).newTy << " " << *(yyvsp[-3].String) << ", " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].String) << "\n";
-    delete (yyvsp[-8].String); (yyvsp[-7].Type).destroy(); delete (yyvsp[-6].String); (yyvsp[-4].Type).destroy(); delete (yyvsp[-3].String); 
-    (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
+    *O << "    " << *(yyvsp[-8].String) << " " << *(yyvsp[-7].Type).newTy << " " << *(yyvsp[-6].Value).val << ", " 
+       << *(yyvsp[-4].Type).newTy << " " << *(yyvsp[-3].Value).val << ", " << *(yyvsp[-1].Type).newTy << " " 
+       << *(yyvsp[0].Value).val << "\n";
+    delete (yyvsp[-8].String); (yyvsp[-7].Type).destroy(); (yyvsp[-6].Value).destroy(); (yyvsp[-4].Type).destroy(); (yyvsp[-3].Value).destroy(); 
+    (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy();
     (yyval.String) = 0;
   ;}
     break;
 
   case 222:
-#line 972 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 986 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *O << "    " << *(yyvsp[-8].String) << " " << *(yyvsp[-7].Type).newTy << " " << *(yyvsp[-6].String) << ", " << *(yyvsp[-4].Type).newTy 
-       << " " << *(yyvsp[-3].String) << " [" << *(yyvsp[-1].String) << " ]\n";
-    delete (yyvsp[-8].String); (yyvsp[-7].Type).destroy(); delete (yyvsp[-6].String); (yyvsp[-4].Type).destroy(); delete (yyvsp[-3].String); delete (yyvsp[-1].String);
+    *O << "    " << *(yyvsp[-8].String) << " " << *(yyvsp[-7].Type).newTy << " " << *(yyvsp[-6].Value).val << ", " 
+       << *(yyvsp[-4].Type).newTy << " " << *(yyvsp[-3].Value).val << " [" << *(yyvsp[-1].String) << " ]\n";
+    delete (yyvsp[-8].String); (yyvsp[-7].Type).destroy(); (yyvsp[-6].Value).destroy(); (yyvsp[-4].Type).destroy(); (yyvsp[-3].Value).destroy(); 
+    delete (yyvsp[-1].String);
     (yyval.String) = 0;
   ;}
     break;
 
   case 223:
-#line 978 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 993 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *O << "    " << *(yyvsp[-7].String) << " " << *(yyvsp[-6].Type).newTy << " " << *(yyvsp[-5].String) << ", " 
-       << *(yyvsp[-3].Type).newTy << " " << *(yyvsp[-2].String) << "[]\n";
-    delete (yyvsp[-7].String); (yyvsp[-6].Type).destroy(); delete (yyvsp[-5].String); (yyvsp[-3].Type).destroy(); delete (yyvsp[-2].String);
+    *O << "    " << *(yyvsp[-7].String) << " " << *(yyvsp[-6].Type).newTy << " " << *(yyvsp[-5].Value).val << ", " 
+       << *(yyvsp[-3].Type).newTy << " " << *(yyvsp[-2].Value).val << "[]\n";
+    delete (yyvsp[-7].String); (yyvsp[-6].Type).destroy(); (yyvsp[-5].Value).destroy(); (yyvsp[-3].Type).destroy(); (yyvsp[-2].Value).destroy();
     (yyval.String) = 0;
   ;}
     break;
 
   case 224:
-#line 985 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1000 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "    ";
     if (!(yyvsp[-13].String)->empty())
       *O << *(yyvsp[-13].String) << " = ";
-    *O << *(yyvsp[-12].String) << " " << *(yyvsp[-11].String) << " " << *(yyvsp[-10].Type).newTy << " " << *(yyvsp[-9].String) << " (";
+    *O << *(yyvsp[-12].String) << " " << *(yyvsp[-11].String) << " " << *(yyvsp[-10].Type).newTy << " " << *(yyvsp[-9].Value).val << " (";
     for (unsigned i = 0; i < (yyvsp[-7].ValList)->size(); ++i) {
       ValueInfo& VI = (*(yyvsp[-7].ValList))[i];
       *O << *VI.val;
@@ -3206,17 +3229,17 @@
         *O << ", ";
       VI.destroy();
     }
-    *O << ") " << *(yyvsp[-5].String) << " " << *(yyvsp[-4].Type).newTy << " " << *(yyvsp[-3].String) << " " 
-       << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].String) << "\n";
-    delete (yyvsp[-13].String); delete (yyvsp[-12].String); delete (yyvsp[-11].String); (yyvsp[-10].Type).destroy(); delete (yyvsp[-9].String); delete (yyvsp[-7].ValList); 
-    delete (yyvsp[-5].String); (yyvsp[-4].Type).destroy(); delete (yyvsp[-3].String); delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); 
-    delete (yyvsp[0].String); 
+    *O << ") " << *(yyvsp[-5].String) << " " << *(yyvsp[-4].Type).newTy << " " << *(yyvsp[-3].Value).val << " " 
+       << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].Value).val << "\n";
+    delete (yyvsp[-13].String); delete (yyvsp[-12].String); delete (yyvsp[-11].String); (yyvsp[-10].Type).destroy(); (yyvsp[-9].Value).destroy(); delete (yyvsp[-7].ValList); 
+    delete (yyvsp[-5].String); (yyvsp[-4].Type).destroy(); (yyvsp[-3].Value).destroy(); delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); 
+    (yyvsp[0].Value).destroy(); 
     (yyval.String) = 0;
   ;}
     break;
 
   case 225:
-#line 1004 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1019 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "    " << *(yyvsp[0].String) << "\n";
     delete (yyvsp[0].String);
@@ -3225,7 +3248,7 @@
     break;
 
   case 226:
-#line 1009 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1024 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "    " << *(yyvsp[0].String) << "\n";
     delete (yyvsp[0].String);
@@ -3234,26 +3257,26 @@
     break;
 
   case 227:
-#line 1015 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1030 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + " " + *(yyvsp[-3].String) + ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].String);
-    (yyvsp[-4].Type).destroy(); delete (yyvsp[-3].String); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
+    *(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + " " + *(yyvsp[-3].String) + ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].Value).val;
+    (yyvsp[-4].Type).destroy(); delete (yyvsp[-3].String); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy();
     (yyval.String) = (yyvsp[-5].String);
   ;}
     break;
 
   case 228:
-#line 1020 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1035 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyvsp[-3].String)->insert(0, *(yyvsp[-4].Type).newTy + " " );
-    *(yyvsp[-3].String) += ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].String);
-    (yyvsp[-4].Type).destroy(); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
+    *(yyvsp[-3].String) += ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].Value).val;
+    (yyvsp[-4].Type).destroy(); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy();
     (yyval.String) = (yyvsp[-3].String);
   ;}
     break;
 
   case 229:
-#line 1028 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1043 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-1].String)->empty())
       *(yyvsp[-1].String) += " = ";
@@ -3264,26 +3287,27 @@
     break;
 
   case 230:
-#line 1037 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1052 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {    // Used for PHI nodes
-    (yyvsp[-3].String)->insert(0, *(yyvsp[-5].Type).newTy + "[");
-    *(yyvsp[-3].String) += "," + *(yyvsp[-1].String) + "]";
-    (yyvsp[-5].Type).destroy(); delete (yyvsp[-1].String);
-    (yyval.String) = (yyvsp[-3].String);
+    (yyvsp[-3].Value).val->insert(0, *(yyvsp[-5].Type).newTy + "[");
+    *(yyvsp[-3].Value).val += "," + *(yyvsp[-1].Value).val + "]";
+    (yyvsp[-5].Type).destroy(); (yyvsp[-1].Value).destroy();
+    (yyval.String) = new std::string(*(yyvsp[-3].Value).val);
+    (yyvsp[-3].Value).destroy();
   ;}
     break;
 
   case 231:
-#line 1043 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1059 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *(yyvsp[-6].String) += ", [" + *(yyvsp[-3].String) + "," + *(yyvsp[-1].String) + "]";
-    delete (yyvsp[-3].String); delete (yyvsp[-1].String);
+    *(yyvsp[-6].String) += ", [" + *(yyvsp[-3].Value).val + "," + *(yyvsp[-1].Value).val + "]";
+    (yyvsp[-3].Value).destroy(); (yyvsp[-1].Value).destroy();
     (yyval.String) = (yyvsp[-6].String);
   ;}
     break;
 
   case 232:
-#line 1051 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1067 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyval.ValList) = new ValueList();
     (yyval.ValList)->push_back((yyvsp[0].Value));
@@ -3291,7 +3315,7 @@
     break;
 
   case 233:
-#line 1055 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1071 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyvsp[-2].ValList)->push_back((yyvsp[0].Value));
     (yyval.ValList) = (yyvsp[-2].ValList);
@@ -3299,17 +3323,17 @@
     break;
 
   case 234:
-#line 1062 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1078 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.ValList) = (yyvsp[0].ValList); ;}
     break;
 
   case 235:
-#line 1063 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1079 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.ValList) = new ValueList(); ;}
     break;
 
   case 236:
-#line 1067 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1083 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -3318,34 +3342,34 @@
     break;
 
   case 238:
-#line 1075 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1091 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].String) + ", " + *(yyvsp[0].String);
-    (yyvsp[-3].Type).destroy(); delete (yyvsp[-2].String); delete (yyvsp[0].String);
+    *(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
+    (yyvsp[-3].Type).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
     (yyval.String) = (yyvsp[-4].String);
   ;}
     break;
 
   case 239:
-#line 1080 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1096 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].String) + ", " + *(yyvsp[0].String);
-    (yyvsp[-3].Type).destroy(); delete (yyvsp[-2].String); delete (yyvsp[0].String);
+    *(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
+    (yyvsp[-3].Type).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
     (yyval.String) = (yyvsp[-4].String);
   ;}
     break;
 
   case 240:
-#line 1085 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1101 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].String) + ", " + *(yyvsp[0].String);
-    (yyvsp[-3].Type).destroy(); delete (yyvsp[-2].String); delete (yyvsp[0].String);
+    *(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
+    (yyvsp[-3].Type).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
     (yyval.String) = (yyvsp[-4].String);
   ;}
     break;
 
   case 241:
-#line 1090 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1106 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val;
     (yyvsp[0].Value).destroy();
@@ -3354,7 +3378,7 @@
     break;
 
   case 242:
-#line 1095 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1111 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     const char* shiftop = (yyvsp[-3].String)->c_str();
     if (*(yyvsp[-3].String) == "shr")
@@ -3366,7 +3390,7 @@
     break;
 
   case 243:
-#line 1103 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1119 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string source = *(yyvsp[-2].Value).val;
     TypeInfo SrcTy = (yyvsp[-2].Value).type;
@@ -3384,7 +3408,7 @@
     break;
 
   case 244:
-#line 1117 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1133 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
     (yyvsp[-4].Value).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
@@ -3393,7 +3417,7 @@
     break;
 
   case 245:
-#line 1122 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1138 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Type).newTy;
     (yyvsp[-2].Value).destroy(); (yyvsp[0].Type).destroy();
@@ -3402,7 +3426,7 @@
     break;
 
   case 246:
-#line 1127 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1143 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
     (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
@@ -3411,7 +3435,7 @@
     break;
 
   case 247:
-#line 1132 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1148 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
     (yyvsp[-4].Value).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
@@ -3420,7 +3444,7 @@
     break;
 
   case 248:
-#line 1137 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1153 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
     (yyvsp[-4].Value).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
@@ -3429,7 +3453,7 @@
     break;
 
   case 249:
-#line 1142 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1158 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -3438,13 +3462,13 @@
     break;
 
   case 250:
-#line 1147 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1163 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-5].String)->empty())
       *(yyvsp[-6].String) += " " + *(yyvsp[-5].String);
     if (!(yyvsp[-6].String)->empty())
       *(yyvsp[-6].String) += " ";
-    *(yyvsp[-6].String) += *(yyvsp[-4].Type).newTy + " " + *(yyvsp[-3].String) + "(";
+    *(yyvsp[-6].String) += *(yyvsp[-4].Type).newTy + " " + *(yyvsp[-3].Value).val + "(";
     for (unsigned i = 0; i < (yyvsp[-1].ValList)->size(); ++i) {
       ValueInfo& VI = (*(yyvsp[-1].ValList))[i];
       *(yyvsp[-6].String) += *VI.val;
@@ -3453,28 +3477,28 @@
       VI.destroy();
     }
     *(yyvsp[-6].String) += ")";
-    delete (yyvsp[-5].String); (yyvsp[-4].Type).destroy(); delete (yyvsp[-3].String); delete (yyvsp[-1].ValList);
+    delete (yyvsp[-5].String); (yyvsp[-4].Type).destroy(); (yyvsp[-3].Value).destroy(); delete (yyvsp[-1].ValList);
     (yyval.String) = (yyvsp[-6].String);
   ;}
     break;
 
   case 252:
-#line 1169 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1185 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.ValList) = (yyvsp[0].ValList); ;}
     break;
 
   case 253:
-#line 1170 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1186 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {  (yyval.ValList) = new ValueList(); ;}
     break;
 
   case 255:
-#line 1175 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1191 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 256:
-#line 1178 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1194 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " " + *(yyvsp[-1].Type).newTy;
     if (!(yyvsp[0].String)->empty())
@@ -3485,18 +3509,18 @@
     break;
 
   case 257:
-#line 1185 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1201 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + ", " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].String);
+    *(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + ", " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].Value).val;
     if (!(yyvsp[0].String)->empty())
       *(yyvsp[-5].String) += " " + *(yyvsp[0].String);
-    (yyvsp[-4].Type).destroy(); (yyvsp[-2].Type).destroy(); delete (yyvsp[-1].String); delete (yyvsp[0].String);
+    (yyvsp[-4].Type).destroy(); (yyvsp[-2].Type).destroy(); (yyvsp[-1].Value).destroy(); delete (yyvsp[0].String);
     (yyval.String) = (yyvsp[-5].String);
   ;}
     break;
 
   case 258:
-#line 1192 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1208 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " " + *(yyvsp[-1].Type).newTy;
     if (!(yyvsp[0].String)->empty())
@@ -3507,18 +3531,18 @@
     break;
 
   case 259:
-#line 1199 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1215 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + ", " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].String);
+    *(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + ", " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].Value).val;
     if (!(yyvsp[0].String)->empty())
       *(yyvsp[-5].String) += " " + *(yyvsp[0].String);
-    (yyvsp[-4].Type).destroy(); (yyvsp[-2].Type).destroy(); delete (yyvsp[-1].String); delete (yyvsp[0].String);
+    (yyvsp[-4].Type).destroy(); (yyvsp[-2].Type).destroy(); (yyvsp[-1].Value).destroy(); delete (yyvsp[0].String);
     (yyval.String) = (yyvsp[-5].String);
   ;}
     break;
 
   case 260:
-#line 1206 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1222 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val;
     (yyvsp[0].Value).destroy();
@@ -3527,37 +3551,50 @@
     break;
 
   case 261:
-#line 1211 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1227 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-3].String)->empty())
       *(yyvsp[-3].String) += " ";
-    *(yyvsp[-3].String) += *(yyvsp[-2].String) + " " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].String);
-    delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
+    *(yyvsp[-3].String) += *(yyvsp[-2].String) + " " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].Value).val;
+    delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy();
     (yyval.String) = (yyvsp[-3].String);
   ;}
     break;
 
   case 262:
-#line 1218 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1234 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-5].String)->empty())
       *(yyvsp[-5].String) += " ";
-    *(yyvsp[-5].String) += *(yyvsp[-4].String) + " " + *(yyvsp[-3].Value).val + ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].String);
-    delete (yyvsp[-4].String); (yyvsp[-3].Value).destroy(); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
+    *(yyvsp[-5].String) += *(yyvsp[-4].String) + " " + *(yyvsp[-3].Value).val + ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].Value).val;
+    delete (yyvsp[-4].String); (yyvsp[-3].Value).destroy(); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy();
     (yyval.String) = (yyvsp[-5].String);
   ;}
     break;
 
   case 263:
-#line 1225 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1241 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *(yyvsp[-3].String) += " " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].String);
+    // Upgrade the indices
+    for (unsigned i = 0; i < (yyvsp[0].ValList)->size(); ++i) {
+      ValueInfo& VI = (*(yyvsp[0].ValList))[i];
+      if (VI.type.isUnsigned() && !VI.isConstant() && 
+          VI.type.getBitWidth() < 64) {
+        std::string* old = VI.val;
+        *O << "    %gep_upgrade" << unique << " = zext " << *old 
+           << " to ulong\n";
+        VI.val = new std::string("ulong %gep_upgrade" + llvm::utostr(unique++));
+        VI.type.oldTy = ULongTy;
+        delete old;
+      }
+    }
+    *(yyvsp[-3].String) += " " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].Value).val;
     for (unsigned i = 0; i < (yyvsp[0].ValList)->size(); ++i) {
       ValueInfo& VI = (*(yyvsp[0].ValList))[i];
       *(yyvsp[-3].String) += ", " + *VI.val;
       VI.destroy();
     }
-    (yyvsp[-2].Type).destroy(); delete (yyvsp[-1].String); delete (yyvsp[0].ValList);
+    (yyvsp[-2].Type).destroy(); (yyvsp[-1].Value).destroy(); delete (yyvsp[0].ValList);
     (yyval.String) = (yyvsp[-3].String);
   ;}
     break;
@@ -3567,7 +3604,7 @@
     }
 
 /* Line 1126 of yacc.c.  */
-#line 3571 "UpgradeParser.tab.c"
+#line 3608 "UpgradeParser.tab.c"
 
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -3835,7 +3872,7 @@
 }
 
 
-#line 1236 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1265 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
 
 
 int yyerror(const char *ErrorMsg) {


Index: llvm/tools/llvm-upgrade/UpgradeParser.cpp.cvs
diff -u llvm/tools/llvm-upgrade/UpgradeParser.cpp.cvs:1.12 llvm/tools/llvm-upgrade/UpgradeParser.cpp.cvs:1.13
--- llvm/tools/llvm-upgrade/UpgradeParser.cpp.cvs:1.12	Sat Dec  2 09:16:01 2006
+++ llvm/tools/llvm-upgrade/UpgradeParser.cpp.cvs	Sat Dec  2 10:19:52 2006
@@ -337,6 +337,7 @@
 static std::ostream *O = 0;
 std::istream* LexInput = 0;
 unsigned SizeOfPointer = 32;
+static uint64_t unique = 1;
 
 typedef std::vector<TypeInfo> TypeVector;
 static TypeVector EnumeratedTypes;
@@ -479,8 +480,9 @@
     if (isConst)
       Source = "ulong fptoui(" + Source + " to ulong)";
     else {
-      *O << "    %cast_upgrade = fptoui " + Source + " to ulong\n";
-      Source = "ulong %cast_upgrade";
+      *O << "    %cast_upgrade" << unique << " = fptoui " << Source 
+         << " to ulong\n";
+      Source = "ulong %cast_upgrade" + llvm::utostr(unique);
     }
     // Update the SrcTy for the getCastOpcode call below
     SrcTy.destroy();
@@ -529,7 +531,7 @@
 #endif
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 209 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 211 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
 typedef union YYSTYPE {
   std::string*    String;
   TypeInfo        Type;
@@ -538,7 +540,7 @@
   ValueList*      ValList;
 } YYSTYPE;
 /* Line 196 of yacc.c.  */
-#line 542 "UpgradeParser.tab.c"
+#line 544 "UpgradeParser.tab.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -550,7 +552,7 @@
 
 
 /* Line 219 of yacc.c.  */
-#line 554 "UpgradeParser.tab.c"
+#line 556 "UpgradeParser.tab.c"
 
 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
 # define YYSIZE_T __SIZE_TYPE__
@@ -888,33 +890,33 @@
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short int yyrline[] =
 {
-       0,   269,   269,   269,   270,   270,   274,   274,   274,   274,
-     274,   274,   274,   274,   274,   275,   275,   275,   276,   276,
-     276,   276,   276,   276,   277,   277,   277,   277,   278,   278,
-     278,   278,   278,   278,   278,   279,   279,   279,   279,   279,
-     279,   284,   284,   284,   284,   285,   285,   285,   285,   286,
-     286,   287,   287,   290,   293,   298,   298,   298,   298,   298,
-     298,   299,   300,   303,   303,   303,   303,   303,   304,   305,
-     310,   315,   316,   319,   320,   328,   334,   335,   338,   339,
-     348,   349,   362,   362,   363,   363,   364,   368,   368,   368,
-     368,   368,   368,   368,   369,   369,   369,   369,   369,   371,
-     375,   379,   384,   389,   395,   402,   409,   415,   419,   429,
-     432,   440,   441,   446,   449,   459,   465,   470,   476,   482,
-     488,   493,   499,   505,   511,   517,   523,   529,   535,   541,
-     547,   555,   569,   581,   586,   591,   596,   601,   609,   614,
-     619,   629,   634,   639,   639,   649,   654,   657,   662,   666,
-     670,   673,   684,   689,   694,   701,   708,   715,   722,   727,
-     732,   737,   739,   739,   742,   747,   754,   759,   766,   773,
-     778,   779,   787,   787,   788,   788,   790,   797,   801,   805,
-     808,   813,   816,   818,   838,   841,   845,   854,   855,   857,
-     865,   866,   867,   871,   884,   885,   888,   888,   888,   888,
-     888,   888,   888,   889,   890,   895,   896,   905,   905,   908,
-     908,   914,   921,   924,   932,   936,   941,   944,   950,   955,
-     960,   965,   972,   978,   984,  1004,  1009,  1015,  1020,  1028,
-    1037,  1043,  1051,  1055,  1062,  1063,  1067,  1072,  1075,  1080,
-    1085,  1090,  1095,  1103,  1117,  1122,  1127,  1132,  1137,  1142,
-    1147,  1164,  1169,  1170,  1174,  1175,  1178,  1185,  1192,  1199,
-    1206,  1211,  1218,  1225
+       0,   271,   271,   271,   272,   272,   276,   276,   276,   276,
+     276,   276,   276,   276,   276,   277,   277,   277,   278,   278,
+     278,   278,   278,   278,   279,   279,   279,   279,   280,   280,
+     280,   280,   280,   280,   280,   281,   281,   281,   281,   281,
+     281,   286,   286,   286,   286,   287,   287,   287,   287,   288,
+     288,   289,   289,   292,   295,   300,   300,   300,   300,   300,
+     300,   301,   302,   305,   305,   305,   305,   305,   306,   307,
+     312,   317,   318,   321,   322,   330,   336,   337,   340,   341,
+     350,   351,   364,   364,   365,   365,   366,   370,   370,   370,
+     370,   370,   370,   370,   371,   371,   371,   371,   371,   373,
+     377,   381,   386,   391,   397,   404,   411,   417,   421,   431,
+     434,   442,   443,   448,   451,   461,   467,   472,   478,   484,
+     490,   495,   501,   507,   513,   519,   525,   531,   537,   543,
+     549,   557,   571,   583,   588,   593,   598,   603,   611,   616,
+     621,   631,   636,   641,   641,   651,   656,   659,   664,   668,
+     672,   675,   686,   691,   696,   703,   710,   717,   724,   729,
+     734,   739,   741,   741,   744,   749,   756,   761,   768,   775,
+     780,   781,   789,   789,   790,   790,   792,   799,   803,   807,
+     810,   815,   818,   820,   840,   843,   847,   856,   857,   859,
+     867,   868,   869,   873,   886,   887,   890,   890,   890,   890,
+     890,   890,   890,   891,   892,   897,   898,   907,   907,   911,
+     917,   928,   934,   937,   945,   949,   954,   957,   963,   968,
+     973,   978,   986,   993,   999,  1019,  1024,  1030,  1035,  1043,
+    1052,  1059,  1067,  1071,  1078,  1079,  1083,  1088,  1091,  1096,
+    1101,  1106,  1111,  1119,  1133,  1138,  1143,  1148,  1153,  1158,
+    1163,  1180,  1185,  1186,  1190,  1191,  1194,  1201,  1208,  1215,
+    1222,  1227,  1234,  1241
 };
 #endif
 
@@ -2201,26 +2203,26 @@
   switch (yyn)
     {
         case 53:
-#line 290 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 292 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[-1].String);
   ;}
     break;
 
   case 54:
-#line 293 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 295 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = new std::string(""); 
   ;}
     break;
 
   case 62:
-#line 300 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 302 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(""); ;}
     break;
 
   case 69:
-#line 305 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 307 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     *(yyvsp[-1].String) += *(yyvsp[0].String); 
     delete (yyvsp[0].String);
@@ -2229,27 +2231,27 @@
     break;
 
   case 70:
-#line 310 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 312 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(""); ;}
     break;
 
   case 71:
-#line 315 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 317 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 72:
-#line 316 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 318 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { *(yyvsp[-1].String) += " " + *(yyvsp[0].String); delete (yyvsp[0].String); (yyval.String) = (yyvsp[-1].String); ;}
     break;
 
   case 73:
-#line 319 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 321 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 74:
-#line 320 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 322 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyvsp[-1].String)->insert(0, ", "); 
     *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
@@ -2259,7 +2261,7 @@
     break;
 
   case 75:
-#line 328 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 330 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -2268,17 +2270,17 @@
     break;
 
   case 76:
-#line 334 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 336 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 78:
-#line 338 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 340 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 79:
-#line 339 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 341 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
       (yyvsp[-1].String)->insert(0, ", ");
       if (!(yyvsp[0].String)->empty())
@@ -2289,7 +2291,7 @@
     break;
 
   case 81:
-#line 349 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 351 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
       *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
       delete (yyvsp[0].String);
@@ -2298,7 +2300,7 @@
     break;
 
   case 99:
-#line 371 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 373 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyval.Type).newTy = (yyvsp[0].String); 
     (yyval.Type).oldTy = OpaqueTy; 
@@ -2306,7 +2308,7 @@
     break;
 
   case 100:
-#line 375 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 377 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyval.Type).newTy = (yyvsp[0].String);
     (yyval.Type).oldTy = UnresolvedTy;
@@ -2314,7 +2316,7 @@
     break;
 
   case 102:
-#line 384 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 386 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {                   // Type UpReference
     (yyvsp[0].String)->insert(0, "\\");
     (yyval.Type).newTy = (yyvsp[0].String);
@@ -2323,7 +2325,7 @@
     break;
 
   case 103:
-#line 389 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 391 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {           // Function derived type?
     *(yyvsp[-3].Type).newTy += "( " + *(yyvsp[-1].String) + " )";
     delete (yyvsp[-1].String);
@@ -2333,7 +2335,7 @@
     break;
 
   case 104:
-#line 395 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 397 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {          // Sized array type?
     (yyvsp[-3].String)->insert(0,"[ ");
     *(yyvsp[-3].String) += " x " + *(yyvsp[-1].Type).newTy + " ]";
@@ -2344,7 +2346,7 @@
     break;
 
   case 105:
-#line 402 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 404 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {          // Packed array type?
     (yyvsp[-3].String)->insert(0,"< ");
     *(yyvsp[-3].String) += " x " + *(yyvsp[-1].Type).newTy + " >";
@@ -2355,7 +2357,7 @@
     break;
 
   case 106:
-#line 409 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 411 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {                        // Structure type?
     (yyvsp[-1].String)->insert(0, "{ ");
     *(yyvsp[-1].String) += " }";
@@ -2365,7 +2367,7 @@
     break;
 
   case 107:
-#line 415 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 417 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {                                  // Empty structure type?
     (yyval.Type).newTy = new std::string("{}");
     (yyval.Type).oldTy = StructTy;
@@ -2373,7 +2375,7 @@
     break;
 
   case 108:
-#line 419 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 421 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {                             // Pointer type?
     *(yyvsp[-1].Type).newTy += '*';
     (yyvsp[-1].Type).oldTy = PointerTy;
@@ -2382,14 +2384,14 @@
     break;
 
   case 109:
-#line 429 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 431 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[0].Type).newTy;
   ;}
     break;
 
   case 110:
-#line 432 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 434 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", " + *(yyvsp[0].Type).newTy;
     delete (yyvsp[0].Type).newTy;
@@ -2398,7 +2400,7 @@
     break;
 
   case 112:
-#line 441 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 443 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", ...";
     delete (yyvsp[0].String);
@@ -2407,21 +2409,21 @@
     break;
 
   case 113:
-#line 446 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 448 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[0].String);
   ;}
     break;
 
   case 114:
-#line 449 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 451 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = new std::string();
   ;}
     break;
 
   case 115:
-#line 459 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 461 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { // Nonempty unsized arr
     (yyval.Const).type = (yyvsp[-3].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-3].Type).newTy);
@@ -2431,7 +2433,7 @@
     break;
 
   case 116:
-#line 465 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 467 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-2].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-2].Type).newTy);
@@ -2440,7 +2442,7 @@
     break;
 
   case 117:
-#line 470 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 472 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-2].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-2].Type).newTy);
@@ -2450,7 +2452,7 @@
     break;
 
   case 118:
-#line 476 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 478 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { // Nonempty unsized arr
     (yyval.Const).type = (yyvsp[-3].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-3].Type).newTy);
@@ -2460,7 +2462,7 @@
     break;
 
   case 119:
-#line 482 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 484 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-3].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-3].Type).newTy);
@@ -2470,7 +2472,7 @@
     break;
 
   case 120:
-#line 488 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 490 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-2].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-2].Type).newTy);
@@ -2479,7 +2481,7 @@
     break;
 
   case 121:
-#line 493 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 495 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2489,7 +2491,7 @@
     break;
 
   case 122:
-#line 499 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 501 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2499,7 +2501,7 @@
     break;
 
   case 123:
-#line 505 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 507 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2509,7 +2511,7 @@
     break;
 
   case 124:
-#line 511 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 513 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2519,7 +2521,7 @@
     break;
 
   case 125:
-#line 517 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 519 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2529,7 +2531,7 @@
     break;
 
   case 126:
-#line 523 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 525 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {      // integral constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2539,7 +2541,7 @@
     break;
 
   case 127:
-#line 529 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 531 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {            // integral constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2549,7 +2551,7 @@
     break;
 
   case 128:
-#line 535 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 537 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {                      // Boolean constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2559,7 +2561,7 @@
     break;
 
   case 129:
-#line 541 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 543 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {                     // Boolean constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2569,7 +2571,7 @@
     break;
 
   case 130:
-#line 547 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 549 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {                   // Float & Double constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
@@ -2579,7 +2581,7 @@
     break;
 
   case 131:
-#line 555 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 557 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string source = *(yyvsp[-3].Const).cnst;
     TypeInfo DstTy = (yyvsp[-1].Type);
@@ -2597,7 +2599,7 @@
     break;
 
   case 132:
-#line 569 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 571 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-4].String) += "(" + *(yyvsp[-2].Const).cnst;
     for (unsigned i = 0; i < (yyvsp[-1].ValList)->size(); ++i) {
@@ -2613,7 +2615,7 @@
     break;
 
   case 133:
-#line 581 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 583 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     (yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -2622,7 +2624,7 @@
     break;
 
   case 134:
-#line 586 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 588 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -2631,7 +2633,7 @@
     break;
 
   case 135:
-#line 591 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 593 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -2640,7 +2642,7 @@
     break;
 
   case 136:
-#line 596 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 598 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -2649,7 +2651,7 @@
     break;
 
   case 137:
-#line 601 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 603 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     const char* shiftop = (yyvsp[-5].String)->c_str();
     if (*(yyvsp[-5].String) == "shr")
@@ -2661,7 +2663,7 @@
     break;
 
   case 138:
-#line 609 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 611 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -2670,7 +2672,7 @@
     break;
 
   case 139:
-#line 614 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 616 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     (yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -2679,7 +2681,7 @@
     break;
 
   case 140:
-#line 619 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 621 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     (yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -2688,7 +2690,7 @@
     break;
 
   case 141:
-#line 629 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 631 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", " + *(yyvsp[0].Const).cnst;
     (yyvsp[0].Const).destroy();
@@ -2697,25 +2699,25 @@
     break;
 
   case 142:
-#line 634 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 636 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(*(yyvsp[0].Const).cnst); (yyvsp[0].Const).destroy(); ;}
     break;
 
   case 145:
-#line 649 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 651 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
 ;}
     break;
 
   case 146:
-#line 654 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 656 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = 0;
   ;}
     break;
 
   case 147:
-#line 657 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 659 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << *(yyvsp[0].String) << "\n";
     delete (yyvsp[0].String);
@@ -2724,7 +2726,7 @@
     break;
 
   case 148:
-#line 662 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 664 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "module asm " << " " << *(yyvsp[0].String) << "\n";
     (yyval.String) = 0;
@@ -2732,7 +2734,7 @@
     break;
 
   case 149:
-#line 666 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 668 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "implementation\n";
     (yyval.String) = 0;
@@ -2740,12 +2742,12 @@
     break;
 
   case 150:
-#line 670 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 672 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = 0; ;}
     break;
 
   case 151:
-#line 673 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 675 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     EnumeratedTypes.push_back((yyvsp[0].Type));
     if (!(yyvsp[-2].String)->empty()) {
@@ -2760,7 +2762,7 @@
     break;
 
   case 152:
-#line 684 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 686 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {       // Function prototypes can be in const pool
     *O << *(yyvsp[0].String) << "\n";
     delete (yyvsp[0].String);
@@ -2769,7 +2771,7 @@
     break;
 
   case 153:
-#line 689 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 691 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {  // Asm blocks can be in the const pool
     *O << *(yyvsp[-2].String) << " " << *(yyvsp[-1].String) << " " << *(yyvsp[0].String) << "\n";
     delete (yyvsp[-2].String); delete (yyvsp[-1].String); delete (yyvsp[0].String); 
@@ -2778,7 +2780,7 @@
     break;
 
   case 154:
-#line 694 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 696 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-4].String)->empty())
       *O << *(yyvsp[-4].String) << " = ";
@@ -2789,7 +2791,7 @@
     break;
 
   case 155:
-#line 701 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 703 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-4].String)->empty())
       *O << *(yyvsp[-4].String) << " = ";
@@ -2800,7 +2802,7 @@
     break;
 
   case 156:
-#line 708 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 710 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-4].String)->empty())
       *O << *(yyvsp[-4].String) << " = ";
@@ -2811,7 +2813,7 @@
     break;
 
   case 157:
-#line 715 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 717 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-4].String)->empty())
       *O << *(yyvsp[-4].String) << " = ";
@@ -2822,7 +2824,7 @@
     break;
 
   case 158:
-#line 722 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 724 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     *O << *(yyvsp[-1].String) << " " << *(yyvsp[0].String) << "\n";
     delete (yyvsp[-1].String); delete (yyvsp[0].String);
@@ -2831,7 +2833,7 @@
     break;
 
   case 159:
-#line 727 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 729 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << *(yyvsp[-2].String) << " = " << *(yyvsp[0].String) << "\n";
     delete (yyvsp[-2].String); delete (yyvsp[0].String);
@@ -2840,14 +2842,14 @@
     break;
 
   case 160:
-#line 732 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 734 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyval.String) = 0;
   ;}
     break;
 
   case 164:
-#line 742 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 744 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -2856,7 +2858,7 @@
     break;
 
   case 165:
-#line 747 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 749 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
     if (*(yyvsp[0].String) == "64")
@@ -2867,7 +2869,7 @@
     break;
 
   case 166:
-#line 754 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 756 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -2876,7 +2878,7 @@
     break;
 
   case 167:
-#line 759 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 761 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -2885,7 +2887,7 @@
     break;
 
   case 168:
-#line 766 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 768 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyvsp[-1].String)->insert(0, "[ ");
     *(yyvsp[-1].String) += " ]";
@@ -2894,7 +2896,7 @@
     break;
 
   case 169:
-#line 773 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 775 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -2903,19 +2905,19 @@
     break;
 
   case 171:
-#line 779 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 781 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = new std::string();
   ;}
     break;
 
   case 175:
-#line 788 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 790 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 176:
-#line 790 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 792 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
   (yyval.String) = (yyvsp[-1].Type).newTy;
   if (!(yyvsp[0].String)->empty())
@@ -2925,7 +2927,7 @@
     break;
 
   case 177:
-#line 797 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 799 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -2933,21 +2935,21 @@
     break;
 
   case 178:
-#line 801 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 803 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[0].String);
   ;}
     break;
 
   case 179:
-#line 805 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 807 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[0].String);
   ;}
     break;
 
   case 180:
-#line 808 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 810 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", ...";
     (yyval.String) = (yyvsp[-2].String);
@@ -2956,19 +2958,19 @@
     break;
 
   case 181:
-#line 813 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 815 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[0].String);
   ;}
     break;
 
   case 182:
-#line 816 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 818 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 183:
-#line 819 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 821 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-7].String)->empty()) {
       *(yyvsp[-7].String) += " ";
@@ -2990,21 +2992,21 @@
     break;
 
   case 184:
-#line 838 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 840 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = new std::string("begin");
   ;}
     break;
 
   case 185:
-#line 841 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 843 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyval.String) = new std::string ("{");
   ;}
     break;
 
   case 186:
-#line 845 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 847 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
   if (!(yyvsp[-2].String)->empty()) {
     *O << *(yyvsp[-2].String) << " ";
@@ -3016,17 +3018,17 @@
     break;
 
   case 187:
-#line 854 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 856 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string("end"); ;}
     break;
 
   case 188:
-#line 855 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 857 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string("}"); ;}
     break;
 
   case 189:
-#line 857 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 859 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
   if ((yyvsp[-1].String))
     *O << *(yyvsp[-1].String);
@@ -3036,12 +3038,12 @@
     break;
 
   case 190:
-#line 865 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 867 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 193:
-#line 871 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 873 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     if (!(yyvsp[-1].String)->empty())
       *(yyvsp[-2].String) += " " + *(yyvsp[-1].String);
@@ -3053,12 +3055,12 @@
     break;
 
   case 194:
-#line 884 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 886 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 204:
-#line 890 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 892 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyvsp[-1].String)->insert(0, "<");
     *(yyvsp[-1].String) += ">";
@@ -3067,7 +3069,7 @@
     break;
 
   case 206:
-#line 896 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 898 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-3].String)->empty()) {
       *(yyvsp[-4].String) += " " + *(yyvsp[-3].String);
@@ -3078,39 +3080,58 @@
   ;}
     break;
 
+  case 209:
+#line 911 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.Value).val = (yyvsp[0].String);
+    (yyval.Value).constant = false;
+    (yyval.Value).type.newTy = 0;
+    (yyval.Value).type.oldTy = UnresolvedTy;
+  ;}
+    break;
+
+  case 210:
+#line 917 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+    {
+    (yyval.Value).val = (yyvsp[0].String);
+    (yyval.Value).constant = true;
+    (yyval.Value).type.newTy = 0;
+    (yyval.Value).type.oldTy = UnresolvedTy;
+  ;}
+    break;
+
   case 211:
-#line 914 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 928 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
+    (yyval.Value) = (yyvsp[0].Value);
     (yyval.Value).type = (yyvsp[-1].Type);
-    (yyval.Value).val = new std::string(*(yyvsp[-1].Type).newTy + " ");
-    *(yyval.Value).val += *(yyvsp[0].String);
-    delete (yyvsp[0].String);
+    (yyval.Value).val->insert(0, *(yyvsp[-1].Type).newTy + " ");
   ;}
     break;
 
   case 212:
-#line 921 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 934 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = 0;
   ;}
     break;
 
   case 213:
-#line 924 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 937 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { // Do not allow functions with 0 basic blocks   
     (yyval.String) = 0;
   ;}
     break;
 
   case 214:
-#line 932 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 945 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = 0;
   ;}
     break;
 
   case 215:
-#line 936 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 949 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "    " << *(yyvsp[0].String) << "\n";
     delete (yyvsp[0].String);
@@ -3119,14 +3140,14 @@
     break;
 
   case 216:
-#line 941 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 954 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = 0;
   ;}
     break;
 
   case 217:
-#line 944 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 957 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << *(yyvsp[0].String) << "\n";
     delete (yyvsp[0].String);
@@ -3135,7 +3156,7 @@
     break;
 
   case 218:
-#line 950 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 963 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {              // Return with a result...
     *O << "    " << *(yyvsp[-1].String) << " " << *(yyvsp[0].Value).val << "\n";
     delete (yyvsp[-1].String); (yyvsp[0].Value).destroy();
@@ -3144,7 +3165,7 @@
     break;
 
   case 219:
-#line 955 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 968 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {                                       // Return with no result...
     *O << "    " << *(yyvsp[-1].String) << " " << *(yyvsp[0].Type).newTy << "\n";
     delete (yyvsp[-1].String); (yyvsp[0].Type).destroy();
@@ -3153,52 +3174,54 @@
     break;
 
   case 220:
-#line 960 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 973 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {                         // Unconditional Branch...
-    *O << "    " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].String) << "\n";
-    delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
+    *O << "    " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].Value).val << "\n";
+    delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy();
     (yyval.String) = 0;
   ;}
     break;
 
   case 221:
-#line 965 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 978 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {  
-    *O << "    " << *(yyvsp[-8].String) << " " << *(yyvsp[-7].Type).newTy << " " << *(yyvsp[-6].String) << ", " 
-       << *(yyvsp[-4].Type).newTy << " " << *(yyvsp[-3].String) << ", " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].String) << "\n";
-    delete (yyvsp[-8].String); (yyvsp[-7].Type).destroy(); delete (yyvsp[-6].String); (yyvsp[-4].Type).destroy(); delete (yyvsp[-3].String); 
-    (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
+    *O << "    " << *(yyvsp[-8].String) << " " << *(yyvsp[-7].Type).newTy << " " << *(yyvsp[-6].Value).val << ", " 
+       << *(yyvsp[-4].Type).newTy << " " << *(yyvsp[-3].Value).val << ", " << *(yyvsp[-1].Type).newTy << " " 
+       << *(yyvsp[0].Value).val << "\n";
+    delete (yyvsp[-8].String); (yyvsp[-7].Type).destroy(); (yyvsp[-6].Value).destroy(); (yyvsp[-4].Type).destroy(); (yyvsp[-3].Value).destroy(); 
+    (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy();
     (yyval.String) = 0;
   ;}
     break;
 
   case 222:
-#line 972 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 986 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *O << "    " << *(yyvsp[-8].String) << " " << *(yyvsp[-7].Type).newTy << " " << *(yyvsp[-6].String) << ", " << *(yyvsp[-4].Type).newTy 
-       << " " << *(yyvsp[-3].String) << " [" << *(yyvsp[-1].String) << " ]\n";
-    delete (yyvsp[-8].String); (yyvsp[-7].Type).destroy(); delete (yyvsp[-6].String); (yyvsp[-4].Type).destroy(); delete (yyvsp[-3].String); delete (yyvsp[-1].String);
+    *O << "    " << *(yyvsp[-8].String) << " " << *(yyvsp[-7].Type).newTy << " " << *(yyvsp[-6].Value).val << ", " 
+       << *(yyvsp[-4].Type).newTy << " " << *(yyvsp[-3].Value).val << " [" << *(yyvsp[-1].String) << " ]\n";
+    delete (yyvsp[-8].String); (yyvsp[-7].Type).destroy(); (yyvsp[-6].Value).destroy(); (yyvsp[-4].Type).destroy(); (yyvsp[-3].Value).destroy(); 
+    delete (yyvsp[-1].String);
     (yyval.String) = 0;
   ;}
     break;
 
   case 223:
-#line 978 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 993 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *O << "    " << *(yyvsp[-7].String) << " " << *(yyvsp[-6].Type).newTy << " " << *(yyvsp[-5].String) << ", " 
-       << *(yyvsp[-3].Type).newTy << " " << *(yyvsp[-2].String) << "[]\n";
-    delete (yyvsp[-7].String); (yyvsp[-6].Type).destroy(); delete (yyvsp[-5].String); (yyvsp[-3].Type).destroy(); delete (yyvsp[-2].String);
+    *O << "    " << *(yyvsp[-7].String) << " " << *(yyvsp[-6].Type).newTy << " " << *(yyvsp[-5].Value).val << ", " 
+       << *(yyvsp[-3].Type).newTy << " " << *(yyvsp[-2].Value).val << "[]\n";
+    delete (yyvsp[-7].String); (yyvsp[-6].Type).destroy(); (yyvsp[-5].Value).destroy(); (yyvsp[-3].Type).destroy(); (yyvsp[-2].Value).destroy();
     (yyval.String) = 0;
   ;}
     break;
 
   case 224:
-#line 985 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1000 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "    ";
     if (!(yyvsp[-13].String)->empty())
       *O << *(yyvsp[-13].String) << " = ";
-    *O << *(yyvsp[-12].String) << " " << *(yyvsp[-11].String) << " " << *(yyvsp[-10].Type).newTy << " " << *(yyvsp[-9].String) << " (";
+    *O << *(yyvsp[-12].String) << " " << *(yyvsp[-11].String) << " " << *(yyvsp[-10].Type).newTy << " " << *(yyvsp[-9].Value).val << " (";
     for (unsigned i = 0; i < (yyvsp[-7].ValList)->size(); ++i) {
       ValueInfo& VI = (*(yyvsp[-7].ValList))[i];
       *O << *VI.val;
@@ -3206,17 +3229,17 @@
         *O << ", ";
       VI.destroy();
     }
-    *O << ") " << *(yyvsp[-5].String) << " " << *(yyvsp[-4].Type).newTy << " " << *(yyvsp[-3].String) << " " 
-       << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].String) << "\n";
-    delete (yyvsp[-13].String); delete (yyvsp[-12].String); delete (yyvsp[-11].String); (yyvsp[-10].Type).destroy(); delete (yyvsp[-9].String); delete (yyvsp[-7].ValList); 
-    delete (yyvsp[-5].String); (yyvsp[-4].Type).destroy(); delete (yyvsp[-3].String); delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); 
-    delete (yyvsp[0].String); 
+    *O << ") " << *(yyvsp[-5].String) << " " << *(yyvsp[-4].Type).newTy << " " << *(yyvsp[-3].Value).val << " " 
+       << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].Value).val << "\n";
+    delete (yyvsp[-13].String); delete (yyvsp[-12].String); delete (yyvsp[-11].String); (yyvsp[-10].Type).destroy(); (yyvsp[-9].Value).destroy(); delete (yyvsp[-7].ValList); 
+    delete (yyvsp[-5].String); (yyvsp[-4].Type).destroy(); (yyvsp[-3].Value).destroy(); delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); 
+    (yyvsp[0].Value).destroy(); 
     (yyval.String) = 0;
   ;}
     break;
 
   case 225:
-#line 1004 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1019 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "    " << *(yyvsp[0].String) << "\n";
     delete (yyvsp[0].String);
@@ -3225,7 +3248,7 @@
     break;
 
   case 226:
-#line 1009 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1024 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "    " << *(yyvsp[0].String) << "\n";
     delete (yyvsp[0].String);
@@ -3234,26 +3257,26 @@
     break;
 
   case 227:
-#line 1015 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1030 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + " " + *(yyvsp[-3].String) + ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].String);
-    (yyvsp[-4].Type).destroy(); delete (yyvsp[-3].String); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
+    *(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + " " + *(yyvsp[-3].String) + ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].Value).val;
+    (yyvsp[-4].Type).destroy(); delete (yyvsp[-3].String); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy();
     (yyval.String) = (yyvsp[-5].String);
   ;}
     break;
 
   case 228:
-#line 1020 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1035 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyvsp[-3].String)->insert(0, *(yyvsp[-4].Type).newTy + " " );
-    *(yyvsp[-3].String) += ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].String);
-    (yyvsp[-4].Type).destroy(); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
+    *(yyvsp[-3].String) += ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].Value).val;
+    (yyvsp[-4].Type).destroy(); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy();
     (yyval.String) = (yyvsp[-3].String);
   ;}
     break;
 
   case 229:
-#line 1028 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1043 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-1].String)->empty())
       *(yyvsp[-1].String) += " = ";
@@ -3264,26 +3287,27 @@
     break;
 
   case 230:
-#line 1037 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1052 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {    // Used for PHI nodes
-    (yyvsp[-3].String)->insert(0, *(yyvsp[-5].Type).newTy + "[");
-    *(yyvsp[-3].String) += "," + *(yyvsp[-1].String) + "]";
-    (yyvsp[-5].Type).destroy(); delete (yyvsp[-1].String);
-    (yyval.String) = (yyvsp[-3].String);
+    (yyvsp[-3].Value).val->insert(0, *(yyvsp[-5].Type).newTy + "[");
+    *(yyvsp[-3].Value).val += "," + *(yyvsp[-1].Value).val + "]";
+    (yyvsp[-5].Type).destroy(); (yyvsp[-1].Value).destroy();
+    (yyval.String) = new std::string(*(yyvsp[-3].Value).val);
+    (yyvsp[-3].Value).destroy();
   ;}
     break;
 
   case 231:
-#line 1043 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1059 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *(yyvsp[-6].String) += ", [" + *(yyvsp[-3].String) + "," + *(yyvsp[-1].String) + "]";
-    delete (yyvsp[-3].String); delete (yyvsp[-1].String);
+    *(yyvsp[-6].String) += ", [" + *(yyvsp[-3].Value).val + "," + *(yyvsp[-1].Value).val + "]";
+    (yyvsp[-3].Value).destroy(); (yyvsp[-1].Value).destroy();
     (yyval.String) = (yyvsp[-6].String);
   ;}
     break;
 
   case 232:
-#line 1051 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1067 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyval.ValList) = new ValueList();
     (yyval.ValList)->push_back((yyvsp[0].Value));
@@ -3291,7 +3315,7 @@
     break;
 
   case 233:
-#line 1055 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1071 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyvsp[-2].ValList)->push_back((yyvsp[0].Value));
     (yyval.ValList) = (yyvsp[-2].ValList);
@@ -3299,17 +3323,17 @@
     break;
 
   case 234:
-#line 1062 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1078 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.ValList) = (yyvsp[0].ValList); ;}
     break;
 
   case 235:
-#line 1063 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1079 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.ValList) = new ValueList(); ;}
     break;
 
   case 236:
-#line 1067 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1083 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -3318,34 +3342,34 @@
     break;
 
   case 238:
-#line 1075 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1091 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].String) + ", " + *(yyvsp[0].String);
-    (yyvsp[-3].Type).destroy(); delete (yyvsp[-2].String); delete (yyvsp[0].String);
+    *(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
+    (yyvsp[-3].Type).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
     (yyval.String) = (yyvsp[-4].String);
   ;}
     break;
 
   case 239:
-#line 1080 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1096 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].String) + ", " + *(yyvsp[0].String);
-    (yyvsp[-3].Type).destroy(); delete (yyvsp[-2].String); delete (yyvsp[0].String);
+    *(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
+    (yyvsp[-3].Type).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
     (yyval.String) = (yyvsp[-4].String);
   ;}
     break;
 
   case 240:
-#line 1085 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1101 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].String) + ", " + *(yyvsp[0].String);
-    (yyvsp[-3].Type).destroy(); delete (yyvsp[-2].String); delete (yyvsp[0].String);
+    *(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
+    (yyvsp[-3].Type).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
     (yyval.String) = (yyvsp[-4].String);
   ;}
     break;
 
   case 241:
-#line 1090 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1106 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val;
     (yyvsp[0].Value).destroy();
@@ -3354,7 +3378,7 @@
     break;
 
   case 242:
-#line 1095 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1111 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     const char* shiftop = (yyvsp[-3].String)->c_str();
     if (*(yyvsp[-3].String) == "shr")
@@ -3366,7 +3390,7 @@
     break;
 
   case 243:
-#line 1103 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1119 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string source = *(yyvsp[-2].Value).val;
     TypeInfo SrcTy = (yyvsp[-2].Value).type;
@@ -3384,7 +3408,7 @@
     break;
 
   case 244:
-#line 1117 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1133 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
     (yyvsp[-4].Value).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
@@ -3393,7 +3417,7 @@
     break;
 
   case 245:
-#line 1122 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1138 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Type).newTy;
     (yyvsp[-2].Value).destroy(); (yyvsp[0].Type).destroy();
@@ -3402,7 +3426,7 @@
     break;
 
   case 246:
-#line 1127 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1143 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
     (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
@@ -3411,7 +3435,7 @@
     break;
 
   case 247:
-#line 1132 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1148 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
     (yyvsp[-4].Value).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
@@ -3420,7 +3444,7 @@
     break;
 
   case 248:
-#line 1137 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1153 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
     (yyvsp[-4].Value).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
@@ -3429,7 +3453,7 @@
     break;
 
   case 249:
-#line 1142 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1158 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -3438,13 +3462,13 @@
     break;
 
   case 250:
-#line 1147 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1163 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-5].String)->empty())
       *(yyvsp[-6].String) += " " + *(yyvsp[-5].String);
     if (!(yyvsp[-6].String)->empty())
       *(yyvsp[-6].String) += " ";
-    *(yyvsp[-6].String) += *(yyvsp[-4].Type).newTy + " " + *(yyvsp[-3].String) + "(";
+    *(yyvsp[-6].String) += *(yyvsp[-4].Type).newTy + " " + *(yyvsp[-3].Value).val + "(";
     for (unsigned i = 0; i < (yyvsp[-1].ValList)->size(); ++i) {
       ValueInfo& VI = (*(yyvsp[-1].ValList))[i];
       *(yyvsp[-6].String) += *VI.val;
@@ -3453,28 +3477,28 @@
       VI.destroy();
     }
     *(yyvsp[-6].String) += ")";
-    delete (yyvsp[-5].String); (yyvsp[-4].Type).destroy(); delete (yyvsp[-3].String); delete (yyvsp[-1].ValList);
+    delete (yyvsp[-5].String); (yyvsp[-4].Type).destroy(); (yyvsp[-3].Value).destroy(); delete (yyvsp[-1].ValList);
     (yyval.String) = (yyvsp[-6].String);
   ;}
     break;
 
   case 252:
-#line 1169 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1185 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.ValList) = (yyvsp[0].ValList); ;}
     break;
 
   case 253:
-#line 1170 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1186 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {  (yyval.ValList) = new ValueList(); ;}
     break;
 
   case 255:
-#line 1175 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1191 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 256:
-#line 1178 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1194 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " " + *(yyvsp[-1].Type).newTy;
     if (!(yyvsp[0].String)->empty())
@@ -3485,18 +3509,18 @@
     break;
 
   case 257:
-#line 1185 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1201 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + ", " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].String);
+    *(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + ", " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].Value).val;
     if (!(yyvsp[0].String)->empty())
       *(yyvsp[-5].String) += " " + *(yyvsp[0].String);
-    (yyvsp[-4].Type).destroy(); (yyvsp[-2].Type).destroy(); delete (yyvsp[-1].String); delete (yyvsp[0].String);
+    (yyvsp[-4].Type).destroy(); (yyvsp[-2].Type).destroy(); (yyvsp[-1].Value).destroy(); delete (yyvsp[0].String);
     (yyval.String) = (yyvsp[-5].String);
   ;}
     break;
 
   case 258:
-#line 1192 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1208 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " " + *(yyvsp[-1].Type).newTy;
     if (!(yyvsp[0].String)->empty())
@@ -3507,18 +3531,18 @@
     break;
 
   case 259:
-#line 1199 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1215 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + ", " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].String);
+    *(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + ", " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].Value).val;
     if (!(yyvsp[0].String)->empty())
       *(yyvsp[-5].String) += " " + *(yyvsp[0].String);
-    (yyvsp[-4].Type).destroy(); (yyvsp[-2].Type).destroy(); delete (yyvsp[-1].String); delete (yyvsp[0].String);
+    (yyvsp[-4].Type).destroy(); (yyvsp[-2].Type).destroy(); (yyvsp[-1].Value).destroy(); delete (yyvsp[0].String);
     (yyval.String) = (yyvsp[-5].String);
   ;}
     break;
 
   case 260:
-#line 1206 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1222 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val;
     (yyvsp[0].Value).destroy();
@@ -3527,37 +3551,50 @@
     break;
 
   case 261:
-#line 1211 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1227 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-3].String)->empty())
       *(yyvsp[-3].String) += " ";
-    *(yyvsp[-3].String) += *(yyvsp[-2].String) + " " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].String);
-    delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
+    *(yyvsp[-3].String) += *(yyvsp[-2].String) + " " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].Value).val;
+    delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy();
     (yyval.String) = (yyvsp[-3].String);
   ;}
     break;
 
   case 262:
-#line 1218 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1234 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-5].String)->empty())
       *(yyvsp[-5].String) += " ";
-    *(yyvsp[-5].String) += *(yyvsp[-4].String) + " " + *(yyvsp[-3].Value).val + ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].String);
-    delete (yyvsp[-4].String); (yyvsp[-3].Value).destroy(); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
+    *(yyvsp[-5].String) += *(yyvsp[-4].String) + " " + *(yyvsp[-3].Value).val + ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].Value).val;
+    delete (yyvsp[-4].String); (yyvsp[-3].Value).destroy(); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy();
     (yyval.String) = (yyvsp[-5].String);
   ;}
     break;
 
   case 263:
-#line 1225 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1241 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
     {
-    *(yyvsp[-3].String) += " " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].String);
+    // Upgrade the indices
+    for (unsigned i = 0; i < (yyvsp[0].ValList)->size(); ++i) {
+      ValueInfo& VI = (*(yyvsp[0].ValList))[i];
+      if (VI.type.isUnsigned() && !VI.isConstant() && 
+          VI.type.getBitWidth() < 64) {
+        std::string* old = VI.val;
+        *O << "    %gep_upgrade" << unique << " = zext " << *old 
+           << " to ulong\n";
+        VI.val = new std::string("ulong %gep_upgrade" + llvm::utostr(unique++));
+        VI.type.oldTy = ULongTy;
+        delete old;
+      }
+    }
+    *(yyvsp[-3].String) += " " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].Value).val;
     for (unsigned i = 0; i < (yyvsp[0].ValList)->size(); ++i) {
       ValueInfo& VI = (*(yyvsp[0].ValList))[i];
       *(yyvsp[-3].String) += ", " + *VI.val;
       VI.destroy();
     }
-    (yyvsp[-2].Type).destroy(); delete (yyvsp[-1].String); delete (yyvsp[0].ValList);
+    (yyvsp[-2].Type).destroy(); (yyvsp[-1].Value).destroy(); delete (yyvsp[0].ValList);
     (yyval.String) = (yyvsp[-3].String);
   ;}
     break;
@@ -3567,7 +3604,7 @@
     }
 
 /* Line 1126 of yacc.c.  */
-#line 3571 "UpgradeParser.tab.c"
+#line 3608 "UpgradeParser.tab.c"
 
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -3835,7 +3872,7 @@
 }
 
 
-#line 1236 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1265 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
 
 
 int yyerror(const char *ErrorMsg) {


Index: llvm/tools/llvm-upgrade/UpgradeParser.h.cvs
diff -u llvm/tools/llvm-upgrade/UpgradeParser.h.cvs:1.8 llvm/tools/llvm-upgrade/UpgradeParser.h.cvs:1.9
--- llvm/tools/llvm-upgrade/UpgradeParser.h.cvs:1.8	Sat Dec  2 09:16:01 2006
+++ llvm/tools/llvm-upgrade/UpgradeParser.h.cvs	Sat Dec  2 10:19:52 2006
@@ -281,7 +281,7 @@
 
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 209 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 211 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
 typedef union YYSTYPE {
   std::string*    String;
   TypeInfo        Type;


Index: llvm/tools/llvm-upgrade/UpgradeParser.y.cvs
diff -u llvm/tools/llvm-upgrade/UpgradeParser.y.cvs:1.12 llvm/tools/llvm-upgrade/UpgradeParser.y.cvs:1.13
--- llvm/tools/llvm-upgrade/UpgradeParser.y.cvs:1.12	Sat Dec  2 09:16:01 2006
+++ llvm/tools/llvm-upgrade/UpgradeParser.y.cvs	Sat Dec  2 10:19:52 2006
@@ -31,6 +31,7 @@
 static std::ostream *O = 0;
 std::istream* LexInput = 0;
 unsigned SizeOfPointer = 32;
+static uint64_t unique = 1;
 
 typedef std::vector<TypeInfo> TypeVector;
 static TypeVector EnumeratedTypes;
@@ -173,8 +174,9 @@
     if (isConst)
       Source = "ulong fptoui(" + Source + " to ulong)";
     else {
-      *O << "    %cast_upgrade = fptoui " + Source + " to ulong\n";
-      Source = "ulong %cast_upgrade";
+      *O << "    %cast_upgrade" << unique << " = fptoui " << Source 
+         << " to ulong\n";
+      Source = "ulong %cast_upgrade" + llvm::utostr(unique);
     }
     // Update the SrcTy for the getCastOpcode call below
     SrcTy.destroy();
@@ -248,7 +250,7 @@
 %type <String> OptTailCall InstVal OptVolatile
 %type <String> MemoryInst SymbolicValueRef OptSideEffect GlobalType
 %type <String> FnDeclareLinkage BasicBlockList BigOrLittle AsmBlock
-%type <String> Name ValueRef ConstValueRef ConstVector
+%type <String> Name ConstValueRef ConstVector
 %type <String> ShiftOps SetCondOps LogicalOps ArithmeticOps CastOps 
 
 %type <ValList> ValueRefList ValueRefListE IndexList
@@ -259,7 +261,7 @@
 %type <String> IntVal EInt64Val 
 %type <Const>  ConstVal
 
-%type <Value> ResolvedVal
+%type <Value> ValueRef ResolvedVal 
 
 %start Module
 
@@ -905,17 +907,28 @@
 SymbolicValueRef : IntVal | Name ;
 
 // ValueRef - A reference to a definition... either constant or symbolic
-ValueRef : SymbolicValueRef | ConstValueRef;
-
+ValueRef 
+  : SymbolicValueRef {
+    $$.val = $1;
+    $$.constant = false;
+    $$.type.newTy = 0;
+    $$.type.oldTy = UnresolvedTy;
+  }
+  | ConstValueRef {
+    $$.val = $1;
+    $$.constant = true;
+    $$.type.newTy = 0;
+    $$.type.oldTy = UnresolvedTy;
+  }
+  ;
 
 // ResolvedVal - a <type> <value> pair.  This is used only in cases where the
 // 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 {
+    $$ = $2;
     $$.type = $1;
-    $$.val = new std::string(*$1.newTy + " ");
-    *$$.val += *$2;
-    delete $2;
+    $$.val->insert(0, *$1.newTy + " ");
   };
 
 BasicBlockList : BasicBlockList BasicBlock {
@@ -958,27 +971,29 @@
     $$ = 0;
   }
   | BR LABEL ValueRef {                         // Unconditional Branch...
-    *O << "    " << *$1 << " " << *$2.newTy << " " << *$3 << "\n";
-    delete $1; $2.destroy(); delete $3;
+    *O << "    " << *$1 << " " << *$2.newTy << " " << *$3.val << "\n";
+    delete $1; $2.destroy(); $3.destroy();
     $$ = 0;
   }                                                  // Conditional Branch...
   | BR BOOL ValueRef ',' LABEL ValueRef ',' LABEL ValueRef {  
-    *O << "    " << *$1 << " " << *$2.newTy << " " << *$3 << ", " 
-       << *$5.newTy << " " << *$6 << ", " << *$8.newTy << " " << *$9 << "\n";
-    delete $1; $2.destroy(); delete $3; $5.destroy(); delete $6; 
-    $8.destroy(); delete $9;
+    *O << "    " << *$1 << " " << *$2.newTy << " " << *$3.val << ", " 
+       << *$5.newTy << " " << *$6.val << ", " << *$8.newTy << " " 
+       << *$9.val << "\n";
+    delete $1; $2.destroy(); $3.destroy(); $5.destroy(); $6.destroy(); 
+    $8.destroy(); $9.destroy();
     $$ = 0;
   }
   | SWITCH IntType ValueRef ',' LABEL ValueRef '[' JumpTable ']' {
-    *O << "    " << *$1 << " " << *$2.newTy << " " << *$3 << ", " << *$5.newTy 
-       << " " << *$6 << " [" << *$8 << " ]\n";
-    delete $1; $2.destroy(); delete $3; $5.destroy(); delete $6; delete $8;
+    *O << "    " << *$1 << " " << *$2.newTy << " " << *$3.val << ", " 
+       << *$5.newTy << " " << *$6.val << " [" << *$8 << " ]\n";
+    delete $1; $2.destroy(); $3.destroy(); $5.destroy(); $6.destroy(); 
+    delete $8;
     $$ = 0;
   }
   | SWITCH IntType ValueRef ',' LABEL ValueRef '[' ']' {
-    *O << "    " << *$1 << " " << *$2.newTy << " " << *$3 << ", " 
-       << *$5.newTy << " " << *$6 << "[]\n";
-    delete $1; $2.destroy(); delete $3; $5.destroy(); delete $6;
+    *O << "    " << *$1 << " " << *$2.newTy << " " << *$3.val << ", " 
+       << *$5.newTy << " " << *$6.val << "[]\n";
+    delete $1; $2.destroy(); $3.destroy(); $5.destroy(); $6.destroy();
     $$ = 0;
   }
   | OptAssign INVOKE OptCallingConv TypesV ValueRef '(' ValueRefListE ')'
@@ -986,7 +1001,7 @@
     *O << "    ";
     if (!$1->empty())
       *O << *$1 << " = ";
-    *O << *$2 << " " << *$3 << " " << *$4.newTy << " " << *$5 << " (";
+    *O << *$2 << " " << *$3 << " " << *$4.newTy << " " << *$5.val << " (";
     for (unsigned i = 0; i < $7->size(); ++i) {
       ValueInfo& VI = (*$7)[i];
       *O << *VI.val;
@@ -994,11 +1009,11 @@
         *O << ", ";
       VI.destroy();
     }
-    *O << ") " << *$9 << " " << *$10.newTy << " " << *$11 << " " 
-       << *$12 << " " << *$13.newTy << " " << *$14 << "\n";
-    delete $1; delete $2; delete $3; $4.destroy(); delete $5; delete $7; 
-    delete $9; $10.destroy(); delete $11; delete $12; $13.destroy(); 
-    delete $14; 
+    *O << ") " << *$9 << " " << *$10.newTy << " " << *$11.val << " " 
+       << *$12 << " " << *$13.newTy << " " << *$14.val << "\n";
+    delete $1; delete $2; delete $3; $4.destroy(); $5.destroy(); delete $7; 
+    delete $9; $10.destroy(); $11.destroy(); delete $12; $13.destroy(); 
+    $14.destroy(); 
     $$ = 0;
   }
   | UNWIND {
@@ -1013,14 +1028,14 @@
   };
 
 JumpTable : JumpTable IntType ConstValueRef ',' LABEL ValueRef {
-    *$1 += " " + *$2.newTy + " " + *$3 + ", " + *$5.newTy + " " + *$6;
-    $2.destroy(); delete $3; $5.destroy(); delete $6;
+    *$1 += " " + *$2.newTy + " " + *$3 + ", " + *$5.newTy + " " + *$6.val;
+    $2.destroy(); delete $3; $5.destroy(); $6.destroy();
     $$ = $1;
   }
   | IntType ConstValueRef ',' LABEL ValueRef {
     $2->insert(0, *$1.newTy + " " );
-    *$2 += ", " + *$4.newTy + " " + *$5;
-    $1.destroy(); $4.destroy(); delete $5;
+    *$2 += ", " + *$4.newTy + " " + *$5.val;
+    $1.destroy(); $4.destroy(); $5.destroy();
     $$ = $2;
   };
 
@@ -1035,14 +1050,15 @@
 
 PHIList 
   : Types '[' ValueRef ',' ValueRef ']' {    // Used for PHI nodes
-    $3->insert(0, *$1.newTy + "[");
-    *$3 += "," + *$5 + "]";
-    $1.destroy(); delete $5;
-    $$ = $3;
+    $3.val->insert(0, *$1.newTy + "[");
+    *$3.val += "," + *$5.val + "]";
+    $1.destroy(); $5.destroy();
+    $$ = new std::string(*$3.val);
+    $3.destroy();
   }
   | PHIList ',' '[' ValueRef ',' ValueRef ']' {
-    *$1 += ", [" + *$4 + "," + *$6 + "]";
-    delete $4; delete $6;
+    *$1 += ", [" + *$4.val + "," + *$6.val + "]";
+    $4.destroy(); $6.destroy();
     $$ = $1;
   };
 
@@ -1073,18 +1089,18 @@
   ;
 
 InstVal : ArithmeticOps Types ValueRef ',' ValueRef {
-    *$1 += " " + *$2.newTy + " " + *$3 + ", " + *$5;
-    $2.destroy(); delete $3; delete $5;
+    *$1 += " " + *$2.newTy + " " + *$3.val + ", " + *$5.val;
+    $2.destroy(); $3.destroy(); $5.destroy();
     $$ = $1;
   }
   | LogicalOps Types ValueRef ',' ValueRef {
-    *$1 += " " + *$2.newTy + " " + *$3 + ", " + *$5;
-    $2.destroy(); delete $3; delete $5;
+    *$1 += " " + *$2.newTy + " " + *$3.val + ", " + *$5.val;
+    $2.destroy(); $3.destroy(); $5.destroy();
     $$ = $1;
   }
   | SetCondOps Types ValueRef ',' ValueRef {
-    *$1 += " " + *$2.newTy + " " + *$3 + ", " + *$5;
-    $2.destroy(); delete $3; delete $5;
+    *$1 += " " + *$2.newTy + " " + *$3.val + ", " + *$5.val;
+    $2.destroy(); $3.destroy(); $5.destroy();
     $$ = $1;
   }
   | NOT ResolvedVal {
@@ -1149,7 +1165,7 @@
       *$1 += " " + *$2;
     if (!$1->empty())
       *$1 += " ";
-    *$1 += *$3.newTy + " " + *$4 + "(";
+    *$1 += *$3.newTy + " " + *$4.val + "(";
     for (unsigned i = 0; i < $6->size(); ++i) {
       ValueInfo& VI = (*$6)[i];
       *$1 += *VI.val;
@@ -1158,7 +1174,7 @@
       VI.destroy();
     }
     *$1 += ")";
-    delete $2; $3.destroy(); delete $4; delete $6;
+    delete $2; $3.destroy(); $4.destroy(); delete $6;
     $$ = $1;
   }
   | MemoryInst ;
@@ -1183,10 +1199,10 @@
     $$ = $1;
   }
   | MALLOC Types ',' UINT ValueRef OptCAlign {
-    *$1 += " " + *$2.newTy + ", " + *$4.newTy + " " + *$5;
+    *$1 += " " + *$2.newTy + ", " + *$4.newTy + " " + *$5.val;
     if (!$6->empty())
       *$1 += " " + *$6;
-    $2.destroy(); $4.destroy(); delete $5; delete $6;
+    $2.destroy(); $4.destroy(); $5.destroy(); delete $6;
     $$ = $1;
   }
   | ALLOCA Types OptCAlign {
@@ -1197,10 +1213,10 @@
     $$ = $1;
   }
   | ALLOCA Types ',' UINT ValueRef OptCAlign {
-    *$1 += " " + *$2.newTy + ", " + *$4.newTy + " " + *$5;
+    *$1 += " " + *$2.newTy + ", " + *$4.newTy + " " + *$5.val;
     if (!$6->empty())
       *$1 += " " + *$6;
-    $2.destroy(); $4.destroy(); delete $5; delete $6;
+    $2.destroy(); $4.destroy(); $5.destroy(); delete $6;
     $$ = $1;
   }
   | FREE ResolvedVal {
@@ -1211,25 +1227,38 @@
   | OptVolatile LOAD Types ValueRef {
     if (!$1->empty())
       *$1 += " ";
-    *$1 += *$2 + " " + *$3.newTy + " " + *$4;
-    delete $2; $3.destroy(); delete $4;
+    *$1 += *$2 + " " + *$3.newTy + " " + *$4.val;
+    delete $2; $3.destroy(); $4.destroy();
     $$ = $1;
   }
   | OptVolatile STORE ResolvedVal ',' Types ValueRef {
     if (!$1->empty())
       *$1 += " ";
-    *$1 += *$2 + " " + *$3.val + ", " + *$5.newTy + " " + *$6;
-    delete $2; $3.destroy(); $5.destroy(); delete $6;
+    *$1 += *$2 + " " + *$3.val + ", " + *$5.newTy + " " + *$6.val;
+    delete $2; $3.destroy(); $5.destroy(); $6.destroy();
     $$ = $1;
   }
   | GETELEMENTPTR Types ValueRef IndexList {
-    *$1 += " " + *$2.newTy + " " + *$3;
+    // Upgrade the indices
+    for (unsigned i = 0; i < $4->size(); ++i) {
+      ValueInfo& VI = (*$4)[i];
+      if (VI.type.isUnsigned() && !VI.isConstant() && 
+          VI.type.getBitWidth() < 64) {
+        std::string* old = VI.val;
+        *O << "    %gep_upgrade" << unique << " = zext " << *old 
+           << " to ulong\n";
+        VI.val = new std::string("ulong %gep_upgrade" + llvm::utostr(unique++));
+        VI.type.oldTy = ULongTy;
+        delete old;
+      }
+    }
+    *$1 += " " + *$2.newTy + " " + *$3.val;
     for (unsigned i = 0; i < $4->size(); ++i) {
       ValueInfo& VI = (*$4)[i];
       *$1 += ", " + *VI.val;
       VI.destroy();
     }
-    $2.destroy(); delete $3; delete $4;
+    $2.destroy(); $3.destroy(); delete $4;
     $$ = $1;
   };
 






More information about the llvm-commits mailing list