enum Types {
BoolTy, SByteTy, UByteTy, ShortTy, UShortTy, IntTy, UIntTy, LongTy, ULongTy,
FloatTy, DoubleTy, PointerTy, PackedTy, ArrayTy, StructTy, OpaqueTy, VoidTy,
- LabelTy, FunctionTy
+ LabelTy, FunctionTy, UnresolvedTy, NumericTy
};
/// This type is used to keep track of the signedness of the obsolete
std::string* newTy;
Types oldTy;
- void destroy() { delete newTy; }
+ void destroy() const { delete newTy; }
- bool isSigned() {
+ bool isSigned() const {
return oldTy == SByteTy || oldTy == ShortTy ||
oldTy == IntTy || oldTy == LongTy;
}
- bool isUnsigned() {
+ bool isUnsigned() const {
return oldTy == UByteTy || oldTy == UShortTy ||
oldTy == UIntTy || oldTy == ULongTy;
}
- bool isSignless() { return !isSigned() && !isUnsigned(); }
- bool isInteger() { return isSigned() || isUnsigned(); }
- bool isIntegral() { return oldTy == BoolTy || isInteger(); }
- bool isFloatingPoint() { return oldTy == DoubleTy || oldTy == FloatTy; }
- bool isPacked() { return oldTy == PackedTy; }
- bool isPointer() { return oldTy == PointerTy; }
- bool isOther() { return !isPacked() && !isPointer() && !isFloatingPoint()
- && !isIntegral(); }
+ bool isSignless() const { return !isSigned() && !isUnsigned(); }
+ bool isInteger() const { return isSigned() || isUnsigned(); }
+ bool isIntegral() const { return oldTy == BoolTy || isInteger(); }
+ bool isFloatingPoint() const { return oldTy == DoubleTy || oldTy == FloatTy; }
+ bool isPacked() const { return oldTy == PackedTy; }
+ bool isPointer() const { return oldTy == PointerTy; }
+ bool isOther() const {
+ return !isPacked() && !isPointer() && !isFloatingPoint() && !isIntegral(); }
- unsigned getBitWidth() {
+ unsigned getBitWidth() const {
switch (oldTy) {
case LabelTy:
case VoidTy : return 0;
case 58:
YY_RULE_SETUP
#line 160 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l"
-{ RET_TY(OPAQUE,OpaqueTy,"opaque",false); }
+{ RET_TOK(OPAQUE); }
YY_BREAK
case 59:
YY_RULE_SETUP
case 58:
YY_RULE_SETUP
#line 160 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeLexer.l"
-{ RET_TY(OPAQUE,OpaqueTy,"opaque",false); }
+{ RET_TOK(OPAQUE); }
YY_BREAK
case 59:
YY_RULE_SETUP
float { RET_TY(FLOAT,FloatTy,"float",false); }
double { RET_TY(DOUBLE,DoubleTy,"double",false); }
label { RET_TY(LABEL,LabelTy,"label",false); }
-opaque { RET_TY(OPAQUE,OpaqueTy,"opaque",false); }
+opaque { RET_TOK(OPAQUE); }
type { RET_TOK(TYPE); }
add { RET_TOK( ADD); }
float { RET_TY(FLOAT,FloatTy,"float",false); }
double { RET_TY(DOUBLE,DoubleTy,"double",false); }
label { RET_TY(LABEL,LabelTy,"label",false); }
-opaque { RET_TY(OPAQUE,OpaqueTy,"opaque",false); }
+opaque { RET_TOK(OPAQUE); }
type { RET_TOK(TYPE); }
add { RET_TOK( ADD); }
#include "ParserInternals.h"
#include <llvm/ADT/StringExtras.h>
#include <algorithm>
-#include <list>
+#include <vector>
+#include <map>
#include <utility>
#include <iostream>
std::istream* LexInput = 0;
unsigned SizeOfPointer = 32;
+typedef std::vector<TypeInfo> TypeVector;
+static TypeVector EnumeratedTypes;
+typedef std::map<std::string,TypeInfo> TypeMap;
+static TypeMap NamedTypes;
+
void UpgradeAssembly(const std::string &infile, std::istream& in,
std::ostream &out, bool debug)
{
}
}
-std::string getCastUpgrade(std::string& Source, TypeInfo& SrcTy,
- TypeInfo&DstTy, bool isConst = false)
-{
- std::string Result;
- if (SrcTy.isFloatingPoint() && DstTy.isPointer()) {
- if (isConst)
- Source = "ulong fptoui(" + Source + " to ulong)";
+static void ResolveType(TypeInfo& Ty) {
+ if (Ty.oldTy == UnresolvedTy) {
+ TypeMap::iterator I = NamedTypes.find(*Ty.newTy);
+ if (I != NamedTypes.end())
+ Ty.oldTy = I->second.oldTy;
else {
- Result = "%cast_upgrade = fptoui " + Source + " to ulong";
- Source = "ulong %cast_upgrade";
+ std::string msg("Can't resolve type: ");
+ msg += *Ty.newTy;
+ yyerror(msg.c_str());
+ }
+ } else if (Ty.oldTy == NumericTy) {
+ unsigned ref = atoi(&((Ty.newTy->c_str())[1])); // Skip the '\\'
+ if (ref < EnumeratedTypes.size()) {
+ Ty.oldTy = EnumeratedTypes[ref].oldTy;
+ } else {
+ std::string msg("Can't resolve type: ");
+ msg += *Ty.newTy;
+ yyerror(msg.c_str());
}
- SrcTy.destroy();
- SrcTy.newTy = new std::string("ulong");
- SrcTy.oldTy = ULongTy;
}
- return Result;
+ // otherwise its already resolved.
}
-const char* getCastOpcode(std::string& Source, TypeInfo& SrcTy,
- TypeInfo&DstTy) {
+static const char* getCastOpcode(
+ std::string& Source, const TypeInfo& SrcTy, const TypeInfo& DstTy)
+{
unsigned SrcBits = SrcTy.getBitWidth();
unsigned DstBits = DstTy.getBitWidth();
const char* opcode = "bitcast";
opcode = "bitcast"; // ptr -> ptr
} else if (SrcTy.isIntegral()) {
opcode = "inttoptr"; // int -> ptr
- } else if (SrcTy.isFloatingPoint()) { // float/double -> ptr
- // Cast to int first
- *O << " %upgrade_cast = fptoui " << Source << " to ulong\n";
- opcode = "inttoptr";
- Source = "ulong %upgrade_cast";
} else {
- assert(!"Casting pointer to other than pointer or int");
+ assert(!"Casting invalid type to pointer");
}
} else {
assert(!"Casting to type that is not first-class");
return opcode;
}
+static std::string getCastUpgrade(
+ const std::string& Src, TypeInfo& SrcTy, TypeInfo& DstTy, bool isConst)
+{
+ std::string Result;
+ std::string Source = Src;
+ if (SrcTy.isFloatingPoint() && DstTy.isPointer()) {
+ // fp -> ptr cast is no longer supported but we must upgrade this
+ // by doing a double cast: fp -> int -> ptr
+ if (isConst)
+ Source = "ulong fptoui(" + Source + " to ulong)";
+ else {
+ *O << " %cast_upgrade = fptoui " + Source + " to ulong\n";
+ Source = "ulong %cast_upgrade";
+ }
+ // Update the SrcTy for the getCastOpcode call below
+ SrcTy.destroy();
+ SrcTy.newTy = new std::string("ulong");
+ SrcTy.oldTy = ULongTy;
+ } else if (DstTy.oldTy == BoolTy) {
+ // cast ptr %x to bool was previously defined as setne ptr %x, null
+ // The ptrtoint semantic is to truncate, not compare so we must retain
+ // the original intent by replace the cast with a setne
+ const char* comparator = SrcTy.isPointer() ? ", null" :
+ (SrcTy.isFloatingPoint() ? ", 0.0" : ", 0");
+ if (isConst)
+ Result = "setne (" + Source + comparator + ")";
+ else
+ Result = "setne " + Source + comparator;
+ return Result; // skip cast processing below
+ }
+ ResolveType(SrcTy);
+ ResolveType(DstTy);
+ std::string Opcode(getCastOpcode(Source, SrcTy, DstTy));
+ if (isConst)
+ Result += Opcode + "( " + Source + " to " + *DstTy.newTy + ")";
+ else
+ Result += Opcode + " " + Source + " to " + *DstTy.newTy;
+ return Result;
+}
+
/* Enabling traces. */
#endif
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 154 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 201 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
typedef union YYSTYPE {
std::string* String;
TypeInfo Type;
ConstInfo Const;
} YYSTYPE;
/* Line 196 of yacc.c. */
-#line 486 "UpgradeParser.tab.c"
+#line 533 "UpgradeParser.tab.c"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
/* Line 219 of yacc.c. */
-#line 498 "UpgradeParser.tab.c"
+#line 545 "UpgradeParser.tab.c"
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
# define YYSIZE_T __SIZE_TYPE__
-1, 3, -1, 164, -1, 4, -1, 5, -1, 6,
-1, 7, -1, 8, -1, 9, -1, 10, -1, 11,
-1, 12, -1, 13, -1, 14, -1, 15, -1, 16,
- -1, 163, -1, 193, -1, 127, 18, -1, 161, 128,
+ -1, 193, -1, 163, -1, 127, 18, -1, 161, 128,
166, 129, -1, 130, 18, 131, 164, 132, -1, 133,
18, 131, 164, 134, -1, 135, 165, 136, -1, 135,
136, -1, 164, 137, -1, 164, -1, 165, 126, 164,
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const unsigned short int yyrline[] =
{
- 0, 213, 213, 213, 214, 214, 218, 218, 218, 218,
- 218, 218, 218, 218, 218, 219, 219, 219, 220, 220,
- 220, 220, 220, 220, 221, 221, 221, 221, 222, 222,
- 222, 222, 222, 222, 222, 223, 223, 223, 223, 223,
- 223, 228, 228, 228, 228, 229, 229, 229, 229, 230,
- 230, 231, 231, 234, 238, 243, 243, 243, 243, 243,
- 243, 244, 245, 248, 248, 248, 248, 248, 249, 250,
- 255, 260, 261, 264, 265, 273, 279, 280, 283, 284,
- 293, 294, 307, 307, 308, 308, 309, 313, 313, 313,
- 313, 313, 313, 313, 314, 314, 314, 314, 314, 315,
- 315, 316, 322, 327, 333, 340, 347, 353, 357, 367,
- 370, 378, 379, 384, 387, 397, 403, 408, 414, 420,
- 426, 431, 437, 443, 449, 455, 461, 467, 473, 479,
- 485, 493, 507, 513, 518, 523, 528, 533, 541, 546,
- 551, 561, 566, 571, 571, 581, 586, 589, 594, 598,
- 602, 605, 610, 615, 620, 626, 632, 638, 644, 649,
- 654, 659, 661, 661, 664, 669, 676, 681, 688, 695,
- 700, 701, 709, 709, 710, 710, 712, 719, 723, 727,
- 730, 735, 738, 740, 760, 763, 767, 776, 777, 779,
- 787, 788, 789, 793, 806, 807, 810, 810, 810, 810,
- 810, 810, 810, 811, 812, 817, 818, 827, 827, 830,
- 830, 836, 843, 846, 854, 858, 863, 866, 872, 877,
- 882, 887, 894, 900, 906, 919, 924, 930, 935, 943,
- 950, 956, 964, 965, 973, 974, 978, 983, 986, 991,
- 996, 1001, 1006, 1014, 1028, 1033, 1038, 1043, 1048, 1053,
- 1058, 1067, 1072, 1076, 1080, 1081, 1084, 1091, 1098, 1105,
- 1112, 1117, 1124, 1131
+ 0, 260, 260, 260, 261, 261, 265, 265, 265, 265,
+ 265, 265, 265, 265, 265, 266, 266, 266, 267, 267,
+ 267, 267, 267, 267, 268, 268, 268, 268, 269, 269,
+ 269, 269, 269, 269, 269, 270, 270, 270, 270, 270,
+ 270, 275, 275, 275, 275, 276, 276, 276, 276, 277,
+ 277, 278, 278, 281, 284, 289, 289, 289, 289, 289,
+ 289, 290, 291, 294, 294, 294, 294, 294, 295, 296,
+ 301, 306, 307, 310, 311, 319, 325, 326, 329, 330,
+ 339, 340, 353, 353, 354, 354, 355, 359, 359, 359,
+ 359, 359, 359, 359, 360, 360, 360, 360, 360, 362,
+ 366, 370, 375, 380, 386, 393, 400, 406, 410, 420,
+ 423, 431, 432, 437, 440, 450, 456, 461, 467, 473,
+ 479, 484, 490, 496, 502, 508, 514, 520, 526, 532,
+ 538, 546, 560, 566, 571, 576, 581, 586, 594, 599,
+ 604, 614, 619, 624, 624, 634, 639, 642, 647, 651,
+ 655, 658, 669, 674, 679, 686, 693, 700, 707, 712,
+ 717, 722, 724, 724, 727, 732, 739, 744, 751, 758,
+ 763, 764, 772, 772, 773, 773, 775, 782, 786, 790,
+ 793, 798, 801, 803, 823, 826, 830, 839, 840, 842,
+ 850, 851, 852, 856, 869, 870, 873, 873, 873, 873,
+ 873, 873, 873, 874, 875, 880, 881, 890, 890, 893,
+ 893, 899, 906, 909, 917, 921, 926, 929, 935, 940,
+ 945, 950, 957, 963, 969, 982, 987, 993, 998, 1006,
+ 1015, 1021, 1029, 1030, 1038, 1039, 1043, 1048, 1051, 1056,
+ 1061, 1066, 1071, 1079, 1093, 1098, 1103, 1108, 1113, 1118,
+ 1123, 1132, 1137, 1141, 1145, 1146, 1149, 1156, 1163, 1170,
+ 1177, 1182, 1189, 1196
};
#endif
0, 0, 0, 0, 0, 0, 53, 193, 161, 148,
69, 83, 87, 88, 89, 90, 91, 92, 93, 94,
95, 96, 97, 98, 99, 2, 3, 0, 0, 0,
- 0, 207, 0, 0, 82, 100, 86, 208, 101, 184,
+ 0, 207, 0, 0, 82, 101, 86, 208, 100, 184,
185, 186, 187, 188, 189, 212, 0, 0, 0, 225,
226, 255, 214, 215, 0, 0, 0, 0, 171, 159,
153, 151, 143, 144, 0, 0, 0, 0, 102, 0,
switch (yyn)
{
case 53:
-#line 234 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 281 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- *(yyvsp[-1].String) += " = ";
(yyval.String) = (yyvsp[-1].String);
;}
break;
case 54:
-#line 238 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 284 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = new std::string("");
;}
break;
case 62:
-#line 245 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 291 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(""); ;}
break;
case 69:
-#line 250 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 296 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-1].String) += *(yyvsp[0].String);
delete (yyvsp[0].String);
break;
case 70:
-#line 255 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 301 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(""); ;}
break;
case 71:
-#line 260 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 306 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 72:
-#line 261 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 307 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ *(yyvsp[-1].String) += " " + *(yyvsp[0].String); delete (yyvsp[0].String); (yyval.String) = (yyvsp[-1].String); ;}
break;
case 73:
-#line 264 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 310 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 74:
-#line 265 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 311 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[-1].String)->insert(0, ", ");
*(yyvsp[-1].String) += " " + *(yyvsp[0].String);
break;
case 75:
-#line 273 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 319 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-1].String) += " " + *(yyvsp[0].String);
delete (yyvsp[0].String);
break;
case 76:
-#line 279 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 325 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 78:
-#line 283 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 329 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 79:
-#line 284 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 330 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[-1].String)->insert(0, ", ");
if (!(yyvsp[0].String)->empty())
break;
case 81:
-#line 294 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 340 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-1].String) += " " + *(yyvsp[0].String);
delete (yyvsp[0].String);
;}
break;
- case 101:
-#line 316 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+ case 99:
+#line 362 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+ {
+ (yyval.Type).newTy = (yyvsp[0].String);
+ (yyval.Type).oldTy = OpaqueTy;
+ ;}
+ break;
+
+ case 100:
+#line 366 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- (yyval.Type).newTy = (yyvsp[0].String); (yyval.Type).oldTy = OpaqueTy;
- ;}
+ (yyval.Type).newTy = (yyvsp[0].String);
+ (yyval.Type).oldTy = UnresolvedTy;
+ ;}
break;
case 102:
-#line 322 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 375 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Type UpReference
(yyvsp[0].String)->insert(0, "\\");
(yyval.Type).newTy = (yyvsp[0].String);
- (yyval.Type).oldTy = OpaqueTy;
+ (yyval.Type).oldTy = NumericTy;
;}
break;
case 103:
-#line 327 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 380 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Function derived type?
*(yyvsp[-3].Type).newTy += "( " + *(yyvsp[-1].String) + " )";
delete (yyvsp[-1].String);
break;
case 104:
-#line 333 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 386 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Sized array type?
(yyvsp[-3].String)->insert(0,"[ ");
*(yyvsp[-3].String) += " x " + *(yyvsp[-1].Type).newTy + " ]";
break;
case 105:
-#line 340 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 393 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Packed array type?
(yyvsp[-3].String)->insert(0,"< ");
*(yyvsp[-3].String) += " x " + *(yyvsp[-1].Type).newTy + " >";
break;
case 106:
-#line 347 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 400 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Structure type?
(yyvsp[-1].String)->insert(0, "{ ");
*(yyvsp[-1].String) += " }";
break;
case 107:
-#line 353 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 406 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Empty structure type?
(yyval.Type).newTy = new std::string("{}");
(yyval.Type).oldTy = StructTy;
break;
case 108:
-#line 357 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 410 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Pointer type?
*(yyvsp[-1].Type).newTy += '*';
(yyvsp[-1].Type).oldTy = PointerTy;
break;
case 109:
-#line 367 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 420 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = (yyvsp[0].Type).newTy;
;}
break;
case 110:
-#line 370 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 423 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += ", " + *(yyvsp[0].Type).newTy;
delete (yyvsp[0].Type).newTy;
break;
case 112:
-#line 379 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 432 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += ", ...";
delete (yyvsp[0].String);
break;
case 113:
-#line 384 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 437 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = (yyvsp[0].String);
;}
break;
case 114:
-#line 387 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 440 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = new std::string();
;}
break;
case 115:
-#line 397 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 450 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Nonempty unsized arr
(yyval.Const).type = (yyvsp[-3].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-3].Type).newTy);
break;
case 116:
-#line 403 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 456 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Const).type = (yyvsp[-2].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-2].Type).newTy);
break;
case 117:
-#line 408 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 461 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Const).type = (yyvsp[-2].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-2].Type).newTy);
break;
case 118:
-#line 414 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 467 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Nonempty unsized arr
(yyval.Const).type = (yyvsp[-3].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-3].Type).newTy);
break;
case 119:
-#line 420 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 473 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Const).type = (yyvsp[-3].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-3].Type).newTy);
break;
case 120:
-#line 426 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 479 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Const).type = (yyvsp[-2].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-2].Type).newTy);
break;
case 121:
-#line 431 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 484 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 122:
-#line 437 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 490 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 123:
-#line 443 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 496 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 124:
-#line 449 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 502 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 125:
-#line 455 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 508 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 126:
-#line 461 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 514 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // integral constants
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 127:
-#line 467 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 520 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // integral constants
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 128:
-#line 473 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 526 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Boolean constants
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 129:
-#line 479 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 532 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Boolean constants
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 130:
-#line 485 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 538 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Float & Double constants
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 131:
-#line 493 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 546 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- // We must infer the cast opcode from the types of the operands.
- const char *opcode = (yyvsp[-5].String)->c_str();
std::string source = *(yyvsp[-3].Const).cnst;
+ TypeInfo DstTy = (yyvsp[-1].Type);
+ ResolveType(DstTy);
if (*(yyvsp[-5].String) == "cast") {
- std::string upgrade = getCastUpgrade(source, (yyvsp[-3].Const).type, (yyvsp[-1].Type), true);
- opcode = getCastOpcode(source, (yyvsp[-3].Const).type, (yyvsp[-1].Type));
- if (!upgrade.empty())
- source = upgrade;
+ // Call getCastUpgrade to upgrade the old cast
+ (yyval.String) = new std::string(getCastUpgrade(source, (yyvsp[-3].Const).type, (yyvsp[-1].Type), true));
+ } else {
+ // Nothing to upgrade, just create the cast constant expr
+ (yyval.String) = new std::string(*(yyvsp[-5].String));
+ *(yyval.String) += "( " + source + " to " + *(yyvsp[-1].Type).newTy + ")";
}
- (yyval.String) = new std::string(opcode);
- *(yyval.String) += "( " + source + " " + *(yyvsp[-2].String) + " " + *(yyvsp[-1].Type).newTy + ")";
delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy();
;}
break;
case 132:
-#line 507 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 560 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-4].String) += "(" + *(yyvsp[-2].Const).cnst + " " + *(yyvsp[-1].String) + ")";
(yyval.String) = (yyvsp[-4].String);
break;
case 133:
-#line 513 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 566 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
(yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
break;
case 134:
-#line 518 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 571 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
(yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
break;
case 135:
-#line 523 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 576 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
(yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
break;
case 136:
-#line 528 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 581 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
(yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
break;
case 137:
-#line 533 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 586 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
const char* shiftop = (yyvsp[-5].String)->c_str();
if (*(yyvsp[-5].String) == "shr")
break;
case 138:
-#line 541 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 594 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
(yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
break;
case 139:
-#line 546 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 599 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
(yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
break;
case 140:
-#line 551 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 604 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
(yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
break;
case 141:
-#line 561 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 614 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += ", " + *(yyvsp[0].Const).cnst;
(yyvsp[0].Const).destroy();
break;
case 142:
-#line 566 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 619 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(*(yyvsp[0].Const).cnst); (yyvsp[0].Const).destroy(); ;}
break;
case 145:
-#line 581 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 634 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
;}
break;
case 146:
-#line 586 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 639 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = 0;
;}
break;
case 147:
-#line 589 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 642 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << *(yyvsp[0].String) << "\n";
delete (yyvsp[0].String);
break;
case 148:
-#line 594 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 647 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << "module asm " << " " << *(yyvsp[0].String) << "\n";
(yyval.String) = 0;
break;
case 149:
-#line 598 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 651 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << "implementation\n";
(yyval.String) = 0;
;}
break;
+ case 150:
+#line 655 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+ { (yyval.String) = 0; ;}
+ break;
+
case 151:
-#line 605 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 658 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- *O << *(yyvsp[-2].String) << " " << *(yyvsp[-1].String) << " " << *(yyvsp[0].Type).newTy << "\n";
- // delete $2; delete $3; $4.destroy();
+ EnumeratedTypes.push_back((yyvsp[0].Type));
+ if (!(yyvsp[-2].String)->empty()) {
+ NamedTypes[*(yyvsp[-2].String)].newTy = new std::string(*(yyvsp[0].Type).newTy);
+ NamedTypes[*(yyvsp[-2].String)].oldTy = (yyvsp[0].Type).oldTy;
+ *O << *(yyvsp[-2].String) << " = ";
+ }
+ *O << "type " << *(yyvsp[0].Type).newTy << "\n";
+ delete (yyvsp[-2].String); delete (yyvsp[-1].String); (yyvsp[0].Type).destroy();
(yyval.String) = 0;
;}
break;
case 152:
-#line 610 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 669 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Function prototypes can be in const pool
*O << *(yyvsp[0].String) << "\n";
delete (yyvsp[0].String);
break;
case 153:
-#line 615 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 674 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Asm blocks can be in the const pool
*O << *(yyvsp[-2].String) << " " << *(yyvsp[-1].String) << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[-2].String); delete (yyvsp[-1].String); delete (yyvsp[0].String);
break;
case 154:
-#line 620 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 679 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- *O << *(yyvsp[-4].String) << " " << *(yyvsp[-3].String) << " " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Const).cnst << " "
- << *(yyvsp[0].String) << "\n";
+ if (!(yyvsp[-4].String)->empty())
+ *O << *(yyvsp[-4].String) << " = ";
+ *O << *(yyvsp[-3].String) << " " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Const).cnst << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); (yyvsp[-1].Const).destroy(); delete (yyvsp[0].String);
(yyval.String) = 0;
;}
break;
case 155:
-#line 626 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 686 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- *O << *(yyvsp[-4].String) << " " << *(yyvsp[-3].String) << " " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy
- << " " << *(yyvsp[0].String) << "\n";
+ if (!(yyvsp[-4].String)->empty())
+ *O << *(yyvsp[-4].String) << " = ";
+ *O << *(yyvsp[-3].String) << " " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
(yyval.String) = 0;
;}
break;
case 156:
-#line 632 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 693 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- *O << *(yyvsp[-4].String) << " " << *(yyvsp[-3].String) << " " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy
- << " " << *(yyvsp[0].String) << "\n";
+ if (!(yyvsp[-4].String)->empty())
+ *O << *(yyvsp[-4].String) << " = ";
+ *O << *(yyvsp[-3].String) << " " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
(yyval.String) = 0;
;}
break;
case 157:
-#line 638 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 700 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- *O << *(yyvsp[-4].String) << " " << *(yyvsp[-3].String) << " " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy
- << " " << *(yyvsp[0].String) << "\n";
+ if (!(yyvsp[-4].String)->empty())
+ *O << *(yyvsp[-4].String) << " = ";
+ *O << *(yyvsp[-3].String) << " " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
(yyval.String) = 0;
;}
break;
case 158:
-#line 644 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 707 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << *(yyvsp[-1].String) << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[-1].String); delete (yyvsp[0].String);
break;
case 159:
-#line 649 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 712 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << *(yyvsp[-2].String) << " = " << *(yyvsp[0].String) << "\n";
delete (yyvsp[-2].String); delete (yyvsp[0].String);
break;
case 160:
-#line 654 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 717 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = 0;
;}
break;
case 164:
-#line 664 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 727 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
delete (yyvsp[0].String);
break;
case 165:
-#line 669 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 732 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
if (*(yyvsp[0].String) == "64")
break;
case 166:
-#line 676 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 739 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
delete (yyvsp[0].String);
break;
case 167:
-#line 681 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 744 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
delete (yyvsp[0].String);
break;
case 168:
-#line 688 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 751 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[-1].String)->insert(0, "[ ");
*(yyvsp[-1].String) += " ]";
break;
case 169:
-#line 695 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 758 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += ", " + *(yyvsp[0].String);
delete (yyvsp[0].String);
break;
case 171:
-#line 701 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 764 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = new std::string();
;}
break;
case 175:
-#line 710 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 773 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 176:
-#line 712 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 775 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = (yyvsp[-1].Type).newTy;
if (!(yyvsp[0].String)->empty())
break;
case 177:
-#line 719 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 782 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += ", " + *(yyvsp[0].String);
delete (yyvsp[0].String);
break;
case 178:
-#line 723 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 786 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = (yyvsp[0].String);
;}
break;
case 179:
-#line 727 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 790 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = (yyvsp[0].String);
;}
break;
case 180:
-#line 730 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 793 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += ", ...";
(yyval.String) = (yyvsp[-2].String);
break;
case 181:
-#line 735 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 798 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = (yyvsp[0].String);
;}
break;
case 182:
-#line 738 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 801 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 183:
-#line 741 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 804 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
if (!(yyvsp[-7].String)->empty()) {
*(yyvsp[-7].String) += " ";
break;
case 184:
-#line 760 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 823 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = new std::string("begin");
;}
break;
case 185:
-#line 763 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 826 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = new std::string ("{");
;}
break;
case 186:
-#line 767 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 830 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
if (!(yyvsp[-2].String)->empty()) {
*O << *(yyvsp[-2].String) << " ";
break;
case 187:
-#line 776 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 839 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string("end"); ;}
break;
case 188:
-#line 777 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 840 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string("}"); ;}
break;
case 189:
-#line 779 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 842 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
if ((yyvsp[-1].String))
*O << *(yyvsp[-1].String);
break;
case 190:
-#line 787 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 850 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 193:
-#line 793 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 856 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
if (!(yyvsp[-1].String)->empty())
*(yyvsp[-2].String) += " " + *(yyvsp[-1].String);
break;
case 194:
-#line 806 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 869 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 204:
-#line 812 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 875 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[-1].String)->insert(0, "<");
*(yyvsp[-1].String) += ">";
break;
case 206:
-#line 818 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 881 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
if (!(yyvsp[-3].String)->empty()) {
*(yyvsp[-4].String) += " " + *(yyvsp[-3].String);
break;
case 211:
-#line 836 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 899 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Value).type = (yyvsp[-1].Type);
(yyval.Value).val = new std::string(*(yyvsp[-1].Type).newTy + " ");
break;
case 212:
-#line 843 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 906 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = 0;
;}
break;
case 213:
-#line 846 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 909 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Do not allow functions with 0 basic blocks
(yyval.String) = 0;
;}
break;
case 214:
-#line 854 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 917 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = 0;
;}
break;
case 215:
-#line 858 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 921 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[0].String);
break;
case 216:
-#line 863 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 926 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = 0;
;}
break;
case 217:
-#line 866 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 929 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << *(yyvsp[0].String) << "\n";
delete (yyvsp[0].String);
break;
case 218:
-#line 872 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 935 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Return with a result...
*O << " " << *(yyvsp[-1].String) << " " << *(yyvsp[0].Value).val << "\n";
delete (yyvsp[-1].String); (yyvsp[0].Value).destroy();
break;
case 219:
-#line 877 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 940 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Return with no result...
*O << " " << *(yyvsp[-1].String) << " " << *(yyvsp[0].Type).newTy << "\n";
delete (yyvsp[-1].String); (yyvsp[0].Type).destroy();
break;
case 220:
-#line 882 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 945 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Unconditional Branch...
*O << " " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
break;
case 221:
-#line 887 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 950 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << " " << *(yyvsp[-8].String) << " " << *(yyvsp[-7].Type).newTy << " " << *(yyvsp[-6].String) << ", "
<< *(yyvsp[-4].Type).newTy << " " << *(yyvsp[-3].String) << ", " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].String) << "\n";
break;
case 222:
-#line 894 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 957 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << " " << *(yyvsp[-8].String) << " " << *(yyvsp[-7].Type).newTy << " " << *(yyvsp[-6].String) << ", " << *(yyvsp[-4].Type).newTy
<< " " << *(yyvsp[-3].String) << " [" << *(yyvsp[-1].String) << " ]\n";
break;
case 223:
-#line 900 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 963 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << " " << *(yyvsp[-7].String) << " " << *(yyvsp[-6].Type).newTy << " " << *(yyvsp[-5].String) << ", "
<< *(yyvsp[-3].Type).newTy << " " << *(yyvsp[-2].String) << "[]\n";
break;
case 224:
-#line 907 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 970 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << " ";
if (!(yyvsp[-13].String)->empty())
- *O << *(yyvsp[-13].String);
+ *O << *(yyvsp[-13].String) << " = ";
*O << *(yyvsp[-12].String) << " " << *(yyvsp[-11].String) << " " << *(yyvsp[-10].Type).newTy << " " << *(yyvsp[-9].String) << " ("
<< *(yyvsp[-7].String) << ") " << *(yyvsp[-5].String) << " " << *(yyvsp[-4].Type).newTy << " " << *(yyvsp[-3].String) << " "
<< *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].String) << "\n";
break;
case 225:
-#line 919 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 982 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[0].String);
break;
case 226:
-#line 924 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 987 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[0].String);
break;
case 227:
-#line 930 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 993 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + " " + *(yyvsp[-3].String) + ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].String);
(yyvsp[-4].Type).destroy(); delete (yyvsp[-3].String); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
break;
case 228:
-#line 935 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 998 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[-3].String)->insert(0, *(yyvsp[-4].Type).newTy + " " );
*(yyvsp[-3].String) += ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].String);
break;
case 229:
-#line 943 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1006 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
+ if (!(yyvsp[-1].String)->empty())
+ *(yyvsp[-1].String) += " = ";
*(yyvsp[-1].String) += *(yyvsp[0].String);
delete (yyvsp[0].String);
(yyval.String) = (yyvsp[-1].String);
break;
case 230:
-#line 950 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1015 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Used for PHI nodes
(yyvsp[-3].String)->insert(0, *(yyvsp[-5].Type).newTy + "[");
*(yyvsp[-3].String) += "," + *(yyvsp[-1].String) + "]";
break;
case 231:
-#line 956 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1021 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-6].String) += ", [" + *(yyvsp[-3].String) + "," + *(yyvsp[-1].String) + "]";
delete (yyvsp[-3].String); delete (yyvsp[-1].String);
break;
case 232:
-#line 964 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1029 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(*(yyvsp[0].Value).val); (yyvsp[0].Value).destroy(); ;}
break;
case 233:
-#line 965 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1030 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += ", " + *(yyvsp[0].Value).val;
(yyvsp[0].Value).destroy();
break;
case 235:
-#line 974 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1039 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 236:
-#line 978 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1043 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-1].String) += " " + *(yyvsp[0].String);
delete (yyvsp[0].String);
break;
case 238:
-#line 986 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1051 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].String) + ", " + *(yyvsp[0].String);
(yyvsp[-3].Type).destroy(); delete (yyvsp[-2].String); delete (yyvsp[0].String);
break;
case 239:
-#line 991 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1056 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].String) + ", " + *(yyvsp[0].String);
(yyvsp[-3].Type).destroy(); delete (yyvsp[-2].String); delete (yyvsp[0].String);
break;
case 240:
-#line 996 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1061 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].String) + ", " + *(yyvsp[0].String);
(yyvsp[-3].Type).destroy(); delete (yyvsp[-2].String); delete (yyvsp[0].String);
break;
case 241:
-#line 1001 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1066 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val;
(yyvsp[0].Value).destroy();
break;
case 242:
-#line 1006 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1071 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
const char* shiftop = (yyvsp[-3].String)->c_str();
if (*(yyvsp[-3].String) == "shr")
break;
case 243:
-#line 1014 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1079 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- const char *opcode = (yyvsp[-3].String)->c_str();
std::string source = *(yyvsp[-2].Value).val;
+ TypeInfo SrcTy = (yyvsp[-2].Value).type;
+ TypeInfo DstTy = (yyvsp[0].Type);
+ ResolveType(DstTy);
+ (yyval.String) = new std::string();
if (*(yyvsp[-3].String) == "cast") {
- std::string upgrade = getCastUpgrade(source, (yyvsp[-2].Value).type, (yyvsp[0].Type), false);
- if (!upgrade.empty())
- *O << " " << upgrade << "\n";
- opcode = getCastOpcode(source, (yyvsp[-2].Value).type, (yyvsp[0].Type));
+ *(yyval.String) += getCastUpgrade(source, SrcTy, DstTy, false);
+ } else {
+ *(yyval.String) += *(yyvsp[-3].String) + " " + source + " to " + *DstTy.newTy;
}
- (yyval.String) = new std::string(opcode);
- *(yyval.String) += " " + source + " " + *(yyvsp[-1].String) + " " + *(yyvsp[0].Type).newTy;
delete (yyvsp[-3].String); (yyvsp[-2].Value).destroy();
delete (yyvsp[-1].String); (yyvsp[0].Type).destroy();
;}
break;
case 244:
-#line 1028 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1093 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
(yyvsp[-4].Value).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
break;
case 245:
-#line 1033 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1098 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Type).newTy;
(yyvsp[-2].Value).destroy(); (yyvsp[0].Type).destroy();
break;
case 246:
-#line 1038 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1103 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
(yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
break;
case 247:
-#line 1043 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1108 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
(yyvsp[-4].Value).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
break;
case 248:
-#line 1048 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1113 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
(yyvsp[-4].Value).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
break;
case 249:
-#line 1053 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1118 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-1].String) += " " + *(yyvsp[0].String);
delete (yyvsp[0].String);
break;
case 250:
-#line 1058 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1123 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
if (!(yyvsp[-5].String)->empty())
*(yyvsp[-6].String) += " " + *(yyvsp[-5].String);
break;
case 252:
-#line 1072 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1137 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[0].String)->insert(0, ", ");
(yyval.String) = (yyvsp[0].String);
break;
case 253:
-#line 1076 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1141 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 255:
-#line 1081 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1146 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 256:
-#line 1084 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1149 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += " " + *(yyvsp[-1].Type).newTy;
if (!(yyvsp[0].String)->empty())
break;
case 257:
-#line 1091 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1156 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + ", " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].String);
if (!(yyvsp[0].String)->empty())
break;
case 258:
-#line 1098 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1163 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += " " + *(yyvsp[-1].Type).newTy;
if (!(yyvsp[0].String)->empty())
break;
case 259:
-#line 1105 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1170 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + ", " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].String);
if (!(yyvsp[0].String)->empty())
break;
case 260:
-#line 1112 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1177 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val;
(yyvsp[0].Value).destroy();
break;
case 261:
-#line 1117 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1182 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
if (!(yyvsp[-3].String)->empty())
*(yyvsp[-3].String) += " ";
break;
case 262:
-#line 1124 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1189 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
if (!(yyvsp[-5].String)->empty())
*(yyvsp[-5].String) += " ";
break;
case 263:
-#line 1131 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1196 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- *(yyvsp[-3].String) += *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].String) + " " + *(yyvsp[0].String);
+ *(yyvsp[-3].String) += " " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].String) + " " + *(yyvsp[0].String);
(yyvsp[-2].Type).destroy(); delete (yyvsp[-1].String); delete (yyvsp[0].String);
(yyval.String) = (yyvsp[-3].String);
;}
}
/* Line 1126 of yacc.c. */
-#line 3460 "UpgradeParser.tab.c"
+#line 3532 "UpgradeParser.tab.c"
\f
yyvsp -= yylen;
yyssp -= yylen;
}
-#line 1137 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1202 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
int yyerror(const char *ErrorMsg) {
#include "ParserInternals.h"
#include <llvm/ADT/StringExtras.h>
#include <algorithm>
-#include <list>
+#include <vector>
+#include <map>
#include <utility>
#include <iostream>
std::istream* LexInput = 0;
unsigned SizeOfPointer = 32;
+typedef std::vector<TypeInfo> TypeVector;
+static TypeVector EnumeratedTypes;
+typedef std::map<std::string,TypeInfo> TypeMap;
+static TypeMap NamedTypes;
+
void UpgradeAssembly(const std::string &infile, std::istream& in,
std::ostream &out, bool debug)
{
}
}
-std::string getCastUpgrade(std::string& Source, TypeInfo& SrcTy,
- TypeInfo&DstTy, bool isConst = false)
-{
- std::string Result;
- if (SrcTy.isFloatingPoint() && DstTy.isPointer()) {
- if (isConst)
- Source = "ulong fptoui(" + Source + " to ulong)";
+static void ResolveType(TypeInfo& Ty) {
+ if (Ty.oldTy == UnresolvedTy) {
+ TypeMap::iterator I = NamedTypes.find(*Ty.newTy);
+ if (I != NamedTypes.end())
+ Ty.oldTy = I->second.oldTy;
else {
- Result = "%cast_upgrade = fptoui " + Source + " to ulong";
- Source = "ulong %cast_upgrade";
+ std::string msg("Can't resolve type: ");
+ msg += *Ty.newTy;
+ yyerror(msg.c_str());
+ }
+ } else if (Ty.oldTy == NumericTy) {
+ unsigned ref = atoi(&((Ty.newTy->c_str())[1])); // Skip the '\\'
+ if (ref < EnumeratedTypes.size()) {
+ Ty.oldTy = EnumeratedTypes[ref].oldTy;
+ } else {
+ std::string msg("Can't resolve type: ");
+ msg += *Ty.newTy;
+ yyerror(msg.c_str());
}
- SrcTy.destroy();
- SrcTy.newTy = new std::string("ulong");
- SrcTy.oldTy = ULongTy;
}
- return Result;
+ // otherwise its already resolved.
}
-const char* getCastOpcode(std::string& Source, TypeInfo& SrcTy,
- TypeInfo&DstTy) {
+static const char* getCastOpcode(
+ std::string& Source, const TypeInfo& SrcTy, const TypeInfo& DstTy)
+{
unsigned SrcBits = SrcTy.getBitWidth();
unsigned DstBits = DstTy.getBitWidth();
const char* opcode = "bitcast";
opcode = "bitcast"; // ptr -> ptr
} else if (SrcTy.isIntegral()) {
opcode = "inttoptr"; // int -> ptr
- } else if (SrcTy.isFloatingPoint()) { // float/double -> ptr
- // Cast to int first
- *O << " %upgrade_cast = fptoui " << Source << " to ulong\n";
- opcode = "inttoptr";
- Source = "ulong %upgrade_cast";
} else {
- assert(!"Casting pointer to other than pointer or int");
+ assert(!"Casting invalid type to pointer");
}
} else {
assert(!"Casting to type that is not first-class");
return opcode;
}
+static std::string getCastUpgrade(
+ const std::string& Src, TypeInfo& SrcTy, TypeInfo& DstTy, bool isConst)
+{
+ std::string Result;
+ std::string Source = Src;
+ if (SrcTy.isFloatingPoint() && DstTy.isPointer()) {
+ // fp -> ptr cast is no longer supported but we must upgrade this
+ // by doing a double cast: fp -> int -> ptr
+ if (isConst)
+ Source = "ulong fptoui(" + Source + " to ulong)";
+ else {
+ *O << " %cast_upgrade = fptoui " + Source + " to ulong\n";
+ Source = "ulong %cast_upgrade";
+ }
+ // Update the SrcTy for the getCastOpcode call below
+ SrcTy.destroy();
+ SrcTy.newTy = new std::string("ulong");
+ SrcTy.oldTy = ULongTy;
+ } else if (DstTy.oldTy == BoolTy) {
+ // cast ptr %x to bool was previously defined as setne ptr %x, null
+ // The ptrtoint semantic is to truncate, not compare so we must retain
+ // the original intent by replace the cast with a setne
+ const char* comparator = SrcTy.isPointer() ? ", null" :
+ (SrcTy.isFloatingPoint() ? ", 0.0" : ", 0");
+ if (isConst)
+ Result = "setne (" + Source + comparator + ")";
+ else
+ Result = "setne " + Source + comparator;
+ return Result; // skip cast processing below
+ }
+ ResolveType(SrcTy);
+ ResolveType(DstTy);
+ std::string Opcode(getCastOpcode(Source, SrcTy, DstTy));
+ if (isConst)
+ Result += Opcode + "( " + Source + " to " + *DstTy.newTy + ")";
+ else
+ Result += Opcode + " " + Source + " to " + *DstTy.newTy;
+ return Result;
+}
+
/* Enabling traces. */
#endif
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 154 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 201 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
typedef union YYSTYPE {
std::string* String;
TypeInfo Type;
ConstInfo Const;
} YYSTYPE;
/* Line 196 of yacc.c. */
-#line 486 "UpgradeParser.tab.c"
+#line 533 "UpgradeParser.tab.c"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
/* Line 219 of yacc.c. */
-#line 498 "UpgradeParser.tab.c"
+#line 545 "UpgradeParser.tab.c"
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
# define YYSIZE_T __SIZE_TYPE__
-1, 3, -1, 164, -1, 4, -1, 5, -1, 6,
-1, 7, -1, 8, -1, 9, -1, 10, -1, 11,
-1, 12, -1, 13, -1, 14, -1, 15, -1, 16,
- -1, 163, -1, 193, -1, 127, 18, -1, 161, 128,
+ -1, 193, -1, 163, -1, 127, 18, -1, 161, 128,
166, 129, -1, 130, 18, 131, 164, 132, -1, 133,
18, 131, 164, 134, -1, 135, 165, 136, -1, 135,
136, -1, 164, 137, -1, 164, -1, 165, 126, 164,
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const unsigned short int yyrline[] =
{
- 0, 213, 213, 213, 214, 214, 218, 218, 218, 218,
- 218, 218, 218, 218, 218, 219, 219, 219, 220, 220,
- 220, 220, 220, 220, 221, 221, 221, 221, 222, 222,
- 222, 222, 222, 222, 222, 223, 223, 223, 223, 223,
- 223, 228, 228, 228, 228, 229, 229, 229, 229, 230,
- 230, 231, 231, 234, 238, 243, 243, 243, 243, 243,
- 243, 244, 245, 248, 248, 248, 248, 248, 249, 250,
- 255, 260, 261, 264, 265, 273, 279, 280, 283, 284,
- 293, 294, 307, 307, 308, 308, 309, 313, 313, 313,
- 313, 313, 313, 313, 314, 314, 314, 314, 314, 315,
- 315, 316, 322, 327, 333, 340, 347, 353, 357, 367,
- 370, 378, 379, 384, 387, 397, 403, 408, 414, 420,
- 426, 431, 437, 443, 449, 455, 461, 467, 473, 479,
- 485, 493, 507, 513, 518, 523, 528, 533, 541, 546,
- 551, 561, 566, 571, 571, 581, 586, 589, 594, 598,
- 602, 605, 610, 615, 620, 626, 632, 638, 644, 649,
- 654, 659, 661, 661, 664, 669, 676, 681, 688, 695,
- 700, 701, 709, 709, 710, 710, 712, 719, 723, 727,
- 730, 735, 738, 740, 760, 763, 767, 776, 777, 779,
- 787, 788, 789, 793, 806, 807, 810, 810, 810, 810,
- 810, 810, 810, 811, 812, 817, 818, 827, 827, 830,
- 830, 836, 843, 846, 854, 858, 863, 866, 872, 877,
- 882, 887, 894, 900, 906, 919, 924, 930, 935, 943,
- 950, 956, 964, 965, 973, 974, 978, 983, 986, 991,
- 996, 1001, 1006, 1014, 1028, 1033, 1038, 1043, 1048, 1053,
- 1058, 1067, 1072, 1076, 1080, 1081, 1084, 1091, 1098, 1105,
- 1112, 1117, 1124, 1131
+ 0, 260, 260, 260, 261, 261, 265, 265, 265, 265,
+ 265, 265, 265, 265, 265, 266, 266, 266, 267, 267,
+ 267, 267, 267, 267, 268, 268, 268, 268, 269, 269,
+ 269, 269, 269, 269, 269, 270, 270, 270, 270, 270,
+ 270, 275, 275, 275, 275, 276, 276, 276, 276, 277,
+ 277, 278, 278, 281, 284, 289, 289, 289, 289, 289,
+ 289, 290, 291, 294, 294, 294, 294, 294, 295, 296,
+ 301, 306, 307, 310, 311, 319, 325, 326, 329, 330,
+ 339, 340, 353, 353, 354, 354, 355, 359, 359, 359,
+ 359, 359, 359, 359, 360, 360, 360, 360, 360, 362,
+ 366, 370, 375, 380, 386, 393, 400, 406, 410, 420,
+ 423, 431, 432, 437, 440, 450, 456, 461, 467, 473,
+ 479, 484, 490, 496, 502, 508, 514, 520, 526, 532,
+ 538, 546, 560, 566, 571, 576, 581, 586, 594, 599,
+ 604, 614, 619, 624, 624, 634, 639, 642, 647, 651,
+ 655, 658, 669, 674, 679, 686, 693, 700, 707, 712,
+ 717, 722, 724, 724, 727, 732, 739, 744, 751, 758,
+ 763, 764, 772, 772, 773, 773, 775, 782, 786, 790,
+ 793, 798, 801, 803, 823, 826, 830, 839, 840, 842,
+ 850, 851, 852, 856, 869, 870, 873, 873, 873, 873,
+ 873, 873, 873, 874, 875, 880, 881, 890, 890, 893,
+ 893, 899, 906, 909, 917, 921, 926, 929, 935, 940,
+ 945, 950, 957, 963, 969, 982, 987, 993, 998, 1006,
+ 1015, 1021, 1029, 1030, 1038, 1039, 1043, 1048, 1051, 1056,
+ 1061, 1066, 1071, 1079, 1093, 1098, 1103, 1108, 1113, 1118,
+ 1123, 1132, 1137, 1141, 1145, 1146, 1149, 1156, 1163, 1170,
+ 1177, 1182, 1189, 1196
};
#endif
0, 0, 0, 0, 0, 0, 53, 193, 161, 148,
69, 83, 87, 88, 89, 90, 91, 92, 93, 94,
95, 96, 97, 98, 99, 2, 3, 0, 0, 0,
- 0, 207, 0, 0, 82, 100, 86, 208, 101, 184,
+ 0, 207, 0, 0, 82, 101, 86, 208, 100, 184,
185, 186, 187, 188, 189, 212, 0, 0, 0, 225,
226, 255, 214, 215, 0, 0, 0, 0, 171, 159,
153, 151, 143, 144, 0, 0, 0, 0, 102, 0,
switch (yyn)
{
case 53:
-#line 234 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 281 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- *(yyvsp[-1].String) += " = ";
(yyval.String) = (yyvsp[-1].String);
;}
break;
case 54:
-#line 238 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 284 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = new std::string("");
;}
break;
case 62:
-#line 245 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 291 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(""); ;}
break;
case 69:
-#line 250 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 296 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-1].String) += *(yyvsp[0].String);
delete (yyvsp[0].String);
break;
case 70:
-#line 255 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 301 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(""); ;}
break;
case 71:
-#line 260 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 306 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 72:
-#line 261 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 307 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ *(yyvsp[-1].String) += " " + *(yyvsp[0].String); delete (yyvsp[0].String); (yyval.String) = (yyvsp[-1].String); ;}
break;
case 73:
-#line 264 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 310 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 74:
-#line 265 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 311 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[-1].String)->insert(0, ", ");
*(yyvsp[-1].String) += " " + *(yyvsp[0].String);
break;
case 75:
-#line 273 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 319 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-1].String) += " " + *(yyvsp[0].String);
delete (yyvsp[0].String);
break;
case 76:
-#line 279 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 325 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 78:
-#line 283 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 329 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 79:
-#line 284 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 330 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[-1].String)->insert(0, ", ");
if (!(yyvsp[0].String)->empty())
break;
case 81:
-#line 294 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 340 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-1].String) += " " + *(yyvsp[0].String);
delete (yyvsp[0].String);
;}
break;
- case 101:
-#line 316 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+ case 99:
+#line 362 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+ {
+ (yyval.Type).newTy = (yyvsp[0].String);
+ (yyval.Type).oldTy = OpaqueTy;
+ ;}
+ break;
+
+ case 100:
+#line 366 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- (yyval.Type).newTy = (yyvsp[0].String); (yyval.Type).oldTy = OpaqueTy;
- ;}
+ (yyval.Type).newTy = (yyvsp[0].String);
+ (yyval.Type).oldTy = UnresolvedTy;
+ ;}
break;
case 102:
-#line 322 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 375 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Type UpReference
(yyvsp[0].String)->insert(0, "\\");
(yyval.Type).newTy = (yyvsp[0].String);
- (yyval.Type).oldTy = OpaqueTy;
+ (yyval.Type).oldTy = NumericTy;
;}
break;
case 103:
-#line 327 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 380 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Function derived type?
*(yyvsp[-3].Type).newTy += "( " + *(yyvsp[-1].String) + " )";
delete (yyvsp[-1].String);
break;
case 104:
-#line 333 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 386 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Sized array type?
(yyvsp[-3].String)->insert(0,"[ ");
*(yyvsp[-3].String) += " x " + *(yyvsp[-1].Type).newTy + " ]";
break;
case 105:
-#line 340 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 393 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Packed array type?
(yyvsp[-3].String)->insert(0,"< ");
*(yyvsp[-3].String) += " x " + *(yyvsp[-1].Type).newTy + " >";
break;
case 106:
-#line 347 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 400 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Structure type?
(yyvsp[-1].String)->insert(0, "{ ");
*(yyvsp[-1].String) += " }";
break;
case 107:
-#line 353 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 406 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Empty structure type?
(yyval.Type).newTy = new std::string("{}");
(yyval.Type).oldTy = StructTy;
break;
case 108:
-#line 357 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 410 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Pointer type?
*(yyvsp[-1].Type).newTy += '*';
(yyvsp[-1].Type).oldTy = PointerTy;
break;
case 109:
-#line 367 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 420 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = (yyvsp[0].Type).newTy;
;}
break;
case 110:
-#line 370 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 423 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += ", " + *(yyvsp[0].Type).newTy;
delete (yyvsp[0].Type).newTy;
break;
case 112:
-#line 379 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 432 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += ", ...";
delete (yyvsp[0].String);
break;
case 113:
-#line 384 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 437 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = (yyvsp[0].String);
;}
break;
case 114:
-#line 387 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 440 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = new std::string();
;}
break;
case 115:
-#line 397 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 450 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Nonempty unsized arr
(yyval.Const).type = (yyvsp[-3].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-3].Type).newTy);
break;
case 116:
-#line 403 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 456 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Const).type = (yyvsp[-2].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-2].Type).newTy);
break;
case 117:
-#line 408 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 461 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Const).type = (yyvsp[-2].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-2].Type).newTy);
break;
case 118:
-#line 414 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 467 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Nonempty unsized arr
(yyval.Const).type = (yyvsp[-3].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-3].Type).newTy);
break;
case 119:
-#line 420 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 473 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Const).type = (yyvsp[-3].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-3].Type).newTy);
break;
case 120:
-#line 426 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 479 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Const).type = (yyvsp[-2].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-2].Type).newTy);
break;
case 121:
-#line 431 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 484 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 122:
-#line 437 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 490 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 123:
-#line 443 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 496 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 124:
-#line 449 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 502 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 125:
-#line 455 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 508 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 126:
-#line 461 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 514 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // integral constants
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 127:
-#line 467 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 520 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // integral constants
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 128:
-#line 473 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 526 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Boolean constants
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 129:
-#line 479 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 532 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Boolean constants
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 130:
-#line 485 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 538 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Float & Double constants
(yyval.Const).type = (yyvsp[-1].Type);
(yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy);
break;
case 131:
-#line 493 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 546 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- // We must infer the cast opcode from the types of the operands.
- const char *opcode = (yyvsp[-5].String)->c_str();
std::string source = *(yyvsp[-3].Const).cnst;
+ TypeInfo DstTy = (yyvsp[-1].Type);
+ ResolveType(DstTy);
if (*(yyvsp[-5].String) == "cast") {
- std::string upgrade = getCastUpgrade(source, (yyvsp[-3].Const).type, (yyvsp[-1].Type), true);
- opcode = getCastOpcode(source, (yyvsp[-3].Const).type, (yyvsp[-1].Type));
- if (!upgrade.empty())
- source = upgrade;
+ // Call getCastUpgrade to upgrade the old cast
+ (yyval.String) = new std::string(getCastUpgrade(source, (yyvsp[-3].Const).type, (yyvsp[-1].Type), true));
+ } else {
+ // Nothing to upgrade, just create the cast constant expr
+ (yyval.String) = new std::string(*(yyvsp[-5].String));
+ *(yyval.String) += "( " + source + " to " + *(yyvsp[-1].Type).newTy + ")";
}
- (yyval.String) = new std::string(opcode);
- *(yyval.String) += "( " + source + " " + *(yyvsp[-2].String) + " " + *(yyvsp[-1].Type).newTy + ")";
delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy();
;}
break;
case 132:
-#line 507 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 560 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-4].String) += "(" + *(yyvsp[-2].Const).cnst + " " + *(yyvsp[-1].String) + ")";
(yyval.String) = (yyvsp[-4].String);
break;
case 133:
-#line 513 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 566 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
(yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
break;
case 134:
-#line 518 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 571 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
(yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
break;
case 135:
-#line 523 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 576 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
(yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
break;
case 136:
-#line 528 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 581 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
(yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
break;
case 137:
-#line 533 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 586 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
const char* shiftop = (yyvsp[-5].String)->c_str();
if (*(yyvsp[-5].String) == "shr")
break;
case 138:
-#line 541 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 594 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
(yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
break;
case 139:
-#line 546 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 599 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
(yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
break;
case 140:
-#line 551 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 604 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")";
(yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy();
break;
case 141:
-#line 561 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 614 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += ", " + *(yyvsp[0].Const).cnst;
(yyvsp[0].Const).destroy();
break;
case 142:
-#line 566 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 619 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(*(yyvsp[0].Const).cnst); (yyvsp[0].Const).destroy(); ;}
break;
case 145:
-#line 581 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 634 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
;}
break;
case 146:
-#line 586 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 639 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = 0;
;}
break;
case 147:
-#line 589 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 642 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << *(yyvsp[0].String) << "\n";
delete (yyvsp[0].String);
break;
case 148:
-#line 594 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 647 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << "module asm " << " " << *(yyvsp[0].String) << "\n";
(yyval.String) = 0;
break;
case 149:
-#line 598 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 651 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << "implementation\n";
(yyval.String) = 0;
;}
break;
+ case 150:
+#line 655 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+ { (yyval.String) = 0; ;}
+ break;
+
case 151:
-#line 605 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 658 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- *O << *(yyvsp[-2].String) << " " << *(yyvsp[-1].String) << " " << *(yyvsp[0].Type).newTy << "\n";
- // delete $2; delete $3; $4.destroy();
+ EnumeratedTypes.push_back((yyvsp[0].Type));
+ if (!(yyvsp[-2].String)->empty()) {
+ NamedTypes[*(yyvsp[-2].String)].newTy = new std::string(*(yyvsp[0].Type).newTy);
+ NamedTypes[*(yyvsp[-2].String)].oldTy = (yyvsp[0].Type).oldTy;
+ *O << *(yyvsp[-2].String) << " = ";
+ }
+ *O << "type " << *(yyvsp[0].Type).newTy << "\n";
+ delete (yyvsp[-2].String); delete (yyvsp[-1].String); (yyvsp[0].Type).destroy();
(yyval.String) = 0;
;}
break;
case 152:
-#line 610 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 669 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Function prototypes can be in const pool
*O << *(yyvsp[0].String) << "\n";
delete (yyvsp[0].String);
break;
case 153:
-#line 615 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 674 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Asm blocks can be in the const pool
*O << *(yyvsp[-2].String) << " " << *(yyvsp[-1].String) << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[-2].String); delete (yyvsp[-1].String); delete (yyvsp[0].String);
break;
case 154:
-#line 620 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 679 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- *O << *(yyvsp[-4].String) << " " << *(yyvsp[-3].String) << " " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Const).cnst << " "
- << *(yyvsp[0].String) << "\n";
+ if (!(yyvsp[-4].String)->empty())
+ *O << *(yyvsp[-4].String) << " = ";
+ *O << *(yyvsp[-3].String) << " " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Const).cnst << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); (yyvsp[-1].Const).destroy(); delete (yyvsp[0].String);
(yyval.String) = 0;
;}
break;
case 155:
-#line 626 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 686 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- *O << *(yyvsp[-4].String) << " " << *(yyvsp[-3].String) << " " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy
- << " " << *(yyvsp[0].String) << "\n";
+ if (!(yyvsp[-4].String)->empty())
+ *O << *(yyvsp[-4].String) << " = ";
+ *O << *(yyvsp[-3].String) << " " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
(yyval.String) = 0;
;}
break;
case 156:
-#line 632 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 693 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- *O << *(yyvsp[-4].String) << " " << *(yyvsp[-3].String) << " " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy
- << " " << *(yyvsp[0].String) << "\n";
+ if (!(yyvsp[-4].String)->empty())
+ *O << *(yyvsp[-4].String) << " = ";
+ *O << *(yyvsp[-3].String) << " " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
(yyval.String) = 0;
;}
break;
case 157:
-#line 638 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 700 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- *O << *(yyvsp[-4].String) << " " << *(yyvsp[-3].String) << " " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy
- << " " << *(yyvsp[0].String) << "\n";
+ if (!(yyvsp[-4].String)->empty())
+ *O << *(yyvsp[-4].String) << " = ";
+ *O << *(yyvsp[-3].String) << " " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
(yyval.String) = 0;
;}
break;
case 158:
-#line 644 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 707 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << *(yyvsp[-1].String) << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[-1].String); delete (yyvsp[0].String);
break;
case 159:
-#line 649 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 712 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << *(yyvsp[-2].String) << " = " << *(yyvsp[0].String) << "\n";
delete (yyvsp[-2].String); delete (yyvsp[0].String);
break;
case 160:
-#line 654 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 717 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = 0;
;}
break;
case 164:
-#line 664 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 727 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
delete (yyvsp[0].String);
break;
case 165:
-#line 669 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 732 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
if (*(yyvsp[0].String) == "64")
break;
case 166:
-#line 676 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 739 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
delete (yyvsp[0].String);
break;
case 167:
-#line 681 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 744 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += " = " + *(yyvsp[0].String);
delete (yyvsp[0].String);
break;
case 168:
-#line 688 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 751 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[-1].String)->insert(0, "[ ");
*(yyvsp[-1].String) += " ]";
break;
case 169:
-#line 695 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 758 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += ", " + *(yyvsp[0].String);
delete (yyvsp[0].String);
break;
case 171:
-#line 701 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 764 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = new std::string();
;}
break;
case 175:
-#line 710 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 773 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 176:
-#line 712 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 775 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = (yyvsp[-1].Type).newTy;
if (!(yyvsp[0].String)->empty())
break;
case 177:
-#line 719 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 782 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += ", " + *(yyvsp[0].String);
delete (yyvsp[0].String);
break;
case 178:
-#line 723 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 786 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = (yyvsp[0].String);
;}
break;
case 179:
-#line 727 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 790 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = (yyvsp[0].String);
;}
break;
case 180:
-#line 730 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 793 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += ", ...";
(yyval.String) = (yyvsp[-2].String);
break;
case 181:
-#line 735 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 798 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = (yyvsp[0].String);
;}
break;
case 182:
-#line 738 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 801 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 183:
-#line 741 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 804 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
if (!(yyvsp[-7].String)->empty()) {
*(yyvsp[-7].String) += " ";
break;
case 184:
-#line 760 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 823 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = new std::string("begin");
;}
break;
case 185:
-#line 763 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 826 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = new std::string ("{");
;}
break;
case 186:
-#line 767 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 830 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
if (!(yyvsp[-2].String)->empty()) {
*O << *(yyvsp[-2].String) << " ";
break;
case 187:
-#line 776 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 839 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string("end"); ;}
break;
case 188:
-#line 777 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 840 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string("}"); ;}
break;
case 189:
-#line 779 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 842 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
if ((yyvsp[-1].String))
*O << *(yyvsp[-1].String);
break;
case 190:
-#line 787 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 850 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 193:
-#line 793 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 856 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
if (!(yyvsp[-1].String)->empty())
*(yyvsp[-2].String) += " " + *(yyvsp[-1].String);
break;
case 194:
-#line 806 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 869 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 204:
-#line 812 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 875 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[-1].String)->insert(0, "<");
*(yyvsp[-1].String) += ">";
break;
case 206:
-#line 818 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 881 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
if (!(yyvsp[-3].String)->empty()) {
*(yyvsp[-4].String) += " " + *(yyvsp[-3].String);
break;
case 211:
-#line 836 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 899 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.Value).type = (yyvsp[-1].Type);
(yyval.Value).val = new std::string(*(yyvsp[-1].Type).newTy + " ");
break;
case 212:
-#line 843 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 906 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = 0;
;}
break;
case 213:
-#line 846 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 909 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Do not allow functions with 0 basic blocks
(yyval.String) = 0;
;}
break;
case 214:
-#line 854 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 917 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = 0;
;}
break;
case 215:
-#line 858 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 921 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[0].String);
break;
case 216:
-#line 863 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 926 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyval.String) = 0;
;}
break;
case 217:
-#line 866 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 929 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << *(yyvsp[0].String) << "\n";
delete (yyvsp[0].String);
break;
case 218:
-#line 872 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 935 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Return with a result...
*O << " " << *(yyvsp[-1].String) << " " << *(yyvsp[0].Value).val << "\n";
delete (yyvsp[-1].String); (yyvsp[0].Value).destroy();
break;
case 219:
-#line 877 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 940 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Return with no result...
*O << " " << *(yyvsp[-1].String) << " " << *(yyvsp[0].Type).newTy << "\n";
delete (yyvsp[-1].String); (yyvsp[0].Type).destroy();
break;
case 220:
-#line 882 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 945 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Unconditional Branch...
*O << " " << *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
break;
case 221:
-#line 887 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 950 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << " " << *(yyvsp[-8].String) << " " << *(yyvsp[-7].Type).newTy << " " << *(yyvsp[-6].String) << ", "
<< *(yyvsp[-4].Type).newTy << " " << *(yyvsp[-3].String) << ", " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].String) << "\n";
break;
case 222:
-#line 894 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 957 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << " " << *(yyvsp[-8].String) << " " << *(yyvsp[-7].Type).newTy << " " << *(yyvsp[-6].String) << ", " << *(yyvsp[-4].Type).newTy
<< " " << *(yyvsp[-3].String) << " [" << *(yyvsp[-1].String) << " ]\n";
break;
case 223:
-#line 900 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 963 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << " " << *(yyvsp[-7].String) << " " << *(yyvsp[-6].Type).newTy << " " << *(yyvsp[-5].String) << ", "
<< *(yyvsp[-3].Type).newTy << " " << *(yyvsp[-2].String) << "[]\n";
break;
case 224:
-#line 907 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 970 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << " ";
if (!(yyvsp[-13].String)->empty())
- *O << *(yyvsp[-13].String);
+ *O << *(yyvsp[-13].String) << " = ";
*O << *(yyvsp[-12].String) << " " << *(yyvsp[-11].String) << " " << *(yyvsp[-10].Type).newTy << " " << *(yyvsp[-9].String) << " ("
<< *(yyvsp[-7].String) << ") " << *(yyvsp[-5].String) << " " << *(yyvsp[-4].Type).newTy << " " << *(yyvsp[-3].String) << " "
<< *(yyvsp[-2].String) << " " << *(yyvsp[-1].Type).newTy << " " << *(yyvsp[0].String) << "\n";
break;
case 225:
-#line 919 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 982 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[0].String);
break;
case 226:
-#line 924 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 987 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*O << " " << *(yyvsp[0].String) << "\n";
delete (yyvsp[0].String);
break;
case 227:
-#line 930 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 993 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + " " + *(yyvsp[-3].String) + ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].String);
(yyvsp[-4].Type).destroy(); delete (yyvsp[-3].String); (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String);
break;
case 228:
-#line 935 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 998 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[-3].String)->insert(0, *(yyvsp[-4].Type).newTy + " " );
*(yyvsp[-3].String) += ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].String);
break;
case 229:
-#line 943 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1006 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
+ if (!(yyvsp[-1].String)->empty())
+ *(yyvsp[-1].String) += " = ";
*(yyvsp[-1].String) += *(yyvsp[0].String);
delete (yyvsp[0].String);
(yyval.String) = (yyvsp[-1].String);
break;
case 230:
-#line 950 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1015 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ // Used for PHI nodes
(yyvsp[-3].String)->insert(0, *(yyvsp[-5].Type).newTy + "[");
*(yyvsp[-3].String) += "," + *(yyvsp[-1].String) + "]";
break;
case 231:
-#line 956 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1021 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-6].String) += ", [" + *(yyvsp[-3].String) + "," + *(yyvsp[-1].String) + "]";
delete (yyvsp[-3].String); delete (yyvsp[-1].String);
break;
case 232:
-#line 964 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1029 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(*(yyvsp[0].Value).val); (yyvsp[0].Value).destroy(); ;}
break;
case 233:
-#line 965 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1030 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += ", " + *(yyvsp[0].Value).val;
(yyvsp[0].Value).destroy();
break;
case 235:
-#line 974 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1039 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 236:
-#line 978 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1043 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-1].String) += " " + *(yyvsp[0].String);
delete (yyvsp[0].String);
break;
case 238:
-#line 986 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1051 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].String) + ", " + *(yyvsp[0].String);
(yyvsp[-3].Type).destroy(); delete (yyvsp[-2].String); delete (yyvsp[0].String);
break;
case 239:
-#line 991 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1056 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].String) + ", " + *(yyvsp[0].String);
(yyvsp[-3].Type).destroy(); delete (yyvsp[-2].String); delete (yyvsp[0].String);
break;
case 240:
-#line 996 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1061 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].String) + ", " + *(yyvsp[0].String);
(yyvsp[-3].Type).destroy(); delete (yyvsp[-2].String); delete (yyvsp[0].String);
break;
case 241:
-#line 1001 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1066 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val;
(yyvsp[0].Value).destroy();
break;
case 242:
-#line 1006 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1071 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
const char* shiftop = (yyvsp[-3].String)->c_str();
if (*(yyvsp[-3].String) == "shr")
break;
case 243:
-#line 1014 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1079 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- const char *opcode = (yyvsp[-3].String)->c_str();
std::string source = *(yyvsp[-2].Value).val;
+ TypeInfo SrcTy = (yyvsp[-2].Value).type;
+ TypeInfo DstTy = (yyvsp[0].Type);
+ ResolveType(DstTy);
+ (yyval.String) = new std::string();
if (*(yyvsp[-3].String) == "cast") {
- std::string upgrade = getCastUpgrade(source, (yyvsp[-2].Value).type, (yyvsp[0].Type), false);
- if (!upgrade.empty())
- *O << " " << upgrade << "\n";
- opcode = getCastOpcode(source, (yyvsp[-2].Value).type, (yyvsp[0].Type));
+ *(yyval.String) += getCastUpgrade(source, SrcTy, DstTy, false);
+ } else {
+ *(yyval.String) += *(yyvsp[-3].String) + " " + source + " to " + *DstTy.newTy;
}
- (yyval.String) = new std::string(opcode);
- *(yyval.String) += " " + source + " " + *(yyvsp[-1].String) + " " + *(yyvsp[0].Type).newTy;
delete (yyvsp[-3].String); (yyvsp[-2].Value).destroy();
delete (yyvsp[-1].String); (yyvsp[0].Type).destroy();
;}
break;
case 244:
-#line 1028 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1093 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
(yyvsp[-4].Value).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
break;
case 245:
-#line 1033 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1098 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Type).newTy;
(yyvsp[-2].Value).destroy(); (yyvsp[0].Type).destroy();
break;
case 246:
-#line 1038 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1103 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
(yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
break;
case 247:
-#line 1043 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1108 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
(yyvsp[-4].Value).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
break;
case 248:
-#line 1048 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1113 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += " " + *(yyvsp[-4].Value).val + ", " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val;
(yyvsp[-4].Value).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy();
break;
case 249:
-#line 1053 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1118 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-1].String) += " " + *(yyvsp[0].String);
delete (yyvsp[0].String);
break;
case 250:
-#line 1058 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1123 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
if (!(yyvsp[-5].String)->empty())
*(yyvsp[-6].String) += " " + *(yyvsp[-5].String);
break;
case 252:
-#line 1072 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1137 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
(yyvsp[0].String)->insert(0, ", ");
(yyval.String) = (yyvsp[0].String);
break;
case 253:
-#line 1076 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1141 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 255:
-#line 1081 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1146 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{ (yyval.String) = new std::string(); ;}
break;
case 256:
-#line 1084 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1149 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += " " + *(yyvsp[-1].Type).newTy;
if (!(yyvsp[0].String)->empty())
break;
case 257:
-#line 1091 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1156 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + ", " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].String);
if (!(yyvsp[0].String)->empty())
break;
case 258:
-#line 1098 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1163 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-2].String) += " " + *(yyvsp[-1].Type).newTy;
if (!(yyvsp[0].String)->empty())
break;
case 259:
-#line 1105 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1170 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + ", " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].String);
if (!(yyvsp[0].String)->empty())
break;
case 260:
-#line 1112 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1177 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
*(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val;
(yyvsp[0].Value).destroy();
break;
case 261:
-#line 1117 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1182 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
if (!(yyvsp[-3].String)->empty())
*(yyvsp[-3].String) += " ";
break;
case 262:
-#line 1124 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1189 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
if (!(yyvsp[-5].String)->empty())
*(yyvsp[-5].String) += " ";
break;
case 263:
-#line 1131 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1196 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
{
- *(yyvsp[-3].String) += *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].String) + " " + *(yyvsp[0].String);
+ *(yyvsp[-3].String) += " " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].String) + " " + *(yyvsp[0].String);
(yyvsp[-2].Type).destroy(); delete (yyvsp[-1].String); delete (yyvsp[0].String);
(yyval.String) = (yyvsp[-3].String);
;}
}
/* Line 1126 of yacc.c. */
-#line 3460 "UpgradeParser.tab.c"
+#line 3532 "UpgradeParser.tab.c"
\f
yyvsp -= yylen;
yyssp -= yylen;
}
-#line 1137 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 1202 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
int yyerror(const char *ErrorMsg) {
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 154 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 201 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
typedef union YYSTYPE {
std::string* String;
TypeInfo Type;
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 154 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
+#line 201 "/proj/llvm/llvm-4/tools/llvm-upgrade/UpgradeParser.y"
typedef union YYSTYPE {
std::string* String;
TypeInfo Type;
#include "ParserInternals.h"
#include <llvm/ADT/StringExtras.h>
#include <algorithm>
-#include <list>
+#include <vector>
+#include <map>
#include <utility>
#include <iostream>
std::istream* LexInput = 0;
unsigned SizeOfPointer = 32;
+typedef std::vector<TypeInfo> TypeVector;
+static TypeVector EnumeratedTypes;
+typedef std::map<std::string,TypeInfo> TypeMap;
+static TypeMap NamedTypes;
+
void UpgradeAssembly(const std::string &infile, std::istream& in,
std::ostream &out, bool debug)
{
}
}
-std::string getCastUpgrade(std::string& Source, TypeInfo& SrcTy,
- TypeInfo&DstTy, bool isConst = false)
-{
- std::string Result;
- if (SrcTy.isFloatingPoint() && DstTy.isPointer()) {
- if (isConst)
- Source = "ulong fptoui(" + Source + " to ulong)";
+static void ResolveType(TypeInfo& Ty) {
+ if (Ty.oldTy == UnresolvedTy) {
+ TypeMap::iterator I = NamedTypes.find(*Ty.newTy);
+ if (I != NamedTypes.end())
+ Ty.oldTy = I->second.oldTy;
else {
- Result = "%cast_upgrade = fptoui " + Source + " to ulong";
- Source = "ulong %cast_upgrade";
+ std::string msg("Can't resolve type: ");
+ msg += *Ty.newTy;
+ yyerror(msg.c_str());
+ }
+ } else if (Ty.oldTy == NumericTy) {
+ unsigned ref = atoi(&((Ty.newTy->c_str())[1])); // Skip the '\\'
+ if (ref < EnumeratedTypes.size()) {
+ Ty.oldTy = EnumeratedTypes[ref].oldTy;
+ } else {
+ std::string msg("Can't resolve type: ");
+ msg += *Ty.newTy;
+ yyerror(msg.c_str());
}
- SrcTy.destroy();
- SrcTy.newTy = new std::string("ulong");
- SrcTy.oldTy = ULongTy;
}
- return Result;
+ // otherwise its already resolved.
}
-const char* getCastOpcode(std::string& Source, TypeInfo& SrcTy,
- TypeInfo&DstTy) {
+static const char* getCastOpcode(
+ std::string& Source, const TypeInfo& SrcTy, const TypeInfo& DstTy)
+{
unsigned SrcBits = SrcTy.getBitWidth();
unsigned DstBits = DstTy.getBitWidth();
const char* opcode = "bitcast";
opcode = "bitcast"; // ptr -> ptr
} else if (SrcTy.isIntegral()) {
opcode = "inttoptr"; // int -> ptr
- } else if (SrcTy.isFloatingPoint()) { // float/double -> ptr
- // Cast to int first
- *O << " %upgrade_cast = fptoui " << Source << " to ulong\n";
- opcode = "inttoptr";
- Source = "ulong %upgrade_cast";
} else {
- assert(!"Casting pointer to other than pointer or int");
+ assert(!"Casting invalid type to pointer");
}
} else {
assert(!"Casting to type that is not first-class");
return opcode;
}
+static std::string getCastUpgrade(
+ const std::string& Src, TypeInfo& SrcTy, TypeInfo& DstTy, bool isConst)
+{
+ std::string Result;
+ std::string Source = Src;
+ if (SrcTy.isFloatingPoint() && DstTy.isPointer()) {
+ // fp -> ptr cast is no longer supported but we must upgrade this
+ // by doing a double cast: fp -> int -> ptr
+ if (isConst)
+ Source = "ulong fptoui(" + Source + " to ulong)";
+ else {
+ *O << " %cast_upgrade = fptoui " + Source + " to ulong\n";
+ Source = "ulong %cast_upgrade";
+ }
+ // Update the SrcTy for the getCastOpcode call below
+ SrcTy.destroy();
+ SrcTy.newTy = new std::string("ulong");
+ SrcTy.oldTy = ULongTy;
+ } else if (DstTy.oldTy == BoolTy) {
+ // cast ptr %x to bool was previously defined as setne ptr %x, null
+ // The ptrtoint semantic is to truncate, not compare so we must retain
+ // the original intent by replace the cast with a setne
+ const char* comparator = SrcTy.isPointer() ? ", null" :
+ (SrcTy.isFloatingPoint() ? ", 0.0" : ", 0");
+ if (isConst)
+ Result = "setne (" + Source + comparator + ")";
+ else
+ Result = "setne " + Source + comparator;
+ return Result; // skip cast processing below
+ }
+ ResolveType(SrcTy);
+ ResolveType(DstTy);
+ std::string Opcode(getCastOpcode(Source, SrcTy, DstTy));
+ if (isConst)
+ Result += Opcode + "( " + Source + " to " + *DstTy.newTy + ")";
+ else
+ Result += Opcode + " " + Source + " to " + *DstTy.newTy;
+ return Result;
+}
+
%}
%file-prefix="UpgradeParser"
}
%token <Type> VOID BOOL SBYTE UBYTE SHORT USHORT INT UINT LONG ULONG
-%token <Type> FLOAT DOUBLE LABEL OPAQUE
-%token <String> ESINT64VAL EUINT64VAL SINTVAL UINTVAL FPVAL
+%token <Type> FLOAT DOUBLE LABEL
+%token <String> OPAQUE ESINT64VAL EUINT64VAL SINTVAL UINTVAL FPVAL
%token <String> NULL_TOK UNDEF ZEROINITIALIZER TRUETOK FALSETOK
%token <String> TYPE VAR_ID LABELSTR STRINGCONSTANT
%token <String> IMPLEMENTATION BEGINTOK ENDTOK
// OptAssign - Value producing statements have an optional assignment component
OptAssign : Name '=' {
- *$1 += " = ";
$$ = $1;
}
| /*empty*/ {
//
PrimType : BOOL | SBYTE | UBYTE | SHORT | USHORT | INT | UINT ;
PrimType : LONG | ULONG | FLOAT | DOUBLE | LABEL;
-UpRTypes : OPAQUE | PrimType
- | SymbolicValueRef {
- $$.newTy = $1; $$.oldTy = OpaqueTy;
- };
+UpRTypes
+ : OPAQUE {
+ $$.newTy = $1;
+ $$.oldTy = OpaqueTy;
+ }
+ | SymbolicValueRef {
+ $$.newTy = $1;
+ $$.oldTy = UnresolvedTy;
+ }
+ | PrimType
+ ;
// Include derived types in the Types production.
//
UpRTypes : '\\' EUINT64VAL { // Type UpReference
$2->insert(0, "\\");
$$.newTy = $2;
- $$.oldTy = OpaqueTy;
+ $$.oldTy = NumericTy;
}
| UpRTypesV '(' ArgTypeListI ')' { // Function derived type?
*$1.newTy += "( " + *$3 + " )";
ConstExpr: CastOps '(' ConstVal TO Types ')' {
- // We must infer the cast opcode from the types of the operands.
- const char *opcode = $1->c_str();
std::string source = *$3.cnst;
+ TypeInfo DstTy = $5;
+ ResolveType(DstTy);
if (*$1 == "cast") {
- std::string upgrade = getCastUpgrade(source, $3.type, $5, true);
- opcode = getCastOpcode(source, $3.type, $5);
- if (!upgrade.empty())
- source = upgrade;
+ // Call getCastUpgrade to upgrade the old cast
+ $$ = new std::string(getCastUpgrade(source, $3.type, $5, true));
+ } else {
+ // Nothing to upgrade, just create the cast constant expr
+ $$ = new std::string(*$1);
+ *$$ += "( " + source + " to " + *$5.newTy + ")";
}
- $$ = new std::string(opcode);
- *$$ += "( " + source + " " + *$4 + " " + *$5.newTy + ")";
delete $1; $3.destroy(); delete $4; $5.destroy();
}
| GETELEMENTPTR '(' ConstVal IndexList ')' {
*O << "implementation\n";
$$ = 0;
}
- | ConstPool;
+ | ConstPool { $$ = 0; }
// ConstPool - Constants with optional names assigned to them.
ConstPool : ConstPool OptAssign TYPE TypesV {
- *O << *$2 << " " << *$3 << " " << *$4.newTy << "\n";
- // delete $2; delete $3; $4.destroy();
+ EnumeratedTypes.push_back($4);
+ if (!$2->empty()) {
+ NamedTypes[*$2].newTy = new std::string(*$4.newTy);
+ NamedTypes[*$2].oldTy = $4.oldTy;
+ *O << *$2 << " = ";
+ }
+ *O << "type " << *$4.newTy << "\n";
+ delete $2; delete $3; $4.destroy();
$$ = 0;
}
| ConstPool FunctionProto { // Function prototypes can be in const pool
$$ = 0;
}
| ConstPool OptAssign OptLinkage GlobalType ConstVal GlobalVarAttributes {
- *O << *$2 << " " << *$3 << " " << *$4 << " " << *$5.cnst << " "
- << *$6 << "\n";
+ if (!$2->empty())
+ *O << *$2 << " = ";
+ *O << *$3 << " " << *$4 << " " << *$5.cnst << " " << *$6 << "\n";
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
$$ = 0;
}
| ConstPool OptAssign EXTERNAL GlobalType Types GlobalVarAttributes {
- *O << *$2 << " " << *$3 << " " << *$4 << " " << *$5.newTy
- << " " << *$6 << "\n";
+ if (!$2->empty())
+ *O << *$2 << " = ";
+ *O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
$$ = 0;
}
| ConstPool OptAssign DLLIMPORT GlobalType Types GlobalVarAttributes {
- *O << *$2 << " " << *$3 << " " << *$4 << " " << *$5.newTy
- << " " << *$6 << "\n";
+ if (!$2->empty())
+ *O << *$2 << " = ";
+ *O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
$$ = 0;
}
| ConstPool OptAssign EXTERN_WEAK GlobalType Types GlobalVarAttributes {
- *O << *$2 << " " << *$3 << " " << *$4 << " " << *$5.newTy
- << " " << *$6 << "\n";
+ if (!$2->empty())
+ *O << *$2 << " = ";
+ *O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
$$ = 0;
}
TO LABEL ValueRef UNWIND LABEL ValueRef {
*O << " ";
if (!$1->empty())
- *O << *$1;
+ *O << *$1 << " = ";
*O << *$2 << " " << *$3 << " " << *$4.newTy << " " << *$5 << " ("
<< *$7 << ") " << *$9 << " " << *$10.newTy << " " << *$11 << " "
<< *$12 << " " << *$13.newTy << " " << *$14 << "\n";
Inst
: OptAssign InstVal {
+ if (!$1->empty())
+ *$1 += " = ";
*$1 += *$2;
delete $2;
$$ = $1;
delete $1; $2.destroy(); $4.destroy();
}
| CastOps ResolvedVal TO Types {
- const char *opcode = $1->c_str();
std::string source = *$2.val;
+ TypeInfo SrcTy = $2.type;
+ TypeInfo DstTy = $4;
+ ResolveType(DstTy);
+ $$ = new std::string();
if (*$1 == "cast") {
- std::string upgrade = getCastUpgrade(source, $2.type, $4, false);
- if (!upgrade.empty())
- *O << " " << upgrade << "\n";
- opcode = getCastOpcode(source, $2.type, $4);
+ *$$ += getCastUpgrade(source, SrcTy, DstTy, false);
+ } else {
+ *$$ += *$1 + " " + source + " to " + *DstTy.newTy;
}
- $$ = new std::string(opcode);
- *$$ += " " + source + " " + *$3 + " " + *$4.newTy;
delete $1; $2.destroy();
delete $3; $4.destroy();
}
$$ = $1;
}
| GETELEMENTPTR Types ValueRef IndexList {
- *$1 += *$2.newTy + " " + *$3 + " " + *$4;
+ *$1 += " " + *$2.newTy + " " + *$3 + " " + *$4;
$2.destroy(); delete $3; delete $4;
$$ = $1;
};
#include "ParserInternals.h"
#include <llvm/ADT/StringExtras.h>
#include <algorithm>
-#include <list>
+#include <vector>
+#include <map>
#include <utility>
#include <iostream>
std::istream* LexInput = 0;
unsigned SizeOfPointer = 32;
+typedef std::vector<TypeInfo> TypeVector;
+static TypeVector EnumeratedTypes;
+typedef std::map<std::string,TypeInfo> TypeMap;
+static TypeMap NamedTypes;
+
void UpgradeAssembly(const std::string &infile, std::istream& in,
std::ostream &out, bool debug)
{
}
}
-std::string getCastUpgrade(std::string& Source, TypeInfo& SrcTy,
- TypeInfo&DstTy, bool isConst = false)
-{
- std::string Result;
- if (SrcTy.isFloatingPoint() && DstTy.isPointer()) {
- if (isConst)
- Source = "ulong fptoui(" + Source + " to ulong)";
+static void ResolveType(TypeInfo& Ty) {
+ if (Ty.oldTy == UnresolvedTy) {
+ TypeMap::iterator I = NamedTypes.find(*Ty.newTy);
+ if (I != NamedTypes.end())
+ Ty.oldTy = I->second.oldTy;
else {
- Result = "%cast_upgrade = fptoui " + Source + " to ulong";
- Source = "ulong %cast_upgrade";
+ std::string msg("Can't resolve type: ");
+ msg += *Ty.newTy;
+ yyerror(msg.c_str());
+ }
+ } else if (Ty.oldTy == NumericTy) {
+ unsigned ref = atoi(&((Ty.newTy->c_str())[1])); // Skip the '\\'
+ if (ref < EnumeratedTypes.size()) {
+ Ty.oldTy = EnumeratedTypes[ref].oldTy;
+ } else {
+ std::string msg("Can't resolve type: ");
+ msg += *Ty.newTy;
+ yyerror(msg.c_str());
}
- SrcTy.destroy();
- SrcTy.newTy = new std::string("ulong");
- SrcTy.oldTy = ULongTy;
}
- return Result;
+ // otherwise its already resolved.
}
-const char* getCastOpcode(std::string& Source, TypeInfo& SrcTy,
- TypeInfo&DstTy) {
+static const char* getCastOpcode(
+ std::string& Source, const TypeInfo& SrcTy, const TypeInfo& DstTy)
+{
unsigned SrcBits = SrcTy.getBitWidth();
unsigned DstBits = DstTy.getBitWidth();
const char* opcode = "bitcast";
opcode = "bitcast"; // ptr -> ptr
} else if (SrcTy.isIntegral()) {
opcode = "inttoptr"; // int -> ptr
- } else if (SrcTy.isFloatingPoint()) { // float/double -> ptr
- // Cast to int first
- *O << " %upgrade_cast = fptoui " << Source << " to ulong\n";
- opcode = "inttoptr";
- Source = "ulong %upgrade_cast";
} else {
- assert(!"Casting pointer to other than pointer or int");
+ assert(!"Casting invalid type to pointer");
}
} else {
assert(!"Casting to type that is not first-class");
return opcode;
}
+static std::string getCastUpgrade(
+ const std::string& Src, TypeInfo& SrcTy, TypeInfo& DstTy, bool isConst)
+{
+ std::string Result;
+ std::string Source = Src;
+ if (SrcTy.isFloatingPoint() && DstTy.isPointer()) {
+ // fp -> ptr cast is no longer supported but we must upgrade this
+ // by doing a double cast: fp -> int -> ptr
+ if (isConst)
+ Source = "ulong fptoui(" + Source + " to ulong)";
+ else {
+ *O << " %cast_upgrade = fptoui " + Source + " to ulong\n";
+ Source = "ulong %cast_upgrade";
+ }
+ // Update the SrcTy for the getCastOpcode call below
+ SrcTy.destroy();
+ SrcTy.newTy = new std::string("ulong");
+ SrcTy.oldTy = ULongTy;
+ } else if (DstTy.oldTy == BoolTy) {
+ // cast ptr %x to bool was previously defined as setne ptr %x, null
+ // The ptrtoint semantic is to truncate, not compare so we must retain
+ // the original intent by replace the cast with a setne
+ const char* comparator = SrcTy.isPointer() ? ", null" :
+ (SrcTy.isFloatingPoint() ? ", 0.0" : ", 0");
+ if (isConst)
+ Result = "setne (" + Source + comparator + ")";
+ else
+ Result = "setne " + Source + comparator;
+ return Result; // skip cast processing below
+ }
+ ResolveType(SrcTy);
+ ResolveType(DstTy);
+ std::string Opcode(getCastOpcode(Source, SrcTy, DstTy));
+ if (isConst)
+ Result += Opcode + "( " + Source + " to " + *DstTy.newTy + ")";
+ else
+ Result += Opcode + " " + Source + " to " + *DstTy.newTy;
+ return Result;
+}
+
%}
%file-prefix="UpgradeParser"
}
%token <Type> VOID BOOL SBYTE UBYTE SHORT USHORT INT UINT LONG ULONG
-%token <Type> FLOAT DOUBLE LABEL OPAQUE
-%token <String> ESINT64VAL EUINT64VAL SINTVAL UINTVAL FPVAL
+%token <Type> FLOAT DOUBLE LABEL
+%token <String> OPAQUE ESINT64VAL EUINT64VAL SINTVAL UINTVAL FPVAL
%token <String> NULL_TOK UNDEF ZEROINITIALIZER TRUETOK FALSETOK
%token <String> TYPE VAR_ID LABELSTR STRINGCONSTANT
%token <String> IMPLEMENTATION BEGINTOK ENDTOK
// OptAssign - Value producing statements have an optional assignment component
OptAssign : Name '=' {
- *$1 += " = ";
$$ = $1;
}
| /*empty*/ {
//
PrimType : BOOL | SBYTE | UBYTE | SHORT | USHORT | INT | UINT ;
PrimType : LONG | ULONG | FLOAT | DOUBLE | LABEL;
-UpRTypes : OPAQUE | PrimType
- | SymbolicValueRef {
- $$.newTy = $1; $$.oldTy = OpaqueTy;
- };
+UpRTypes
+ : OPAQUE {
+ $$.newTy = $1;
+ $$.oldTy = OpaqueTy;
+ }
+ | SymbolicValueRef {
+ $$.newTy = $1;
+ $$.oldTy = UnresolvedTy;
+ }
+ | PrimType
+ ;
// Include derived types in the Types production.
//
UpRTypes : '\\' EUINT64VAL { // Type UpReference
$2->insert(0, "\\");
$$.newTy = $2;
- $$.oldTy = OpaqueTy;
+ $$.oldTy = NumericTy;
}
| UpRTypesV '(' ArgTypeListI ')' { // Function derived type?
*$1.newTy += "( " + *$3 + " )";
ConstExpr: CastOps '(' ConstVal TO Types ')' {
- // We must infer the cast opcode from the types of the operands.
- const char *opcode = $1->c_str();
std::string source = *$3.cnst;
+ TypeInfo DstTy = $5;
+ ResolveType(DstTy);
if (*$1 == "cast") {
- std::string upgrade = getCastUpgrade(source, $3.type, $5, true);
- opcode = getCastOpcode(source, $3.type, $5);
- if (!upgrade.empty())
- source = upgrade;
+ // Call getCastUpgrade to upgrade the old cast
+ $$ = new std::string(getCastUpgrade(source, $3.type, $5, true));
+ } else {
+ // Nothing to upgrade, just create the cast constant expr
+ $$ = new std::string(*$1);
+ *$$ += "( " + source + " to " + *$5.newTy + ")";
}
- $$ = new std::string(opcode);
- *$$ += "( " + source + " " + *$4 + " " + *$5.newTy + ")";
delete $1; $3.destroy(); delete $4; $5.destroy();
}
| GETELEMENTPTR '(' ConstVal IndexList ')' {
*O << "implementation\n";
$$ = 0;
}
- | ConstPool;
+ | ConstPool { $$ = 0; }
// ConstPool - Constants with optional names assigned to them.
ConstPool : ConstPool OptAssign TYPE TypesV {
- *O << *$2 << " " << *$3 << " " << *$4.newTy << "\n";
- // delete $2; delete $3; $4.destroy();
+ EnumeratedTypes.push_back($4);
+ if (!$2->empty()) {
+ NamedTypes[*$2].newTy = new std::string(*$4.newTy);
+ NamedTypes[*$2].oldTy = $4.oldTy;
+ *O << *$2 << " = ";
+ }
+ *O << "type " << *$4.newTy << "\n";
+ delete $2; delete $3; $4.destroy();
$$ = 0;
}
| ConstPool FunctionProto { // Function prototypes can be in const pool
$$ = 0;
}
| ConstPool OptAssign OptLinkage GlobalType ConstVal GlobalVarAttributes {
- *O << *$2 << " " << *$3 << " " << *$4 << " " << *$5.cnst << " "
- << *$6 << "\n";
+ if (!$2->empty())
+ *O << *$2 << " = ";
+ *O << *$3 << " " << *$4 << " " << *$5.cnst << " " << *$6 << "\n";
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
$$ = 0;
}
| ConstPool OptAssign EXTERNAL GlobalType Types GlobalVarAttributes {
- *O << *$2 << " " << *$3 << " " << *$4 << " " << *$5.newTy
- << " " << *$6 << "\n";
+ if (!$2->empty())
+ *O << *$2 << " = ";
+ *O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
$$ = 0;
}
| ConstPool OptAssign DLLIMPORT GlobalType Types GlobalVarAttributes {
- *O << *$2 << " " << *$3 << " " << *$4 << " " << *$5.newTy
- << " " << *$6 << "\n";
+ if (!$2->empty())
+ *O << *$2 << " = ";
+ *O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
$$ = 0;
}
| ConstPool OptAssign EXTERN_WEAK GlobalType Types GlobalVarAttributes {
- *O << *$2 << " " << *$3 << " " << *$4 << " " << *$5.newTy
- << " " << *$6 << "\n";
+ if (!$2->empty())
+ *O << *$2 << " = ";
+ *O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n";
delete $2; delete $3; delete $4; $5.destroy(); delete $6;
$$ = 0;
}
TO LABEL ValueRef UNWIND LABEL ValueRef {
*O << " ";
if (!$1->empty())
- *O << *$1;
+ *O << *$1 << " = ";
*O << *$2 << " " << *$3 << " " << *$4.newTy << " " << *$5 << " ("
<< *$7 << ") " << *$9 << " " << *$10.newTy << " " << *$11 << " "
<< *$12 << " " << *$13.newTy << " " << *$14 << "\n";
Inst
: OptAssign InstVal {
+ if (!$1->empty())
+ *$1 += " = ";
*$1 += *$2;
delete $2;
$$ = $1;
delete $1; $2.destroy(); $4.destroy();
}
| CastOps ResolvedVal TO Types {
- const char *opcode = $1->c_str();
std::string source = *$2.val;
+ TypeInfo SrcTy = $2.type;
+ TypeInfo DstTy = $4;
+ ResolveType(DstTy);
+ $$ = new std::string();
if (*$1 == "cast") {
- std::string upgrade = getCastUpgrade(source, $2.type, $4, false);
- if (!upgrade.empty())
- *O << " " << upgrade << "\n";
- opcode = getCastOpcode(source, $2.type, $4);
+ *$$ += getCastUpgrade(source, SrcTy, DstTy, false);
+ } else {
+ *$$ += *$1 + " " + source + " to " + *DstTy.newTy;
}
- $$ = new std::string(opcode);
- *$$ += " " + source + " " + *$3 + " " + *$4.newTy;
delete $1; $2.destroy();
delete $3; $4.destroy();
}
$$ = $1;
}
| GETELEMENTPTR Types ValueRef IndexList {
- *$1 += *$2.newTy + " " + *$3 + " " + *$4;
+ *$1 += " " + *$2.newTy + " " + *$3 + " " + *$4;
$2.destroy(); delete $3; delete $4;
$$ = $1;
};