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

Reid Spencer reid at x10sys.com
Fri Jan 5 22:04:47 PST 2007



Changes in directory llvm/tools/llvm-upgrade:

UpgradeParser.cpp updated: 1.36 -> 1.37
UpgradeParser.cpp.cvs updated: 1.34 -> 1.35
UpgradeParser.h updated: 1.27 -> 1.28
UpgradeParser.h.cvs updated: 1.25 -> 1.26
UpgradeParser.y.cvs updated: 1.33 -> 1.34
---
Log message:

Regenerate.


---
Diffs of the changes:  (+748 -571)

 UpgradeParser.cpp     |  569 +++++++++++++++++++++++++++-----------------------
 UpgradeParser.cpp.cvs |  569 +++++++++++++++++++++++++++-----------------------
 UpgradeParser.h       |    2 
 UpgradeParser.h.cvs   |    2 
 UpgradeParser.y.cvs   |  177 ++++++++++-----
 5 files changed, 748 insertions(+), 571 deletions(-)


Index: llvm/tools/llvm-upgrade/UpgradeParser.cpp
diff -u llvm/tools/llvm-upgrade/UpgradeParser.cpp:1.36 llvm/tools/llvm-upgrade/UpgradeParser.cpp:1.37
--- llvm/tools/llvm-upgrade/UpgradeParser.cpp:1.36	Fri Jan  5 18:23:53 2007
+++ llvm/tools/llvm-upgrade/UpgradeParser.cpp	Sat Jan  6 00:04:32 2007
@@ -489,8 +489,8 @@
 
 const TypeInfo* TypeInfo::resolve() const {
   if (isUnresolved()) {
-    if (getNewTy()[0] == '%' && isdigit(getNewTy()[1])) {
-      unsigned ref = atoi(&((getNewTy().c_str())[1])); // skip the %
+    if (getNewTy()[0] == '%' && isdigit(newTy[1])) {
+      unsigned ref = atoi(&((newTy.c_str())[1])); // skip the %
       if (ref < EnumeratedTypes.size()) {
         return EnumeratedTypes[ref];
       } else {
@@ -499,7 +499,7 @@
         yyerror(msg.c_str());
       }
     } else {
-      TypeMap::iterator I = NamedTypes.find(getNewTy());
+      TypeMap::iterator I = NamedTypes.find(newTy);
       if (I != NamedTypes.end()) {
         return I->second;
       } else {
@@ -671,6 +671,110 @@
   return 0;
 }
 
+void TypeInfo::getSignedness(unsigned &sNum, unsigned &uNum, 
+                             UpRefStack& stack) const {
+  switch (oldTy) {
+    default:
+    case OpaqueTy: case LabelTy: case VoidTy: case BoolTy: 
+    case FloatTy : case DoubleTy: case UpRefTy:
+      return;
+    case SByteTy: case ShortTy: case LongTy: case IntTy: 
+      sNum++;
+      return;
+    case UByteTy: case UShortTy: case UIntTy: case ULongTy: 
+      uNum++;
+      return;
+    case PointerTy:
+    case PackedTy: 
+    case ArrayTy:
+      stack.push_back(this);
+      elemTy->getSignedness(sNum, uNum, stack);
+      return;
+    case StructTy:
+    case PackedStructTy: {
+      stack.push_back(this);
+      for (unsigned i = 0; i < elements->size(); i++) {
+        (*elements)[i]->getSignedness(sNum, uNum, stack);
+      }
+      return;
+    }
+    case UnresolvedTy: {
+      const TypeInfo* Ty = this->resolve();
+      // Let's not recurse.
+      UpRefStack::const_iterator I = stack.begin(), E = stack.end();
+      for ( ; I != E && *I != Ty; ++I) 
+        ;
+      if (I == E)
+        Ty->getSignedness(sNum, uNum, stack);
+      return;
+    }
+  }
+}
+
+std::string AddSuffix(const std::string& Name, const std::string& Suffix) {
+  if (Name[Name.size()-1] == '"') {
+    std::string Result = Name;
+    Result.insert(Result.size()-1, Suffix);
+    return Result;
+  }
+  return Name + Suffix;
+}
+
+std::string TypeInfo::makeUniqueName(const std::string& BaseName) const {
+  if (BaseName == "\"alloca point\"")
+    return BaseName;
+  switch (oldTy) {
+    default:
+      break;
+    case OpaqueTy: case LabelTy: case VoidTy: case BoolTy: case UpRefTy:
+    case FloatTy : case DoubleTy: case UnresolvedTy:
+      return BaseName;
+    case SByteTy: case ShortTy: case LongTy: case IntTy: 
+      return AddSuffix(BaseName, ".s");
+    case UByteTy: case UShortTy: case UIntTy: case ULongTy: 
+      return AddSuffix(BaseName, ".u");
+  }
+
+  unsigned uNum = 0, sNum = 0;
+  std::string Suffix;
+  switch (oldTy) {
+    case PointerTy:
+    case PackedTy: 
+    case ArrayTy: {
+      TypeInfo::UpRefStack stack;
+      elemTy->resolve()->getSignedness(sNum, uNum, stack);
+      break;
+    }
+    case StructTy:
+    case PackedStructTy: {
+      for (unsigned i = 0; i < elements->size(); i++) {
+        TypeInfo::UpRefStack stack;
+        (*elements)[i]->resolve()->getSignedness(sNum, uNum, stack);
+      }
+      break;
+    }
+    default:
+      assert(0 && "Invalid Type");
+      break;
+  }
+
+  if (sNum == 0 && uNum == 0)
+    return BaseName;
+
+  switch (oldTy) {
+    default:             Suffix += ".nada"; break;
+    case PointerTy:      Suffix += ".pntr"; break;
+    case PackedTy:       Suffix += ".pckd"; break;
+    case ArrayTy:        Suffix += ".arry"; break;
+    case StructTy:       Suffix += ".strc"; break;
+    case PackedStructTy: Suffix += ".pstr"; break;
+  }
+
+  Suffix += ".s" + llvm::utostr(sNum);
+  Suffix += ".u" + llvm::utostr(uNum);
+  return AddSuffix(BaseName, Suffix);
+}
+
 TypeInfo& TypeInfo::operator=(const TypeInfo& that) {
   oldTy = that.oldTy;
   nelems = that.nelems;
@@ -886,9 +990,8 @@
   return PFTy;
 }
 
-typedef std::vector<const TypeInfo*> UpRefStack;
 static const TypeInfo* ResolveUpReference(const TypeInfo* Ty, 
-                                          UpRefStack* stack) {
+                                          TypeInfo::UpRefStack* stack) {
   assert(Ty->isUpReference() && "Can't resolve a non-upreference");
   unsigned upref = Ty->getUpRefNum();
   assert(upref < stack->size() && "Invalid up reference");
@@ -898,7 +1001,7 @@
 static const TypeInfo* getGEPIndexedType(const TypeInfo* PTy, ValueList* idxs) {
   const TypeInfo* Result = PTy = PTy->resolve();
   assert(PTy->isPointer() && "GEP Operand is not a pointer?");
-  UpRefStack stack;
+  TypeInfo::UpRefStack stack;
   for (unsigned i = 0; i < idxs->size(); ++i) {
     if (Result->isComposite()) {
       Result = Result->getIndexedType((*idxs)[i]);
@@ -919,24 +1022,13 @@
   return Result->getPointerType();
 }
 
-static std::string makeUniqueName(const std::string *Name, bool isSigned) {
-  const char *suffix = ".u";
-  if (isSigned)
-    suffix = ".s";
-  if ((*Name)[Name->size()-1] == '"') {
-    std::string Result(*Name);
-    Result.insert(Name->size()-1, suffix);
-    return Result;
-  }
-  return *Name + suffix;
-}
 
 // This function handles appending .u or .s to integer value names that
 // were previously unsigned or signed, respectively. This avoids name
 // collisions since the unsigned and signed type planes have collapsed
 // into a single signless type plane.
 static std::string getUniqueName(const std::string *Name, const TypeInfo* Ty,
-                                 bool isGlobal = false) {
+                                 bool isGlobal = false, bool isDef = false) {
 
   // If its not a symbolic name, don't modify it, probably a constant val.
   if ((*Name)[0] != '%' && (*Name)[0] != '"')
@@ -969,41 +1061,9 @@
     return *Name;
   }
 
-  // Remove as many levels of pointer nesting that we have.
-  if (Ty->isPointer()) {
-    // Avoid infinite loops in recursive types
-    const TypeInfo* Last = 0;
-    while (Ty->isPointer() && !Ty->sameOldTyAs(Last)) {
-      Last = Ty;
-      Ty = Ty->getElementType()->resolve();
-    }
-  }
-
   // Default the result to the current name
-  std::string Result = *Name; 
+  std::string Result = Ty->makeUniqueName(*Name);
 
-  // Now deal with the underlying type
-  if (Ty->isInteger()) {
-    // If its an integer type, make the name unique
-    Result = makeUniqueName(Name, Ty->isSigned());
-  } else if (Ty->isArray() || Ty->isPacked()) {
-    Ty = Ty->getElementType();
-    if (Ty->isInteger())
-      Result = makeUniqueName(Name, Ty->isSigned());
-  } else if (Ty->isStruct()) {
-    // Scan the fields and count the signed and unsigned fields
-    int isSigned = 0;
-    for (unsigned i = 0; i < Ty->getNumStructElements(); ++i) {
-      const TypeInfo* Tmp = Ty->getElement(i);
-      if (Tmp->isInteger())
-        if (Tmp->isSigned())
-          isSigned++;
-        else
-          isSigned--;
-    }
-    if (isSigned != 0)
-      Result = makeUniqueName(Name, isSigned > 0);
-  }
   return Result;
 }
 
@@ -1114,7 +1174,7 @@
 #endif
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 742 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 802 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
 typedef union YYSTYPE {
   std::string*    String;
   const TypeInfo* Type;
@@ -1124,7 +1184,7 @@
   TypeList*       TypeVec;
 } YYSTYPE;
 /* Line 196 of yacc.c.  */
-#line 1128 "UpgradeParser.tab.c"
+#line 1188 "UpgradeParser.tab.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -1136,7 +1196,7 @@
 
 
 /* Line 219 of yacc.c.  */
-#line 1140 "UpgradeParser.tab.c"
+#line 1200 "UpgradeParser.tab.c"
 
 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
 # define YYSIZE_T __SIZE_TYPE__
@@ -1492,37 +1552,37 @@
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short int yyrline[] =
 {
-       0,   807,   807,   807,   808,   808,   812,   812,   812,   812,
-     812,   812,   812,   813,   813,   813,   813,   814,   814,   814,
-     815,   815,   815,   815,   815,   815,   816,   816,   816,   816,
-     816,   816,   816,   816,   816,   816,   817,   817,   817,   817,
-     817,   817,   817,   817,   817,   817,   818,   818,   818,   818,
-     818,   818,   819,   819,   819,   819,   820,   820,   820,   820,
-     820,   820,   820,   821,   821,   821,   821,   821,   821,   826,
-     826,   826,   826,   827,   827,   827,   827,   828,   828,   829,
-     829,   832,   835,   840,   840,   840,   840,   840,   840,   841,
-     842,   845,   845,   845,   845,   845,   846,   847,   852,   857,
-     858,   861,   862,   870,   876,   877,   880,   881,   890,   891,
-     904,   904,   905,   905,   906,   910,   910,   910,   910,   910,
-     910,   910,   911,   911,   911,   911,   911,   913,   916,   919,
-     922,   926,   939,   945,   951,   961,   964,   974,   977,   985,
-     989,   996,   997,  1002,  1007,  1017,  1023,  1028,  1034,  1040,
-    1046,  1051,  1057,  1063,  1070,  1076,  1082,  1088,  1094,  1100,
-    1106,  1114,  1128,  1140,  1145,  1151,  1156,  1162,  1167,  1172,
-    1180,  1185,  1190,  1200,  1205,  1210,  1210,  1220,  1225,  1228,
-    1233,  1237,  1241,  1243,  1243,  1246,  1256,  1261,  1266,  1276,
-    1286,  1296,  1306,  1311,  1316,  1321,  1323,  1323,  1326,  1331,
-    1338,  1343,  1350,  1357,  1362,  1363,  1371,  1371,  1372,  1372,
-    1374,  1383,  1387,  1391,  1394,  1399,  1402,  1405,  1423,  1424,
-    1427,  1438,  1439,  1441,  1450,  1451,  1452,  1456,  1469,  1470,
-    1473,  1473,  1473,  1473,  1473,  1473,  1473,  1474,  1475,  1480,
-    1481,  1490,  1490,  1494,  1499,  1509,  1518,  1521,  1529,  1533,
-    1538,  1541,  1547,  1547,  1549,  1554,  1559,  1564,  1572,  1580,
-    1587,  1609,  1614,  1620,  1626,  1634,  1652,  1660,  1669,  1673,
-    1680,  1681,  1685,  1690,  1693,  1702,  1710,  1719,  1727,  1735,
-    1740,  1749,  1777,  1783,  1789,  1796,  1802,  1808,  1814,  1832,
-    1837,  1838,  1842,  1843,  1846,  1854,  1863,  1871,  1880,  1886,
-    1895,  1904
+       0,   867,   867,   867,   868,   868,   872,   872,   872,   872,
+     872,   872,   872,   873,   873,   873,   873,   874,   874,   874,
+     875,   875,   875,   875,   875,   875,   876,   876,   876,   876,
+     876,   876,   876,   876,   876,   876,   877,   877,   877,   877,
+     877,   877,   877,   877,   877,   877,   878,   878,   878,   878,
+     878,   878,   879,   879,   879,   879,   880,   880,   880,   880,
+     880,   880,   880,   881,   881,   881,   881,   881,   881,   886,
+     886,   886,   886,   887,   887,   887,   887,   888,   888,   889,
+     889,   892,   895,   900,   900,   900,   900,   900,   900,   901,
+     902,   905,   905,   905,   905,   905,   906,   907,   912,   917,
+     918,   921,   922,   930,   936,   937,   940,   941,   950,   951,
+     964,   964,   965,   965,   966,   970,   970,   970,   970,   970,
+     970,   970,   971,   971,   971,   971,   971,   973,   976,   979,
+     982,   986,   999,  1005,  1011,  1021,  1024,  1034,  1037,  1045,
+    1049,  1056,  1057,  1062,  1067,  1077,  1083,  1088,  1094,  1100,
+    1106,  1111,  1117,  1123,  1130,  1136,  1142,  1148,  1154,  1160,
+    1166,  1174,  1188,  1200,  1205,  1211,  1216,  1222,  1227,  1232,
+    1240,  1245,  1250,  1260,  1265,  1270,  1270,  1280,  1285,  1288,
+    1293,  1297,  1301,  1303,  1303,  1306,  1316,  1321,  1326,  1336,
+    1346,  1356,  1366,  1371,  1376,  1381,  1383,  1383,  1386,  1391,
+    1398,  1403,  1410,  1417,  1422,  1423,  1431,  1431,  1432,  1432,
+    1434,  1443,  1447,  1451,  1454,  1459,  1462,  1465,  1483,  1484,
+    1487,  1498,  1499,  1501,  1510,  1511,  1512,  1516,  1529,  1530,
+    1533,  1533,  1533,  1533,  1533,  1533,  1533,  1534,  1535,  1540,
+    1541,  1550,  1550,  1554,  1559,  1569,  1578,  1581,  1589,  1593,
+    1598,  1601,  1607,  1607,  1609,  1614,  1619,  1624,  1632,  1640,
+    1647,  1669,  1674,  1680,  1686,  1694,  1712,  1720,  1729,  1733,
+    1740,  1741,  1745,  1750,  1753,  1762,  1770,  1779,  1787,  1795,
+    1800,  1809,  1837,  1843,  1849,  1856,  1862,  1868,  1874,  1892,
+    1897,  1898,  1902,  1903,  1906,  1914,  1923,  1931,  1940,  1946,
+    1955,  1964
 };
 #endif
 
@@ -2871,26 +2931,26 @@
   switch (yyn)
     {
         case 81:
-#line 832 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 892 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[-1].String);
   ;}
     break;
 
   case 82:
-#line 835 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 895 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = new std::string(""); 
   ;}
     break;
 
   case 90:
-#line 842 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 902 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(""); ;}
     break;
 
   case 97:
-#line 847 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 907 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     *(yyvsp[-1].String) += *(yyvsp[0].String); 
     delete (yyvsp[0].String);
@@ -2899,27 +2959,27 @@
     break;
 
   case 98:
-#line 852 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 912 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(""); ;}
     break;
 
   case 99:
-#line 857 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 917 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 100:
-#line 858 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 918 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { *(yyvsp[-1].String) += " " + *(yyvsp[0].String); delete (yyvsp[0].String); (yyval.String) = (yyvsp[-1].String); ;}
     break;
 
   case 101:
-#line 861 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 921 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 102:
-#line 862 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 922 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyvsp[-1].String)->insert(0, ", "); 
     *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
@@ -2929,7 +2989,7 @@
     break;
 
   case 103:
-#line 870 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 930 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -2938,17 +2998,17 @@
     break;
 
   case 104:
-#line 876 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 936 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 106:
-#line 880 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 940 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 107:
-#line 881 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 941 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
       (yyvsp[-1].String)->insert(0, ", ");
       if (!(yyvsp[0].String)->empty())
@@ -2959,7 +3019,7 @@
     break;
 
   case 109:
-#line 891 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 951 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
       *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
       delete (yyvsp[0].String);
@@ -2968,28 +3028,28 @@
     break;
 
   case 127:
-#line 913 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 973 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyval.Type) = TypeInfo::get(*(yyvsp[0].String), OpaqueTy);
   ;}
     break;
 
   case 128:
-#line 916 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 976 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyval.Type) = TypeInfo::get(*(yyvsp[0].String), UnresolvedTy);
   ;}
     break;
 
   case 129:
-#line 919 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 979 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyval.Type) = (yyvsp[0].Type); 
   ;}
     break;
 
   case 130:
-#line 922 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 982 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                   // Type UpReference
     (yyvsp[0].String)->insert(0, "\\");
     (yyval.Type) = TypeInfo::get(*(yyvsp[0].String), UpRefTy);
@@ -2997,7 +3057,7 @@
     break;
 
   case 131:
-#line 926 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 986 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {           // Function derived type?
     std::string newTy( (yyvsp[-3].Type)->getNewTy() + "(");
     for (unsigned i = 0; i < (yyvsp[-1].TypeVec)->size(); ++i) {
@@ -3014,7 +3074,7 @@
     break;
 
   case 132:
-#line 939 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 999 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {          // Sized array type?
     uint64_t elems = atoi((yyvsp[-3].String)->c_str());
     (yyvsp[-3].String)->insert(0,"[ ");
@@ -3024,7 +3084,7 @@
     break;
 
   case 133:
-#line 945 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1005 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {          // Packed array type?
     uint64_t elems = atoi((yyvsp[-3].String)->c_str());
     (yyvsp[-3].String)->insert(0,"< ");
@@ -3034,7 +3094,7 @@
     break;
 
   case 134:
-#line 951 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1011 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                        // Structure type?
     std::string newTy("{");
     for (unsigned i = 0; i < (yyvsp[-1].TypeVec)->size(); ++i) {
@@ -3048,14 +3108,14 @@
     break;
 
   case 135:
-#line 961 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1021 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                                  // Empty structure type?
     (yyval.Type) = TypeInfo::get("{}", StructTy, new TypeList());
   ;}
     break;
 
   case 136:
-#line 964 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1024 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                // Packed Structure type?
     std::string newTy("<{");
     for (unsigned i = 0; i < (yyvsp[-2].TypeVec)->size(); ++i) {
@@ -3069,21 +3129,21 @@
     break;
 
   case 137:
-#line 974 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1034 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                          // Empty packed structure type?
     (yyval.Type) = TypeInfo::get("<{}>", PackedStructTy, new TypeList());
   ;}
     break;
 
   case 138:
-#line 977 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1037 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                             // Pointer type?
     (yyval.Type) = (yyvsp[-1].Type)->getPointerType();
   ;}
     break;
 
   case 139:
-#line 985 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1045 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.TypeVec) = new TypeList();
     (yyval.TypeVec)->push_back((yyvsp[0].Type));
@@ -3091,7 +3151,7 @@
     break;
 
   case 140:
-#line 989 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1049 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.TypeVec) = (yyvsp[-2].TypeVec);
     (yyval.TypeVec)->push_back((yyvsp[0].Type));
@@ -3099,7 +3159,7 @@
     break;
 
   case 142:
-#line 997 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1057 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.TypeVec) = (yyvsp[-2].TypeVec);
     (yyval.TypeVec)->push_back(TypeInfo::get("void",VoidTy));
@@ -3108,7 +3168,7 @@
     break;
 
   case 143:
-#line 1002 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1062 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.TypeVec) = new TypeList();
     (yyval.TypeVec)->push_back(TypeInfo::get("void",VoidTy));
@@ -3117,14 +3177,14 @@
     break;
 
   case 144:
-#line 1007 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1067 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.TypeVec) = new TypeList();
   ;}
     break;
 
   case 145:
-#line 1017 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1077 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { // Nonempty unsized arr
     (yyval.Const).type = (yyvsp[-3].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-3].Type)->getNewTy());
@@ -3134,7 +3194,7 @@
     break;
 
   case 146:
-#line 1023 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1083 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-2].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-2].Type)->getNewTy());
@@ -3143,7 +3203,7 @@
     break;
 
   case 147:
-#line 1028 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1088 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-2].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-2].Type)->getNewTy());
@@ -3153,7 +3213,7 @@
     break;
 
   case 148:
-#line 1034 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1094 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { // Nonempty unsized arr
     (yyval.Const).type = (yyvsp[-3].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-3].Type)->getNewTy());
@@ -3163,7 +3223,7 @@
     break;
 
   case 149:
-#line 1040 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1100 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-3].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-3].Type)->getNewTy());
@@ -3173,7 +3233,7 @@
     break;
 
   case 150:
-#line 1046 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1106 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-2].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-2].Type)->getNewTy());
@@ -3182,7 +3242,7 @@
     break;
 
   case 151:
-#line 1051 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1111 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
@@ -3192,7 +3252,7 @@
     break;
 
   case 152:
-#line 1057 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1117 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
@@ -3202,7 +3262,7 @@
     break;
 
   case 153:
-#line 1063 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1123 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name = getUniqueName((yyvsp[0].String), (yyvsp[-1].Type)->resolve(), true);
     (yyval.Const).type = (yyvsp[-1].Type);
@@ -3213,7 +3273,7 @@
     break;
 
   case 154:
-#line 1070 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1130 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
@@ -3223,7 +3283,7 @@
     break;
 
   case 155:
-#line 1076 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1136 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
@@ -3233,7 +3293,7 @@
     break;
 
   case 156:
-#line 1082 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1142 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {      // integral constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
@@ -3243,7 +3303,7 @@
     break;
 
   case 157:
-#line 1088 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1148 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {            // integral constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
@@ -3253,7 +3313,7 @@
     break;
 
   case 158:
-#line 1094 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1154 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                      // Boolean constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
@@ -3263,7 +3323,7 @@
     break;
 
   case 159:
-#line 1100 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1160 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                     // Boolean constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
@@ -3273,7 +3333,7 @@
     break;
 
   case 160:
-#line 1106 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1166 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                   // Float & Double constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
@@ -3283,7 +3343,7 @@
     break;
 
   case 161:
-#line 1114 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1174 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string source = *(yyvsp[-3].Const).cnst;
     const TypeInfo* SrcTy = (yyvsp[-3].Const).type->resolve();
@@ -3301,7 +3361,7 @@
     break;
 
   case 162:
-#line 1128 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1188 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-4].String) += "(" + *(yyvsp[-2].Const).cnst;
     for (unsigned i = 0; i < (yyvsp[-1].ValList)->size(); ++i) {
@@ -3317,7 +3377,7 @@
     break;
 
   case 163:
-#line 1140 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1200 "/proj/llvm/llvm-3/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();
@@ -3326,7 +3386,7 @@
     break;
 
   case 164:
-#line 1145 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1205 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     const char* op = getDivRemOpcode(*(yyvsp[-5].String), (yyvsp[-3].Const).type); 
     (yyval.String) = new std::string(op);
@@ -3336,7 +3396,7 @@
     break;
 
   case 165:
-#line 1151 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1211 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -3345,7 +3405,7 @@
     break;
 
   case 166:
-#line 1156 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1216 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) = getCompareOp(*(yyvsp[-5].String), (yyvsp[-3].Const).type);
     *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
@@ -3355,7 +3415,7 @@
     break;
 
   case 167:
-#line 1162 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1222 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-6].String) += " " + *(yyvsp[-5].String) + " (" +  *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -3364,7 +3424,7 @@
     break;
 
   case 168:
-#line 1167 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1227 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-6].String) += " " + *(yyvsp[-5].String) + " (" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -3373,7 +3433,7 @@
     break;
 
   case 169:
-#line 1172 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1232 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     const char* shiftop = (yyvsp[-5].String)->c_str();
     if (*(yyvsp[-5].String) == "shr")
@@ -3385,7 +3445,7 @@
     break;
 
   case 170:
-#line 1180 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1240 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -3394,7 +3454,7 @@
     break;
 
   case 171:
-#line 1185 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1245 "/proj/llvm/llvm-3/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();
@@ -3403,7 +3463,7 @@
     break;
 
   case 172:
-#line 1190 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1250 "/proj/llvm/llvm-3/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();
@@ -3412,7 +3472,7 @@
     break;
 
   case 173:
-#line 1200 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1260 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", " + *(yyvsp[0].Const).cnst;
     (yyvsp[0].Const).destroy();
@@ -3421,25 +3481,25 @@
     break;
 
   case 174:
-#line 1205 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1265 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(*(yyvsp[0].Const).cnst); (yyvsp[0].Const).destroy(); ;}
     break;
 
   case 177:
-#line 1220 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1280 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
 ;}
     break;
 
   case 178:
-#line 1225 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1285 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = 0;
   ;}
     break;
 
   case 179:
-#line 1228 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1288 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << *(yyvsp[0].String) << '\n';
     delete (yyvsp[0].String);
@@ -3448,7 +3508,7 @@
     break;
 
   case 180:
-#line 1233 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1293 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "module asm " << ' ' << *(yyvsp[0].String) << '\n';
     (yyval.String) = 0;
@@ -3456,7 +3516,7 @@
     break;
 
   case 181:
-#line 1237 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1297 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "implementation\n";
     (yyval.String) = 0;
@@ -3464,17 +3524,17 @@
     break;
 
   case 182:
-#line 1241 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1301 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = 0; ;}
     break;
 
   case 184:
-#line 1243 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1303 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = (yyvsp[0].String); *(yyval.String) = "external"; ;}
     break;
 
   case 185:
-#line 1246 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1306 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     EnumeratedTypes.push_back((yyvsp[0].Type));
     if (!(yyvsp[-2].String)->empty()) {
@@ -3488,7 +3548,7 @@
     break;
 
   case 186:
-#line 1256 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1316 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {       // Function prototypes can be in const pool
     *O << *(yyvsp[0].String) << '\n';
     delete (yyvsp[0].String);
@@ -3497,7 +3557,7 @@
     break;
 
   case 187:
-#line 1261 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1321 "/proj/llvm/llvm-3/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); 
@@ -3506,7 +3566,7 @@
     break;
 
   case 188:
-#line 1266 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1326 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-4].String)->empty()) {
       std::string Name = getGlobalName((yyvsp[-4].String),*(yyvsp[-3].String), (yyvsp[-1].Const).type->getPointerType(),
@@ -3520,7 +3580,7 @@
     break;
 
   case 189:
-#line 1276 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1336 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-4].String)->empty()) {
       std::string Name = getGlobalName((yyvsp[-4].String),*(yyvsp[-3].String),(yyvsp[-1].Type)->getPointerType(),
@@ -3534,7 +3594,7 @@
     break;
 
   case 190:
-#line 1286 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1346 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-4].String)->empty()) {
       std::string Name = getGlobalName((yyvsp[-4].String),*(yyvsp[-3].String),(yyvsp[-1].Type)->getPointerType(),
@@ -3548,7 +3608,7 @@
     break;
 
   case 191:
-#line 1296 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1356 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-4].String)->empty()) {
       std::string Name = getGlobalName((yyvsp[-4].String),*(yyvsp[-3].String),(yyvsp[-1].Type)->getPointerType(),
@@ -3562,7 +3622,7 @@
     break;
 
   case 192:
-#line 1306 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1366 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     *O << *(yyvsp[-1].String) << ' ' << *(yyvsp[0].String) << '\n';
     delete (yyvsp[-1].String); delete (yyvsp[0].String);
@@ -3571,7 +3631,7 @@
     break;
 
   case 193:
-#line 1311 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1371 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << *(yyvsp[-2].String) << " = " << *(yyvsp[0].String) << '\n';
     delete (yyvsp[-2].String); delete (yyvsp[0].String);
@@ -3580,14 +3640,14 @@
     break;
 
   case 194:
-#line 1316 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1376 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyval.String) = 0;
   ;}
     break;
 
   case 198:
-#line 1326 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1386 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -3596,7 +3656,7 @@
     break;
 
   case 199:
-#line 1331 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1391 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
     if (*(yyvsp[0].String) == "64")
@@ -3607,7 +3667,7 @@
     break;
 
   case 200:
-#line 1338 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1398 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -3616,7 +3676,7 @@
     break;
 
   case 201:
-#line 1343 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1403 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -3625,7 +3685,7 @@
     break;
 
   case 202:
-#line 1350 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1410 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyvsp[-1].String)->insert(0, "[ ");
     *(yyvsp[-1].String) += " ]";
@@ -3634,7 +3694,7 @@
     break;
 
   case 203:
-#line 1357 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1417 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -3643,19 +3703,19 @@
     break;
 
   case 205:
-#line 1363 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1423 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = new std::string();
   ;}
     break;
 
   case 209:
-#line 1372 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1432 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 210:
-#line 1374 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1434 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
   (yyval.String) = new std::string((yyvsp[-1].Type)->getNewTy());
   if (!(yyvsp[0].String)->empty()) {
@@ -3667,7 +3727,7 @@
     break;
 
   case 211:
-#line 1383 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1443 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -3675,21 +3735,21 @@
     break;
 
   case 212:
-#line 1387 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1447 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[0].String);
   ;}
     break;
 
   case 213:
-#line 1391 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1451 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[0].String);
   ;}
     break;
 
   case 214:
-#line 1394 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1454 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", ...";
     (yyval.String) = (yyvsp[-2].String);
@@ -3698,19 +3758,19 @@
     break;
 
   case 215:
-#line 1399 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1459 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[0].String);
   ;}
     break;
 
   case 216:
-#line 1402 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1462 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 217:
-#line 1405 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1465 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-7].String)->empty()) {
       *(yyvsp[-7].String) += " ";
@@ -3731,17 +3791,17 @@
     break;
 
   case 218:
-#line 1423 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1483 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string("{"); delete (yyvsp[0].String); ;}
     break;
 
   case 219:
-#line 1424 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1484 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string ("{"); ;}
     break;
 
   case 220:
-#line 1427 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1487 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "define ";
     if (!(yyvsp[-2].String)->empty()) {
@@ -3754,17 +3814,17 @@
     break;
 
   case 221:
-#line 1438 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1498 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string("}"); delete (yyvsp[0].String); ;}
     break;
 
   case 222:
-#line 1439 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1499 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string("}"); ;}
     break;
 
   case 223:
-#line 1441 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1501 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
   if ((yyvsp[-1].String))
     *O << *(yyvsp[-1].String);
@@ -3775,12 +3835,12 @@
     break;
 
   case 224:
-#line 1450 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1510 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 227:
-#line 1456 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1516 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     if (!(yyvsp[-1].String)->empty())
       *(yyvsp[-2].String) += " " + *(yyvsp[-1].String);
@@ -3792,12 +3852,12 @@
     break;
 
   case 228:
-#line 1469 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1529 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 238:
-#line 1475 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1535 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyvsp[-1].String)->insert(0, "<");
     *(yyvsp[-1].String) += ">";
@@ -3806,7 +3866,7 @@
     break;
 
   case 240:
-#line 1481 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1541 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-3].String)->empty()) {
       *(yyvsp[-4].String) += " " + *(yyvsp[-3].String);
@@ -3818,7 +3878,7 @@
     break;
 
   case 243:
-#line 1494 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1554 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Value).val = (yyvsp[0].String);
     (yyval.Value).constant = false;
@@ -3827,7 +3887,7 @@
     break;
 
   case 244:
-#line 1499 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1559 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Value).val = (yyvsp[0].String);
     (yyval.Value).constant = true;
@@ -3836,7 +3896,7 @@
     break;
 
   case 245:
-#line 1509 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1569 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyvsp[-1].Type) = (yyvsp[-1].Type)->resolve();
     std::string Name = getUniqueName((yyvsp[0].Value).val, (yyvsp[-1].Type));
@@ -3848,28 +3908,28 @@
     break;
 
   case 246:
-#line 1518 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1578 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = 0;
   ;}
     break;
 
   case 247:
-#line 1521 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1581 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { // Do not allow functions with 0 basic blocks   
     (yyval.String) = 0;
   ;}
     break;
 
   case 248:
-#line 1529 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1589 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = 0;
   ;}
     break;
 
   case 249:
-#line 1533 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1593 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "    " << *(yyvsp[0].String) << '\n';
     delete (yyvsp[0].String);
@@ -3878,14 +3938,14 @@
     break;
 
   case 250:
-#line 1538 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1598 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = 0;
   ;}
     break;
 
   case 251:
-#line 1541 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1601 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << *(yyvsp[0].String) << '\n';
     delete (yyvsp[0].String);
@@ -3894,12 +3954,12 @@
     break;
 
   case 253:
-#line 1547 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1607 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = (yyvsp[0].String); *(yyval.String) = "unwind"; ;}
     break;
 
   case 254:
-#line 1549 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1609 "/proj/llvm/llvm-3/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();
@@ -3908,7 +3968,7 @@
     break;
 
   case 255:
-#line 1554 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1614 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                                       // Return with no result...
     *O << "    " << *(yyvsp[-1].String) << ' ' << (yyvsp[0].Type)->getNewTy() << '\n';
     delete (yyvsp[-1].String);
@@ -3917,7 +3977,7 @@
     break;
 
   case 256:
-#line 1559 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1619 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                         // Unconditional Branch...
     *O << "    " << *(yyvsp[-2].String) << ' ' << (yyvsp[-1].Type)->getNewTy() << ' ' << *(yyvsp[0].Value).val << '\n';
     delete (yyvsp[-2].String); (yyvsp[0].Value).destroy();
@@ -3926,7 +3986,7 @@
     break;
 
   case 257:
-#line 1564 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1624 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {  
     std::string Name = getUniqueName((yyvsp[-6].Value).val, (yyvsp[-7].Type));
     *O << "    " << *(yyvsp[-8].String) << ' ' << (yyvsp[-7].Type)->getNewTy() << ' ' << Name << ", " 
@@ -3938,7 +3998,7 @@
     break;
 
   case 258:
-#line 1572 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1632 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name = getUniqueName((yyvsp[-6].Value).val, (yyvsp[-7].Type));
     *O << "    " << *(yyvsp[-8].String) << ' ' << (yyvsp[-7].Type)->getNewTy() << ' ' << Name << ", " 
@@ -3950,7 +4010,7 @@
     break;
 
   case 259:
-#line 1580 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1640 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name = getUniqueName((yyvsp[-5].Value).val, (yyvsp[-6].Type));
     *O << "    " << *(yyvsp[-7].String) << ' ' << (yyvsp[-6].Type)->getNewTy() << ' ' << Name << ", " 
@@ -3961,7 +4021,7 @@
     break;
 
   case 260:
-#line 1588 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1648 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     const TypeInfo* ResTy = getFunctionReturnType((yyvsp[-10].Type));
     *O << "    ";
@@ -3986,7 +4046,7 @@
     break;
 
   case 261:
-#line 1609 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1669 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "    " << *(yyvsp[0].String) << '\n';
     delete (yyvsp[0].String);
@@ -3995,7 +4055,7 @@
     break;
 
   case 262:
-#line 1614 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1674 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "    " << *(yyvsp[0].String) << '\n';
     delete (yyvsp[0].String);
@@ -4004,7 +4064,7 @@
     break;
 
   case 263:
-#line 1620 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1680 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += " " + (yyvsp[-4].Type)->getNewTy() + " " + *(yyvsp[-3].String) + ", " + (yyvsp[-1].Type)->getNewTy() + " " + 
            *(yyvsp[0].Value).val;
@@ -4014,7 +4074,7 @@
     break;
 
   case 264:
-#line 1626 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1686 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyvsp[-3].String)->insert(0, (yyvsp[-4].Type)->getNewTy() + " " );
     *(yyvsp[-3].String) += ", " + (yyvsp[-1].Type)->getNewTy() + " " + *(yyvsp[0].Value).val;
@@ -4024,7 +4084,7 @@
     break;
 
   case 265:
-#line 1634 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1694 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-1].String)->empty()) {
       // Get a unique name for this value, based on its type.
@@ -4044,7 +4104,7 @@
     break;
 
   case 266:
-#line 1652 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1712 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {    // Used for PHI nodes
     std::string Name = getUniqueName((yyvsp[-3].Value).val, (yyvsp[-5].Type));
     Name.insert(0, (yyvsp[-5].Type)->getNewTy() + "[");
@@ -4056,7 +4116,7 @@
     break;
 
   case 267:
-#line 1660 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1720 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name = getUniqueName((yyvsp[-3].Value).val, (yyvsp[-6].Value).type);
     *(yyvsp[-6].Value).val += ", [" + Name + "," + *(yyvsp[-1].Value).val + "]";
@@ -4066,7 +4126,7 @@
     break;
 
   case 268:
-#line 1669 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1729 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.ValList) = new ValueList();
     (yyval.ValList)->push_back((yyvsp[0].Value));
@@ -4074,7 +4134,7 @@
     break;
 
   case 269:
-#line 1673 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1733 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.ValList) = (yyvsp[-2].ValList);
     (yyval.ValList)->push_back((yyvsp[0].Value));
@@ -4082,17 +4142,17 @@
     break;
 
   case 270:
-#line 1680 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1740 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.ValList) = (yyvsp[0].ValList); ;}
     break;
 
   case 271:
-#line 1681 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1741 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.ValList) = new ValueList(); ;}
     break;
 
   case 272:
-#line 1685 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1745 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -4101,7 +4161,7 @@
     break;
 
   case 274:
-#line 1693 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1753 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     const char* op = getDivRemOpcode(*(yyvsp[-4].String), (yyvsp[-3].Type)); 
     std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type));
@@ -4114,7 +4174,7 @@
     break;
 
   case 275:
-#line 1702 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1762 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type));
     std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type));
@@ -4126,7 +4186,7 @@
     break;
 
   case 276:
-#line 1710 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1770 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type));
     std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type));
@@ -4139,7 +4199,7 @@
     break;
 
   case 277:
-#line 1719 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1779 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type));
     std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type));
@@ -4151,7 +4211,7 @@
     break;
 
   case 278:
-#line 1727 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1787 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type));
     std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type));
@@ -4163,7 +4223,7 @@
     break;
 
   case 279:
-#line 1735 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1795 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Value) = (yyvsp[0].Value);
     (yyval.Value).val->insert(0, *(yyvsp[-1].String) + " ");
@@ -4172,7 +4232,7 @@
     break;
 
   case 280:
-#line 1740 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1800 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     const char* shiftop = (yyvsp[-3].String)->c_str();
     if (*(yyvsp[-3].String) == "shr")
@@ -4180,12 +4240,12 @@
     (yyval.Value).val = new std::string(shiftop);
     *(yyval.Value).val += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
     (yyval.Value).type = (yyvsp[-2].Value).type;
-    delete (yyvsp[-3].String); delete (yyvsp[-2].Value).val; (yyvsp[0].Value).destroy();
+    delete (yyvsp[-3].String); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
   ;}
     break;
 
   case 281:
-#line 1749 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1809 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string source = *(yyvsp[-2].Value).val;
     const TypeInfo* SrcTy = (yyvsp[-2].Value).type->resolve();
@@ -4217,17 +4277,17 @@
     break;
 
   case 282:
-#line 1777 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1837 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
     (yyval.Value).val = (yyvsp[-5].String);
     (yyval.Value).type = (yyvsp[-2].Value).type;
-    (yyvsp[-4].Value).destroy(); delete (yyvsp[-2].Value).val; (yyvsp[0].Value).destroy();
+    (yyvsp[-4].Value).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
   ;}
     break;
 
   case 283:
-#line 1783 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1843 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + (yyvsp[0].Type)->getNewTy();
     (yyval.Value).val = (yyvsp[-3].String);
@@ -4237,38 +4297,38 @@
     break;
 
   case 284:
-#line 1789 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1849 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
     (yyval.Value).val = (yyvsp[-3].String);
     (yyvsp[-2].Value).type = (yyvsp[-2].Value).type->resolve();;
     (yyval.Value).type = (yyvsp[-2].Value).type->getElementType();
-    delete (yyvsp[-2].Value).val; (yyvsp[0].Value).destroy();
+    (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
   ;}
     break;
 
   case 285:
-#line 1796 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1856 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
     (yyval.Value).val = (yyvsp[-5].String);
     (yyval.Value).type = (yyvsp[-4].Value).type;
-    delete (yyvsp[-4].Value).val; (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
+    (yyvsp[-4].Value).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
   ;}
     break;
 
   case 286:
-#line 1802 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1862 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
     (yyval.Value).val = (yyvsp[-5].String);
     (yyval.Value).type = (yyvsp[-4].Value).type;
-    delete (yyvsp[-4].Value).val; (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
+    (yyvsp[-4].Value).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
   ;}
     break;
 
   case 287:
-#line 1808 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1868 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val;
     (yyval.Value).val = (yyvsp[-1].String);
@@ -4278,7 +4338,7 @@
     break;
 
   case 288:
-#line 1814 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1874 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-5].String)->empty())
       *(yyvsp[-6].String) += " " + *(yyvsp[-5].String);
@@ -4300,22 +4360,22 @@
     break;
 
   case 290:
-#line 1837 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1897 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.ValList) = (yyvsp[0].ValList); ;}
     break;
 
   case 291:
-#line 1838 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1898 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {  (yyval.ValList) = new ValueList(); ;}
     break;
 
   case 293:
-#line 1843 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1903 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 294:
-#line 1846 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1906 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " " + (yyvsp[-1].Type)->getNewTy();
     if (!(yyvsp[0].String)->empty())
@@ -4327,7 +4387,7 @@
     break;
 
   case 295:
-#line 1854 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1914 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name = getUniqueName((yyvsp[-1].Value).val, (yyvsp[-2].Type));
     *(yyvsp[-5].String) += " " + (yyvsp[-4].Type)->getNewTy() + ", " + (yyvsp[-2].Type)->getNewTy() + " " + Name;
@@ -4340,7 +4400,7 @@
     break;
 
   case 296:
-#line 1863 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1923 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " " + (yyvsp[-1].Type)->getNewTy();
     if (!(yyvsp[0].String)->empty())
@@ -4352,7 +4412,7 @@
     break;
 
   case 297:
-#line 1871 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1931 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name = getUniqueName((yyvsp[-1].Value).val, (yyvsp[-2].Type));
     *(yyvsp[-5].String) += " " + (yyvsp[-4].Type)->getNewTy() + ", " + (yyvsp[-2].Type)->getNewTy() + " " + Name;
@@ -4365,7 +4425,7 @@
     break;
 
   case 298:
-#line 1880 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1940 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val;
     (yyval.Value).val = (yyvsp[-1].String);
@@ -4375,7 +4435,7 @@
     break;
 
   case 299:
-#line 1886 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1946 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name = getUniqueName((yyvsp[0].Value).val, (yyvsp[-1].Type));
     if (!(yyvsp[-3].String)->empty())
@@ -4388,7 +4448,7 @@
     break;
 
   case 300:
-#line 1895 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1955 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name = getUniqueName((yyvsp[0].Value).val, (yyvsp[-1].Type));
     if (!(yyvsp[-5].String)->empty())
@@ -4401,7 +4461,7 @@
     break;
 
   case 301:
-#line 1904 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1964 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name = getUniqueName((yyvsp[-1].Value).val, (yyvsp[-2].Type));
     // Upgrade the indices
@@ -4409,10 +4469,9 @@
       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 
+        *O << "    %gep_upgrade" << unique << " = zext " << *VI.val 
            << " to i64\n";
-        VI.val = new std::string("i64 %gep_upgrade" + llvm::utostr(unique++));
+        *VI.val = "i64 %gep_upgrade" + llvm::utostr(unique++);
         VI.type = TypeInfo::get("i64",ULongTy);
       }
     }
@@ -4432,7 +4491,7 @@
     }
 
 /* Line 1126 of yacc.c.  */
-#line 4436 "UpgradeParser.tab.c"
+#line 4495 "UpgradeParser.tab.c"
 
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -4700,7 +4759,7 @@
 }
 
 
-#line 1928 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1987 "/proj/llvm/llvm-3/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.34 llvm/tools/llvm-upgrade/UpgradeParser.cpp.cvs:1.35
--- llvm/tools/llvm-upgrade/UpgradeParser.cpp.cvs:1.34	Fri Jan  5 18:23:53 2007
+++ llvm/tools/llvm-upgrade/UpgradeParser.cpp.cvs	Sat Jan  6 00:04:32 2007
@@ -489,8 +489,8 @@
 
 const TypeInfo* TypeInfo::resolve() const {
   if (isUnresolved()) {
-    if (getNewTy()[0] == '%' && isdigit(getNewTy()[1])) {
-      unsigned ref = atoi(&((getNewTy().c_str())[1])); // skip the %
+    if (getNewTy()[0] == '%' && isdigit(newTy[1])) {
+      unsigned ref = atoi(&((newTy.c_str())[1])); // skip the %
       if (ref < EnumeratedTypes.size()) {
         return EnumeratedTypes[ref];
       } else {
@@ -499,7 +499,7 @@
         yyerror(msg.c_str());
       }
     } else {
-      TypeMap::iterator I = NamedTypes.find(getNewTy());
+      TypeMap::iterator I = NamedTypes.find(newTy);
       if (I != NamedTypes.end()) {
         return I->second;
       } else {
@@ -671,6 +671,110 @@
   return 0;
 }
 
+void TypeInfo::getSignedness(unsigned &sNum, unsigned &uNum, 
+                             UpRefStack& stack) const {
+  switch (oldTy) {
+    default:
+    case OpaqueTy: case LabelTy: case VoidTy: case BoolTy: 
+    case FloatTy : case DoubleTy: case UpRefTy:
+      return;
+    case SByteTy: case ShortTy: case LongTy: case IntTy: 
+      sNum++;
+      return;
+    case UByteTy: case UShortTy: case UIntTy: case ULongTy: 
+      uNum++;
+      return;
+    case PointerTy:
+    case PackedTy: 
+    case ArrayTy:
+      stack.push_back(this);
+      elemTy->getSignedness(sNum, uNum, stack);
+      return;
+    case StructTy:
+    case PackedStructTy: {
+      stack.push_back(this);
+      for (unsigned i = 0; i < elements->size(); i++) {
+        (*elements)[i]->getSignedness(sNum, uNum, stack);
+      }
+      return;
+    }
+    case UnresolvedTy: {
+      const TypeInfo* Ty = this->resolve();
+      // Let's not recurse.
+      UpRefStack::const_iterator I = stack.begin(), E = stack.end();
+      for ( ; I != E && *I != Ty; ++I) 
+        ;
+      if (I == E)
+        Ty->getSignedness(sNum, uNum, stack);
+      return;
+    }
+  }
+}
+
+std::string AddSuffix(const std::string& Name, const std::string& Suffix) {
+  if (Name[Name.size()-1] == '"') {
+    std::string Result = Name;
+    Result.insert(Result.size()-1, Suffix);
+    return Result;
+  }
+  return Name + Suffix;
+}
+
+std::string TypeInfo::makeUniqueName(const std::string& BaseName) const {
+  if (BaseName == "\"alloca point\"")
+    return BaseName;
+  switch (oldTy) {
+    default:
+      break;
+    case OpaqueTy: case LabelTy: case VoidTy: case BoolTy: case UpRefTy:
+    case FloatTy : case DoubleTy: case UnresolvedTy:
+      return BaseName;
+    case SByteTy: case ShortTy: case LongTy: case IntTy: 
+      return AddSuffix(BaseName, ".s");
+    case UByteTy: case UShortTy: case UIntTy: case ULongTy: 
+      return AddSuffix(BaseName, ".u");
+  }
+
+  unsigned uNum = 0, sNum = 0;
+  std::string Suffix;
+  switch (oldTy) {
+    case PointerTy:
+    case PackedTy: 
+    case ArrayTy: {
+      TypeInfo::UpRefStack stack;
+      elemTy->resolve()->getSignedness(sNum, uNum, stack);
+      break;
+    }
+    case StructTy:
+    case PackedStructTy: {
+      for (unsigned i = 0; i < elements->size(); i++) {
+        TypeInfo::UpRefStack stack;
+        (*elements)[i]->resolve()->getSignedness(sNum, uNum, stack);
+      }
+      break;
+    }
+    default:
+      assert(0 && "Invalid Type");
+      break;
+  }
+
+  if (sNum == 0 && uNum == 0)
+    return BaseName;
+
+  switch (oldTy) {
+    default:             Suffix += ".nada"; break;
+    case PointerTy:      Suffix += ".pntr"; break;
+    case PackedTy:       Suffix += ".pckd"; break;
+    case ArrayTy:        Suffix += ".arry"; break;
+    case StructTy:       Suffix += ".strc"; break;
+    case PackedStructTy: Suffix += ".pstr"; break;
+  }
+
+  Suffix += ".s" + llvm::utostr(sNum);
+  Suffix += ".u" + llvm::utostr(uNum);
+  return AddSuffix(BaseName, Suffix);
+}
+
 TypeInfo& TypeInfo::operator=(const TypeInfo& that) {
   oldTy = that.oldTy;
   nelems = that.nelems;
@@ -886,9 +990,8 @@
   return PFTy;
 }
 
-typedef std::vector<const TypeInfo*> UpRefStack;
 static const TypeInfo* ResolveUpReference(const TypeInfo* Ty, 
-                                          UpRefStack* stack) {
+                                          TypeInfo::UpRefStack* stack) {
   assert(Ty->isUpReference() && "Can't resolve a non-upreference");
   unsigned upref = Ty->getUpRefNum();
   assert(upref < stack->size() && "Invalid up reference");
@@ -898,7 +1001,7 @@
 static const TypeInfo* getGEPIndexedType(const TypeInfo* PTy, ValueList* idxs) {
   const TypeInfo* Result = PTy = PTy->resolve();
   assert(PTy->isPointer() && "GEP Operand is not a pointer?");
-  UpRefStack stack;
+  TypeInfo::UpRefStack stack;
   for (unsigned i = 0; i < idxs->size(); ++i) {
     if (Result->isComposite()) {
       Result = Result->getIndexedType((*idxs)[i]);
@@ -919,24 +1022,13 @@
   return Result->getPointerType();
 }
 
-static std::string makeUniqueName(const std::string *Name, bool isSigned) {
-  const char *suffix = ".u";
-  if (isSigned)
-    suffix = ".s";
-  if ((*Name)[Name->size()-1] == '"') {
-    std::string Result(*Name);
-    Result.insert(Name->size()-1, suffix);
-    return Result;
-  }
-  return *Name + suffix;
-}
 
 // This function handles appending .u or .s to integer value names that
 // were previously unsigned or signed, respectively. This avoids name
 // collisions since the unsigned and signed type planes have collapsed
 // into a single signless type plane.
 static std::string getUniqueName(const std::string *Name, const TypeInfo* Ty,
-                                 bool isGlobal = false) {
+                                 bool isGlobal = false, bool isDef = false) {
 
   // If its not a symbolic name, don't modify it, probably a constant val.
   if ((*Name)[0] != '%' && (*Name)[0] != '"')
@@ -969,41 +1061,9 @@
     return *Name;
   }
 
-  // Remove as many levels of pointer nesting that we have.
-  if (Ty->isPointer()) {
-    // Avoid infinite loops in recursive types
-    const TypeInfo* Last = 0;
-    while (Ty->isPointer() && !Ty->sameOldTyAs(Last)) {
-      Last = Ty;
-      Ty = Ty->getElementType()->resolve();
-    }
-  }
-
   // Default the result to the current name
-  std::string Result = *Name; 
+  std::string Result = Ty->makeUniqueName(*Name);
 
-  // Now deal with the underlying type
-  if (Ty->isInteger()) {
-    // If its an integer type, make the name unique
-    Result = makeUniqueName(Name, Ty->isSigned());
-  } else if (Ty->isArray() || Ty->isPacked()) {
-    Ty = Ty->getElementType();
-    if (Ty->isInteger())
-      Result = makeUniqueName(Name, Ty->isSigned());
-  } else if (Ty->isStruct()) {
-    // Scan the fields and count the signed and unsigned fields
-    int isSigned = 0;
-    for (unsigned i = 0; i < Ty->getNumStructElements(); ++i) {
-      const TypeInfo* Tmp = Ty->getElement(i);
-      if (Tmp->isInteger())
-        if (Tmp->isSigned())
-          isSigned++;
-        else
-          isSigned--;
-    }
-    if (isSigned != 0)
-      Result = makeUniqueName(Name, isSigned > 0);
-  }
   return Result;
 }
 
@@ -1114,7 +1174,7 @@
 #endif
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 742 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 802 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
 typedef union YYSTYPE {
   std::string*    String;
   const TypeInfo* Type;
@@ -1124,7 +1184,7 @@
   TypeList*       TypeVec;
 } YYSTYPE;
 /* Line 196 of yacc.c.  */
-#line 1128 "UpgradeParser.tab.c"
+#line 1188 "UpgradeParser.tab.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -1136,7 +1196,7 @@
 
 
 /* Line 219 of yacc.c.  */
-#line 1140 "UpgradeParser.tab.c"
+#line 1200 "UpgradeParser.tab.c"
 
 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
 # define YYSIZE_T __SIZE_TYPE__
@@ -1492,37 +1552,37 @@
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short int yyrline[] =
 {
-       0,   807,   807,   807,   808,   808,   812,   812,   812,   812,
-     812,   812,   812,   813,   813,   813,   813,   814,   814,   814,
-     815,   815,   815,   815,   815,   815,   816,   816,   816,   816,
-     816,   816,   816,   816,   816,   816,   817,   817,   817,   817,
-     817,   817,   817,   817,   817,   817,   818,   818,   818,   818,
-     818,   818,   819,   819,   819,   819,   820,   820,   820,   820,
-     820,   820,   820,   821,   821,   821,   821,   821,   821,   826,
-     826,   826,   826,   827,   827,   827,   827,   828,   828,   829,
-     829,   832,   835,   840,   840,   840,   840,   840,   840,   841,
-     842,   845,   845,   845,   845,   845,   846,   847,   852,   857,
-     858,   861,   862,   870,   876,   877,   880,   881,   890,   891,
-     904,   904,   905,   905,   906,   910,   910,   910,   910,   910,
-     910,   910,   911,   911,   911,   911,   911,   913,   916,   919,
-     922,   926,   939,   945,   951,   961,   964,   974,   977,   985,
-     989,   996,   997,  1002,  1007,  1017,  1023,  1028,  1034,  1040,
-    1046,  1051,  1057,  1063,  1070,  1076,  1082,  1088,  1094,  1100,
-    1106,  1114,  1128,  1140,  1145,  1151,  1156,  1162,  1167,  1172,
-    1180,  1185,  1190,  1200,  1205,  1210,  1210,  1220,  1225,  1228,
-    1233,  1237,  1241,  1243,  1243,  1246,  1256,  1261,  1266,  1276,
-    1286,  1296,  1306,  1311,  1316,  1321,  1323,  1323,  1326,  1331,
-    1338,  1343,  1350,  1357,  1362,  1363,  1371,  1371,  1372,  1372,
-    1374,  1383,  1387,  1391,  1394,  1399,  1402,  1405,  1423,  1424,
-    1427,  1438,  1439,  1441,  1450,  1451,  1452,  1456,  1469,  1470,
-    1473,  1473,  1473,  1473,  1473,  1473,  1473,  1474,  1475,  1480,
-    1481,  1490,  1490,  1494,  1499,  1509,  1518,  1521,  1529,  1533,
-    1538,  1541,  1547,  1547,  1549,  1554,  1559,  1564,  1572,  1580,
-    1587,  1609,  1614,  1620,  1626,  1634,  1652,  1660,  1669,  1673,
-    1680,  1681,  1685,  1690,  1693,  1702,  1710,  1719,  1727,  1735,
-    1740,  1749,  1777,  1783,  1789,  1796,  1802,  1808,  1814,  1832,
-    1837,  1838,  1842,  1843,  1846,  1854,  1863,  1871,  1880,  1886,
-    1895,  1904
+       0,   867,   867,   867,   868,   868,   872,   872,   872,   872,
+     872,   872,   872,   873,   873,   873,   873,   874,   874,   874,
+     875,   875,   875,   875,   875,   875,   876,   876,   876,   876,
+     876,   876,   876,   876,   876,   876,   877,   877,   877,   877,
+     877,   877,   877,   877,   877,   877,   878,   878,   878,   878,
+     878,   878,   879,   879,   879,   879,   880,   880,   880,   880,
+     880,   880,   880,   881,   881,   881,   881,   881,   881,   886,
+     886,   886,   886,   887,   887,   887,   887,   888,   888,   889,
+     889,   892,   895,   900,   900,   900,   900,   900,   900,   901,
+     902,   905,   905,   905,   905,   905,   906,   907,   912,   917,
+     918,   921,   922,   930,   936,   937,   940,   941,   950,   951,
+     964,   964,   965,   965,   966,   970,   970,   970,   970,   970,
+     970,   970,   971,   971,   971,   971,   971,   973,   976,   979,
+     982,   986,   999,  1005,  1011,  1021,  1024,  1034,  1037,  1045,
+    1049,  1056,  1057,  1062,  1067,  1077,  1083,  1088,  1094,  1100,
+    1106,  1111,  1117,  1123,  1130,  1136,  1142,  1148,  1154,  1160,
+    1166,  1174,  1188,  1200,  1205,  1211,  1216,  1222,  1227,  1232,
+    1240,  1245,  1250,  1260,  1265,  1270,  1270,  1280,  1285,  1288,
+    1293,  1297,  1301,  1303,  1303,  1306,  1316,  1321,  1326,  1336,
+    1346,  1356,  1366,  1371,  1376,  1381,  1383,  1383,  1386,  1391,
+    1398,  1403,  1410,  1417,  1422,  1423,  1431,  1431,  1432,  1432,
+    1434,  1443,  1447,  1451,  1454,  1459,  1462,  1465,  1483,  1484,
+    1487,  1498,  1499,  1501,  1510,  1511,  1512,  1516,  1529,  1530,
+    1533,  1533,  1533,  1533,  1533,  1533,  1533,  1534,  1535,  1540,
+    1541,  1550,  1550,  1554,  1559,  1569,  1578,  1581,  1589,  1593,
+    1598,  1601,  1607,  1607,  1609,  1614,  1619,  1624,  1632,  1640,
+    1647,  1669,  1674,  1680,  1686,  1694,  1712,  1720,  1729,  1733,
+    1740,  1741,  1745,  1750,  1753,  1762,  1770,  1779,  1787,  1795,
+    1800,  1809,  1837,  1843,  1849,  1856,  1862,  1868,  1874,  1892,
+    1897,  1898,  1902,  1903,  1906,  1914,  1923,  1931,  1940,  1946,
+    1955,  1964
 };
 #endif
 
@@ -2871,26 +2931,26 @@
   switch (yyn)
     {
         case 81:
-#line 832 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 892 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[-1].String);
   ;}
     break;
 
   case 82:
-#line 835 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 895 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = new std::string(""); 
   ;}
     break;
 
   case 90:
-#line 842 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 902 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(""); ;}
     break;
 
   case 97:
-#line 847 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 907 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     *(yyvsp[-1].String) += *(yyvsp[0].String); 
     delete (yyvsp[0].String);
@@ -2899,27 +2959,27 @@
     break;
 
   case 98:
-#line 852 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 912 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(""); ;}
     break;
 
   case 99:
-#line 857 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 917 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 100:
-#line 858 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 918 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { *(yyvsp[-1].String) += " " + *(yyvsp[0].String); delete (yyvsp[0].String); (yyval.String) = (yyvsp[-1].String); ;}
     break;
 
   case 101:
-#line 861 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 921 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 102:
-#line 862 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 922 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyvsp[-1].String)->insert(0, ", "); 
     *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
@@ -2929,7 +2989,7 @@
     break;
 
   case 103:
-#line 870 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 930 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -2938,17 +2998,17 @@
     break;
 
   case 104:
-#line 876 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 936 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 106:
-#line 880 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 940 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 107:
-#line 881 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 941 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
       (yyvsp[-1].String)->insert(0, ", ");
       if (!(yyvsp[0].String)->empty())
@@ -2959,7 +3019,7 @@
     break;
 
   case 109:
-#line 891 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 951 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
       *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
       delete (yyvsp[0].String);
@@ -2968,28 +3028,28 @@
     break;
 
   case 127:
-#line 913 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 973 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyval.Type) = TypeInfo::get(*(yyvsp[0].String), OpaqueTy);
   ;}
     break;
 
   case 128:
-#line 916 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 976 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyval.Type) = TypeInfo::get(*(yyvsp[0].String), UnresolvedTy);
   ;}
     break;
 
   case 129:
-#line 919 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 979 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyval.Type) = (yyvsp[0].Type); 
   ;}
     break;
 
   case 130:
-#line 922 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 982 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                   // Type UpReference
     (yyvsp[0].String)->insert(0, "\\");
     (yyval.Type) = TypeInfo::get(*(yyvsp[0].String), UpRefTy);
@@ -2997,7 +3057,7 @@
     break;
 
   case 131:
-#line 926 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 986 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {           // Function derived type?
     std::string newTy( (yyvsp[-3].Type)->getNewTy() + "(");
     for (unsigned i = 0; i < (yyvsp[-1].TypeVec)->size(); ++i) {
@@ -3014,7 +3074,7 @@
     break;
 
   case 132:
-#line 939 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 999 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {          // Sized array type?
     uint64_t elems = atoi((yyvsp[-3].String)->c_str());
     (yyvsp[-3].String)->insert(0,"[ ");
@@ -3024,7 +3084,7 @@
     break;
 
   case 133:
-#line 945 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1005 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {          // Packed array type?
     uint64_t elems = atoi((yyvsp[-3].String)->c_str());
     (yyvsp[-3].String)->insert(0,"< ");
@@ -3034,7 +3094,7 @@
     break;
 
   case 134:
-#line 951 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1011 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                        // Structure type?
     std::string newTy("{");
     for (unsigned i = 0; i < (yyvsp[-1].TypeVec)->size(); ++i) {
@@ -3048,14 +3108,14 @@
     break;
 
   case 135:
-#line 961 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1021 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                                  // Empty structure type?
     (yyval.Type) = TypeInfo::get("{}", StructTy, new TypeList());
   ;}
     break;
 
   case 136:
-#line 964 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1024 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                // Packed Structure type?
     std::string newTy("<{");
     for (unsigned i = 0; i < (yyvsp[-2].TypeVec)->size(); ++i) {
@@ -3069,21 +3129,21 @@
     break;
 
   case 137:
-#line 974 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1034 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                          // Empty packed structure type?
     (yyval.Type) = TypeInfo::get("<{}>", PackedStructTy, new TypeList());
   ;}
     break;
 
   case 138:
-#line 977 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1037 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                             // Pointer type?
     (yyval.Type) = (yyvsp[-1].Type)->getPointerType();
   ;}
     break;
 
   case 139:
-#line 985 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1045 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.TypeVec) = new TypeList();
     (yyval.TypeVec)->push_back((yyvsp[0].Type));
@@ -3091,7 +3151,7 @@
     break;
 
   case 140:
-#line 989 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1049 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.TypeVec) = (yyvsp[-2].TypeVec);
     (yyval.TypeVec)->push_back((yyvsp[0].Type));
@@ -3099,7 +3159,7 @@
     break;
 
   case 142:
-#line 997 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1057 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.TypeVec) = (yyvsp[-2].TypeVec);
     (yyval.TypeVec)->push_back(TypeInfo::get("void",VoidTy));
@@ -3108,7 +3168,7 @@
     break;
 
   case 143:
-#line 1002 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1062 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.TypeVec) = new TypeList();
     (yyval.TypeVec)->push_back(TypeInfo::get("void",VoidTy));
@@ -3117,14 +3177,14 @@
     break;
 
   case 144:
-#line 1007 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1067 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.TypeVec) = new TypeList();
   ;}
     break;
 
   case 145:
-#line 1017 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1077 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { // Nonempty unsized arr
     (yyval.Const).type = (yyvsp[-3].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-3].Type)->getNewTy());
@@ -3134,7 +3194,7 @@
     break;
 
   case 146:
-#line 1023 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1083 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-2].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-2].Type)->getNewTy());
@@ -3143,7 +3203,7 @@
     break;
 
   case 147:
-#line 1028 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1088 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-2].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-2].Type)->getNewTy());
@@ -3153,7 +3213,7 @@
     break;
 
   case 148:
-#line 1034 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1094 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { // Nonempty unsized arr
     (yyval.Const).type = (yyvsp[-3].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-3].Type)->getNewTy());
@@ -3163,7 +3223,7 @@
     break;
 
   case 149:
-#line 1040 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1100 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-3].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-3].Type)->getNewTy());
@@ -3173,7 +3233,7 @@
     break;
 
   case 150:
-#line 1046 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1106 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-2].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-2].Type)->getNewTy());
@@ -3182,7 +3242,7 @@
     break;
 
   case 151:
-#line 1051 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1111 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
@@ -3192,7 +3252,7 @@
     break;
 
   case 152:
-#line 1057 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1117 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
@@ -3202,7 +3262,7 @@
     break;
 
   case 153:
-#line 1063 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1123 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name = getUniqueName((yyvsp[0].String), (yyvsp[-1].Type)->resolve(), true);
     (yyval.Const).type = (yyvsp[-1].Type);
@@ -3213,7 +3273,7 @@
     break;
 
   case 154:
-#line 1070 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1130 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
@@ -3223,7 +3283,7 @@
     break;
 
   case 155:
-#line 1076 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1136 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
@@ -3233,7 +3293,7 @@
     break;
 
   case 156:
-#line 1082 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1142 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {      // integral constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
@@ -3243,7 +3303,7 @@
     break;
 
   case 157:
-#line 1088 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1148 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {            // integral constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
@@ -3253,7 +3313,7 @@
     break;
 
   case 158:
-#line 1094 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1154 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                      // Boolean constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
@@ -3263,7 +3323,7 @@
     break;
 
   case 159:
-#line 1100 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1160 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                     // Boolean constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
@@ -3273,7 +3333,7 @@
     break;
 
   case 160:
-#line 1106 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1166 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                   // Float & Double constants
     (yyval.Const).type = (yyvsp[-1].Type);
     (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy());
@@ -3283,7 +3343,7 @@
     break;
 
   case 161:
-#line 1114 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1174 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string source = *(yyvsp[-3].Const).cnst;
     const TypeInfo* SrcTy = (yyvsp[-3].Const).type->resolve();
@@ -3301,7 +3361,7 @@
     break;
 
   case 162:
-#line 1128 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1188 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-4].String) += "(" + *(yyvsp[-2].Const).cnst;
     for (unsigned i = 0; i < (yyvsp[-1].ValList)->size(); ++i) {
@@ -3317,7 +3377,7 @@
     break;
 
   case 163:
-#line 1140 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1200 "/proj/llvm/llvm-3/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();
@@ -3326,7 +3386,7 @@
     break;
 
   case 164:
-#line 1145 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1205 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     const char* op = getDivRemOpcode(*(yyvsp[-5].String), (yyvsp[-3].Const).type); 
     (yyval.String) = new std::string(op);
@@ -3336,7 +3396,7 @@
     break;
 
   case 165:
-#line 1151 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1211 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -3345,7 +3405,7 @@
     break;
 
   case 166:
-#line 1156 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1216 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) = getCompareOp(*(yyvsp[-5].String), (yyvsp[-3].Const).type);
     *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
@@ -3355,7 +3415,7 @@
     break;
 
   case 167:
-#line 1162 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1222 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-6].String) += " " + *(yyvsp[-5].String) + " (" +  *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -3364,7 +3424,7 @@
     break;
 
   case 168:
-#line 1167 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1227 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-6].String) += " " + *(yyvsp[-5].String) + " (" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -3373,7 +3433,7 @@
     break;
 
   case 169:
-#line 1172 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1232 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     const char* shiftop = (yyvsp[-5].String)->c_str();
     if (*(yyvsp[-5].String) == "shr")
@@ -3385,7 +3445,7 @@
     break;
 
   case 170:
-#line 1180 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1240 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
     (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
@@ -3394,7 +3454,7 @@
     break;
 
   case 171:
-#line 1185 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1245 "/proj/llvm/llvm-3/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();
@@ -3403,7 +3463,7 @@
     break;
 
   case 172:
-#line 1190 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1250 "/proj/llvm/llvm-3/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();
@@ -3412,7 +3472,7 @@
     break;
 
   case 173:
-#line 1200 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1260 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", " + *(yyvsp[0].Const).cnst;
     (yyvsp[0].Const).destroy();
@@ -3421,25 +3481,25 @@
     break;
 
   case 174:
-#line 1205 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1265 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(*(yyvsp[0].Const).cnst); (yyvsp[0].Const).destroy(); ;}
     break;
 
   case 177:
-#line 1220 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1280 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
 ;}
     break;
 
   case 178:
-#line 1225 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1285 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = 0;
   ;}
     break;
 
   case 179:
-#line 1228 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1288 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << *(yyvsp[0].String) << '\n';
     delete (yyvsp[0].String);
@@ -3448,7 +3508,7 @@
     break;
 
   case 180:
-#line 1233 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1293 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "module asm " << ' ' << *(yyvsp[0].String) << '\n';
     (yyval.String) = 0;
@@ -3456,7 +3516,7 @@
     break;
 
   case 181:
-#line 1237 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1297 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "implementation\n";
     (yyval.String) = 0;
@@ -3464,17 +3524,17 @@
     break;
 
   case 182:
-#line 1241 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1301 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = 0; ;}
     break;
 
   case 184:
-#line 1243 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1303 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = (yyvsp[0].String); *(yyval.String) = "external"; ;}
     break;
 
   case 185:
-#line 1246 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1306 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     EnumeratedTypes.push_back((yyvsp[0].Type));
     if (!(yyvsp[-2].String)->empty()) {
@@ -3488,7 +3548,7 @@
     break;
 
   case 186:
-#line 1256 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1316 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {       // Function prototypes can be in const pool
     *O << *(yyvsp[0].String) << '\n';
     delete (yyvsp[0].String);
@@ -3497,7 +3557,7 @@
     break;
 
   case 187:
-#line 1261 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1321 "/proj/llvm/llvm-3/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); 
@@ -3506,7 +3566,7 @@
     break;
 
   case 188:
-#line 1266 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1326 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-4].String)->empty()) {
       std::string Name = getGlobalName((yyvsp[-4].String),*(yyvsp[-3].String), (yyvsp[-1].Const).type->getPointerType(),
@@ -3520,7 +3580,7 @@
     break;
 
   case 189:
-#line 1276 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1336 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-4].String)->empty()) {
       std::string Name = getGlobalName((yyvsp[-4].String),*(yyvsp[-3].String),(yyvsp[-1].Type)->getPointerType(),
@@ -3534,7 +3594,7 @@
     break;
 
   case 190:
-#line 1286 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1346 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-4].String)->empty()) {
       std::string Name = getGlobalName((yyvsp[-4].String),*(yyvsp[-3].String),(yyvsp[-1].Type)->getPointerType(),
@@ -3548,7 +3608,7 @@
     break;
 
   case 191:
-#line 1296 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1356 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-4].String)->empty()) {
       std::string Name = getGlobalName((yyvsp[-4].String),*(yyvsp[-3].String),(yyvsp[-1].Type)->getPointerType(),
@@ -3562,7 +3622,7 @@
     break;
 
   case 192:
-#line 1306 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1366 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     *O << *(yyvsp[-1].String) << ' ' << *(yyvsp[0].String) << '\n';
     delete (yyvsp[-1].String); delete (yyvsp[0].String);
@@ -3571,7 +3631,7 @@
     break;
 
   case 193:
-#line 1311 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1371 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << *(yyvsp[-2].String) << " = " << *(yyvsp[0].String) << '\n';
     delete (yyvsp[-2].String); delete (yyvsp[0].String);
@@ -3580,14 +3640,14 @@
     break;
 
   case 194:
-#line 1316 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1376 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyval.String) = 0;
   ;}
     break;
 
   case 198:
-#line 1326 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1386 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -3596,7 +3656,7 @@
     break;
 
   case 199:
-#line 1331 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1391 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
     if (*(yyvsp[0].String) == "64")
@@ -3607,7 +3667,7 @@
     break;
 
   case 200:
-#line 1338 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1398 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -3616,7 +3676,7 @@
     break;
 
   case 201:
-#line 1343 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1403 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -3625,7 +3685,7 @@
     break;
 
   case 202:
-#line 1350 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1410 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyvsp[-1].String)->insert(0, "[ ");
     *(yyvsp[-1].String) += " ]";
@@ -3634,7 +3694,7 @@
     break;
 
   case 203:
-#line 1357 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1417 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -3643,19 +3703,19 @@
     break;
 
   case 205:
-#line 1363 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1423 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = new std::string();
   ;}
     break;
 
   case 209:
-#line 1372 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1432 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 210:
-#line 1374 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1434 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
   (yyval.String) = new std::string((yyvsp[-1].Type)->getNewTy());
   if (!(yyvsp[0].String)->empty()) {
@@ -3667,7 +3727,7 @@
     break;
 
   case 211:
-#line 1383 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1443 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -3675,21 +3735,21 @@
     break;
 
   case 212:
-#line 1387 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1447 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[0].String);
   ;}
     break;
 
   case 213:
-#line 1391 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1451 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[0].String);
   ;}
     break;
 
   case 214:
-#line 1394 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1454 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += ", ...";
     (yyval.String) = (yyvsp[-2].String);
@@ -3698,19 +3758,19 @@
     break;
 
   case 215:
-#line 1399 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1459 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = (yyvsp[0].String);
   ;}
     break;
 
   case 216:
-#line 1402 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1462 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 217:
-#line 1405 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1465 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-7].String)->empty()) {
       *(yyvsp[-7].String) += " ";
@@ -3731,17 +3791,17 @@
     break;
 
   case 218:
-#line 1423 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1483 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string("{"); delete (yyvsp[0].String); ;}
     break;
 
   case 219:
-#line 1424 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1484 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string ("{"); ;}
     break;
 
   case 220:
-#line 1427 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1487 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "define ";
     if (!(yyvsp[-2].String)->empty()) {
@@ -3754,17 +3814,17 @@
     break;
 
   case 221:
-#line 1438 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1498 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string("}"); delete (yyvsp[0].String); ;}
     break;
 
   case 222:
-#line 1439 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1499 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string("}"); ;}
     break;
 
   case 223:
-#line 1441 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1501 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
   if ((yyvsp[-1].String))
     *O << *(yyvsp[-1].String);
@@ -3775,12 +3835,12 @@
     break;
 
   case 224:
-#line 1450 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1510 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 227:
-#line 1456 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1516 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     if (!(yyvsp[-1].String)->empty())
       *(yyvsp[-2].String) += " " + *(yyvsp[-1].String);
@@ -3792,12 +3852,12 @@
     break;
 
   case 228:
-#line 1469 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1529 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 238:
-#line 1475 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1535 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { 
     (yyvsp[-1].String)->insert(0, "<");
     *(yyvsp[-1].String) += ">";
@@ -3806,7 +3866,7 @@
     break;
 
   case 240:
-#line 1481 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1541 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-3].String)->empty()) {
       *(yyvsp[-4].String) += " " + *(yyvsp[-3].String);
@@ -3818,7 +3878,7 @@
     break;
 
   case 243:
-#line 1494 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1554 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Value).val = (yyvsp[0].String);
     (yyval.Value).constant = false;
@@ -3827,7 +3887,7 @@
     break;
 
   case 244:
-#line 1499 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1559 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Value).val = (yyvsp[0].String);
     (yyval.Value).constant = true;
@@ -3836,7 +3896,7 @@
     break;
 
   case 245:
-#line 1509 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1569 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyvsp[-1].Type) = (yyvsp[-1].Type)->resolve();
     std::string Name = getUniqueName((yyvsp[0].Value).val, (yyvsp[-1].Type));
@@ -3848,28 +3908,28 @@
     break;
 
   case 246:
-#line 1518 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1578 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = 0;
   ;}
     break;
 
   case 247:
-#line 1521 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1581 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { // Do not allow functions with 0 basic blocks   
     (yyval.String) = 0;
   ;}
     break;
 
   case 248:
-#line 1529 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1589 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = 0;
   ;}
     break;
 
   case 249:
-#line 1533 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1593 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "    " << *(yyvsp[0].String) << '\n';
     delete (yyvsp[0].String);
@@ -3878,14 +3938,14 @@
     break;
 
   case 250:
-#line 1538 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1598 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.String) = 0;
   ;}
     break;
 
   case 251:
-#line 1541 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1601 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << *(yyvsp[0].String) << '\n';
     delete (yyvsp[0].String);
@@ -3894,12 +3954,12 @@
     break;
 
   case 253:
-#line 1547 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1607 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = (yyvsp[0].String); *(yyval.String) = "unwind"; ;}
     break;
 
   case 254:
-#line 1549 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1609 "/proj/llvm/llvm-3/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();
@@ -3908,7 +3968,7 @@
     break;
 
   case 255:
-#line 1554 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1614 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                                       // Return with no result...
     *O << "    " << *(yyvsp[-1].String) << ' ' << (yyvsp[0].Type)->getNewTy() << '\n';
     delete (yyvsp[-1].String);
@@ -3917,7 +3977,7 @@
     break;
 
   case 256:
-#line 1559 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1619 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {                         // Unconditional Branch...
     *O << "    " << *(yyvsp[-2].String) << ' ' << (yyvsp[-1].Type)->getNewTy() << ' ' << *(yyvsp[0].Value).val << '\n';
     delete (yyvsp[-2].String); (yyvsp[0].Value).destroy();
@@ -3926,7 +3986,7 @@
     break;
 
   case 257:
-#line 1564 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1624 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {  
     std::string Name = getUniqueName((yyvsp[-6].Value).val, (yyvsp[-7].Type));
     *O << "    " << *(yyvsp[-8].String) << ' ' << (yyvsp[-7].Type)->getNewTy() << ' ' << Name << ", " 
@@ -3938,7 +3998,7 @@
     break;
 
   case 258:
-#line 1572 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1632 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name = getUniqueName((yyvsp[-6].Value).val, (yyvsp[-7].Type));
     *O << "    " << *(yyvsp[-8].String) << ' ' << (yyvsp[-7].Type)->getNewTy() << ' ' << Name << ", " 
@@ -3950,7 +4010,7 @@
     break;
 
   case 259:
-#line 1580 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1640 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name = getUniqueName((yyvsp[-5].Value).val, (yyvsp[-6].Type));
     *O << "    " << *(yyvsp[-7].String) << ' ' << (yyvsp[-6].Type)->getNewTy() << ' ' << Name << ", " 
@@ -3961,7 +4021,7 @@
     break;
 
   case 260:
-#line 1588 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1648 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     const TypeInfo* ResTy = getFunctionReturnType((yyvsp[-10].Type));
     *O << "    ";
@@ -3986,7 +4046,7 @@
     break;
 
   case 261:
-#line 1609 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1669 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "    " << *(yyvsp[0].String) << '\n';
     delete (yyvsp[0].String);
@@ -3995,7 +4055,7 @@
     break;
 
   case 262:
-#line 1614 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1674 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *O << "    " << *(yyvsp[0].String) << '\n';
     delete (yyvsp[0].String);
@@ -4004,7 +4064,7 @@
     break;
 
   case 263:
-#line 1620 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1680 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += " " + (yyvsp[-4].Type)->getNewTy() + " " + *(yyvsp[-3].String) + ", " + (yyvsp[-1].Type)->getNewTy() + " " + 
            *(yyvsp[0].Value).val;
@@ -4014,7 +4074,7 @@
     break;
 
   case 264:
-#line 1626 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1686 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyvsp[-3].String)->insert(0, (yyvsp[-4].Type)->getNewTy() + " " );
     *(yyvsp[-3].String) += ", " + (yyvsp[-1].Type)->getNewTy() + " " + *(yyvsp[0].Value).val;
@@ -4024,7 +4084,7 @@
     break;
 
   case 265:
-#line 1634 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1694 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-1].String)->empty()) {
       // Get a unique name for this value, based on its type.
@@ -4044,7 +4104,7 @@
     break;
 
   case 266:
-#line 1652 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1712 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {    // Used for PHI nodes
     std::string Name = getUniqueName((yyvsp[-3].Value).val, (yyvsp[-5].Type));
     Name.insert(0, (yyvsp[-5].Type)->getNewTy() + "[");
@@ -4056,7 +4116,7 @@
     break;
 
   case 267:
-#line 1660 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1720 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name = getUniqueName((yyvsp[-3].Value).val, (yyvsp[-6].Value).type);
     *(yyvsp[-6].Value).val += ", [" + Name + "," + *(yyvsp[-1].Value).val + "]";
@@ -4066,7 +4126,7 @@
     break;
 
   case 268:
-#line 1669 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1729 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.ValList) = new ValueList();
     (yyval.ValList)->push_back((yyvsp[0].Value));
@@ -4074,7 +4134,7 @@
     break;
 
   case 269:
-#line 1673 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1733 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.ValList) = (yyvsp[-2].ValList);
     (yyval.ValList)->push_back((yyvsp[0].Value));
@@ -4082,17 +4142,17 @@
     break;
 
   case 270:
-#line 1680 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1740 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.ValList) = (yyvsp[0].ValList); ;}
     break;
 
   case 271:
-#line 1681 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1741 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.ValList) = new ValueList(); ;}
     break;
 
   case 272:
-#line 1685 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1745 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-1].String) += " " + *(yyvsp[0].String);
     delete (yyvsp[0].String);
@@ -4101,7 +4161,7 @@
     break;
 
   case 274:
-#line 1693 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1753 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     const char* op = getDivRemOpcode(*(yyvsp[-4].String), (yyvsp[-3].Type)); 
     std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type));
@@ -4114,7 +4174,7 @@
     break;
 
   case 275:
-#line 1702 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1762 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type));
     std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type));
@@ -4126,7 +4186,7 @@
     break;
 
   case 276:
-#line 1710 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1770 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type));
     std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type));
@@ -4139,7 +4199,7 @@
     break;
 
   case 277:
-#line 1719 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1779 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type));
     std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type));
@@ -4151,7 +4211,7 @@
     break;
 
   case 278:
-#line 1727 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1787 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type));
     std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type));
@@ -4163,7 +4223,7 @@
     break;
 
   case 279:
-#line 1735 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1795 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     (yyval.Value) = (yyvsp[0].Value);
     (yyval.Value).val->insert(0, *(yyvsp[-1].String) + " ");
@@ -4172,7 +4232,7 @@
     break;
 
   case 280:
-#line 1740 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1800 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     const char* shiftop = (yyvsp[-3].String)->c_str();
     if (*(yyvsp[-3].String) == "shr")
@@ -4180,12 +4240,12 @@
     (yyval.Value).val = new std::string(shiftop);
     *(yyval.Value).val += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
     (yyval.Value).type = (yyvsp[-2].Value).type;
-    delete (yyvsp[-3].String); delete (yyvsp[-2].Value).val; (yyvsp[0].Value).destroy();
+    delete (yyvsp[-3].String); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
   ;}
     break;
 
   case 281:
-#line 1749 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1809 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string source = *(yyvsp[-2].Value).val;
     const TypeInfo* SrcTy = (yyvsp[-2].Value).type->resolve();
@@ -4217,17 +4277,17 @@
     break;
 
   case 282:
-#line 1777 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1837 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
     (yyval.Value).val = (yyvsp[-5].String);
     (yyval.Value).type = (yyvsp[-2].Value).type;
-    (yyvsp[-4].Value).destroy(); delete (yyvsp[-2].Value).val; (yyvsp[0].Value).destroy();
+    (yyvsp[-4].Value).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
   ;}
     break;
 
   case 283:
-#line 1783 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1843 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + (yyvsp[0].Type)->getNewTy();
     (yyval.Value).val = (yyvsp[-3].String);
@@ -4237,38 +4297,38 @@
     break;
 
   case 284:
-#line 1789 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1849 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
     (yyval.Value).val = (yyvsp[-3].String);
     (yyvsp[-2].Value).type = (yyvsp[-2].Value).type->resolve();;
     (yyval.Value).type = (yyvsp[-2].Value).type->getElementType();
-    delete (yyvsp[-2].Value).val; (yyvsp[0].Value).destroy();
+    (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
   ;}
     break;
 
   case 285:
-#line 1796 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1856 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
     (yyval.Value).val = (yyvsp[-5].String);
     (yyval.Value).type = (yyvsp[-4].Value).type;
-    delete (yyvsp[-4].Value).val; (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
+    (yyvsp[-4].Value).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
   ;}
     break;
 
   case 286:
-#line 1802 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1862 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
     (yyval.Value).val = (yyvsp[-5].String);
     (yyval.Value).type = (yyvsp[-4].Value).type;
-    delete (yyvsp[-4].Value).val; (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
+    (yyvsp[-4].Value).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
   ;}
     break;
 
   case 287:
-#line 1808 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1868 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val;
     (yyval.Value).val = (yyvsp[-1].String);
@@ -4278,7 +4338,7 @@
     break;
 
   case 288:
-#line 1814 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1874 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     if (!(yyvsp[-5].String)->empty())
       *(yyvsp[-6].String) += " " + *(yyvsp[-5].String);
@@ -4300,22 +4360,22 @@
     break;
 
   case 290:
-#line 1837 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1897 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.ValList) = (yyvsp[0].ValList); ;}
     break;
 
   case 291:
-#line 1838 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1898 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {  (yyval.ValList) = new ValueList(); ;}
     break;
 
   case 293:
-#line 1843 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1903 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     { (yyval.String) = new std::string(); ;}
     break;
 
   case 294:
-#line 1846 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1906 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " " + (yyvsp[-1].Type)->getNewTy();
     if (!(yyvsp[0].String)->empty())
@@ -4327,7 +4387,7 @@
     break;
 
   case 295:
-#line 1854 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1914 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name = getUniqueName((yyvsp[-1].Value).val, (yyvsp[-2].Type));
     *(yyvsp[-5].String) += " " + (yyvsp[-4].Type)->getNewTy() + ", " + (yyvsp[-2].Type)->getNewTy() + " " + Name;
@@ -4340,7 +4400,7 @@
     break;
 
   case 296:
-#line 1863 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1923 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-2].String) += " " + (yyvsp[-1].Type)->getNewTy();
     if (!(yyvsp[0].String)->empty())
@@ -4352,7 +4412,7 @@
     break;
 
   case 297:
-#line 1871 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1931 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name = getUniqueName((yyvsp[-1].Value).val, (yyvsp[-2].Type));
     *(yyvsp[-5].String) += " " + (yyvsp[-4].Type)->getNewTy() + ", " + (yyvsp[-2].Type)->getNewTy() + " " + Name;
@@ -4365,7 +4425,7 @@
     break;
 
   case 298:
-#line 1880 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1940 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     *(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val;
     (yyval.Value).val = (yyvsp[-1].String);
@@ -4375,7 +4435,7 @@
     break;
 
   case 299:
-#line 1886 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1946 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name = getUniqueName((yyvsp[0].Value).val, (yyvsp[-1].Type));
     if (!(yyvsp[-3].String)->empty())
@@ -4388,7 +4448,7 @@
     break;
 
   case 300:
-#line 1895 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1955 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name = getUniqueName((yyvsp[0].Value).val, (yyvsp[-1].Type));
     if (!(yyvsp[-5].String)->empty())
@@ -4401,7 +4461,7 @@
     break;
 
   case 301:
-#line 1904 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1964 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
     {
     std::string Name = getUniqueName((yyvsp[-1].Value).val, (yyvsp[-2].Type));
     // Upgrade the indices
@@ -4409,10 +4469,9 @@
       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 
+        *O << "    %gep_upgrade" << unique << " = zext " << *VI.val 
            << " to i64\n";
-        VI.val = new std::string("i64 %gep_upgrade" + llvm::utostr(unique++));
+        *VI.val = "i64 %gep_upgrade" + llvm::utostr(unique++);
         VI.type = TypeInfo::get("i64",ULongTy);
       }
     }
@@ -4432,7 +4491,7 @@
     }
 
 /* Line 1126 of yacc.c.  */
-#line 4436 "UpgradeParser.tab.c"
+#line 4495 "UpgradeParser.tab.c"
 
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -4700,7 +4759,7 @@
 }
 
 
-#line 1928 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 1987 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
 
 
 int yyerror(const char *ErrorMsg) {


Index: llvm/tools/llvm-upgrade/UpgradeParser.h
diff -u llvm/tools/llvm-upgrade/UpgradeParser.h:1.27 llvm/tools/llvm-upgrade/UpgradeParser.h:1.28
--- llvm/tools/llvm-upgrade/UpgradeParser.h:1.27	Fri Jan  5 11:20:02 2007
+++ llvm/tools/llvm-upgrade/UpgradeParser.h	Sat Jan  6 00:04:32 2007
@@ -333,7 +333,7 @@
 
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 742 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 802 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
 typedef union YYSTYPE {
   std::string*    String;
   const TypeInfo* Type;


Index: llvm/tools/llvm-upgrade/UpgradeParser.h.cvs
diff -u llvm/tools/llvm-upgrade/UpgradeParser.h.cvs:1.25 llvm/tools/llvm-upgrade/UpgradeParser.h.cvs:1.26
--- llvm/tools/llvm-upgrade/UpgradeParser.h.cvs:1.25	Fri Jan  5 11:20:02 2007
+++ llvm/tools/llvm-upgrade/UpgradeParser.h.cvs	Sat Jan  6 00:04:32 2007
@@ -333,7 +333,7 @@
 
 
 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 742 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
+#line 802 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y"
 typedef union YYSTYPE {
   std::string*    String;
   const TypeInfo* Type;


Index: llvm/tools/llvm-upgrade/UpgradeParser.y.cvs
diff -u llvm/tools/llvm-upgrade/UpgradeParser.y.cvs:1.33 llvm/tools/llvm-upgrade/UpgradeParser.y.cvs:1.34
--- llvm/tools/llvm-upgrade/UpgradeParser.y.cvs:1.33	Fri Jan  5 18:23:53 2007
+++ llvm/tools/llvm-upgrade/UpgradeParser.y.cvs	Sat Jan  6 00:04:32 2007
@@ -131,8 +131,8 @@
 
 const TypeInfo* TypeInfo::resolve() const {
   if (isUnresolved()) {
-    if (getNewTy()[0] == '%' && isdigit(getNewTy()[1])) {
-      unsigned ref = atoi(&((getNewTy().c_str())[1])); // skip the %
+    if (getNewTy()[0] == '%' && isdigit(newTy[1])) {
+      unsigned ref = atoi(&((newTy.c_str())[1])); // skip the %
       if (ref < EnumeratedTypes.size()) {
         return EnumeratedTypes[ref];
       } else {
@@ -141,7 +141,7 @@
         yyerror(msg.c_str());
       }
     } else {
-      TypeMap::iterator I = NamedTypes.find(getNewTy());
+      TypeMap::iterator I = NamedTypes.find(newTy);
       if (I != NamedTypes.end()) {
         return I->second;
       } else {
@@ -313,6 +313,110 @@
   return 0;
 }
 
+void TypeInfo::getSignedness(unsigned &sNum, unsigned &uNum, 
+                             UpRefStack& stack) const {
+  switch (oldTy) {
+    default:
+    case OpaqueTy: case LabelTy: case VoidTy: case BoolTy: 
+    case FloatTy : case DoubleTy: case UpRefTy:
+      return;
+    case SByteTy: case ShortTy: case LongTy: case IntTy: 
+      sNum++;
+      return;
+    case UByteTy: case UShortTy: case UIntTy: case ULongTy: 
+      uNum++;
+      return;
+    case PointerTy:
+    case PackedTy: 
+    case ArrayTy:
+      stack.push_back(this);
+      elemTy->getSignedness(sNum, uNum, stack);
+      return;
+    case StructTy:
+    case PackedStructTy: {
+      stack.push_back(this);
+      for (unsigned i = 0; i < elements->size(); i++) {
+        (*elements)[i]->getSignedness(sNum, uNum, stack);
+      }
+      return;
+    }
+    case UnresolvedTy: {
+      const TypeInfo* Ty = this->resolve();
+      // Let's not recurse.
+      UpRefStack::const_iterator I = stack.begin(), E = stack.end();
+      for ( ; I != E && *I != Ty; ++I) 
+        ;
+      if (I == E)
+        Ty->getSignedness(sNum, uNum, stack);
+      return;
+    }
+  }
+}
+
+std::string AddSuffix(const std::string& Name, const std::string& Suffix) {
+  if (Name[Name.size()-1] == '"') {
+    std::string Result = Name;
+    Result.insert(Result.size()-1, Suffix);
+    return Result;
+  }
+  return Name + Suffix;
+}
+
+std::string TypeInfo::makeUniqueName(const std::string& BaseName) const {
+  if (BaseName == "\"alloca point\"")
+    return BaseName;
+  switch (oldTy) {
+    default:
+      break;
+    case OpaqueTy: case LabelTy: case VoidTy: case BoolTy: case UpRefTy:
+    case FloatTy : case DoubleTy: case UnresolvedTy:
+      return BaseName;
+    case SByteTy: case ShortTy: case LongTy: case IntTy: 
+      return AddSuffix(BaseName, ".s");
+    case UByteTy: case UShortTy: case UIntTy: case ULongTy: 
+      return AddSuffix(BaseName, ".u");
+  }
+
+  unsigned uNum = 0, sNum = 0;
+  std::string Suffix;
+  switch (oldTy) {
+    case PointerTy:
+    case PackedTy: 
+    case ArrayTy: {
+      TypeInfo::UpRefStack stack;
+      elemTy->resolve()->getSignedness(sNum, uNum, stack);
+      break;
+    }
+    case StructTy:
+    case PackedStructTy: {
+      for (unsigned i = 0; i < elements->size(); i++) {
+        TypeInfo::UpRefStack stack;
+        (*elements)[i]->resolve()->getSignedness(sNum, uNum, stack);
+      }
+      break;
+    }
+    default:
+      assert(0 && "Invalid Type");
+      break;
+  }
+
+  if (sNum == 0 && uNum == 0)
+    return BaseName;
+
+  switch (oldTy) {
+    default:             Suffix += ".nada"; break;
+    case PointerTy:      Suffix += ".pntr"; break;
+    case PackedTy:       Suffix += ".pckd"; break;
+    case ArrayTy:        Suffix += ".arry"; break;
+    case StructTy:       Suffix += ".strc"; break;
+    case PackedStructTy: Suffix += ".pstr"; break;
+  }
+
+  Suffix += ".s" + llvm::utostr(sNum);
+  Suffix += ".u" + llvm::utostr(uNum);
+  return AddSuffix(BaseName, Suffix);
+}
+
 TypeInfo& TypeInfo::operator=(const TypeInfo& that) {
   oldTy = that.oldTy;
   nelems = that.nelems;
@@ -528,9 +632,8 @@
   return PFTy;
 }
 
-typedef std::vector<const TypeInfo*> UpRefStack;
 static const TypeInfo* ResolveUpReference(const TypeInfo* Ty, 
-                                          UpRefStack* stack) {
+                                          TypeInfo::UpRefStack* stack) {
   assert(Ty->isUpReference() && "Can't resolve a non-upreference");
   unsigned upref = Ty->getUpRefNum();
   assert(upref < stack->size() && "Invalid up reference");
@@ -540,7 +643,7 @@
 static const TypeInfo* getGEPIndexedType(const TypeInfo* PTy, ValueList* idxs) {
   const TypeInfo* Result = PTy = PTy->resolve();
   assert(PTy->isPointer() && "GEP Operand is not a pointer?");
-  UpRefStack stack;
+  TypeInfo::UpRefStack stack;
   for (unsigned i = 0; i < idxs->size(); ++i) {
     if (Result->isComposite()) {
       Result = Result->getIndexedType((*idxs)[i]);
@@ -561,24 +664,13 @@
   return Result->getPointerType();
 }
 
-static std::string makeUniqueName(const std::string *Name, bool isSigned) {
-  const char *suffix = ".u";
-  if (isSigned)
-    suffix = ".s";
-  if ((*Name)[Name->size()-1] == '"') {
-    std::string Result(*Name);
-    Result.insert(Name->size()-1, suffix);
-    return Result;
-  }
-  return *Name + suffix;
-}
 
 // This function handles appending .u or .s to integer value names that
 // were previously unsigned or signed, respectively. This avoids name
 // collisions since the unsigned and signed type planes have collapsed
 // into a single signless type plane.
 static std::string getUniqueName(const std::string *Name, const TypeInfo* Ty,
-                                 bool isGlobal = false) {
+                                 bool isGlobal = false, bool isDef = false) {
 
   // If its not a symbolic name, don't modify it, probably a constant val.
   if ((*Name)[0] != '%' && (*Name)[0] != '"')
@@ -611,41 +703,9 @@
     return *Name;
   }
 
-  // Remove as many levels of pointer nesting that we have.
-  if (Ty->isPointer()) {
-    // Avoid infinite loops in recursive types
-    const TypeInfo* Last = 0;
-    while (Ty->isPointer() && !Ty->sameOldTyAs(Last)) {
-      Last = Ty;
-      Ty = Ty->getElementType()->resolve();
-    }
-  }
-
   // Default the result to the current name
-  std::string Result = *Name; 
+  std::string Result = Ty->makeUniqueName(*Name);
 
-  // Now deal with the underlying type
-  if (Ty->isInteger()) {
-    // If its an integer type, make the name unique
-    Result = makeUniqueName(Name, Ty->isSigned());
-  } else if (Ty->isArray() || Ty->isPacked()) {
-    Ty = Ty->getElementType();
-    if (Ty->isInteger())
-      Result = makeUniqueName(Name, Ty->isSigned());
-  } else if (Ty->isStruct()) {
-    // Scan the fields and count the signed and unsigned fields
-    int isSigned = 0;
-    for (unsigned i = 0; i < Ty->getNumStructElements(); ++i) {
-      const TypeInfo* Tmp = Ty->getElement(i);
-      if (Tmp->isInteger())
-        if (Tmp->isSigned())
-          isSigned++;
-        else
-          isSigned--;
-    }
-    if (isSigned != 0)
-      Result = makeUniqueName(Name, isSigned > 0);
-  }
   return Result;
 }
 
@@ -1744,7 +1804,7 @@
     $$.val = new std::string(shiftop);
     *$$.val += " " + *$2.val + ", " + *$4.val;
     $$.type = $2.type;
-    delete $1; delete $2.val; $4.destroy();
+    delete $1; $2.destroy(); $4.destroy();
   }
   | CastOps ResolvedVal TO Types {
     std::string source = *$2.val;
@@ -1778,7 +1838,7 @@
     *$1 += " " + *$2.val + ", " + *$4.val + ", " + *$6.val;
     $$.val = $1;
     $$.type = $4.type;
-    $2.destroy(); delete $4.val; $6.destroy();
+    $2.destroy(); $4.destroy(); $6.destroy();
   }
   | VAARG ResolvedVal ',' Types {
     *$1 += " " + *$2.val + ", " + $4->getNewTy();
@@ -1791,19 +1851,19 @@
     $$.val = $1;
     $2.type = $2.type->resolve();;
     $$.type = $2.type->getElementType();
-    delete $2.val; $4.destroy();
+    $2.destroy(); $4.destroy();
   }
   | INSERTELEMENT ResolvedVal ',' ResolvedVal ',' ResolvedVal {
     *$1 += " " + *$2.val + ", " + *$4.val + ", " + *$6.val;
     $$.val = $1;
     $$.type = $2.type;
-    delete $2.val; $4.destroy(); $6.destroy();
+    $2.destroy(); $4.destroy(); $6.destroy();
   }
   | SHUFFLEVECTOR ResolvedVal ',' ResolvedVal ',' ResolvedVal {
     *$1 += " " + *$2.val + ", " + *$4.val + ", " + *$6.val;
     $$.val = $1;
     $$.type = $2.type;
-    delete $2.val; $4.destroy(); $6.destroy();
+    $2.destroy(); $4.destroy(); $6.destroy();
   }
   | PHI_TOK PHIList {
     *$1 += " " + *$2.val;
@@ -1908,10 +1968,9 @@
       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 
+        *O << "    %gep_upgrade" << unique << " = zext " << *VI.val 
            << " to i64\n";
-        VI.val = new std::string("i64 %gep_upgrade" + llvm::utostr(unique++));
+        *VI.val = "i64 %gep_upgrade" + llvm::utostr(unique++);
         VI.type = TypeInfo::get("i64",ULongTy);
       }
     }






More information about the llvm-commits mailing list