From: Reid Spencer Date: Tue, 2 Jan 2007 05:45:11 +0000 (+0000) Subject: Regenerate. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=52402b0bef411e4c58527aba943137d9953c6e46;p=oota-llvm.git Regenerate. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32811 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/llvm-upgrade/UpgradeLexer.cpp b/tools/llvm-upgrade/UpgradeLexer.cpp index 3894057d564..dffe1002f98 100644 --- a/tools/llvm-upgrade/UpgradeLexer.cpp +++ b/tools/llvm-upgrade/UpgradeLexer.cpp @@ -962,9 +962,7 @@ char *yytext; return sym #define RET_TY(sym,OldTY,NewTY,sign) \ - Upgradelval.Type.newTy = new std::string(NewTY); \ - Upgradelval.Type.oldTy = OldTY; \ - Upgradelval.Type.elemTy = VoidTy; \ + Upgradelval.Type = new TypeInfo(NewTY, OldTY); \ return sym #define YY_NEVER_INTERACTIVE 1 @@ -984,7 +982,7 @@ char *yytext; /* HexIntConstant - Hexadecimal constant generated by the CFE to avoid forcing * it to deal with 64 bit numbers. */ -#line 988 "UpgradeLexer.cpp" +#line 986 "UpgradeLexer.cpp" /* Macros after this point can all be overridden by user definitions in * section 1. @@ -1135,10 +1133,10 @@ YY_DECL register char *yy_cp = NULL, *yy_bp = NULL; register int yy_act; -#line 99 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 97 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" -#line 1142 "UpgradeLexer.cpp" +#line 1140 "UpgradeLexer.cpp" if ( yy_init ) { @@ -1231,776 +1229,776 @@ do_action: /* This label is used only to access EOF actions. */ { /* beginning of action switch */ case 1: YY_RULE_SETUP -#line 101 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 99 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { /* Ignore comments for now */ } YY_BREAK case 2: YY_RULE_SETUP -#line 103 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 101 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( BEGINTOK); } YY_BREAK case 3: YY_RULE_SETUP -#line 104 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 102 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ENDTOK); } YY_BREAK case 4: YY_RULE_SETUP -#line 105 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 103 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( TRUETOK); } YY_BREAK case 5: YY_RULE_SETUP -#line 106 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 104 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FALSETOK); } YY_BREAK case 6: YY_RULE_SETUP -#line 107 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 105 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( DECLARE); } YY_BREAK case 7: YY_RULE_SETUP -#line 108 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 106 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( GLOBAL); } YY_BREAK case 8: YY_RULE_SETUP -#line 109 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 107 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( CONSTANT); } YY_BREAK case 9: YY_RULE_SETUP -#line 110 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 108 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( INTERNAL); } YY_BREAK case 10: YY_RULE_SETUP -#line 111 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 109 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( LINKONCE); } YY_BREAK case 11: YY_RULE_SETUP -#line 112 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 110 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( WEAK); } YY_BREAK case 12: YY_RULE_SETUP -#line 113 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 111 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( APPENDING); } YY_BREAK case 13: YY_RULE_SETUP -#line 114 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 112 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( DLLIMPORT); } YY_BREAK case 14: YY_RULE_SETUP -#line 115 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 113 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( DLLEXPORT); } YY_BREAK case 15: YY_RULE_SETUP -#line 116 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 114 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( EXTERN_WEAK); } YY_BREAK case 16: YY_RULE_SETUP -#line 117 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 115 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( EXTERNAL); } YY_BREAK case 17: YY_RULE_SETUP -#line 118 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 116 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( UNINITIALIZED); } // alias for external YY_BREAK case 18: YY_RULE_SETUP -#line 119 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 117 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( IMPLEMENTATION); } YY_BREAK case 19: YY_RULE_SETUP -#line 120 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 118 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ZEROINITIALIZER); } YY_BREAK case 20: YY_RULE_SETUP -#line 121 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 119 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( DOTDOTDOT); } YY_BREAK case 21: YY_RULE_SETUP -#line 122 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 120 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( UNDEF); } YY_BREAK case 22: YY_RULE_SETUP -#line 123 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 121 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( NULL_TOK); } YY_BREAK case 23: YY_RULE_SETUP -#line 124 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 122 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( TO); } YY_BREAK case 24: YY_RULE_SETUP -#line 125 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 123 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( TAIL); } YY_BREAK case 25: YY_RULE_SETUP -#line 126 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 124 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( TARGET); } YY_BREAK case 26: YY_RULE_SETUP -#line 127 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 125 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( TRIPLE); } YY_BREAK case 27: YY_RULE_SETUP -#line 128 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 126 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( DEPLIBS); } YY_BREAK case 28: YY_RULE_SETUP -#line 129 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 127 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ENDIAN); } YY_BREAK case 29: YY_RULE_SETUP -#line 130 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 128 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( POINTERSIZE); } YY_BREAK case 30: YY_RULE_SETUP -#line 131 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 129 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( DATALAYOUT); } YY_BREAK case 31: YY_RULE_SETUP -#line 132 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 130 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( LITTLE); } YY_BREAK case 32: YY_RULE_SETUP -#line 133 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 131 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( BIG); } YY_BREAK case 33: YY_RULE_SETUP -#line 134 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 132 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( VOLATILE); } YY_BREAK case 34: YY_RULE_SETUP -#line 135 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 133 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ALIGN); } YY_BREAK case 35: YY_RULE_SETUP -#line 136 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 134 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SECTION); } YY_BREAK case 36: YY_RULE_SETUP -#line 137 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 135 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( MODULE); } YY_BREAK case 37: YY_RULE_SETUP -#line 138 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 136 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ASM_TOK); } YY_BREAK case 38: YY_RULE_SETUP -#line 139 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 137 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SIDEEFFECT); } YY_BREAK case 39: YY_RULE_SETUP -#line 141 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 139 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( CC_TOK); } YY_BREAK case 40: YY_RULE_SETUP -#line 142 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 140 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( CCC_TOK); } YY_BREAK case 41: YY_RULE_SETUP -#line 143 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 141 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( CSRETCC_TOK); } YY_BREAK case 42: YY_RULE_SETUP -#line 144 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 142 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FASTCC_TOK); } YY_BREAK case 43: YY_RULE_SETUP -#line 145 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 143 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( COLDCC_TOK); } YY_BREAK case 44: YY_RULE_SETUP -#line 146 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 144 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( X86_STDCALLCC_TOK); } YY_BREAK case 45: YY_RULE_SETUP -#line 147 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 145 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( X86_FASTCALLCC_TOK); } YY_BREAK case 46: YY_RULE_SETUP -#line 149 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 147 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(VOID,VoidTy,"void",false); } YY_BREAK case 47: YY_RULE_SETUP -#line 150 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 148 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(BOOL,BoolTy,"bool",false); } YY_BREAK case 48: YY_RULE_SETUP -#line 151 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 149 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(SBYTE,SByteTy,"i8",true); } YY_BREAK case 49: YY_RULE_SETUP -#line 152 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 150 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(UBYTE,UByteTy,"i8",false); } YY_BREAK case 50: YY_RULE_SETUP -#line 153 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 151 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(SHORT,ShortTy,"i16",true); } YY_BREAK case 51: YY_RULE_SETUP -#line 154 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 152 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(USHORT,UShortTy,"i16",false); } YY_BREAK case 52: YY_RULE_SETUP -#line 155 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 153 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(INT,IntTy,"i32",true); } YY_BREAK case 53: YY_RULE_SETUP -#line 156 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 154 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(UINT,UIntTy,"i32",false); } YY_BREAK case 54: YY_RULE_SETUP -#line 157 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 155 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(LONG,LongTy,"i64",true); } YY_BREAK case 55: YY_RULE_SETUP -#line 158 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 156 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(ULONG,ULongTy,"i64",false); } YY_BREAK case 56: YY_RULE_SETUP -#line 159 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 157 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(UBYTE,UByteTy,"i8",false); } YY_BREAK case 57: YY_RULE_SETUP -#line 160 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 158 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(USHORT,UShortTy,"i16",false); } YY_BREAK case 58: YY_RULE_SETUP -#line 161 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 159 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(UINT,UIntTy,"i32",false); } YY_BREAK case 59: YY_RULE_SETUP -#line 162 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 160 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(ULONG,ULongTy,"i64",false); } YY_BREAK case 60: YY_RULE_SETUP -#line 163 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 161 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(FLOAT,FloatTy,"float",false); } YY_BREAK case 61: YY_RULE_SETUP -#line 164 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 162 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(DOUBLE,DoubleTy,"double",false); } YY_BREAK case 62: YY_RULE_SETUP -#line 165 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 163 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(LABEL,LabelTy,"label",false); } YY_BREAK case 63: YY_RULE_SETUP -#line 166 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 164 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OPAQUE); } YY_BREAK case 64: YY_RULE_SETUP -#line 167 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 165 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TYPE); } YY_BREAK case 65: YY_RULE_SETUP -#line 169 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 167 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ADD); } YY_BREAK case 66: YY_RULE_SETUP -#line 170 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 168 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SUB); } YY_BREAK case 67: YY_RULE_SETUP -#line 171 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 169 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( MUL); } YY_BREAK case 68: YY_RULE_SETUP -#line 172 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 170 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( DIV); } YY_BREAK case 69: YY_RULE_SETUP -#line 173 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 171 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( UDIV); } YY_BREAK case 70: YY_RULE_SETUP -#line 174 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 172 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SDIV); } YY_BREAK case 71: YY_RULE_SETUP -#line 175 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 173 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FDIV); } YY_BREAK case 72: YY_RULE_SETUP -#line 176 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 174 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( REM); } YY_BREAK case 73: YY_RULE_SETUP -#line 177 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 175 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( UREM); } YY_BREAK case 74: YY_RULE_SETUP -#line 178 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 176 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SREM); } YY_BREAK case 75: YY_RULE_SETUP -#line 179 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 177 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FREM); } YY_BREAK case 76: YY_RULE_SETUP -#line 180 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 178 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( AND); } YY_BREAK case 77: YY_RULE_SETUP -#line 181 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 179 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( OR); } YY_BREAK case 78: YY_RULE_SETUP -#line 182 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 180 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( XOR); } YY_BREAK case 79: YY_RULE_SETUP -#line 183 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 181 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SETNE); } YY_BREAK case 80: YY_RULE_SETUP -#line 184 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 182 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SETEQ); } YY_BREAK case 81: YY_RULE_SETUP -#line 185 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 183 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SETLT); } YY_BREAK case 82: YY_RULE_SETUP -#line 186 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 184 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SETGT); } YY_BREAK case 83: YY_RULE_SETUP -#line 187 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 185 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SETLE); } YY_BREAK case 84: YY_RULE_SETUP -#line 188 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 186 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SETGE); } YY_BREAK case 85: YY_RULE_SETUP -#line 189 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 187 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(ICMP); } YY_BREAK case 86: YY_RULE_SETUP -#line 190 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 188 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(FCMP); } YY_BREAK case 87: YY_RULE_SETUP -#line 191 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 189 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(EQ); } YY_BREAK case 88: YY_RULE_SETUP -#line 192 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 190 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(NE); } YY_BREAK case 89: YY_RULE_SETUP -#line 193 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 191 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(SLT); } YY_BREAK case 90: YY_RULE_SETUP -#line 194 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 192 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(SGT); } YY_BREAK case 91: YY_RULE_SETUP -#line 195 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 193 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(SLE); } YY_BREAK case 92: YY_RULE_SETUP -#line 196 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 194 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(SGE); } YY_BREAK case 93: YY_RULE_SETUP -#line 197 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 195 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OEQ); } YY_BREAK case 94: YY_RULE_SETUP -#line 198 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 196 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(ONE); } YY_BREAK case 95: YY_RULE_SETUP -#line 199 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 197 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OLT); } YY_BREAK case 96: YY_RULE_SETUP -#line 200 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 198 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OGT); } YY_BREAK case 97: YY_RULE_SETUP -#line 201 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 199 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OLE); } YY_BREAK case 98: YY_RULE_SETUP -#line 202 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 200 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OGE); } YY_BREAK case 99: YY_RULE_SETUP -#line 203 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 201 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(ORD); } YY_BREAK case 100: YY_RULE_SETUP -#line 204 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 202 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(UNO); } YY_BREAK case 101: YY_RULE_SETUP -#line 205 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 203 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(UEQ); } YY_BREAK case 102: YY_RULE_SETUP -#line 206 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 204 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(UNE); } YY_BREAK case 103: YY_RULE_SETUP -#line 207 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 205 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(ULT); } YY_BREAK case 104: YY_RULE_SETUP -#line 208 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 206 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(UGT); } YY_BREAK case 105: YY_RULE_SETUP -#line 209 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 207 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(ULE); } YY_BREAK case 106: YY_RULE_SETUP -#line 210 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 208 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(UGE); } YY_BREAK case 107: YY_RULE_SETUP -#line 212 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 210 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( PHI_TOK); } YY_BREAK case 108: YY_RULE_SETUP -#line 213 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 211 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( CALL); } YY_BREAK case 109: YY_RULE_SETUP -#line 214 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 212 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( CAST); } YY_BREAK case 110: YY_RULE_SETUP -#line 215 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 213 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( TRUNC); } YY_BREAK case 111: YY_RULE_SETUP -#line 216 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 214 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ZEXT); } YY_BREAK case 112: YY_RULE_SETUP -#line 217 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 215 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SEXT); } YY_BREAK case 113: YY_RULE_SETUP -#line 218 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 216 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FPTRUNC); } YY_BREAK case 114: YY_RULE_SETUP -#line 219 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 217 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FPEXT); } YY_BREAK case 115: YY_RULE_SETUP -#line 220 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 218 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FPTOUI); } YY_BREAK case 116: YY_RULE_SETUP -#line 221 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 219 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FPTOSI); } YY_BREAK case 117: YY_RULE_SETUP -#line 222 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 220 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( UITOFP); } YY_BREAK case 118: YY_RULE_SETUP -#line 223 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 221 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SITOFP); } YY_BREAK case 119: YY_RULE_SETUP -#line 224 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 222 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( PTRTOINT); } YY_BREAK case 120: YY_RULE_SETUP -#line 225 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 223 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( INTTOPTR); } YY_BREAK case 121: YY_RULE_SETUP -#line 226 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 224 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( BITCAST); } YY_BREAK case 122: YY_RULE_SETUP -#line 227 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 225 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SELECT); } YY_BREAK case 123: YY_RULE_SETUP -#line 228 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 226 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SHL); } YY_BREAK case 124: YY_RULE_SETUP -#line 229 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 227 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SHR); } YY_BREAK case 125: YY_RULE_SETUP -#line 230 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 228 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ASHR); } YY_BREAK case 126: YY_RULE_SETUP -#line 231 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 229 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( LSHR); } YY_BREAK case 127: YY_RULE_SETUP -#line 232 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 230 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( VAARG); } YY_BREAK case 128: YY_RULE_SETUP -#line 233 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 231 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( RET); } YY_BREAK case 129: YY_RULE_SETUP -#line 234 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 232 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( BR); } YY_BREAK case 130: YY_RULE_SETUP -#line 235 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 233 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SWITCH); } YY_BREAK case 131: YY_RULE_SETUP -#line 236 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 234 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( INVOKE); } YY_BREAK case 132: YY_RULE_SETUP -#line 237 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 235 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( UNWIND); } YY_BREAK case 133: YY_RULE_SETUP -#line 238 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 236 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( EXCEPT); } // alias for unwind YY_BREAK case 134: YY_RULE_SETUP -#line 239 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 237 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( UNREACHABLE); } YY_BREAK case 135: YY_RULE_SETUP -#line 241 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 239 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( MALLOC); } YY_BREAK case 136: YY_RULE_SETUP -#line 242 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 240 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ALLOCA); } YY_BREAK case 137: YY_RULE_SETUP -#line 243 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 241 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FREE); } YY_BREAK case 138: YY_RULE_SETUP -#line 244 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 242 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( LOAD); } YY_BREAK case 139: YY_RULE_SETUP -#line 245 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 243 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( STORE); } YY_BREAK case 140: YY_RULE_SETUP -#line 246 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 244 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( GETELEMENTPTR); } YY_BREAK case 141: YY_RULE_SETUP -#line 248 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 246 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( EXTRACTELEMENT); } YY_BREAK case 142: YY_RULE_SETUP -#line 249 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 247 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( INSERTELEMENT); } YY_BREAK case 143: YY_RULE_SETUP -#line 250 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 248 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SHUFFLEVECTOR); } YY_BREAK case 144: YY_RULE_SETUP -#line 253 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 251 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( VAR_ID); } YY_BREAK case 145: YY_RULE_SETUP -#line 254 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 252 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( LABELSTR); } YY_BREAK case 146: YY_RULE_SETUP -#line 255 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 253 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( LABELSTR); } YY_BREAK case 147: YY_RULE_SETUP -#line 256 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 254 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( STRINGCONSTANT ); } YY_BREAK case 148: YY_RULE_SETUP -#line 257 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 255 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( EUINT64VAL ); } YY_BREAK case 149: YY_RULE_SETUP -#line 258 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 256 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ESINT64VAL ); } YY_BREAK case 150: YY_RULE_SETUP -#line 259 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 257 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( yytext[0] == 's' ? ESINT64VAL : EUINT64VAL ); } YY_BREAK case 151: YY_RULE_SETUP -#line 260 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 258 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( UINTVAL); } YY_BREAK case 152: YY_RULE_SETUP -#line 261 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 259 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SINTVAL); } YY_BREAK case 153: YY_RULE_SETUP -#line 262 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 260 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FPVAL); } YY_BREAK case 154: YY_RULE_SETUP -#line 263 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 261 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FPVAL); } YY_BREAK case YY_STATE_EOF(INITIAL): -#line 264 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 262 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { /* Make sure to free the internal buffers for flex when we are * done reading our input! @@ -2011,20 +2009,20 @@ case YY_STATE_EOF(INITIAL): YY_BREAK case 155: YY_RULE_SETUP -#line 272 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 270 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { /* Ignore whitespace */ } YY_BREAK case 156: YY_RULE_SETUP -#line 273 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 271 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return yytext[0]; } YY_BREAK case 157: YY_RULE_SETUP -#line 275 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 273 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK -#line 2028 "UpgradeLexer.cpp" +#line 2026 "UpgradeLexer.cpp" case YY_END_OF_BUFFER: { @@ -2902,5 +2900,5 @@ int main() return 0; } #endif -#line 275 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 273 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" diff --git a/tools/llvm-upgrade/UpgradeLexer.cpp.cvs b/tools/llvm-upgrade/UpgradeLexer.cpp.cvs index 3894057d564..dffe1002f98 100644 --- a/tools/llvm-upgrade/UpgradeLexer.cpp.cvs +++ b/tools/llvm-upgrade/UpgradeLexer.cpp.cvs @@ -962,9 +962,7 @@ char *yytext; return sym #define RET_TY(sym,OldTY,NewTY,sign) \ - Upgradelval.Type.newTy = new std::string(NewTY); \ - Upgradelval.Type.oldTy = OldTY; \ - Upgradelval.Type.elemTy = VoidTy; \ + Upgradelval.Type = new TypeInfo(NewTY, OldTY); \ return sym #define YY_NEVER_INTERACTIVE 1 @@ -984,7 +982,7 @@ char *yytext; /* HexIntConstant - Hexadecimal constant generated by the CFE to avoid forcing * it to deal with 64 bit numbers. */ -#line 988 "UpgradeLexer.cpp" +#line 986 "UpgradeLexer.cpp" /* Macros after this point can all be overridden by user definitions in * section 1. @@ -1135,10 +1133,10 @@ YY_DECL register char *yy_cp = NULL, *yy_bp = NULL; register int yy_act; -#line 99 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 97 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" -#line 1142 "UpgradeLexer.cpp" +#line 1140 "UpgradeLexer.cpp" if ( yy_init ) { @@ -1231,776 +1229,776 @@ do_action: /* This label is used only to access EOF actions. */ { /* beginning of action switch */ case 1: YY_RULE_SETUP -#line 101 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 99 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { /* Ignore comments for now */ } YY_BREAK case 2: YY_RULE_SETUP -#line 103 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 101 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( BEGINTOK); } YY_BREAK case 3: YY_RULE_SETUP -#line 104 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 102 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ENDTOK); } YY_BREAK case 4: YY_RULE_SETUP -#line 105 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 103 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( TRUETOK); } YY_BREAK case 5: YY_RULE_SETUP -#line 106 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 104 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FALSETOK); } YY_BREAK case 6: YY_RULE_SETUP -#line 107 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 105 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( DECLARE); } YY_BREAK case 7: YY_RULE_SETUP -#line 108 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 106 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( GLOBAL); } YY_BREAK case 8: YY_RULE_SETUP -#line 109 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 107 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( CONSTANT); } YY_BREAK case 9: YY_RULE_SETUP -#line 110 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 108 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( INTERNAL); } YY_BREAK case 10: YY_RULE_SETUP -#line 111 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 109 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( LINKONCE); } YY_BREAK case 11: YY_RULE_SETUP -#line 112 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 110 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( WEAK); } YY_BREAK case 12: YY_RULE_SETUP -#line 113 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 111 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( APPENDING); } YY_BREAK case 13: YY_RULE_SETUP -#line 114 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 112 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( DLLIMPORT); } YY_BREAK case 14: YY_RULE_SETUP -#line 115 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 113 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( DLLEXPORT); } YY_BREAK case 15: YY_RULE_SETUP -#line 116 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 114 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( EXTERN_WEAK); } YY_BREAK case 16: YY_RULE_SETUP -#line 117 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 115 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( EXTERNAL); } YY_BREAK case 17: YY_RULE_SETUP -#line 118 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 116 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( UNINITIALIZED); } // alias for external YY_BREAK case 18: YY_RULE_SETUP -#line 119 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 117 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( IMPLEMENTATION); } YY_BREAK case 19: YY_RULE_SETUP -#line 120 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 118 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ZEROINITIALIZER); } YY_BREAK case 20: YY_RULE_SETUP -#line 121 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 119 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( DOTDOTDOT); } YY_BREAK case 21: YY_RULE_SETUP -#line 122 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 120 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( UNDEF); } YY_BREAK case 22: YY_RULE_SETUP -#line 123 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 121 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( NULL_TOK); } YY_BREAK case 23: YY_RULE_SETUP -#line 124 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 122 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( TO); } YY_BREAK case 24: YY_RULE_SETUP -#line 125 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 123 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( TAIL); } YY_BREAK case 25: YY_RULE_SETUP -#line 126 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 124 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( TARGET); } YY_BREAK case 26: YY_RULE_SETUP -#line 127 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 125 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( TRIPLE); } YY_BREAK case 27: YY_RULE_SETUP -#line 128 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 126 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( DEPLIBS); } YY_BREAK case 28: YY_RULE_SETUP -#line 129 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 127 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ENDIAN); } YY_BREAK case 29: YY_RULE_SETUP -#line 130 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 128 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( POINTERSIZE); } YY_BREAK case 30: YY_RULE_SETUP -#line 131 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 129 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( DATALAYOUT); } YY_BREAK case 31: YY_RULE_SETUP -#line 132 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 130 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( LITTLE); } YY_BREAK case 32: YY_RULE_SETUP -#line 133 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 131 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( BIG); } YY_BREAK case 33: YY_RULE_SETUP -#line 134 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 132 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( VOLATILE); } YY_BREAK case 34: YY_RULE_SETUP -#line 135 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 133 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ALIGN); } YY_BREAK case 35: YY_RULE_SETUP -#line 136 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 134 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SECTION); } YY_BREAK case 36: YY_RULE_SETUP -#line 137 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 135 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( MODULE); } YY_BREAK case 37: YY_RULE_SETUP -#line 138 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 136 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ASM_TOK); } YY_BREAK case 38: YY_RULE_SETUP -#line 139 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 137 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SIDEEFFECT); } YY_BREAK case 39: YY_RULE_SETUP -#line 141 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 139 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( CC_TOK); } YY_BREAK case 40: YY_RULE_SETUP -#line 142 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 140 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( CCC_TOK); } YY_BREAK case 41: YY_RULE_SETUP -#line 143 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 141 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( CSRETCC_TOK); } YY_BREAK case 42: YY_RULE_SETUP -#line 144 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 142 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FASTCC_TOK); } YY_BREAK case 43: YY_RULE_SETUP -#line 145 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 143 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( COLDCC_TOK); } YY_BREAK case 44: YY_RULE_SETUP -#line 146 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 144 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( X86_STDCALLCC_TOK); } YY_BREAK case 45: YY_RULE_SETUP -#line 147 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 145 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( X86_FASTCALLCC_TOK); } YY_BREAK case 46: YY_RULE_SETUP -#line 149 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 147 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(VOID,VoidTy,"void",false); } YY_BREAK case 47: YY_RULE_SETUP -#line 150 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 148 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(BOOL,BoolTy,"bool",false); } YY_BREAK case 48: YY_RULE_SETUP -#line 151 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 149 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(SBYTE,SByteTy,"i8",true); } YY_BREAK case 49: YY_RULE_SETUP -#line 152 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 150 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(UBYTE,UByteTy,"i8",false); } YY_BREAK case 50: YY_RULE_SETUP -#line 153 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 151 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(SHORT,ShortTy,"i16",true); } YY_BREAK case 51: YY_RULE_SETUP -#line 154 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 152 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(USHORT,UShortTy,"i16",false); } YY_BREAK case 52: YY_RULE_SETUP -#line 155 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 153 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(INT,IntTy,"i32",true); } YY_BREAK case 53: YY_RULE_SETUP -#line 156 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 154 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(UINT,UIntTy,"i32",false); } YY_BREAK case 54: YY_RULE_SETUP -#line 157 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 155 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(LONG,LongTy,"i64",true); } YY_BREAK case 55: YY_RULE_SETUP -#line 158 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 156 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(ULONG,ULongTy,"i64",false); } YY_BREAK case 56: YY_RULE_SETUP -#line 159 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 157 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(UBYTE,UByteTy,"i8",false); } YY_BREAK case 57: YY_RULE_SETUP -#line 160 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 158 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(USHORT,UShortTy,"i16",false); } YY_BREAK case 58: YY_RULE_SETUP -#line 161 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 159 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(UINT,UIntTy,"i32",false); } YY_BREAK case 59: YY_RULE_SETUP -#line 162 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 160 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(ULONG,ULongTy,"i64",false); } YY_BREAK case 60: YY_RULE_SETUP -#line 163 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 161 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(FLOAT,FloatTy,"float",false); } YY_BREAK case 61: YY_RULE_SETUP -#line 164 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 162 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(DOUBLE,DoubleTy,"double",false); } YY_BREAK case 62: YY_RULE_SETUP -#line 165 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 163 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(LABEL,LabelTy,"label",false); } YY_BREAK case 63: YY_RULE_SETUP -#line 166 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 164 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OPAQUE); } YY_BREAK case 64: YY_RULE_SETUP -#line 167 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 165 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TYPE); } YY_BREAK case 65: YY_RULE_SETUP -#line 169 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 167 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ADD); } YY_BREAK case 66: YY_RULE_SETUP -#line 170 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 168 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SUB); } YY_BREAK case 67: YY_RULE_SETUP -#line 171 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 169 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( MUL); } YY_BREAK case 68: YY_RULE_SETUP -#line 172 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 170 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( DIV); } YY_BREAK case 69: YY_RULE_SETUP -#line 173 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 171 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( UDIV); } YY_BREAK case 70: YY_RULE_SETUP -#line 174 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 172 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SDIV); } YY_BREAK case 71: YY_RULE_SETUP -#line 175 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 173 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FDIV); } YY_BREAK case 72: YY_RULE_SETUP -#line 176 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 174 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( REM); } YY_BREAK case 73: YY_RULE_SETUP -#line 177 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 175 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( UREM); } YY_BREAK case 74: YY_RULE_SETUP -#line 178 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 176 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SREM); } YY_BREAK case 75: YY_RULE_SETUP -#line 179 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 177 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FREM); } YY_BREAK case 76: YY_RULE_SETUP -#line 180 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 178 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( AND); } YY_BREAK case 77: YY_RULE_SETUP -#line 181 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 179 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( OR); } YY_BREAK case 78: YY_RULE_SETUP -#line 182 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 180 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( XOR); } YY_BREAK case 79: YY_RULE_SETUP -#line 183 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 181 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SETNE); } YY_BREAK case 80: YY_RULE_SETUP -#line 184 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 182 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SETEQ); } YY_BREAK case 81: YY_RULE_SETUP -#line 185 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 183 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SETLT); } YY_BREAK case 82: YY_RULE_SETUP -#line 186 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 184 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SETGT); } YY_BREAK case 83: YY_RULE_SETUP -#line 187 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 185 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SETLE); } YY_BREAK case 84: YY_RULE_SETUP -#line 188 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 186 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SETGE); } YY_BREAK case 85: YY_RULE_SETUP -#line 189 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 187 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(ICMP); } YY_BREAK case 86: YY_RULE_SETUP -#line 190 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 188 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(FCMP); } YY_BREAK case 87: YY_RULE_SETUP -#line 191 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 189 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(EQ); } YY_BREAK case 88: YY_RULE_SETUP -#line 192 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 190 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(NE); } YY_BREAK case 89: YY_RULE_SETUP -#line 193 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 191 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(SLT); } YY_BREAK case 90: YY_RULE_SETUP -#line 194 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 192 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(SGT); } YY_BREAK case 91: YY_RULE_SETUP -#line 195 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 193 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(SLE); } YY_BREAK case 92: YY_RULE_SETUP -#line 196 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 194 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(SGE); } YY_BREAK case 93: YY_RULE_SETUP -#line 197 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 195 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OEQ); } YY_BREAK case 94: YY_RULE_SETUP -#line 198 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 196 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(ONE); } YY_BREAK case 95: YY_RULE_SETUP -#line 199 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 197 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OLT); } YY_BREAK case 96: YY_RULE_SETUP -#line 200 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 198 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OGT); } YY_BREAK case 97: YY_RULE_SETUP -#line 201 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 199 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OLE); } YY_BREAK case 98: YY_RULE_SETUP -#line 202 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 200 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OGE); } YY_BREAK case 99: YY_RULE_SETUP -#line 203 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 201 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(ORD); } YY_BREAK case 100: YY_RULE_SETUP -#line 204 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 202 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(UNO); } YY_BREAK case 101: YY_RULE_SETUP -#line 205 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 203 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(UEQ); } YY_BREAK case 102: YY_RULE_SETUP -#line 206 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 204 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(UNE); } YY_BREAK case 103: YY_RULE_SETUP -#line 207 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 205 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(ULT); } YY_BREAK case 104: YY_RULE_SETUP -#line 208 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 206 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(UGT); } YY_BREAK case 105: YY_RULE_SETUP -#line 209 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 207 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(ULE); } YY_BREAK case 106: YY_RULE_SETUP -#line 210 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 208 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(UGE); } YY_BREAK case 107: YY_RULE_SETUP -#line 212 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 210 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( PHI_TOK); } YY_BREAK case 108: YY_RULE_SETUP -#line 213 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 211 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( CALL); } YY_BREAK case 109: YY_RULE_SETUP -#line 214 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 212 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( CAST); } YY_BREAK case 110: YY_RULE_SETUP -#line 215 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 213 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( TRUNC); } YY_BREAK case 111: YY_RULE_SETUP -#line 216 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 214 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ZEXT); } YY_BREAK case 112: YY_RULE_SETUP -#line 217 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 215 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SEXT); } YY_BREAK case 113: YY_RULE_SETUP -#line 218 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 216 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FPTRUNC); } YY_BREAK case 114: YY_RULE_SETUP -#line 219 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 217 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FPEXT); } YY_BREAK case 115: YY_RULE_SETUP -#line 220 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 218 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FPTOUI); } YY_BREAK case 116: YY_RULE_SETUP -#line 221 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 219 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FPTOSI); } YY_BREAK case 117: YY_RULE_SETUP -#line 222 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 220 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( UITOFP); } YY_BREAK case 118: YY_RULE_SETUP -#line 223 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 221 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SITOFP); } YY_BREAK case 119: YY_RULE_SETUP -#line 224 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 222 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( PTRTOINT); } YY_BREAK case 120: YY_RULE_SETUP -#line 225 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 223 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( INTTOPTR); } YY_BREAK case 121: YY_RULE_SETUP -#line 226 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 224 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( BITCAST); } YY_BREAK case 122: YY_RULE_SETUP -#line 227 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 225 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SELECT); } YY_BREAK case 123: YY_RULE_SETUP -#line 228 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 226 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SHL); } YY_BREAK case 124: YY_RULE_SETUP -#line 229 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 227 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SHR); } YY_BREAK case 125: YY_RULE_SETUP -#line 230 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 228 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ASHR); } YY_BREAK case 126: YY_RULE_SETUP -#line 231 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 229 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( LSHR); } YY_BREAK case 127: YY_RULE_SETUP -#line 232 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 230 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( VAARG); } YY_BREAK case 128: YY_RULE_SETUP -#line 233 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 231 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( RET); } YY_BREAK case 129: YY_RULE_SETUP -#line 234 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 232 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( BR); } YY_BREAK case 130: YY_RULE_SETUP -#line 235 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 233 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SWITCH); } YY_BREAK case 131: YY_RULE_SETUP -#line 236 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 234 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( INVOKE); } YY_BREAK case 132: YY_RULE_SETUP -#line 237 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 235 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( UNWIND); } YY_BREAK case 133: YY_RULE_SETUP -#line 238 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 236 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( EXCEPT); } // alias for unwind YY_BREAK case 134: YY_RULE_SETUP -#line 239 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 237 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( UNREACHABLE); } YY_BREAK case 135: YY_RULE_SETUP -#line 241 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 239 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( MALLOC); } YY_BREAK case 136: YY_RULE_SETUP -#line 242 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 240 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ALLOCA); } YY_BREAK case 137: YY_RULE_SETUP -#line 243 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 241 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FREE); } YY_BREAK case 138: YY_RULE_SETUP -#line 244 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 242 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( LOAD); } YY_BREAK case 139: YY_RULE_SETUP -#line 245 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 243 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( STORE); } YY_BREAK case 140: YY_RULE_SETUP -#line 246 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 244 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( GETELEMENTPTR); } YY_BREAK case 141: YY_RULE_SETUP -#line 248 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 246 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( EXTRACTELEMENT); } YY_BREAK case 142: YY_RULE_SETUP -#line 249 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 247 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( INSERTELEMENT); } YY_BREAK case 143: YY_RULE_SETUP -#line 250 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 248 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SHUFFLEVECTOR); } YY_BREAK case 144: YY_RULE_SETUP -#line 253 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 251 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( VAR_ID); } YY_BREAK case 145: YY_RULE_SETUP -#line 254 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 252 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( LABELSTR); } YY_BREAK case 146: YY_RULE_SETUP -#line 255 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 253 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( LABELSTR); } YY_BREAK case 147: YY_RULE_SETUP -#line 256 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 254 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( STRINGCONSTANT ); } YY_BREAK case 148: YY_RULE_SETUP -#line 257 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 255 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( EUINT64VAL ); } YY_BREAK case 149: YY_RULE_SETUP -#line 258 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 256 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( ESINT64VAL ); } YY_BREAK case 150: YY_RULE_SETUP -#line 259 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 257 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( yytext[0] == 's' ? ESINT64VAL : EUINT64VAL ); } YY_BREAK case 151: YY_RULE_SETUP -#line 260 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 258 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( UINTVAL); } YY_BREAK case 152: YY_RULE_SETUP -#line 261 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 259 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( SINTVAL); } YY_BREAK case 153: YY_RULE_SETUP -#line 262 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 260 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FPVAL); } YY_BREAK case 154: YY_RULE_SETUP -#line 263 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 261 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK( FPVAL); } YY_BREAK case YY_STATE_EOF(INITIAL): -#line 264 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 262 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { /* Make sure to free the internal buffers for flex when we are * done reading our input! @@ -2011,20 +2009,20 @@ case YY_STATE_EOF(INITIAL): YY_BREAK case 155: YY_RULE_SETUP -#line 272 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 270 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { /* Ignore whitespace */ } YY_BREAK case 156: YY_RULE_SETUP -#line 273 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 271 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" { return yytext[0]; } YY_BREAK case 157: YY_RULE_SETUP -#line 275 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 273 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK -#line 2028 "UpgradeLexer.cpp" +#line 2026 "UpgradeLexer.cpp" case YY_END_OF_BUFFER: { @@ -2902,5 +2900,5 @@ int main() return 0; } #endif -#line 275 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" +#line 273 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeLexer.l" diff --git a/tools/llvm-upgrade/UpgradeLexer.l.cvs b/tools/llvm-upgrade/UpgradeLexer.l.cvs index 8ffca760fde..d9e5d0ebe39 100644 --- a/tools/llvm-upgrade/UpgradeLexer.l.cvs +++ b/tools/llvm-upgrade/UpgradeLexer.l.cvs @@ -48,9 +48,7 @@ return sym #define RET_TY(sym,OldTY,NewTY,sign) \ - Upgradelval.Type.newTy = new std::string(NewTY); \ - Upgradelval.Type.oldTy = OldTY; \ - Upgradelval.Type.elemTy = VoidTy; \ + Upgradelval.Type = new TypeInfo(NewTY, OldTY); \ return sym #define YY_NEVER_INTERACTIVE 1 diff --git a/tools/llvm-upgrade/UpgradeParser.cpp b/tools/llvm-upgrade/UpgradeParser.cpp index 6e5edc3596d..e243074ae66 100644 --- a/tools/llvm-upgrade/UpgradeParser.cpp +++ b/tools/llvm-upgrade/UpgradeParser.cpp @@ -371,12 +371,10 @@ #line 14 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" #include "ParserInternals.h" -#include #include #include #include #include -#include #define YYERROR_VERBOSE 1 #define YYINCLUDED_STDLIB_H @@ -436,71 +434,72 @@ void UpgradeAssembly(const std::string &infile, std::istream& in, } } -static void ResolveType(TypeInfo& Ty) { - if (Ty.oldTy == UnresolvedTy) { - TypeMap::iterator I = NamedTypes.find(*Ty.newTy); +TypeInfo* ResolveType(TypeInfo*& Ty) { + if (Ty->isUnresolved()) { + TypeMap::iterator I = NamedTypes.find(Ty->getNewTy()); if (I != NamedTypes.end()) { - Ty.oldTy = I->second.oldTy; - Ty.elemTy = I->second.elemTy; + Ty = I->second.clone(); + return Ty; } else { - std::string msg("Can't resolve type: "); - msg += *Ty.newTy; + std::string msg("Cannot resolve type: "); + msg += Ty->getNewTy(); yyerror(msg.c_str()); } - } else if (Ty.oldTy == NumericTy) { - unsigned ref = atoi(&((Ty.newTy->c_str())[1])); // Skip the '\\' + } else if (Ty->isNumeric()) { + unsigned ref = atoi(&((Ty->getNewTy().c_str())[1])); // Skip the '\\' if (ref < EnumeratedTypes.size()) { - Ty.oldTy = EnumeratedTypes[ref].oldTy; - Ty.elemTy = EnumeratedTypes[ref].elemTy; + Ty = EnumeratedTypes[ref].clone(); + return Ty; } else { std::string msg("Can't resolve type: "); - msg += *Ty.newTy; + msg += Ty->getNewTy(); yyerror(msg.c_str()); } } // otherwise its already resolved. + return Ty; } static const char* getCastOpcode( - std::string& Source, const TypeInfo& SrcTy, const TypeInfo& DstTy) + std::string& Source, const TypeInfo* SrcTy, const TypeInfo* DstTy) { - unsigned SrcBits = SrcTy.getBitWidth(); - unsigned DstBits = DstTy.getBitWidth(); + unsigned SrcBits = SrcTy->getBitWidth(); + unsigned DstBits = DstTy->getBitWidth(); const char* opcode = "bitcast"; // Run through the possibilities ... - if (DstTy.isIntegral()) { // Casting to integral - if (SrcTy.isIntegral()) { // Casting from integral + if (DstTy->isIntegral()) { // Casting to integral + if (SrcTy->isIntegral()) { // Casting from integral if (DstBits < SrcBits) opcode = "trunc"; else if (DstBits > SrcBits) { // its an extension - if (SrcTy.isSigned()) + if (SrcTy->isSigned()) opcode ="sext"; // signed -> SEXT else opcode = "zext"; // unsigned -> ZEXT } else { opcode = "bitcast"; // Same size, No-op cast } - } else if (SrcTy.isFloatingPoint()) { // Casting from floating pt - if (DstTy.isSigned()) + } else if (SrcTy->isFloatingPoint()) { // Casting from floating pt + if (DstTy->isSigned()) opcode = "fptosi"; // FP -> sint else opcode = "fptoui"; // FP -> uint - } else if (SrcTy.isPacked()) { - assert(DstBits == SrcTy.getBitWidth() && + } else if (SrcTy->isPacked()) { + assert(DstBits == SrcTy->getBitWidth() && "Casting packed to integer of different width"); opcode = "bitcast"; // same size, no-op cast } else { - assert(SrcTy.isPointer() && + assert(SrcTy->isPointer() && "Casting from a value that is not first-class type"); opcode = "ptrtoint"; // ptr -> int } - } else if (DstTy.isFloatingPoint()) { // Casting to floating pt - if (SrcTy.isIntegral()) { // Casting from integral - if (SrcTy.isSigned()) + } else if (DstTy->isFloatingPoint()) { // Casting to floating pt + if (SrcTy->isIntegral()) { // Casting from integral + if (SrcTy->isSigned()) opcode = "sitofp"; // sint -> FP else opcode = "uitofp"; // uint -> FP - } else if (SrcTy.isFloatingPoint()) { // Casting from floating pt + } else if (SrcTy->isFloatingPoint()) { // Casting from floating pt if (DstBits < SrcBits) { opcode = "fptrunc"; // FP -> smaller FP } else if (DstBits > SrcBits) { @@ -508,27 +507,27 @@ static const char* getCastOpcode( } else { opcode ="bitcast"; // same size, no-op cast } - } else if (SrcTy.isPacked()) { - assert(DstBits == SrcTy.getBitWidth() && + } else if (SrcTy->isPacked()) { + assert(DstBits == SrcTy->getBitWidth() && "Casting packed to floating point of different width"); opcode = "bitcast"; // same size, no-op cast } else { assert(0 && "Casting pointer or non-first class to float"); } - } else if (DstTy.isPacked()) { - if (SrcTy.isPacked()) { - assert(DstTy.getBitWidth() == SrcTy.getBitWidth() && + } else if (DstTy->isPacked()) { + if (SrcTy->isPacked()) { + assert(DstTy->getBitWidth() == SrcTy->getBitWidth() && "Casting packed to packed of different widths"); opcode = "bitcast"; // packed -> packed - } else if (DstTy.getBitWidth() == SrcBits) { + } else if (DstTy->getBitWidth() == SrcBits) { opcode = "bitcast"; // float/int -> packed } else { assert(!"Illegal cast to packed (wrong type or size)"); } - } else if (DstTy.isPointer()) { - if (SrcTy.isPointer()) { + } else if (DstTy->isPointer()) { + if (SrcTy->isPointer()) { opcode = "bitcast"; // ptr -> ptr - } else if (SrcTy.isIntegral()) { + } else if (SrcTy->isIntegral()) { opcode = "inttoptr"; // int -> ptr } else { assert(!"Casting invalid type to pointer"); @@ -539,12 +538,12 @@ static const char* getCastOpcode( return opcode; } -static std::string getCastUpgrade( - const std::string& Src, TypeInfo& SrcTy, TypeInfo& DstTy, bool isConst) +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()) { + 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) @@ -555,16 +554,16 @@ static std::string getCastUpgrade( Source = "i64 %cast_upgrade" + llvm::utostr(unique); } // Update the SrcTy for the getCastOpcode call below - SrcTy.destroy(); - SrcTy.newTy = new std::string("i64"); - SrcTy.oldTy = ULongTy; - } else if (DstTy.oldTy == BoolTy && SrcTy.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"); - const char* compareOp = SrcTy.isFloatingPoint() ? "fcmp one " : "icmp ne "; + delete SrcTy; + SrcTy = new TypeInfo("i64", ULongTy); + } else if (DstTy->isBool()) { + // cast type %x to bool was previously defined as setne type %x, null + // The cast semantic is now to truncate, not compare so we must retain + // the original intent by replacing the cast with a setne + const char* comparator = SrcTy->isPointer() ? ", null" : + (SrcTy->isFloatingPoint() ? ", 0.0" : + (SrcTy->isBool() ? ", false" : ", 0")); + const char* compareOp = SrcTy->isFloatingPoint() ? "fcmp one " : "icmp ne "; if (isConst) { Result = "(" + Source + comparator + ")"; Result = compareOp + Result; @@ -576,33 +575,32 @@ static std::string getCastUpgrade( ResolveType(DstTy); std::string Opcode(getCastOpcode(Source, SrcTy, DstTy)); if (isConst) - Result += Opcode + "( " + Source + " to " + *DstTy.newTy + ")"; + Result += Opcode + "( " + Source + " to " + DstTy->getNewTy() + ")"; else - Result += Opcode + " " + Source + " to " + *DstTy.newTy; + Result += Opcode + " " + Source + " to " + DstTy->getNewTy(); return Result; } -const char* getDivRemOpcode(const std::string& opcode, const TypeInfo& TI) { +const char* getDivRemOpcode(const std::string& opcode, TypeInfo* TI) { const char* op = opcode.c_str(); - TypeInfo Ty = TI; - ResolveType(Ty); - if (Ty.isPacked()) - Ty.oldTy = Ty.getElementType(); + const TypeInfo* Ty = ResolveType(TI); + if (Ty->isPacked()) + Ty = Ty->getElementType(); if (opcode == "div") - if (Ty.isFloatingPoint()) + if (Ty->isFloatingPoint()) op = "fdiv"; - else if (Ty.isUnsigned()) + else if (Ty->isUnsigned()) op = "udiv"; - else if (Ty.isSigned()) + else if (Ty->isSigned()) op = "sdiv"; else yyerror("Invalid type for div instruction"); else if (opcode == "rem") - if (Ty.isFloatingPoint()) + if (Ty->isFloatingPoint()) op = "frem"; - else if (Ty.isUnsigned()) + else if (Ty->isUnsigned()) op = "urem"; - else if (Ty.isSigned()) + else if (Ty->isSigned()) op = "srem"; else yyerror("Invalid type for rem instruction"); @@ -610,7 +608,7 @@ const char* getDivRemOpcode(const std::string& opcode, const TypeInfo& TI) { } std::string -getCompareOp(const std::string& setcc, const TypeInfo& TI) { +getCompareOp(const std::string& setcc, const TypeInfo* TI) { assert(setcc.length() == 5); char cc1 = setcc[3]; char cc2 = setcc[4]; @@ -619,20 +617,20 @@ getCompareOp(const std::string& setcc, const TypeInfo& TI) { std::string result("xcmp xxx"); result[6] = cc1; result[7] = cc2; - if (TI.isFloatingPoint()) { + if (TI->isFloatingPoint()) { result[0] = 'f'; result[5] = 'o'; if (cc1 == 'n') result[5] = 'u'; // NE maps to unordered else result[5] = 'o'; // everything else maps to ordered - } else if (TI.isIntegral() || TI.isPointer()) { + } else if (TI->isIntegral() || TI->isPointer()) { result[0] = 'i'; if ((cc1 == 'e' && cc2 == 'q') || (cc1 == 'n' && cc2 == 'e')) result.erase(5,1); - else if (TI.isSigned()) + else if (TI->isSigned()) result[5] = 's'; - else if (TI.isUnsigned() || TI.isPointer() || TI.isBool()) + else if (TI->isUnsigned() || TI->isPointer() || TI->isBool()) result[5] = 'u'; else yyerror("Invalid integral type for setcc"); @@ -640,6 +638,76 @@ getCompareOp(const std::string& setcc, const TypeInfo& TI) { return result; } +static TypeInfo* getFunctionReturnType(TypeInfo* PFTy) { + ResolveType(PFTy); + if (PFTy->isPointer()) { + TypeInfo* ElemTy = PFTy->getElementType(); + ResolveType(ElemTy); + if (ElemTy->isFunction()) + return ElemTy->getResultType()->clone(); + } else if (PFTy->isFunction()) { + return PFTy->getResultType()->clone(); + } + return PFTy->clone(); +} + +static TypeInfo* getGEPIndexedType(TypeInfo* PTy, ValueList* idxs) { + ResolveType(PTy); + assert(PTy->isPointer() && "GEP Operand is not a pointer?"); + TypeInfo* Result = PTy->getElementType(); // just skip first index + ResolveType(Result); + for (unsigned i = 1; i < idxs->size(); ++i) { + if (Result->isComposite()) { + Result = Result->getIndexedType((*idxs)[i]); + ResolveType(Result); + } else + yyerror("Invalid type for index"); + } + return Result->getPointerType(); +} + +static std::string makeUniqueName(const std::string *Name, bool isSigned) { + const char *suffix = ".u"; + if (isSigned) + suffix = ".s"; + if ((*Name)[Name->size()-1] == '"') { + std::string Result(*Name); + Result.insert(Name->size()-1, suffix); + return Result; + } + return *Name + suffix; +} + +// This function handles appending .u or .s to integer value names that +// were previously unsigned or signed, respectively. This avoids name +// collisions since the unsigned and signed type planes have collapsed +// into a single signless type plane. +static std::string getUniqueName(const std::string *Name, TypeInfo* Ty) { + // If its not a symbolic name, don't modify it, probably a constant val. + if ((*Name)[0] != '%' && (*Name)[0] != '"') + return *Name; + // If its a numeric reference, just leave it alone. + if (isdigit((*Name)[1])) + return *Name; + + // Resolve the type + ResolveType(Ty); + + // Default the result to the current name + std::string Result = *Name; + + if (Ty->isInteger()) { + // If its an integer type, make the name unique + Result = makeUniqueName(Name, Ty->isSigned()); + } else if (Ty->isPointer()) { + while (Ty->isPointer()) + Ty = Ty->getElementType(); + if (Ty->isInteger()) + Result = makeUniqueName(Name, Ty->isSigned()); + } + return Result; +} + /* Enabling traces. */ @@ -661,16 +729,17 @@ getCompareOp(const std::string& setcc, const TypeInfo& TI) { #endif #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 289 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 357 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" typedef union YYSTYPE { std::string* String; - TypeInfo Type; + TypeInfo* Type; ValueInfo Value; ConstInfo Const; ValueList* ValList; + TypeList* TypeVec; } YYSTYPE; /* Line 196 of yacc.c. */ -#line 674 "UpgradeParser.tab.c" +#line 743 "UpgradeParser.tab.c" # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 @@ -682,7 +751,7 @@ typedef union YYSTYPE { /* Line 219 of yacc.c. */ -#line 686 "UpgradeParser.tab.c" +#line 755 "UpgradeParser.tab.c" #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) # define YYSIZE_T __SIZE_TYPE__ @@ -1038,37 +1107,37 @@ static const short int yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short int yyrline[] = { - 0, 352, 352, 352, 353, 353, 357, 357, 357, 357, - 357, 357, 357, 358, 358, 358, 358, 359, 359, 359, - 360, 360, 360, 360, 360, 360, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 362, 362, 362, 362, - 362, 362, 362, 362, 362, 362, 363, 363, 363, 363, - 363, 363, 364, 364, 364, 364, 365, 365, 365, 365, - 365, 365, 365, 366, 366, 366, 366, 366, 366, 371, - 371, 371, 371, 372, 372, 372, 372, 373, 373, 374, - 374, 377, 380, 385, 385, 385, 385, 385, 385, 386, - 387, 390, 390, 390, 390, 390, 391, 392, 397, 402, - 403, 406, 407, 415, 421, 422, 425, 426, 435, 436, - 449, 449, 450, 450, 451, 455, 455, 455, 455, 455, - 455, 455, 456, 456, 456, 456, 456, 458, 462, 466, - 469, 474, 480, 488, 496, 502, 506, 512, 516, 527, - 530, 538, 539, 544, 547, 557, 563, 568, 574, 580, - 586, 591, 597, 603, 609, 615, 621, 627, 633, 639, - 645, 653, 667, 679, 684, 690, 695, 701, 706, 711, - 719, 724, 729, 739, 744, 749, 749, 759, 764, 767, - 772, 776, 780, 782, 782, 785, 797, 802, 807, 816, - 825, 834, 843, 848, 853, 858, 860, 860, 863, 868, - 875, 880, 887, 894, 899, 900, 908, 908, 909, 909, - 911, 918, 922, 926, 929, 934, 937, 940, 959, 960, - 963, 974, 975, 977, 985, 986, 987, 991, 1004, 1005, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1009, 1010, 1015, - 1016, 1025, 1025, 1029, 1035, 1046, 1052, 1055, 1063, 1067, - 1072, 1075, 1081, 1081, 1083, 1088, 1093, 1098, 1106, 1113, - 1119, 1139, 1144, 1150, 1155, 1163, 1180, 1187, 1195, 1199, - 1206, 1207, 1211, 1216, 1219, 1225, 1230, 1236, 1241, 1246, - 1251, 1259, 1287, 1292, 1297, 1302, 1307, 1312, 1317, 1334, - 1339, 1340, 1344, 1345, 1348, 1355, 1362, 1369, 1376, 1381, - 1388, 1395 + 0, 422, 422, 422, 423, 423, 427, 427, 427, 427, + 427, 427, 427, 428, 428, 428, 428, 429, 429, 429, + 430, 430, 430, 430, 430, 430, 431, 431, 431, 431, + 431, 431, 431, 431, 431, 431, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 433, 433, 433, 433, + 433, 433, 434, 434, 434, 434, 435, 435, 435, 435, + 435, 435, 435, 436, 436, 436, 436, 436, 436, 441, + 441, 441, 441, 442, 442, 442, 442, 443, 443, 444, + 444, 447, 450, 455, 455, 455, 455, 455, 455, 456, + 457, 460, 460, 460, 460, 460, 461, 462, 467, 472, + 473, 476, 477, 485, 491, 492, 495, 496, 505, 506, + 519, 519, 520, 520, 521, 525, 525, 525, 525, 525, + 525, 525, 526, 526, 526, 526, 526, 528, 531, 534, + 537, 541, 555, 562, 569, 580, 584, 595, 599, 608, + 612, 619, 620, 625, 630, 640, 646, 651, 657, 663, + 669, 674, 680, 686, 693, 699, 705, 711, 717, 723, + 729, 737, 750, 762, 767, 773, 778, 784, 789, 794, + 802, 807, 812, 822, 827, 832, 832, 842, 847, 850, + 855, 859, 863, 865, 865, 868, 878, 883, 888, 898, + 908, 918, 928, 933, 938, 943, 945, 945, 948, 953, + 960, 965, 972, 979, 984, 985, 993, 993, 994, 994, + 996, 1005, 1009, 1013, 1016, 1021, 1024, 1027, 1045, 1046, + 1049, 1060, 1061, 1063, 1072, 1073, 1074, 1078, 1091, 1092, + 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1096, 1097, 1102, + 1103, 1112, 1112, 1116, 1121, 1131, 1140, 1143, 1151, 1155, + 1160, 1163, 1169, 1169, 1171, 1176, 1181, 1186, 1195, 1203, + 1210, 1233, 1238, 1244, 1250, 1258, 1276, 1284, 1293, 1297, + 1304, 1305, 1309, 1314, 1317, 1326, 1334, 1343, 1351, 1359, + 1364, 1373, 1401, 1407, 1413, 1420, 1426, 1432, 1438, 1456, + 1461, 1462, 1466, 1467, 1470, 1478, 1487, 1495, 1504, 1510, + 1519, 1528 }; #endif @@ -2417,26 +2486,26 @@ yyreduce: switch (yyn) { case 81: -#line 377 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 447 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = (yyvsp[-1].String); ;} break; case 82: -#line 380 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 450 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(""); ;} break; case 90: -#line 387 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 457 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(""); ;} break; case 97: -#line 392 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 462 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-1].String) += *(yyvsp[0].String); delete (yyvsp[0].String); @@ -2445,27 +2514,27 @@ yyreduce: break; case 98: -#line 397 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 467 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(""); ;} break; case 99: -#line 402 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 472 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 100: -#line 403 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 473 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-1].String) += " " + *(yyvsp[0].String); delete (yyvsp[0].String); (yyval.String) = (yyvsp[-1].String); ;} break; case 101: -#line 406 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 476 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 102: -#line 407 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 477 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyvsp[-1].String)->insert(0, ", "); *(yyvsp[-1].String) += " " + *(yyvsp[0].String); @@ -2475,7 +2544,7 @@ yyreduce: break; case 103: -#line 415 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 485 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-1].String) += " " + *(yyvsp[0].String); delete (yyvsp[0].String); @@ -2484,17 +2553,17 @@ yyreduce: break; case 104: -#line 421 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 491 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 106: -#line 425 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 495 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 107: -#line 426 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 496 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyvsp[-1].String)->insert(0, ", "); if (!(yyvsp[0].String)->empty()) @@ -2505,7 +2574,7 @@ yyreduce: break; case 109: -#line 436 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 506 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-1].String) += " " + *(yyvsp[0].String); delete (yyvsp[0].String); @@ -2514,334 +2583,347 @@ yyreduce: break; case 127: -#line 458 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 528 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.Type).newTy = (yyvsp[0].String); - (yyval.Type).oldTy = OpaqueTy; + (yyval.Type) = new TypeInfo((yyvsp[0].String), OpaqueTy); ;} break; case 128: -#line 462 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 531 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.Type).newTy = (yyvsp[0].String); - (yyval.Type).oldTy = UnresolvedTy; + (yyval.Type) = new TypeInfo((yyvsp[0].String), UnresolvedTy); ;} break; case 129: -#line 466 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 534 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Type) = (yyvsp[0].Type); ;} break; case 130: -#line 469 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 537 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Type UpReference (yyvsp[0].String)->insert(0, "\\"); - (yyval.Type).newTy = (yyvsp[0].String); - (yyval.Type).oldTy = NumericTy; + (yyval.Type) = new TypeInfo((yyvsp[0].String), NumericTy); ;} break; case 131: -#line 474 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 541 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Function derived type? - *(yyvsp[-3].Type).newTy += "( " + *(yyvsp[-1].String) + " )"; - delete (yyvsp[-1].String); - (yyval.Type).newTy = (yyvsp[-3].Type).newTy; - (yyval.Type).oldTy = FunctionTy; + std::string newTy( (yyvsp[-3].Type)->getNewTy() + "("); + for (unsigned i = 0; i < (yyvsp[-1].TypeVec)->size(); ++i) { + if (i != 0) + newTy += ", "; + if ((*(yyvsp[-1].TypeVec))[i]->isVoid()) + newTy += "..."; + else + newTy += (*(yyvsp[-1].TypeVec))[i]->getNewTy(); + } + newTy += ")"; + (yyval.Type) = new TypeInfo(new std::string(newTy), (yyvsp[-3].Type), (yyvsp[-1].TypeVec)); + EnumeratedTypes.push_back(*(yyval.Type)); ;} break; case 132: -#line 480 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 555 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Sized array type? (yyvsp[-3].String)->insert(0,"[ "); - *(yyvsp[-3].String) += " x " + *(yyvsp[-1].Type).newTy + " ]"; - delete (yyvsp[-1].Type).newTy; - (yyval.Type).newTy = (yyvsp[-3].String); - (yyval.Type).oldTy = ArrayTy; - (yyval.Type).elemTy = (yyvsp[-1].Type).oldTy; + *(yyvsp[-3].String) += " x " + (yyvsp[-1].Type)->getNewTy() + " ]"; + uint64_t elems = atoi((yyvsp[-3].String)->c_str()); + (yyval.Type) = new TypeInfo((yyvsp[-3].String), ArrayTy, (yyvsp[-1].Type), elems); + EnumeratedTypes.push_back(*(yyval.Type)); ;} break; case 133: -#line 488 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 562 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Packed array type? (yyvsp[-3].String)->insert(0,"< "); - *(yyvsp[-3].String) += " x " + *(yyvsp[-1].Type).newTy + " >"; - delete (yyvsp[-1].Type).newTy; - (yyval.Type).newTy = (yyvsp[-3].String); - (yyval.Type).oldTy = PackedTy; - (yyval.Type).elemTy = (yyvsp[-1].Type).oldTy; + *(yyvsp[-3].String) += " x " + (yyvsp[-1].Type)->getNewTy() + " >"; + uint64_t elems = atoi((yyvsp[-3].String)->c_str()); + (yyval.Type) = new TypeInfo((yyvsp[-3].String), PackedTy, (yyvsp[-1].Type), elems); + EnumeratedTypes.push_back(*(yyval.Type)); ;} break; case 134: -#line 496 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 569 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Structure type? - (yyvsp[-1].String)->insert(0, "{ "); - *(yyvsp[-1].String) += " }"; - (yyval.Type).newTy = (yyvsp[-1].String); - (yyval.Type).oldTy = StructTy; + std::string newTy("{"); + for (unsigned i = 0; i < (yyvsp[-1].TypeVec)->size(); ++i) { + if (i != 0) + newTy += ", "; + newTy += (*(yyvsp[-1].TypeVec))[i]->getNewTy(); + } + newTy += "}"; + (yyval.Type) = new TypeInfo(new std::string(newTy), StructTy, (yyvsp[-1].TypeVec)); + EnumeratedTypes.push_back(*(yyval.Type)); ;} break; case 135: -#line 502 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 580 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Empty structure type? - (yyval.Type).newTy = new std::string("{}"); - (yyval.Type).oldTy = StructTy; + (yyval.Type) = new TypeInfo(new std::string("{}"), StructTy, new TypeList()); + EnumeratedTypes.push_back(*(yyval.Type)); ;} break; case 136: -#line 506 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 584 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Packed Structure type? - (yyvsp[-2].String)->insert(0, "<{ "); - *(yyvsp[-2].String) += " }>"; - (yyval.Type).newTy = (yyvsp[-2].String); - (yyval.Type).oldTy = StructTy; + std::string newTy("<{"); + for (unsigned i = 0; i < (yyvsp[-2].TypeVec)->size(); ++i) { + if (i != 0) + newTy += ", "; + newTy += (*(yyvsp[-2].TypeVec))[i]->getNewTy(); + } + newTy += "}>"; + (yyval.Type) = new TypeInfo(new std::string(newTy), PackedStructTy, (yyvsp[-2].TypeVec)); + EnumeratedTypes.push_back(*(yyval.Type)); ;} break; case 137: -#line 512 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 595 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Empty packed structure type? - (yyval.Type).newTy = new std::string("<{}>"); - (yyval.Type).oldTy = StructTy; + (yyval.Type) = new TypeInfo(new std::string("<{}>"), PackedStructTy, new TypeList()); + EnumeratedTypes.push_back(*(yyval.Type)); ;} break; case 138: -#line 516 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 599 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Pointer type? - *(yyvsp[-1].Type).newTy += '*'; - (yyval.Type).elemTy = (yyvsp[-1].Type).oldTy; - (yyvsp[-1].Type).oldTy = PointerTy; - (yyval.Type) = (yyvsp[-1].Type); + (yyval.Type) = (yyvsp[-1].Type)->getPointerType(); + EnumeratedTypes.push_back(*(yyval.Type)); ;} break; case 139: -#line 527 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 608 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.String) = (yyvsp[0].Type).newTy; + (yyval.TypeVec) = new TypeList(); + (yyval.TypeVec)->push_back((yyvsp[0].Type)); ;} break; case 140: -#line 530 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 612 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-2].String) += ", " + *(yyvsp[0].Type).newTy; - delete (yyvsp[0].Type).newTy; - (yyval.String) = (yyvsp[-2].String); + (yyval.TypeVec) = (yyvsp[-2].TypeVec); + (yyval.TypeVec)->push_back((yyvsp[0].Type)); ;} break; case 142: -#line 539 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 620 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-2].String) += ", ..."; + (yyval.TypeVec) = (yyvsp[-2].TypeVec); + (yyval.TypeVec)->push_back(new TypeInfo("void",VoidTy)); delete (yyvsp[0].String); - (yyval.String) = (yyvsp[-2].String); ;} break; case 143: -#line 544 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 625 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.String) = (yyvsp[0].String); + (yyval.TypeVec) = new TypeList(); + (yyval.TypeVec)->push_back(new TypeInfo("void",VoidTy)); + delete (yyvsp[0].String); ;} break; case 144: -#line 547 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 630 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.String) = new std::string(); + (yyval.TypeVec) = new TypeList(); ;} break; case 145: -#line 557 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 640 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Nonempty unsized arr (yyval.Const).type = (yyvsp[-3].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-3].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-3].Type)->getNewTy()); *(yyval.Const).cnst += " [ " + *(yyvsp[-1].String) + " ]"; delete (yyvsp[-1].String); ;} break; case 146: -#line 563 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 646 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Const).type = (yyvsp[-2].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-2].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-2].Type)->getNewTy()); *(yyval.Const).cnst += "[ ]"; ;} break; case 147: -#line 568 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 651 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Const).type = (yyvsp[-2].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-2].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-2].Type)->getNewTy()); *(yyval.Const).cnst += " c" + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 148: -#line 574 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 657 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Nonempty unsized arr (yyval.Const).type = (yyvsp[-3].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-3].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-3].Type)->getNewTy()); *(yyval.Const).cnst += " < " + *(yyvsp[-1].String) + " >"; delete (yyvsp[-1].String); ;} break; case 149: -#line 580 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 663 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Const).type = (yyvsp[-3].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-3].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-3].Type)->getNewTy()); *(yyval.Const).cnst += " { " + *(yyvsp[-1].String) + " }"; delete (yyvsp[-1].String); ;} break; case 150: -#line 586 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 669 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Const).type = (yyvsp[-2].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-2].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-2].Type)->getNewTy()); *(yyval.Const).cnst += " {}"; ;} break; case 151: -#line 591 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 674 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); *(yyval.Const).cnst += " " + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 152: -#line 597 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 680 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); *(yyval.Const).cnst += " " + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 153: -#line 603 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 686 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { + std::string Name = getUniqueName((yyvsp[0].String),(yyvsp[-1].Type)); (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); - *(yyval.Const).cnst += " " + *(yyvsp[0].String); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); + *(yyval.Const).cnst += " " + Name; delete (yyvsp[0].String); ;} break; case 154: -#line 609 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 693 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); *(yyval.Const).cnst += " " + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 155: -#line 615 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 699 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); *(yyval.Const).cnst += " " + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 156: -#line 621 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 705 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // integral constants (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); *(yyval.Const).cnst += " " + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 157: -#line 627 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 711 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // integral constants (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); *(yyval.Const).cnst += " " + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 158: -#line 633 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 717 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Boolean constants (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); *(yyval.Const).cnst += " " + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 159: -#line 639 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 723 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Boolean constants (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); *(yyval.Const).cnst += " " + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 160: -#line 645 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 729 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Float & Double constants (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); *(yyval.Const).cnst += " " + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 161: -#line 653 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 737 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { std::string source = *(yyvsp[-3].Const).cnst; - TypeInfo DstTy = (yyvsp[-1].Type); - ResolveType(DstTy); + TypeInfo* DstTy = ResolveType((yyvsp[-1].Type)); if (*(yyvsp[-5].String) == "cast") { // Call getCastUpgrade to upgrade the old cast - (yyval.String) = new std::string(getCastUpgrade(source, (yyvsp[-3].Const).type, (yyvsp[-1].Type), true)); + (yyval.String) = new std::string(getCastUpgrade(source, (yyvsp[-3].Const).type, DstTy, 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) += "( " + source + " to " + (yyvsp[-1].Type)->getNewTy() + ")"; } - delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); + delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); delete (yyvsp[-2].String); delete (yyvsp[-1].Type); ;} break; case 162: -#line 667 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 750 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-4].String) += "(" + *(yyvsp[-2].Const).cnst; for (unsigned i = 0; i < (yyvsp[-1].ValList)->size(); ++i) { @@ -2857,7 +2939,7 @@ yyreduce: break; case 163: -#line 679 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 762 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")"; (yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy(); @@ -2866,7 +2948,7 @@ yyreduce: break; case 164: -#line 684 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 767 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const char* op = getDivRemOpcode(*(yyvsp[-5].String), (yyvsp[-3].Const).type); (yyval.String) = new std::string(op); @@ -2876,7 +2958,7 @@ yyreduce: break; case 165: -#line 690 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 773 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")"; (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy(); @@ -2885,7 +2967,7 @@ yyreduce: break; case 166: -#line 695 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 778 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-5].String) = getCompareOp(*(yyvsp[-5].String), (yyvsp[-3].Const).type); *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")"; @@ -2895,7 +2977,7 @@ yyreduce: break; case 167: -#line 701 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 784 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-6].String) += "(" + *(yyvsp[-5].String) + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")"; delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy(); @@ -2904,7 +2986,7 @@ yyreduce: break; case 168: -#line 706 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 789 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-6].String) += "(" + *(yyvsp[-5].String) + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")"; delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy(); @@ -2913,11 +2995,11 @@ yyreduce: break; case 169: -#line 711 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 794 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const char* shiftop = (yyvsp[-5].String)->c_str(); if (*(yyvsp[-5].String) == "shr") - shiftop = ((yyvsp[-3].Const).type.isUnsigned()) ? "lshr" : "ashr"; + shiftop = ((yyvsp[-3].Const).type->isUnsigned()) ? "lshr" : "ashr"; (yyval.String) = new std::string(shiftop); *(yyval.String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")"; delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy(); @@ -2925,7 +3007,7 @@ yyreduce: break; case 170: -#line 719 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 802 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")"; (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy(); @@ -2934,7 +3016,7 @@ yyreduce: break; case 171: -#line 724 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 807 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")"; (yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy(); @@ -2943,7 +3025,7 @@ yyreduce: break; case 172: -#line 729 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 812 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")"; (yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy(); @@ -2952,7 +3034,7 @@ yyreduce: break; case 173: -#line 739 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 822 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-2].String) += ", " + *(yyvsp[0].Const).cnst; (yyvsp[0].Const).destroy(); @@ -2961,25 +3043,25 @@ yyreduce: break; case 174: -#line 744 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 827 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(*(yyvsp[0].Const).cnst); (yyvsp[0].Const).destroy(); ;} break; case 177: -#line 759 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 842 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { ;} break; case 178: -#line 764 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 847 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = 0; ;} break; case 179: -#line 767 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 850 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << *(yyvsp[0].String) << '\n'; delete (yyvsp[0].String); @@ -2988,7 +3070,7 @@ yyreduce: break; case 180: -#line 772 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 855 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << "module asm " << ' ' << *(yyvsp[0].String) << '\n'; (yyval.String) = 0; @@ -2996,7 +3078,7 @@ yyreduce: break; case 181: -#line 776 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 859 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << "implementation\n"; (yyval.String) = 0; @@ -3004,33 +3086,31 @@ yyreduce: break; case 182: -#line 780 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 863 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = 0; ;} break; case 184: -#line 782 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 865 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = (yyvsp[0].String); *(yyval.String) = "external"; ;} break; case 185: -#line 785 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 868 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - EnumeratedTypes.push_back((yyvsp[0].Type)); + 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; - NamedTypes[*(yyvsp[-2].String)].elemTy = (yyvsp[0].Type).elemTy; + NamedTypes[*(yyvsp[-2].String)] = *(yyvsp[0].Type); *O << *(yyvsp[-2].String) << " = "; } - *O << "type " << *(yyvsp[0].Type).newTy << '\n'; - delete (yyvsp[-2].String); delete (yyvsp[-1].String); (yyvsp[0].Type).destroy(); + *O << "type " << (yyvsp[0].Type)->getNewTy() << '\n'; + delete (yyvsp[-2].String); delete (yyvsp[-1].String); (yyval.String) = 0; ;} break; case 186: -#line 797 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 878 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Function prototypes can be in const pool *O << *(yyvsp[0].String) << '\n'; delete (yyvsp[0].String); @@ -3039,7 +3119,7 @@ yyreduce: break; case 187: -#line 802 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 883 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Asm blocks can be in the const pool *O << *(yyvsp[-2].String) << ' ' << *(yyvsp[-1].String) << ' ' << *(yyvsp[0].String) << '\n'; delete (yyvsp[-2].String); delete (yyvsp[-1].String); delete (yyvsp[0].String); @@ -3048,59 +3128,63 @@ yyreduce: break; case 188: -#line 807 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 888 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-4].String)->empty()) { - *O << *(yyvsp[-4].String) << " = "; - Globals[*(yyvsp[-4].String)] = (yyvsp[-1].Const).type.clone(); + std::string Name = getUniqueName((yyvsp[-4].String),(yyvsp[-1].Const).type); + *O << Name << " = "; + Globals[Name] = *(yyvsp[-1].Const).type; } *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); + delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); delete (yyvsp[0].String); (yyval.String) = 0; ;} break; case 189: -#line 816 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 898 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-4].String)->empty()) { - *O << *(yyvsp[-4].String) << " = "; - Globals[*(yyvsp[-4].String)] = (yyvsp[-1].Type).clone(); + std::string Name = getUniqueName((yyvsp[-4].String),(yyvsp[-1].Type)); + *O << Name << " = "; + Globals[Name] = *(yyvsp[-1].Type); } - *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); + *O << *(yyvsp[-3].String) << ' ' << *(yyvsp[-2].String) << ' ' << (yyvsp[-1].Type)->getNewTy() << ' ' << *(yyvsp[0].String) << '\n'; + delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); delete (yyvsp[0].String); (yyval.String) = 0; ;} break; case 190: -#line 825 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 908 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-4].String)->empty()) { - *O << *(yyvsp[-4].String) << " = "; - Globals[*(yyvsp[-4].String)] = (yyvsp[-1].Type).clone(); + std::string Name = getUniqueName((yyvsp[-4].String),(yyvsp[-1].Type)); + *O << Name << " = "; + Globals[Name] = *(yyvsp[-1].Type); } - *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); + *O << *(yyvsp[-3].String) << ' ' << *(yyvsp[-2].String) << ' ' << (yyvsp[-1].Type)->getNewTy() << ' ' << *(yyvsp[0].String) << '\n'; + delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); delete (yyvsp[0].String); (yyval.String) = 0; ;} break; case 191: -#line 834 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 918 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-4].String)->empty()) { - *O << *(yyvsp[-4].String) << " = "; - Globals[*(yyvsp[-4].String)] = (yyvsp[-1].Type).clone(); + std::string Name = getUniqueName((yyvsp[-4].String),(yyvsp[-1].Type)); + *O << Name << " = "; + Globals[Name] = *(yyvsp[-1].Type); } - *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); + *O << *(yyvsp[-3].String) << ' ' << *(yyvsp[-2].String) << ' ' << (yyvsp[-1].Type)->getNewTy() << ' ' << *(yyvsp[0].String) << '\n'; + delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); delete (yyvsp[0].String); (yyval.String) = 0; ;} break; case 192: -#line 843 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 928 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << *(yyvsp[-1].String) << ' ' << *(yyvsp[0].String) << '\n'; delete (yyvsp[-1].String); delete (yyvsp[0].String); @@ -3109,7 +3193,7 @@ yyreduce: break; case 193: -#line 848 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 933 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << *(yyvsp[-2].String) << " = " << *(yyvsp[0].String) << '\n'; delete (yyvsp[-2].String); delete (yyvsp[0].String); @@ -3118,14 +3202,14 @@ yyreduce: break; case 194: -#line 853 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 938 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = 0; ;} break; case 198: -#line 863 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 948 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-2].String) += " = " + *(yyvsp[0].String); delete (yyvsp[0].String); @@ -3134,7 +3218,7 @@ yyreduce: break; case 199: -#line 868 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 953 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-2].String) += " = " + *(yyvsp[0].String); if (*(yyvsp[0].String) == "64") @@ -3145,7 +3229,7 @@ yyreduce: break; case 200: -#line 875 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 960 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-2].String) += " = " + *(yyvsp[0].String); delete (yyvsp[0].String); @@ -3154,7 +3238,7 @@ yyreduce: break; case 201: -#line 880 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 965 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-2].String) += " = " + *(yyvsp[0].String); delete (yyvsp[0].String); @@ -3163,7 +3247,7 @@ yyreduce: break; case 202: -#line 887 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 972 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyvsp[-1].String)->insert(0, "[ "); *(yyvsp[-1].String) += " ]"; @@ -3172,7 +3256,7 @@ yyreduce: break; case 203: -#line 894 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 979 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-2].String) += ", " + *(yyvsp[0].String); delete (yyvsp[0].String); @@ -3181,29 +3265,31 @@ yyreduce: break; case 205: -#line 900 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 985 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 209: -#line 909 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 994 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 210: -#line 911 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 996 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.String) = (yyvsp[-1].Type).newTy; - if (!(yyvsp[0].String)->empty()) - *(yyval.String) += " " + *(yyvsp[0].String); + (yyval.String) = new std::string((yyvsp[-1].Type)->getNewTy()); + if (!(yyvsp[0].String)->empty()) { + std::string Name = getUniqueName((yyvsp[0].String), (yyvsp[-1].Type)); + *(yyval.String) += " " + Name; + } delete (yyvsp[0].String); ;} break; case 211: -#line 918 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1005 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-2].String) += ", " + *(yyvsp[0].String); delete (yyvsp[0].String); @@ -3211,21 +3297,21 @@ yyreduce: break; case 212: -#line 922 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1009 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = (yyvsp[0].String); ;} break; case 213: -#line 926 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1013 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = (yyvsp[0].String); ;} break; case 214: -#line 929 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1016 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-2].String) += ", ..."; (yyval.String) = (yyvsp[-2].String); @@ -3234,31 +3320,30 @@ yyreduce: break; case 215: -#line 934 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1021 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = (yyvsp[0].String); ;} break; case 216: -#line 937 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1024 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 217: -#line 940 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1027 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-7].String)->empty()) { *(yyvsp[-7].String) += " "; } - *(yyvsp[-7].String) += *(yyvsp[-6].Type).newTy + " " + *(yyvsp[-5].String) + "(" + *(yyvsp[-3].String) + ")"; + *(yyvsp[-7].String) += (yyvsp[-6].Type)->getNewTy() + " " + *(yyvsp[-5].String) + "(" + *(yyvsp[-3].String) + ")"; if (!(yyvsp[-1].String)->empty()) { *(yyvsp[-7].String) += " " + *(yyvsp[-1].String); } if (!(yyvsp[0].String)->empty()) { *(yyvsp[-7].String) += " " + *(yyvsp[0].String); } - (yyvsp[-6].Type).destroy(); delete (yyvsp[-5].String); delete (yyvsp[-3].String); delete (yyvsp[-1].String); @@ -3268,17 +3353,17 @@ yyreduce: break; case 218: -#line 959 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1045 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string("{"); delete (yyvsp[0].String); ;} break; case 219: -#line 960 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1046 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string ("{"); ;} break; case 220: -#line 963 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1049 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << "define "; if (!(yyvsp[-2].String)->empty()) { @@ -3291,32 +3376,33 @@ yyreduce: break; case 221: -#line 974 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1060 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string("}"); delete (yyvsp[0].String); ;} break; case 222: -#line 975 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1061 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string("}"); ;} break; case 223: -#line 977 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1063 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[-1].String)) *O << *(yyvsp[-1].String); *O << *(yyvsp[0].String) << "\n\n"; + delete (yyvsp[-2].String); delete (yyvsp[-1].String); delete (yyvsp[0].String); (yyval.String) = 0; ;} break; case 224: -#line 985 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1072 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 227: -#line 991 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1078 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-1].String)->empty()) *(yyvsp[-2].String) += " " + *(yyvsp[-1].String); @@ -3328,12 +3414,12 @@ yyreduce: break; case 228: -#line 1004 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1091 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 238: -#line 1010 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1097 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyvsp[-1].String)->insert(0, "<"); *(yyvsp[-1].String) += ">"; @@ -3342,7 +3428,7 @@ yyreduce: break; case 240: -#line 1016 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1103 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-3].String)->empty()) { *(yyvsp[-4].String) += " " + *(yyvsp[-3].String); @@ -3354,57 +3440,58 @@ yyreduce: break; case 243: -#line 1029 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1116 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Value).val = (yyvsp[0].String); (yyval.Value).constant = false; - (yyval.Value).type.newTy = 0; - (yyval.Value).type.oldTy = UnresolvedTy; + (yyval.Value).type = new TypeInfo(); ;} break; case 244: -#line 1035 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1121 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Value).val = (yyvsp[0].String); (yyval.Value).constant = true; - (yyval.Value).type.newTy = 0; - (yyval.Value).type.oldTy = UnresolvedTy; + (yyval.Value).type = new TypeInfo(); ;} break; case 245: -#line 1046 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1131 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { + std::string Name = getUniqueName((yyvsp[0].Value).val, (yyvsp[-1].Type)); (yyval.Value) = (yyvsp[0].Value); + delete (yyval.Value).val; + delete (yyval.Value).type; + (yyval.Value).val = new std::string((yyvsp[-1].Type)->getNewTy() + " " + Name); (yyval.Value).type = (yyvsp[-1].Type); - (yyval.Value).val->insert(0, *(yyvsp[-1].Type).newTy + " "); ;} break; case 246: -#line 1052 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1140 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = 0; ;} break; case 247: -#line 1055 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1143 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Do not allow functions with 0 basic blocks (yyval.String) = 0; ;} break; case 248: -#line 1063 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1151 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = 0; ;} break; case 249: -#line 1067 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1155 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << " " << *(yyvsp[0].String) << '\n'; delete (yyvsp[0].String); @@ -3413,14 +3500,14 @@ yyreduce: break; case 250: -#line 1072 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1160 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = 0; ;} break; case 251: -#line 1075 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1163 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << *(yyvsp[0].String) << '\n'; delete (yyvsp[0].String); @@ -3429,12 +3516,12 @@ yyreduce: break; case 253: -#line 1081 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1169 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = (yyvsp[0].String); *(yyval.String) = "unwind"; ;} break; case 254: -#line 1083 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1171 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Return with a result... *O << " " << *(yyvsp[-1].String) << ' ' << *(yyvsp[0].Value).val << '\n'; delete (yyvsp[-1].String); (yyvsp[0].Value).destroy(); @@ -3443,63 +3530,69 @@ yyreduce: break; case 255: -#line 1088 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1176 "/proj/llvm/llvm-3/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(); + *O << " " << *(yyvsp[-1].String) << ' ' << (yyvsp[0].Type)->getNewTy() << '\n'; + delete (yyvsp[-1].String); delete (yyvsp[0].Type); (yyval.String) = 0; ;} break; case 256: -#line 1093 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1181 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Unconditional Branch... - *O << " " << *(yyvsp[-2].String) << ' ' << *(yyvsp[-1].Type).newTy << ' ' << *(yyvsp[0].Value).val << '\n'; - delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy(); + *O << " " << *(yyvsp[-2].String) << ' ' << (yyvsp[-1].Type)->getNewTy() << ' ' << *(yyvsp[0].Value).val << '\n'; + delete (yyvsp[-2].String); delete (yyvsp[-1].Type); (yyvsp[0].Value).destroy(); (yyval.String) = 0; ;} break; case 257: -#line 1098 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1186 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *O << " " << *(yyvsp[-8].String) << ' ' << *(yyvsp[-7].Type).newTy << ' ' << *(yyvsp[-6].Value).val << ", " - << *(yyvsp[-4].Type).newTy << ' ' << *(yyvsp[-3].Value).val << ", " << *(yyvsp[-1].Type).newTy << ' ' + std::string Name = getUniqueName((yyvsp[-6].Value).val, (yyvsp[-7].Type)); + *O << " " << *(yyvsp[-8].String) << ' ' << (yyvsp[-7].Type)->getNewTy() << ' ' << Name << ", " + << (yyvsp[-4].Type)->getNewTy() << ' ' << *(yyvsp[-3].Value).val << ", " << (yyvsp[-1].Type)->getNewTy() << ' ' << *(yyvsp[0].Value).val << '\n'; - delete (yyvsp[-8].String); (yyvsp[-7].Type).destroy(); (yyvsp[-6].Value).destroy(); (yyvsp[-4].Type).destroy(); (yyvsp[-3].Value).destroy(); - (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy(); + delete (yyvsp[-8].String); delete (yyvsp[-7].Type); (yyvsp[-6].Value).destroy(); delete (yyvsp[-4].Type); (yyvsp[-3].Value).destroy(); + delete (yyvsp[-1].Type); (yyvsp[0].Value).destroy(); (yyval.String) = 0; ;} break; case 258: -#line 1106 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1195 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *O << " " << *(yyvsp[-8].String) << ' ' << *(yyvsp[-7].Type).newTy << ' ' << *(yyvsp[-6].Value).val << ", " - << *(yyvsp[-4].Type).newTy << ' ' << *(yyvsp[-3].Value).val << " [" << *(yyvsp[-1].String) << " ]\n"; - delete (yyvsp[-8].String); (yyvsp[-7].Type).destroy(); (yyvsp[-6].Value).destroy(); (yyvsp[-4].Type).destroy(); (yyvsp[-3].Value).destroy(); + std::string Name = getUniqueName((yyvsp[-6].Value).val, (yyvsp[-7].Type)); + *O << " " << *(yyvsp[-8].String) << ' ' << (yyvsp[-7].Type)->getNewTy() << ' ' << Name << ", " + << (yyvsp[-4].Type)->getNewTy() << ' ' << *(yyvsp[-3].Value).val << " [" << *(yyvsp[-1].String) << " ]\n"; + delete (yyvsp[-8].String); delete (yyvsp[-7].Type); (yyvsp[-6].Value).destroy(); delete (yyvsp[-4].Type); (yyvsp[-3].Value).destroy(); delete (yyvsp[-1].String); (yyval.String) = 0; ;} break; case 259: -#line 1113 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1203 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *O << " " << *(yyvsp[-7].String) << ' ' << *(yyvsp[-6].Type).newTy << ' ' << *(yyvsp[-5].Value).val << ", " - << *(yyvsp[-3].Type).newTy << ' ' << *(yyvsp[-2].Value).val << "[]\n"; - delete (yyvsp[-7].String); (yyvsp[-6].Type).destroy(); (yyvsp[-5].Value).destroy(); (yyvsp[-3].Type).destroy(); (yyvsp[-2].Value).destroy(); + std::string Name = getUniqueName((yyvsp[-5].Value).val, (yyvsp[-6].Type)); + *O << " " << *(yyvsp[-7].String) << ' ' << (yyvsp[-6].Type)->getNewTy() << ' ' << Name << ", " + << (yyvsp[-3].Type)->getNewTy() << ' ' << *(yyvsp[-2].Value).val << "[]\n"; + delete (yyvsp[-7].String); delete (yyvsp[-6].Type); (yyvsp[-5].Value).destroy(); delete (yyvsp[-3].Type); (yyvsp[-2].Value).destroy(); (yyval.String) = 0; ;} break; case 260: -#line 1120 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1211 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { + TypeInfo* ResTy = getFunctionReturnType((yyvsp[-10].Type)); *O << " "; - if (!(yyvsp[-13].String)->empty()) - *O << *(yyvsp[-13].String) << " = "; - *O << *(yyvsp[-12].String) << ' ' << *(yyvsp[-11].String) << ' ' << *(yyvsp[-10].Type).newTy << ' ' << *(yyvsp[-9].Value).val << " ("; + if (!(yyvsp[-13].String)->empty()) { + std::string Name = getUniqueName((yyvsp[-13].String), ResTy); + *O << Name << " = "; + } + *O << *(yyvsp[-12].String) << ' ' << *(yyvsp[-11].String) << ' ' << (yyvsp[-10].Type)->getNewTy() << ' ' << *(yyvsp[-9].Value).val << " ("; for (unsigned i = 0; i < (yyvsp[-7].ValList)->size(); ++i) { ValueInfo& VI = (*(yyvsp[-7].ValList))[i]; *O << *VI.val; @@ -3507,17 +3600,17 @@ yyreduce: *O << ", "; VI.destroy(); } - *O << ") " << *(yyvsp[-5].String) << ' ' << *(yyvsp[-4].Type).newTy << ' ' << *(yyvsp[-3].Value).val << ' ' - << *(yyvsp[-2].String) << ' ' << *(yyvsp[-1].Type).newTy << ' ' << *(yyvsp[0].Value).val << '\n'; - delete (yyvsp[-13].String); delete (yyvsp[-12].String); delete (yyvsp[-11].String); (yyvsp[-10].Type).destroy(); (yyvsp[-9].Value).destroy(); delete (yyvsp[-7].ValList); - delete (yyvsp[-5].String); (yyvsp[-4].Type).destroy(); (yyvsp[-3].Value).destroy(); delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); + *O << ") " << *(yyvsp[-5].String) << ' ' << (yyvsp[-4].Type)->getNewTy() << ' ' << *(yyvsp[-3].Value).val << ' ' + << *(yyvsp[-2].String) << ' ' << (yyvsp[-1].Type)->getNewTy() << ' ' << *(yyvsp[0].Value).val << '\n'; + delete (yyvsp[-13].String); delete (yyvsp[-12].String); delete (yyvsp[-11].String); delete (yyvsp[-10].Type); (yyvsp[-9].Value).destroy(); delete (yyvsp[-7].ValList); + delete (yyvsp[-5].String); delete (yyvsp[-4].Type); (yyvsp[-3].Value).destroy(); delete (yyvsp[-2].String); delete (yyvsp[-1].Type); (yyvsp[0].Value).destroy(); (yyval.String) = 0; ;} break; case 261: -#line 1139 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1233 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << " " << *(yyvsp[0].String) << '\n'; delete (yyvsp[0].String); @@ -3526,7 +3619,7 @@ yyreduce: break; case 262: -#line 1144 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1238 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << " " << *(yyvsp[0].String) << '\n'; delete (yyvsp[0].String); @@ -3535,26 +3628,27 @@ yyreduce: break; case 263: -#line 1150 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1244 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + " " + *(yyvsp[-3].String) + ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].Value).val; - (yyvsp[-4].Type).destroy(); delete (yyvsp[-3].String); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy(); + *(yyvsp[-5].String) += " " + (yyvsp[-4].Type)->getNewTy() + " " + *(yyvsp[-3].String) + ", " + (yyvsp[-1].Type)->getNewTy() + " " + + *(yyvsp[0].Value).val; + delete (yyvsp[-4].Type); delete (yyvsp[-3].String); delete (yyvsp[-1].Type); (yyvsp[0].Value).destroy(); (yyval.String) = (yyvsp[-5].String); ;} break; case 264: -#line 1155 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1250 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - (yyvsp[-3].String)->insert(0, *(yyvsp[-4].Type).newTy + " " ); - *(yyvsp[-3].String) += ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].Value).val; - (yyvsp[-4].Type).destroy(); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy(); + (yyvsp[-3].String)->insert(0, (yyvsp[-4].Type)->getNewTy() + " " ); + *(yyvsp[-3].String) += ", " + (yyvsp[-1].Type)->getNewTy() + " " + *(yyvsp[0].Value).val; + delete (yyvsp[-4].Type); delete (yyvsp[-1].Type); (yyvsp[0].Value).destroy(); (yyval.String) = (yyvsp[-3].String); ;} break; case 265: -#line 1163 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1258 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-1].String)->empty()) { if (deleteUselessCastFlag && *deleteUselessCastName == *(yyvsp[-1].String)) { @@ -3562,64 +3656,67 @@ yyreduce: (yyvsp[-1].String)->insert(0, "; "); // don't actually delete it, just comment it out delete deleteUselessCastName; } else { - *(yyvsp[-1].String) += " = "; + // Get a unique name for the name of this value, based on its type. + *(yyvsp[-1].String) = getUniqueName((yyvsp[-1].String), (yyvsp[0].Value).type) + " = "; } } - *(yyvsp[-1].String) += *(yyvsp[0].String); - delete (yyvsp[0].String); + *(yyvsp[-1].String) += *(yyvsp[0].Value).val; + (yyvsp[0].Value).destroy(); deleteUselessCastFlag = false; (yyval.String) = (yyvsp[-1].String); ;} break; case 266: -#line 1180 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1276 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Used for PHI nodes - (yyvsp[-3].Value).val->insert(0, *(yyvsp[-5].Type).newTy + "["); - *(yyvsp[-3].Value).val += "," + *(yyvsp[-1].Value).val + "]"; - (yyvsp[-5].Type).destroy(); (yyvsp[-1].Value).destroy(); - (yyval.String) = new std::string(*(yyvsp[-3].Value).val); - (yyvsp[-3].Value).destroy(); + std::string Name = getUniqueName((yyvsp[-3].Value).val, (yyvsp[-5].Type)); + Name.insert(0, (yyvsp[-5].Type)->getNewTy() + "["); + Name += "," + *(yyvsp[-1].Value).val + "]"; + (yyval.Value).val = new std::string(Name); + (yyval.Value).type = (yyvsp[-5].Type); + (yyvsp[-3].Value).destroy(); (yyvsp[-1].Value).destroy(); ;} break; case 267: -#line 1187 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1284 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-6].String) += ", [" + *(yyvsp[-3].Value).val + "," + *(yyvsp[-1].Value).val + "]"; + std::string Name = getUniqueName((yyvsp[-3].Value).val, (yyvsp[-6].Value).type); + *(yyvsp[-6].Value).val += ", [" + Name + "," + *(yyvsp[-1].Value).val + "]"; (yyvsp[-3].Value).destroy(); (yyvsp[-1].Value).destroy(); - (yyval.String) = (yyvsp[-6].String); + (yyval.Value) = (yyvsp[-6].Value); ;} break; case 268: -#line 1195 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" - { +#line 1293 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" + { (yyval.ValList) = new ValueList(); (yyval.ValList)->push_back((yyvsp[0].Value)); ;} break; case 269: -#line 1199 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1297 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - (yyvsp[-2].ValList)->push_back((yyvsp[0].Value)); (yyval.ValList) = (yyvsp[-2].ValList); + (yyval.ValList)->push_back((yyvsp[0].Value)); ;} break; case 270: -#line 1206 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1304 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValList) = (yyvsp[0].ValList); ;} break; case 271: -#line 1207 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1305 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValList) = new ValueList(); ;} break; case 272: -#line 1211 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1309 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-1].String) += " " + *(yyvsp[0].String); delete (yyvsp[0].String); @@ -3628,92 +3725,108 @@ yyreduce: break; case 274: -#line 1219 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1317 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const char* op = getDivRemOpcode(*(yyvsp[-4].String), (yyvsp[-3].Type)); - (yyval.String) = new std::string(op); - *(yyval.String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val; - delete (yyvsp[-4].String); (yyvsp[-3].Type).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); + std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type)); + std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type)); + (yyval.Value).val = new std::string(op); + *(yyval.Value).val += " " + (yyvsp[-3].Type)->getNewTy() + " " + Name1 + ", " + Name2; + (yyval.Value).type = (yyvsp[-3].Type); + delete (yyvsp[-4].String); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); ;} break; case 275: -#line 1225 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1326 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val; - (yyvsp[-3].Type).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); - (yyval.String) = (yyvsp[-4].String); + std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type)); + std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type)); + *(yyvsp[-4].String) += " " + (yyvsp[-3].Type)->getNewTy() + " " + Name1 + ", " + Name2; + (yyval.Value).val = (yyvsp[-4].String); + (yyval.Value).type = (yyvsp[-3].Type); + (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); ;} break; case 276: -#line 1230 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1334 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { + std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type)); + std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type)); *(yyvsp[-4].String) = getCompareOp(*(yyvsp[-4].String), (yyvsp[-3].Type)); - *(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val; - (yyvsp[-3].Type).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); - (yyval.String) = (yyvsp[-4].String); + *(yyvsp[-4].String) += " " + (yyvsp[-3].Type)->getNewTy() + " " + Name1 + ", " + Name2; + (yyval.Value).val = (yyvsp[-4].String); + (yyval.Value).type = new TypeInfo("bool",BoolTy); + (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); ;} break; case 277: -#line 1236 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1343 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-5].String) += " " + *(yyvsp[-4].String) + " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].Value).val + "," + *(yyvsp[0].Value).val; + std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type)); + std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type)); + *(yyvsp[-5].String) += " " + *(yyvsp[-4].String) + " " + (yyvsp[-3].Type)->getNewTy() + " " + Name1 + "," + Name2; + (yyval.Value).val = (yyvsp[-5].String); + (yyval.Value).type = new TypeInfo("bool",BoolTy); delete (yyvsp[-4].String); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); - (yyval.String) = (yyvsp[-5].String); ;} break; case 278: -#line 1241 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1351 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-5].String) += " " + *(yyvsp[-4].String) + " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].Value).val + "," + *(yyvsp[0].Value).val; + std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type)); + std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type)); + *(yyvsp[-5].String) += " " + *(yyvsp[-4].String) + " " + (yyvsp[-3].Type)->getNewTy() + " " + Name1 + "," + Name2; + (yyval.Value).val = (yyvsp[-5].String); + (yyval.Value).type = new TypeInfo("bool",BoolTy); delete (yyvsp[-4].String); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); - (yyval.String) = (yyvsp[-5].String); ;} break; case 279: -#line 1246 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1359 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val; - (yyvsp[0].Value).destroy(); - (yyval.String) = (yyvsp[-1].String); + (yyval.Value) = (yyvsp[0].Value); + (yyval.Value).val->insert(0, *(yyvsp[-1].String) + " "); + delete (yyvsp[-1].String); ;} break; case 280: -#line 1251 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1364 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const char* shiftop = (yyvsp[-3].String)->c_str(); if (*(yyvsp[-3].String) == "shr") - shiftop = ((yyvsp[-2].Value).type.isUnsigned()) ? "lshr" : "ashr"; - (yyval.String) = new std::string(shiftop); - *(yyval.String) += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val; - delete (yyvsp[-3].String); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); + shiftop = ((yyvsp[-2].Value).type->isUnsigned()) ? "lshr" : "ashr"; + (yyval.Value).val = new std::string(shiftop); + *(yyval.Value).val += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val; + (yyval.Value).type = (yyvsp[-2].Value).type; + delete (yyvsp[-3].String); delete (yyvsp[-2].Value).val; (yyvsp[0].Value).destroy(); ;} break; case 281: -#line 1259 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1373 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { 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(); + TypeInfo* SrcTy = (yyvsp[-2].Value).type; + TypeInfo* DstTy = ResolveType((yyvsp[0].Type)); + (yyval.Value).val = new std::string(); if (*(yyvsp[-3].String) == "cast") { - *(yyval.String) += getCastUpgrade(source, SrcTy, DstTy, false); + *(yyval.Value).val += getCastUpgrade(source, SrcTy, DstTy, false); } else { - *(yyval.String) += *(yyvsp[-3].String) + " " + source + " to " + *DstTy.newTy; + *(yyval.Value).val += *(yyvsp[-3].String) + " " + source + " to " + DstTy->getNewTy(); } + (yyval.Value).type = (yyvsp[0].Type); // Check to see if this is a useless cast of a value to the same name // and the same type. Such casts will probably cause redefinition errors // when assembled and perform no code gen action so just remove them. if (*(yyvsp[-3].String) == "cast" || *(yyvsp[-3].String) == "bitcast") - if ((yyvsp[-2].Value).type.isInteger() && (yyvsp[0].Type).isInteger() && - (yyvsp[-2].Value).type.getBitWidth() == (yyvsp[0].Type).getBitWidth()) { + if ((yyvsp[-2].Value).type->isInteger() && DstTy->isInteger() && + (yyvsp[-2].Value).type->getBitWidth() == DstTy->getBitWidth()) { deleteUselessCastFlag = true; // Flag the "Inst" rule deleteUselessCastName = new std::string(*(yyvsp[-2].Value).val); // save the name size_t pos = deleteUselessCastName->find_first_of("%\"",0); @@ -3723,72 +3836,79 @@ yyreduce: } } delete (yyvsp[-3].String); (yyvsp[-2].Value).destroy(); - delete (yyvsp[-1].String); (yyvsp[0].Type).destroy(); + delete (yyvsp[-1].String); ;} break; case 282: -#line 1287 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1401 "/proj/llvm/llvm-3/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(); - (yyval.String) = (yyvsp[-5].String); + (yyval.Value).val = (yyvsp[-5].String); + (yyval.Value).type = (yyvsp[-2].Value).type; + (yyvsp[-4].Value).destroy(); delete (yyvsp[-2].Value).val; (yyvsp[0].Value).destroy(); ;} break; case 283: -#line 1292 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1407 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Type).newTy; - (yyvsp[-2].Value).destroy(); (yyvsp[0].Type).destroy(); - (yyval.String) = (yyvsp[-3].String); + *(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + (yyvsp[0].Type)->getNewTy(); + (yyval.Value).val = (yyvsp[-3].String); + (yyval.Value).type = (yyvsp[0].Type); + (yyvsp[-2].Value).destroy(); ;} break; case 284: -#line 1297 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1413 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val; - (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); - (yyval.String) = (yyvsp[-3].String); + (yyval.Value).val = (yyvsp[-3].String); + ResolveType((yyvsp[-2].Value).type); + (yyval.Value).type = (yyvsp[-2].Value).type->getElementType()->clone(); + delete (yyvsp[-2].Value).val; (yyvsp[0].Value).destroy(); ;} break; case 285: -#line 1302 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1420 "/proj/llvm/llvm-3/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(); - (yyval.String) = (yyvsp[-5].String); + (yyval.Value).val = (yyvsp[-5].String); + (yyval.Value).type = (yyvsp[-4].Value).type; + delete (yyvsp[-4].Value).val; (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); ;} break; case 286: -#line 1307 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1426 "/proj/llvm/llvm-3/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(); - (yyval.String) = (yyvsp[-5].String); + (yyval.Value).val = (yyvsp[-5].String); + (yyval.Value).type = (yyvsp[-4].Value).type; + delete (yyvsp[-4].Value).val; (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); ;} break; case 287: -#line 1312 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1432 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-1].String) += " " + *(yyvsp[0].String); - delete (yyvsp[0].String); - (yyval.String) = (yyvsp[-1].String); + *(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val; + (yyval.Value).val = (yyvsp[-1].String); + (yyval.Value).type = (yyvsp[0].Value).type; + delete (yyvsp[0].Value).val; ;} break; case 288: -#line 1317 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1438 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-5].String)->empty()) *(yyvsp[-6].String) += " " + *(yyvsp[-5].String); if (!(yyvsp[-6].String)->empty()) *(yyvsp[-6].String) += " "; - *(yyvsp[-6].String) += *(yyvsp[-4].Type).newTy + " " + *(yyvsp[-3].Value).val + "("; + *(yyvsp[-6].String) += (yyvsp[-4].Type)->getNewTy() + " " + *(yyvsp[-3].Value).val + "("; for (unsigned i = 0; i < (yyvsp[-1].ValList)->size(); ++i) { ValueInfo& VI = (*(yyvsp[-1].ValList))[i]; *(yyvsp[-6].String) += *VI.val; @@ -3797,125 +3917,137 @@ yyreduce: VI.destroy(); } *(yyvsp[-6].String) += ")"; - delete (yyvsp[-5].String); (yyvsp[-4].Type).destroy(); (yyvsp[-3].Value).destroy(); delete (yyvsp[-1].ValList); - (yyval.String) = (yyvsp[-6].String); + (yyval.Value).val = (yyvsp[-6].String); + (yyval.Value).type = getFunctionReturnType((yyvsp[-4].Type)); + delete (yyvsp[-5].String); delete (yyvsp[-4].Type); (yyvsp[-3].Value).destroy(); delete (yyvsp[-1].ValList); ;} break; case 290: -#line 1339 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1461 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValList) = (yyvsp[0].ValList); ;} break; case 291: -#line 1340 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1462 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValList) = new ValueList(); ;} break; case 293: -#line 1345 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1467 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 294: -#line 1348 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1470 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-2].String) += " " + *(yyvsp[-1].Type).newTy; + *(yyvsp[-2].String) += " " + (yyvsp[-1].Type)->getNewTy(); if (!(yyvsp[0].String)->empty()) *(yyvsp[-2].String) += " " + *(yyvsp[0].String); - (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String); - (yyval.String) = (yyvsp[-2].String); + (yyval.Value).val = (yyvsp[-2].String); + (yyval.Value).type = (yyvsp[-1].Type)->getPointerType(); + delete (yyvsp[-1].Type); delete (yyvsp[0].String); ;} break; case 295: -#line 1355 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1478 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + ", " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].Value).val; + std::string Name = getUniqueName((yyvsp[-1].Value).val, (yyvsp[-2].Type)); + *(yyvsp[-5].String) += " " + (yyvsp[-4].Type)->getNewTy() + ", " + (yyvsp[-2].Type)->getNewTy() + " " + Name; if (!(yyvsp[0].String)->empty()) *(yyvsp[-5].String) += " " + *(yyvsp[0].String); - (yyvsp[-4].Type).destroy(); (yyvsp[-2].Type).destroy(); (yyvsp[-1].Value).destroy(); delete (yyvsp[0].String); - (yyval.String) = (yyvsp[-5].String); + (yyval.Value).val = (yyvsp[-5].String); + (yyval.Value).type = (yyvsp[-4].Type)->getPointerType(); + delete (yyvsp[-4].Type); delete (yyvsp[-2].Type); (yyvsp[-1].Value).destroy(); delete (yyvsp[0].String); ;} break; case 296: -#line 1362 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1487 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-2].String) += " " + *(yyvsp[-1].Type).newTy; + *(yyvsp[-2].String) += " " + (yyvsp[-1].Type)->getNewTy(); if (!(yyvsp[0].String)->empty()) *(yyvsp[-2].String) += " " + *(yyvsp[0].String); - (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String); - (yyval.String) = (yyvsp[-2].String); + (yyval.Value).val = (yyvsp[-2].String); + (yyval.Value).type = (yyvsp[-1].Type)->getPointerType(); + delete (yyvsp[-1].Type); delete (yyvsp[0].String); ;} break; case 297: -#line 1369 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1495 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + ", " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].Value).val; + std::string Name = getUniqueName((yyvsp[-1].Value).val, (yyvsp[-2].Type)); + *(yyvsp[-5].String) += " " + (yyvsp[-4].Type)->getNewTy() + ", " + (yyvsp[-2].Type)->getNewTy() + " " + Name; if (!(yyvsp[0].String)->empty()) *(yyvsp[-5].String) += " " + *(yyvsp[0].String); - (yyvsp[-4].Type).destroy(); (yyvsp[-2].Type).destroy(); (yyvsp[-1].Value).destroy(); delete (yyvsp[0].String); - (yyval.String) = (yyvsp[-5].String); + (yyval.Value).val = (yyvsp[-5].String); + (yyval.Value).type = (yyvsp[-4].Type)->getPointerType(); + delete (yyvsp[-4].Type); delete (yyvsp[-2].Type); (yyvsp[-1].Value).destroy(); delete (yyvsp[0].String); ;} break; case 298: -#line 1376 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1504 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val; + (yyval.Value).val = (yyvsp[-1].String); + (yyval.Value).type = new TypeInfo("void", VoidTy); (yyvsp[0].Value).destroy(); - (yyval.String) = (yyvsp[-1].String); ;} break; case 299: -#line 1381 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1510 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { + std::string Name = getUniqueName((yyvsp[0].Value).val, (yyvsp[-1].Type)); if (!(yyvsp[-3].String)->empty()) *(yyvsp[-3].String) += " "; - *(yyvsp[-3].String) += *(yyvsp[-2].String) + " " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].Value).val; - delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy(); - (yyval.String) = (yyvsp[-3].String); + *(yyvsp[-3].String) += *(yyvsp[-2].String) + " " + (yyvsp[-1].Type)->getNewTy() + " " + Name; + (yyval.Value).val = (yyvsp[-3].String); + (yyval.Value).type = (yyvsp[-1].Type)->getElementType()->clone(); + delete (yyvsp[-2].String); delete (yyvsp[-1].Type); (yyvsp[0].Value).destroy(); ;} break; case 300: -#line 1388 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1519 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { + std::string Name = getUniqueName((yyvsp[0].Value).val, (yyvsp[-1].Type)); if (!(yyvsp[-5].String)->empty()) *(yyvsp[-5].String) += " "; - *(yyvsp[-5].String) += *(yyvsp[-4].String) + " " + *(yyvsp[-3].Value).val + ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].Value).val; - delete (yyvsp[-4].String); (yyvsp[-3].Value).destroy(); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy(); - (yyval.String) = (yyvsp[-5].String); + *(yyvsp[-5].String) += *(yyvsp[-4].String) + " " + *(yyvsp[-3].Value).val + ", " + (yyvsp[-1].Type)->getNewTy() + " " + Name; + (yyval.Value).val = (yyvsp[-5].String); + (yyval.Value).type = new TypeInfo("void", VoidTy); + delete (yyvsp[-4].String); (yyvsp[-3].Value).destroy(); delete (yyvsp[-1].Type); (yyvsp[0].Value).destroy(); ;} break; case 301: -#line 1395 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1528 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { + std::string Name = getUniqueName((yyvsp[-1].Value).val, (yyvsp[-2].Type)); // Upgrade the indices for (unsigned i = 0; i < (yyvsp[0].ValList)->size(); ++i) { ValueInfo& VI = (*(yyvsp[0].ValList))[i]; - if (VI.type.isUnsigned() && !VI.isConstant() && - VI.type.getBitWidth() < 64) { + if (VI.type->isUnsigned() && !VI.isConstant() && + VI.type->getBitWidth() < 64) { std::string* old = VI.val; *O << " %gep_upgrade" << unique << " = zext " << *old << " to i64\n"; VI.val = new std::string("i64 %gep_upgrade" + llvm::utostr(unique++)); - VI.type.oldTy = ULongTy; - delete old; + VI.type->setOldTy(ULongTy); } } - *(yyvsp[-3].String) += " " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].Value).val; + *(yyvsp[-3].String) += " " + (yyvsp[-2].Type)->getNewTy() + " " + Name; for (unsigned i = 0; i < (yyvsp[0].ValList)->size(); ++i) { ValueInfo& VI = (*(yyvsp[0].ValList))[i]; *(yyvsp[-3].String) += ", " + *VI.val; - VI.destroy(); } - (yyvsp[-2].Type).destroy(); (yyvsp[-1].Value).destroy(); delete (yyvsp[0].ValList); - (yyval.String) = (yyvsp[-3].String); + (yyval.Value).val = (yyvsp[-3].String); + (yyval.Value).type = getGEPIndexedType((yyvsp[-2].Type),(yyvsp[0].ValList)); + (yyvsp[-1].Value).destroy(); delete (yyvsp[0].ValList); ;} break; @@ -3924,7 +4056,7 @@ yyreduce: } /* Line 1126 of yacc.c. */ -#line 3928 "UpgradeParser.tab.c" +#line 4060 "UpgradeParser.tab.c" yyvsp -= yylen; yyssp -= yylen; @@ -4192,7 +4324,7 @@ yyreturn: } -#line 1419 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1552 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" int yyerror(const char *ErrorMsg) { diff --git a/tools/llvm-upgrade/UpgradeParser.cpp.cvs b/tools/llvm-upgrade/UpgradeParser.cpp.cvs index 6e5edc3596d..e243074ae66 100644 --- a/tools/llvm-upgrade/UpgradeParser.cpp.cvs +++ b/tools/llvm-upgrade/UpgradeParser.cpp.cvs @@ -371,12 +371,10 @@ #line 14 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" #include "ParserInternals.h" -#include #include #include #include #include -#include #define YYERROR_VERBOSE 1 #define YYINCLUDED_STDLIB_H @@ -436,71 +434,72 @@ void UpgradeAssembly(const std::string &infile, std::istream& in, } } -static void ResolveType(TypeInfo& Ty) { - if (Ty.oldTy == UnresolvedTy) { - TypeMap::iterator I = NamedTypes.find(*Ty.newTy); +TypeInfo* ResolveType(TypeInfo*& Ty) { + if (Ty->isUnresolved()) { + TypeMap::iterator I = NamedTypes.find(Ty->getNewTy()); if (I != NamedTypes.end()) { - Ty.oldTy = I->second.oldTy; - Ty.elemTy = I->second.elemTy; + Ty = I->second.clone(); + return Ty; } else { - std::string msg("Can't resolve type: "); - msg += *Ty.newTy; + std::string msg("Cannot resolve type: "); + msg += Ty->getNewTy(); yyerror(msg.c_str()); } - } else if (Ty.oldTy == NumericTy) { - unsigned ref = atoi(&((Ty.newTy->c_str())[1])); // Skip the '\\' + } else if (Ty->isNumeric()) { + unsigned ref = atoi(&((Ty->getNewTy().c_str())[1])); // Skip the '\\' if (ref < EnumeratedTypes.size()) { - Ty.oldTy = EnumeratedTypes[ref].oldTy; - Ty.elemTy = EnumeratedTypes[ref].elemTy; + Ty = EnumeratedTypes[ref].clone(); + return Ty; } else { std::string msg("Can't resolve type: "); - msg += *Ty.newTy; + msg += Ty->getNewTy(); yyerror(msg.c_str()); } } // otherwise its already resolved. + return Ty; } static const char* getCastOpcode( - std::string& Source, const TypeInfo& SrcTy, const TypeInfo& DstTy) + std::string& Source, const TypeInfo* SrcTy, const TypeInfo* DstTy) { - unsigned SrcBits = SrcTy.getBitWidth(); - unsigned DstBits = DstTy.getBitWidth(); + unsigned SrcBits = SrcTy->getBitWidth(); + unsigned DstBits = DstTy->getBitWidth(); const char* opcode = "bitcast"; // Run through the possibilities ... - if (DstTy.isIntegral()) { // Casting to integral - if (SrcTy.isIntegral()) { // Casting from integral + if (DstTy->isIntegral()) { // Casting to integral + if (SrcTy->isIntegral()) { // Casting from integral if (DstBits < SrcBits) opcode = "trunc"; else if (DstBits > SrcBits) { // its an extension - if (SrcTy.isSigned()) + if (SrcTy->isSigned()) opcode ="sext"; // signed -> SEXT else opcode = "zext"; // unsigned -> ZEXT } else { opcode = "bitcast"; // Same size, No-op cast } - } else if (SrcTy.isFloatingPoint()) { // Casting from floating pt - if (DstTy.isSigned()) + } else if (SrcTy->isFloatingPoint()) { // Casting from floating pt + if (DstTy->isSigned()) opcode = "fptosi"; // FP -> sint else opcode = "fptoui"; // FP -> uint - } else if (SrcTy.isPacked()) { - assert(DstBits == SrcTy.getBitWidth() && + } else if (SrcTy->isPacked()) { + assert(DstBits == SrcTy->getBitWidth() && "Casting packed to integer of different width"); opcode = "bitcast"; // same size, no-op cast } else { - assert(SrcTy.isPointer() && + assert(SrcTy->isPointer() && "Casting from a value that is not first-class type"); opcode = "ptrtoint"; // ptr -> int } - } else if (DstTy.isFloatingPoint()) { // Casting to floating pt - if (SrcTy.isIntegral()) { // Casting from integral - if (SrcTy.isSigned()) + } else if (DstTy->isFloatingPoint()) { // Casting to floating pt + if (SrcTy->isIntegral()) { // Casting from integral + if (SrcTy->isSigned()) opcode = "sitofp"; // sint -> FP else opcode = "uitofp"; // uint -> FP - } else if (SrcTy.isFloatingPoint()) { // Casting from floating pt + } else if (SrcTy->isFloatingPoint()) { // Casting from floating pt if (DstBits < SrcBits) { opcode = "fptrunc"; // FP -> smaller FP } else if (DstBits > SrcBits) { @@ -508,27 +507,27 @@ static const char* getCastOpcode( } else { opcode ="bitcast"; // same size, no-op cast } - } else if (SrcTy.isPacked()) { - assert(DstBits == SrcTy.getBitWidth() && + } else if (SrcTy->isPacked()) { + assert(DstBits == SrcTy->getBitWidth() && "Casting packed to floating point of different width"); opcode = "bitcast"; // same size, no-op cast } else { assert(0 && "Casting pointer or non-first class to float"); } - } else if (DstTy.isPacked()) { - if (SrcTy.isPacked()) { - assert(DstTy.getBitWidth() == SrcTy.getBitWidth() && + } else if (DstTy->isPacked()) { + if (SrcTy->isPacked()) { + assert(DstTy->getBitWidth() == SrcTy->getBitWidth() && "Casting packed to packed of different widths"); opcode = "bitcast"; // packed -> packed - } else if (DstTy.getBitWidth() == SrcBits) { + } else if (DstTy->getBitWidth() == SrcBits) { opcode = "bitcast"; // float/int -> packed } else { assert(!"Illegal cast to packed (wrong type or size)"); } - } else if (DstTy.isPointer()) { - if (SrcTy.isPointer()) { + } else if (DstTy->isPointer()) { + if (SrcTy->isPointer()) { opcode = "bitcast"; // ptr -> ptr - } else if (SrcTy.isIntegral()) { + } else if (SrcTy->isIntegral()) { opcode = "inttoptr"; // int -> ptr } else { assert(!"Casting invalid type to pointer"); @@ -539,12 +538,12 @@ static const char* getCastOpcode( return opcode; } -static std::string getCastUpgrade( - const std::string& Src, TypeInfo& SrcTy, TypeInfo& DstTy, bool isConst) +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()) { + 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) @@ -555,16 +554,16 @@ static std::string getCastUpgrade( Source = "i64 %cast_upgrade" + llvm::utostr(unique); } // Update the SrcTy for the getCastOpcode call below - SrcTy.destroy(); - SrcTy.newTy = new std::string("i64"); - SrcTy.oldTy = ULongTy; - } else if (DstTy.oldTy == BoolTy && SrcTy.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"); - const char* compareOp = SrcTy.isFloatingPoint() ? "fcmp one " : "icmp ne "; + delete SrcTy; + SrcTy = new TypeInfo("i64", ULongTy); + } else if (DstTy->isBool()) { + // cast type %x to bool was previously defined as setne type %x, null + // The cast semantic is now to truncate, not compare so we must retain + // the original intent by replacing the cast with a setne + const char* comparator = SrcTy->isPointer() ? ", null" : + (SrcTy->isFloatingPoint() ? ", 0.0" : + (SrcTy->isBool() ? ", false" : ", 0")); + const char* compareOp = SrcTy->isFloatingPoint() ? "fcmp one " : "icmp ne "; if (isConst) { Result = "(" + Source + comparator + ")"; Result = compareOp + Result; @@ -576,33 +575,32 @@ static std::string getCastUpgrade( ResolveType(DstTy); std::string Opcode(getCastOpcode(Source, SrcTy, DstTy)); if (isConst) - Result += Opcode + "( " + Source + " to " + *DstTy.newTy + ")"; + Result += Opcode + "( " + Source + " to " + DstTy->getNewTy() + ")"; else - Result += Opcode + " " + Source + " to " + *DstTy.newTy; + Result += Opcode + " " + Source + " to " + DstTy->getNewTy(); return Result; } -const char* getDivRemOpcode(const std::string& opcode, const TypeInfo& TI) { +const char* getDivRemOpcode(const std::string& opcode, TypeInfo* TI) { const char* op = opcode.c_str(); - TypeInfo Ty = TI; - ResolveType(Ty); - if (Ty.isPacked()) - Ty.oldTy = Ty.getElementType(); + const TypeInfo* Ty = ResolveType(TI); + if (Ty->isPacked()) + Ty = Ty->getElementType(); if (opcode == "div") - if (Ty.isFloatingPoint()) + if (Ty->isFloatingPoint()) op = "fdiv"; - else if (Ty.isUnsigned()) + else if (Ty->isUnsigned()) op = "udiv"; - else if (Ty.isSigned()) + else if (Ty->isSigned()) op = "sdiv"; else yyerror("Invalid type for div instruction"); else if (opcode == "rem") - if (Ty.isFloatingPoint()) + if (Ty->isFloatingPoint()) op = "frem"; - else if (Ty.isUnsigned()) + else if (Ty->isUnsigned()) op = "urem"; - else if (Ty.isSigned()) + else if (Ty->isSigned()) op = "srem"; else yyerror("Invalid type for rem instruction"); @@ -610,7 +608,7 @@ const char* getDivRemOpcode(const std::string& opcode, const TypeInfo& TI) { } std::string -getCompareOp(const std::string& setcc, const TypeInfo& TI) { +getCompareOp(const std::string& setcc, const TypeInfo* TI) { assert(setcc.length() == 5); char cc1 = setcc[3]; char cc2 = setcc[4]; @@ -619,20 +617,20 @@ getCompareOp(const std::string& setcc, const TypeInfo& TI) { std::string result("xcmp xxx"); result[6] = cc1; result[7] = cc2; - if (TI.isFloatingPoint()) { + if (TI->isFloatingPoint()) { result[0] = 'f'; result[5] = 'o'; if (cc1 == 'n') result[5] = 'u'; // NE maps to unordered else result[5] = 'o'; // everything else maps to ordered - } else if (TI.isIntegral() || TI.isPointer()) { + } else if (TI->isIntegral() || TI->isPointer()) { result[0] = 'i'; if ((cc1 == 'e' && cc2 == 'q') || (cc1 == 'n' && cc2 == 'e')) result.erase(5,1); - else if (TI.isSigned()) + else if (TI->isSigned()) result[5] = 's'; - else if (TI.isUnsigned() || TI.isPointer() || TI.isBool()) + else if (TI->isUnsigned() || TI->isPointer() || TI->isBool()) result[5] = 'u'; else yyerror("Invalid integral type for setcc"); @@ -640,6 +638,76 @@ getCompareOp(const std::string& setcc, const TypeInfo& TI) { return result; } +static TypeInfo* getFunctionReturnType(TypeInfo* PFTy) { + ResolveType(PFTy); + if (PFTy->isPointer()) { + TypeInfo* ElemTy = PFTy->getElementType(); + ResolveType(ElemTy); + if (ElemTy->isFunction()) + return ElemTy->getResultType()->clone(); + } else if (PFTy->isFunction()) { + return PFTy->getResultType()->clone(); + } + return PFTy->clone(); +} + +static TypeInfo* getGEPIndexedType(TypeInfo* PTy, ValueList* idxs) { + ResolveType(PTy); + assert(PTy->isPointer() && "GEP Operand is not a pointer?"); + TypeInfo* Result = PTy->getElementType(); // just skip first index + ResolveType(Result); + for (unsigned i = 1; i < idxs->size(); ++i) { + if (Result->isComposite()) { + Result = Result->getIndexedType((*idxs)[i]); + ResolveType(Result); + } else + yyerror("Invalid type for index"); + } + return Result->getPointerType(); +} + +static std::string makeUniqueName(const std::string *Name, bool isSigned) { + const char *suffix = ".u"; + if (isSigned) + suffix = ".s"; + if ((*Name)[Name->size()-1] == '"') { + std::string Result(*Name); + Result.insert(Name->size()-1, suffix); + return Result; + } + return *Name + suffix; +} + +// This function handles appending .u or .s to integer value names that +// were previously unsigned or signed, respectively. This avoids name +// collisions since the unsigned and signed type planes have collapsed +// into a single signless type plane. +static std::string getUniqueName(const std::string *Name, TypeInfo* Ty) { + // If its not a symbolic name, don't modify it, probably a constant val. + if ((*Name)[0] != '%' && (*Name)[0] != '"') + return *Name; + // If its a numeric reference, just leave it alone. + if (isdigit((*Name)[1])) + return *Name; + + // Resolve the type + ResolveType(Ty); + + // Default the result to the current name + std::string Result = *Name; + + if (Ty->isInteger()) { + // If its an integer type, make the name unique + Result = makeUniqueName(Name, Ty->isSigned()); + } else if (Ty->isPointer()) { + while (Ty->isPointer()) + Ty = Ty->getElementType(); + if (Ty->isInteger()) + Result = makeUniqueName(Name, Ty->isSigned()); + } + return Result; +} + /* Enabling traces. */ @@ -661,16 +729,17 @@ getCompareOp(const std::string& setcc, const TypeInfo& TI) { #endif #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 289 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 357 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" typedef union YYSTYPE { std::string* String; - TypeInfo Type; + TypeInfo* Type; ValueInfo Value; ConstInfo Const; ValueList* ValList; + TypeList* TypeVec; } YYSTYPE; /* Line 196 of yacc.c. */ -#line 674 "UpgradeParser.tab.c" +#line 743 "UpgradeParser.tab.c" # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 @@ -682,7 +751,7 @@ typedef union YYSTYPE { /* Line 219 of yacc.c. */ -#line 686 "UpgradeParser.tab.c" +#line 755 "UpgradeParser.tab.c" #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) # define YYSIZE_T __SIZE_TYPE__ @@ -1038,37 +1107,37 @@ static const short int yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short int yyrline[] = { - 0, 352, 352, 352, 353, 353, 357, 357, 357, 357, - 357, 357, 357, 358, 358, 358, 358, 359, 359, 359, - 360, 360, 360, 360, 360, 360, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 362, 362, 362, 362, - 362, 362, 362, 362, 362, 362, 363, 363, 363, 363, - 363, 363, 364, 364, 364, 364, 365, 365, 365, 365, - 365, 365, 365, 366, 366, 366, 366, 366, 366, 371, - 371, 371, 371, 372, 372, 372, 372, 373, 373, 374, - 374, 377, 380, 385, 385, 385, 385, 385, 385, 386, - 387, 390, 390, 390, 390, 390, 391, 392, 397, 402, - 403, 406, 407, 415, 421, 422, 425, 426, 435, 436, - 449, 449, 450, 450, 451, 455, 455, 455, 455, 455, - 455, 455, 456, 456, 456, 456, 456, 458, 462, 466, - 469, 474, 480, 488, 496, 502, 506, 512, 516, 527, - 530, 538, 539, 544, 547, 557, 563, 568, 574, 580, - 586, 591, 597, 603, 609, 615, 621, 627, 633, 639, - 645, 653, 667, 679, 684, 690, 695, 701, 706, 711, - 719, 724, 729, 739, 744, 749, 749, 759, 764, 767, - 772, 776, 780, 782, 782, 785, 797, 802, 807, 816, - 825, 834, 843, 848, 853, 858, 860, 860, 863, 868, - 875, 880, 887, 894, 899, 900, 908, 908, 909, 909, - 911, 918, 922, 926, 929, 934, 937, 940, 959, 960, - 963, 974, 975, 977, 985, 986, 987, 991, 1004, 1005, - 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1009, 1010, 1015, - 1016, 1025, 1025, 1029, 1035, 1046, 1052, 1055, 1063, 1067, - 1072, 1075, 1081, 1081, 1083, 1088, 1093, 1098, 1106, 1113, - 1119, 1139, 1144, 1150, 1155, 1163, 1180, 1187, 1195, 1199, - 1206, 1207, 1211, 1216, 1219, 1225, 1230, 1236, 1241, 1246, - 1251, 1259, 1287, 1292, 1297, 1302, 1307, 1312, 1317, 1334, - 1339, 1340, 1344, 1345, 1348, 1355, 1362, 1369, 1376, 1381, - 1388, 1395 + 0, 422, 422, 422, 423, 423, 427, 427, 427, 427, + 427, 427, 427, 428, 428, 428, 428, 429, 429, 429, + 430, 430, 430, 430, 430, 430, 431, 431, 431, 431, + 431, 431, 431, 431, 431, 431, 432, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 433, 433, 433, 433, + 433, 433, 434, 434, 434, 434, 435, 435, 435, 435, + 435, 435, 435, 436, 436, 436, 436, 436, 436, 441, + 441, 441, 441, 442, 442, 442, 442, 443, 443, 444, + 444, 447, 450, 455, 455, 455, 455, 455, 455, 456, + 457, 460, 460, 460, 460, 460, 461, 462, 467, 472, + 473, 476, 477, 485, 491, 492, 495, 496, 505, 506, + 519, 519, 520, 520, 521, 525, 525, 525, 525, 525, + 525, 525, 526, 526, 526, 526, 526, 528, 531, 534, + 537, 541, 555, 562, 569, 580, 584, 595, 599, 608, + 612, 619, 620, 625, 630, 640, 646, 651, 657, 663, + 669, 674, 680, 686, 693, 699, 705, 711, 717, 723, + 729, 737, 750, 762, 767, 773, 778, 784, 789, 794, + 802, 807, 812, 822, 827, 832, 832, 842, 847, 850, + 855, 859, 863, 865, 865, 868, 878, 883, 888, 898, + 908, 918, 928, 933, 938, 943, 945, 945, 948, 953, + 960, 965, 972, 979, 984, 985, 993, 993, 994, 994, + 996, 1005, 1009, 1013, 1016, 1021, 1024, 1027, 1045, 1046, + 1049, 1060, 1061, 1063, 1072, 1073, 1074, 1078, 1091, 1092, + 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1096, 1097, 1102, + 1103, 1112, 1112, 1116, 1121, 1131, 1140, 1143, 1151, 1155, + 1160, 1163, 1169, 1169, 1171, 1176, 1181, 1186, 1195, 1203, + 1210, 1233, 1238, 1244, 1250, 1258, 1276, 1284, 1293, 1297, + 1304, 1305, 1309, 1314, 1317, 1326, 1334, 1343, 1351, 1359, + 1364, 1373, 1401, 1407, 1413, 1420, 1426, 1432, 1438, 1456, + 1461, 1462, 1466, 1467, 1470, 1478, 1487, 1495, 1504, 1510, + 1519, 1528 }; #endif @@ -2417,26 +2486,26 @@ yyreduce: switch (yyn) { case 81: -#line 377 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 447 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = (yyvsp[-1].String); ;} break; case 82: -#line 380 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 450 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(""); ;} break; case 90: -#line 387 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 457 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(""); ;} break; case 97: -#line 392 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 462 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-1].String) += *(yyvsp[0].String); delete (yyvsp[0].String); @@ -2445,27 +2514,27 @@ yyreduce: break; case 98: -#line 397 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 467 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(""); ;} break; case 99: -#line 402 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 472 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 100: -#line 403 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 473 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-1].String) += " " + *(yyvsp[0].String); delete (yyvsp[0].String); (yyval.String) = (yyvsp[-1].String); ;} break; case 101: -#line 406 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 476 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 102: -#line 407 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 477 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyvsp[-1].String)->insert(0, ", "); *(yyvsp[-1].String) += " " + *(yyvsp[0].String); @@ -2475,7 +2544,7 @@ yyreduce: break; case 103: -#line 415 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 485 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-1].String) += " " + *(yyvsp[0].String); delete (yyvsp[0].String); @@ -2484,17 +2553,17 @@ yyreduce: break; case 104: -#line 421 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 491 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 106: -#line 425 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 495 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 107: -#line 426 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 496 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyvsp[-1].String)->insert(0, ", "); if (!(yyvsp[0].String)->empty()) @@ -2505,7 +2574,7 @@ yyreduce: break; case 109: -#line 436 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 506 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-1].String) += " " + *(yyvsp[0].String); delete (yyvsp[0].String); @@ -2514,334 +2583,347 @@ yyreduce: break; case 127: -#line 458 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 528 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.Type).newTy = (yyvsp[0].String); - (yyval.Type).oldTy = OpaqueTy; + (yyval.Type) = new TypeInfo((yyvsp[0].String), OpaqueTy); ;} break; case 128: -#line 462 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 531 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.Type).newTy = (yyvsp[0].String); - (yyval.Type).oldTy = UnresolvedTy; + (yyval.Type) = new TypeInfo((yyvsp[0].String), UnresolvedTy); ;} break; case 129: -#line 466 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 534 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Type) = (yyvsp[0].Type); ;} break; case 130: -#line 469 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 537 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Type UpReference (yyvsp[0].String)->insert(0, "\\"); - (yyval.Type).newTy = (yyvsp[0].String); - (yyval.Type).oldTy = NumericTy; + (yyval.Type) = new TypeInfo((yyvsp[0].String), NumericTy); ;} break; case 131: -#line 474 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 541 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Function derived type? - *(yyvsp[-3].Type).newTy += "( " + *(yyvsp[-1].String) + " )"; - delete (yyvsp[-1].String); - (yyval.Type).newTy = (yyvsp[-3].Type).newTy; - (yyval.Type).oldTy = FunctionTy; + std::string newTy( (yyvsp[-3].Type)->getNewTy() + "("); + for (unsigned i = 0; i < (yyvsp[-1].TypeVec)->size(); ++i) { + if (i != 0) + newTy += ", "; + if ((*(yyvsp[-1].TypeVec))[i]->isVoid()) + newTy += "..."; + else + newTy += (*(yyvsp[-1].TypeVec))[i]->getNewTy(); + } + newTy += ")"; + (yyval.Type) = new TypeInfo(new std::string(newTy), (yyvsp[-3].Type), (yyvsp[-1].TypeVec)); + EnumeratedTypes.push_back(*(yyval.Type)); ;} break; case 132: -#line 480 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 555 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Sized array type? (yyvsp[-3].String)->insert(0,"[ "); - *(yyvsp[-3].String) += " x " + *(yyvsp[-1].Type).newTy + " ]"; - delete (yyvsp[-1].Type).newTy; - (yyval.Type).newTy = (yyvsp[-3].String); - (yyval.Type).oldTy = ArrayTy; - (yyval.Type).elemTy = (yyvsp[-1].Type).oldTy; + *(yyvsp[-3].String) += " x " + (yyvsp[-1].Type)->getNewTy() + " ]"; + uint64_t elems = atoi((yyvsp[-3].String)->c_str()); + (yyval.Type) = new TypeInfo((yyvsp[-3].String), ArrayTy, (yyvsp[-1].Type), elems); + EnumeratedTypes.push_back(*(yyval.Type)); ;} break; case 133: -#line 488 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 562 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Packed array type? (yyvsp[-3].String)->insert(0,"< "); - *(yyvsp[-3].String) += " x " + *(yyvsp[-1].Type).newTy + " >"; - delete (yyvsp[-1].Type).newTy; - (yyval.Type).newTy = (yyvsp[-3].String); - (yyval.Type).oldTy = PackedTy; - (yyval.Type).elemTy = (yyvsp[-1].Type).oldTy; + *(yyvsp[-3].String) += " x " + (yyvsp[-1].Type)->getNewTy() + " >"; + uint64_t elems = atoi((yyvsp[-3].String)->c_str()); + (yyval.Type) = new TypeInfo((yyvsp[-3].String), PackedTy, (yyvsp[-1].Type), elems); + EnumeratedTypes.push_back(*(yyval.Type)); ;} break; case 134: -#line 496 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 569 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Structure type? - (yyvsp[-1].String)->insert(0, "{ "); - *(yyvsp[-1].String) += " }"; - (yyval.Type).newTy = (yyvsp[-1].String); - (yyval.Type).oldTy = StructTy; + std::string newTy("{"); + for (unsigned i = 0; i < (yyvsp[-1].TypeVec)->size(); ++i) { + if (i != 0) + newTy += ", "; + newTy += (*(yyvsp[-1].TypeVec))[i]->getNewTy(); + } + newTy += "}"; + (yyval.Type) = new TypeInfo(new std::string(newTy), StructTy, (yyvsp[-1].TypeVec)); + EnumeratedTypes.push_back(*(yyval.Type)); ;} break; case 135: -#line 502 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 580 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Empty structure type? - (yyval.Type).newTy = new std::string("{}"); - (yyval.Type).oldTy = StructTy; + (yyval.Type) = new TypeInfo(new std::string("{}"), StructTy, new TypeList()); + EnumeratedTypes.push_back(*(yyval.Type)); ;} break; case 136: -#line 506 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 584 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Packed Structure type? - (yyvsp[-2].String)->insert(0, "<{ "); - *(yyvsp[-2].String) += " }>"; - (yyval.Type).newTy = (yyvsp[-2].String); - (yyval.Type).oldTy = StructTy; + std::string newTy("<{"); + for (unsigned i = 0; i < (yyvsp[-2].TypeVec)->size(); ++i) { + if (i != 0) + newTy += ", "; + newTy += (*(yyvsp[-2].TypeVec))[i]->getNewTy(); + } + newTy += "}>"; + (yyval.Type) = new TypeInfo(new std::string(newTy), PackedStructTy, (yyvsp[-2].TypeVec)); + EnumeratedTypes.push_back(*(yyval.Type)); ;} break; case 137: -#line 512 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 595 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Empty packed structure type? - (yyval.Type).newTy = new std::string("<{}>"); - (yyval.Type).oldTy = StructTy; + (yyval.Type) = new TypeInfo(new std::string("<{}>"), PackedStructTy, new TypeList()); + EnumeratedTypes.push_back(*(yyval.Type)); ;} break; case 138: -#line 516 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 599 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Pointer type? - *(yyvsp[-1].Type).newTy += '*'; - (yyval.Type).elemTy = (yyvsp[-1].Type).oldTy; - (yyvsp[-1].Type).oldTy = PointerTy; - (yyval.Type) = (yyvsp[-1].Type); + (yyval.Type) = (yyvsp[-1].Type)->getPointerType(); + EnumeratedTypes.push_back(*(yyval.Type)); ;} break; case 139: -#line 527 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 608 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.String) = (yyvsp[0].Type).newTy; + (yyval.TypeVec) = new TypeList(); + (yyval.TypeVec)->push_back((yyvsp[0].Type)); ;} break; case 140: -#line 530 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 612 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-2].String) += ", " + *(yyvsp[0].Type).newTy; - delete (yyvsp[0].Type).newTy; - (yyval.String) = (yyvsp[-2].String); + (yyval.TypeVec) = (yyvsp[-2].TypeVec); + (yyval.TypeVec)->push_back((yyvsp[0].Type)); ;} break; case 142: -#line 539 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 620 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-2].String) += ", ..."; + (yyval.TypeVec) = (yyvsp[-2].TypeVec); + (yyval.TypeVec)->push_back(new TypeInfo("void",VoidTy)); delete (yyvsp[0].String); - (yyval.String) = (yyvsp[-2].String); ;} break; case 143: -#line 544 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 625 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.String) = (yyvsp[0].String); + (yyval.TypeVec) = new TypeList(); + (yyval.TypeVec)->push_back(new TypeInfo("void",VoidTy)); + delete (yyvsp[0].String); ;} break; case 144: -#line 547 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 630 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.String) = new std::string(); + (yyval.TypeVec) = new TypeList(); ;} break; case 145: -#line 557 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 640 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Nonempty unsized arr (yyval.Const).type = (yyvsp[-3].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-3].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-3].Type)->getNewTy()); *(yyval.Const).cnst += " [ " + *(yyvsp[-1].String) + " ]"; delete (yyvsp[-1].String); ;} break; case 146: -#line 563 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 646 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Const).type = (yyvsp[-2].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-2].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-2].Type)->getNewTy()); *(yyval.Const).cnst += "[ ]"; ;} break; case 147: -#line 568 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 651 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Const).type = (yyvsp[-2].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-2].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-2].Type)->getNewTy()); *(yyval.Const).cnst += " c" + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 148: -#line 574 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 657 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Nonempty unsized arr (yyval.Const).type = (yyvsp[-3].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-3].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-3].Type)->getNewTy()); *(yyval.Const).cnst += " < " + *(yyvsp[-1].String) + " >"; delete (yyvsp[-1].String); ;} break; case 149: -#line 580 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 663 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Const).type = (yyvsp[-3].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-3].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-3].Type)->getNewTy()); *(yyval.Const).cnst += " { " + *(yyvsp[-1].String) + " }"; delete (yyvsp[-1].String); ;} break; case 150: -#line 586 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 669 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Const).type = (yyvsp[-2].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-2].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-2].Type)->getNewTy()); *(yyval.Const).cnst += " {}"; ;} break; case 151: -#line 591 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 674 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); *(yyval.Const).cnst += " " + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 152: -#line 597 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 680 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); *(yyval.Const).cnst += " " + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 153: -#line 603 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 686 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { + std::string Name = getUniqueName((yyvsp[0].String),(yyvsp[-1].Type)); (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); - *(yyval.Const).cnst += " " + *(yyvsp[0].String); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); + *(yyval.Const).cnst += " " + Name; delete (yyvsp[0].String); ;} break; case 154: -#line 609 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 693 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); *(yyval.Const).cnst += " " + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 155: -#line 615 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 699 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); *(yyval.Const).cnst += " " + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 156: -#line 621 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 705 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // integral constants (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); *(yyval.Const).cnst += " " + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 157: -#line 627 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 711 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // integral constants (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); *(yyval.Const).cnst += " " + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 158: -#line 633 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 717 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Boolean constants (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); *(yyval.Const).cnst += " " + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 159: -#line 639 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 723 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Boolean constants (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); *(yyval.Const).cnst += " " + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 160: -#line 645 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 729 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Float & Double constants (yyval.Const).type = (yyvsp[-1].Type); - (yyval.Const).cnst = new std::string(*(yyvsp[-1].Type).newTy); + (yyval.Const).cnst = new std::string((yyvsp[-1].Type)->getNewTy()); *(yyval.Const).cnst += " " + *(yyvsp[0].String); delete (yyvsp[0].String); ;} break; case 161: -#line 653 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 737 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { std::string source = *(yyvsp[-3].Const).cnst; - TypeInfo DstTy = (yyvsp[-1].Type); - ResolveType(DstTy); + TypeInfo* DstTy = ResolveType((yyvsp[-1].Type)); if (*(yyvsp[-5].String) == "cast") { // Call getCastUpgrade to upgrade the old cast - (yyval.String) = new std::string(getCastUpgrade(source, (yyvsp[-3].Const).type, (yyvsp[-1].Type), true)); + (yyval.String) = new std::string(getCastUpgrade(source, (yyvsp[-3].Const).type, DstTy, 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) += "( " + source + " to " + (yyvsp[-1].Type)->getNewTy() + ")"; } - delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); + delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); delete (yyvsp[-2].String); delete (yyvsp[-1].Type); ;} break; case 162: -#line 667 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 750 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-4].String) += "(" + *(yyvsp[-2].Const).cnst; for (unsigned i = 0; i < (yyvsp[-1].ValList)->size(); ++i) { @@ -2857,7 +2939,7 @@ yyreduce: break; case 163: -#line 679 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 762 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")"; (yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy(); @@ -2866,7 +2948,7 @@ yyreduce: break; case 164: -#line 684 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 767 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const char* op = getDivRemOpcode(*(yyvsp[-5].String), (yyvsp[-3].Const).type); (yyval.String) = new std::string(op); @@ -2876,7 +2958,7 @@ yyreduce: break; case 165: -#line 690 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 773 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")"; (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy(); @@ -2885,7 +2967,7 @@ yyreduce: break; case 166: -#line 695 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 778 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-5].String) = getCompareOp(*(yyvsp[-5].String), (yyvsp[-3].Const).type); *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")"; @@ -2895,7 +2977,7 @@ yyreduce: break; case 167: -#line 701 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 784 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-6].String) += "(" + *(yyvsp[-5].String) + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")"; delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy(); @@ -2904,7 +2986,7 @@ yyreduce: break; case 168: -#line 706 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 789 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-6].String) += "(" + *(yyvsp[-5].String) + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")"; delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy(); @@ -2913,11 +2995,11 @@ yyreduce: break; case 169: -#line 711 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 794 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const char* shiftop = (yyvsp[-5].String)->c_str(); if (*(yyvsp[-5].String) == "shr") - shiftop = ((yyvsp[-3].Const).type.isUnsigned()) ? "lshr" : "ashr"; + shiftop = ((yyvsp[-3].Const).type->isUnsigned()) ? "lshr" : "ashr"; (yyval.String) = new std::string(shiftop); *(yyval.String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")"; delete (yyvsp[-5].String); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy(); @@ -2925,7 +3007,7 @@ yyreduce: break; case 170: -#line 719 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 802 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-5].String) += "(" + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")"; (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy(); @@ -2934,7 +3016,7 @@ yyreduce: break; case 171: -#line 724 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 807 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")"; (yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy(); @@ -2943,7 +3025,7 @@ yyreduce: break; case 172: -#line 729 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 812 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-7].String) += "(" + *(yyvsp[-5].Const).cnst + "," + *(yyvsp[-3].Const).cnst + "," + *(yyvsp[-1].Const).cnst + ")"; (yyvsp[-5].Const).destroy(); (yyvsp[-3].Const).destroy(); (yyvsp[-1].Const).destroy(); @@ -2952,7 +3034,7 @@ yyreduce: break; case 173: -#line 739 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 822 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-2].String) += ", " + *(yyvsp[0].Const).cnst; (yyvsp[0].Const).destroy(); @@ -2961,25 +3043,25 @@ yyreduce: break; case 174: -#line 744 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 827 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(*(yyvsp[0].Const).cnst); (yyvsp[0].Const).destroy(); ;} break; case 177: -#line 759 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 842 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { ;} break; case 178: -#line 764 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 847 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = 0; ;} break; case 179: -#line 767 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 850 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << *(yyvsp[0].String) << '\n'; delete (yyvsp[0].String); @@ -2988,7 +3070,7 @@ yyreduce: break; case 180: -#line 772 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 855 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << "module asm " << ' ' << *(yyvsp[0].String) << '\n'; (yyval.String) = 0; @@ -2996,7 +3078,7 @@ yyreduce: break; case 181: -#line 776 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 859 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << "implementation\n"; (yyval.String) = 0; @@ -3004,33 +3086,31 @@ yyreduce: break; case 182: -#line 780 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 863 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = 0; ;} break; case 184: -#line 782 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 865 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = (yyvsp[0].String); *(yyval.String) = "external"; ;} break; case 185: -#line 785 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 868 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - EnumeratedTypes.push_back((yyvsp[0].Type)); + 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; - NamedTypes[*(yyvsp[-2].String)].elemTy = (yyvsp[0].Type).elemTy; + NamedTypes[*(yyvsp[-2].String)] = *(yyvsp[0].Type); *O << *(yyvsp[-2].String) << " = "; } - *O << "type " << *(yyvsp[0].Type).newTy << '\n'; - delete (yyvsp[-2].String); delete (yyvsp[-1].String); (yyvsp[0].Type).destroy(); + *O << "type " << (yyvsp[0].Type)->getNewTy() << '\n'; + delete (yyvsp[-2].String); delete (yyvsp[-1].String); (yyval.String) = 0; ;} break; case 186: -#line 797 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 878 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Function prototypes can be in const pool *O << *(yyvsp[0].String) << '\n'; delete (yyvsp[0].String); @@ -3039,7 +3119,7 @@ yyreduce: break; case 187: -#line 802 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 883 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Asm blocks can be in the const pool *O << *(yyvsp[-2].String) << ' ' << *(yyvsp[-1].String) << ' ' << *(yyvsp[0].String) << '\n'; delete (yyvsp[-2].String); delete (yyvsp[-1].String); delete (yyvsp[0].String); @@ -3048,59 +3128,63 @@ yyreduce: break; case 188: -#line 807 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 888 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-4].String)->empty()) { - *O << *(yyvsp[-4].String) << " = "; - Globals[*(yyvsp[-4].String)] = (yyvsp[-1].Const).type.clone(); + std::string Name = getUniqueName((yyvsp[-4].String),(yyvsp[-1].Const).type); + *O << Name << " = "; + Globals[Name] = *(yyvsp[-1].Const).type; } *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); + delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); delete (yyvsp[0].String); (yyval.String) = 0; ;} break; case 189: -#line 816 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 898 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-4].String)->empty()) { - *O << *(yyvsp[-4].String) << " = "; - Globals[*(yyvsp[-4].String)] = (yyvsp[-1].Type).clone(); + std::string Name = getUniqueName((yyvsp[-4].String),(yyvsp[-1].Type)); + *O << Name << " = "; + Globals[Name] = *(yyvsp[-1].Type); } - *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); + *O << *(yyvsp[-3].String) << ' ' << *(yyvsp[-2].String) << ' ' << (yyvsp[-1].Type)->getNewTy() << ' ' << *(yyvsp[0].String) << '\n'; + delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); delete (yyvsp[0].String); (yyval.String) = 0; ;} break; case 190: -#line 825 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 908 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-4].String)->empty()) { - *O << *(yyvsp[-4].String) << " = "; - Globals[*(yyvsp[-4].String)] = (yyvsp[-1].Type).clone(); + std::string Name = getUniqueName((yyvsp[-4].String),(yyvsp[-1].Type)); + *O << Name << " = "; + Globals[Name] = *(yyvsp[-1].Type); } - *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); + *O << *(yyvsp[-3].String) << ' ' << *(yyvsp[-2].String) << ' ' << (yyvsp[-1].Type)->getNewTy() << ' ' << *(yyvsp[0].String) << '\n'; + delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); delete (yyvsp[0].String); (yyval.String) = 0; ;} break; case 191: -#line 834 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 918 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-4].String)->empty()) { - *O << *(yyvsp[-4].String) << " = "; - Globals[*(yyvsp[-4].String)] = (yyvsp[-1].Type).clone(); + std::string Name = getUniqueName((yyvsp[-4].String),(yyvsp[-1].Type)); + *O << Name << " = "; + Globals[Name] = *(yyvsp[-1].Type); } - *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); + *O << *(yyvsp[-3].String) << ' ' << *(yyvsp[-2].String) << ' ' << (yyvsp[-1].Type)->getNewTy() << ' ' << *(yyvsp[0].String) << '\n'; + delete (yyvsp[-4].String); delete (yyvsp[-3].String); delete (yyvsp[-2].String); delete (yyvsp[0].String); (yyval.String) = 0; ;} break; case 192: -#line 843 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 928 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << *(yyvsp[-1].String) << ' ' << *(yyvsp[0].String) << '\n'; delete (yyvsp[-1].String); delete (yyvsp[0].String); @@ -3109,7 +3193,7 @@ yyreduce: break; case 193: -#line 848 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 933 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << *(yyvsp[-2].String) << " = " << *(yyvsp[0].String) << '\n'; delete (yyvsp[-2].String); delete (yyvsp[0].String); @@ -3118,14 +3202,14 @@ yyreduce: break; case 194: -#line 853 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 938 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = 0; ;} break; case 198: -#line 863 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 948 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-2].String) += " = " + *(yyvsp[0].String); delete (yyvsp[0].String); @@ -3134,7 +3218,7 @@ yyreduce: break; case 199: -#line 868 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 953 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-2].String) += " = " + *(yyvsp[0].String); if (*(yyvsp[0].String) == "64") @@ -3145,7 +3229,7 @@ yyreduce: break; case 200: -#line 875 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 960 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-2].String) += " = " + *(yyvsp[0].String); delete (yyvsp[0].String); @@ -3154,7 +3238,7 @@ yyreduce: break; case 201: -#line 880 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 965 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-2].String) += " = " + *(yyvsp[0].String); delete (yyvsp[0].String); @@ -3163,7 +3247,7 @@ yyreduce: break; case 202: -#line 887 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 972 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyvsp[-1].String)->insert(0, "[ "); *(yyvsp[-1].String) += " ]"; @@ -3172,7 +3256,7 @@ yyreduce: break; case 203: -#line 894 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 979 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-2].String) += ", " + *(yyvsp[0].String); delete (yyvsp[0].String); @@ -3181,29 +3265,31 @@ yyreduce: break; case 205: -#line 900 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 985 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 209: -#line 909 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 994 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 210: -#line 911 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 996 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.String) = (yyvsp[-1].Type).newTy; - if (!(yyvsp[0].String)->empty()) - *(yyval.String) += " " + *(yyvsp[0].String); + (yyval.String) = new std::string((yyvsp[-1].Type)->getNewTy()); + if (!(yyvsp[0].String)->empty()) { + std::string Name = getUniqueName((yyvsp[0].String), (yyvsp[-1].Type)); + *(yyval.String) += " " + Name; + } delete (yyvsp[0].String); ;} break; case 211: -#line 918 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1005 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-2].String) += ", " + *(yyvsp[0].String); delete (yyvsp[0].String); @@ -3211,21 +3297,21 @@ yyreduce: break; case 212: -#line 922 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1009 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = (yyvsp[0].String); ;} break; case 213: -#line 926 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1013 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = (yyvsp[0].String); ;} break; case 214: -#line 929 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1016 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-2].String) += ", ..."; (yyval.String) = (yyvsp[-2].String); @@ -3234,31 +3320,30 @@ yyreduce: break; case 215: -#line 934 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1021 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = (yyvsp[0].String); ;} break; case 216: -#line 937 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1024 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 217: -#line 940 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1027 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-7].String)->empty()) { *(yyvsp[-7].String) += " "; } - *(yyvsp[-7].String) += *(yyvsp[-6].Type).newTy + " " + *(yyvsp[-5].String) + "(" + *(yyvsp[-3].String) + ")"; + *(yyvsp[-7].String) += (yyvsp[-6].Type)->getNewTy() + " " + *(yyvsp[-5].String) + "(" + *(yyvsp[-3].String) + ")"; if (!(yyvsp[-1].String)->empty()) { *(yyvsp[-7].String) += " " + *(yyvsp[-1].String); } if (!(yyvsp[0].String)->empty()) { *(yyvsp[-7].String) += " " + *(yyvsp[0].String); } - (yyvsp[-6].Type).destroy(); delete (yyvsp[-5].String); delete (yyvsp[-3].String); delete (yyvsp[-1].String); @@ -3268,17 +3353,17 @@ yyreduce: break; case 218: -#line 959 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1045 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string("{"); delete (yyvsp[0].String); ;} break; case 219: -#line 960 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1046 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string ("{"); ;} break; case 220: -#line 963 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1049 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << "define "; if (!(yyvsp[-2].String)->empty()) { @@ -3291,32 +3376,33 @@ yyreduce: break; case 221: -#line 974 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1060 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string("}"); delete (yyvsp[0].String); ;} break; case 222: -#line 975 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1061 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string("}"); ;} break; case 223: -#line 977 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1063 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[-1].String)) *O << *(yyvsp[-1].String); *O << *(yyvsp[0].String) << "\n\n"; + delete (yyvsp[-2].String); delete (yyvsp[-1].String); delete (yyvsp[0].String); (yyval.String) = 0; ;} break; case 224: -#line 985 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1072 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 227: -#line 991 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1078 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-1].String)->empty()) *(yyvsp[-2].String) += " " + *(yyvsp[-1].String); @@ -3328,12 +3414,12 @@ yyreduce: break; case 228: -#line 1004 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1091 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 238: -#line 1010 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1097 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyvsp[-1].String)->insert(0, "<"); *(yyvsp[-1].String) += ">"; @@ -3342,7 +3428,7 @@ yyreduce: break; case 240: -#line 1016 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1103 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-3].String)->empty()) { *(yyvsp[-4].String) += " " + *(yyvsp[-3].String); @@ -3354,57 +3440,58 @@ yyreduce: break; case 243: -#line 1029 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1116 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Value).val = (yyvsp[0].String); (yyval.Value).constant = false; - (yyval.Value).type.newTy = 0; - (yyval.Value).type.oldTy = UnresolvedTy; + (yyval.Value).type = new TypeInfo(); ;} break; case 244: -#line 1035 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1121 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Value).val = (yyvsp[0].String); (yyval.Value).constant = true; - (yyval.Value).type.newTy = 0; - (yyval.Value).type.oldTy = UnresolvedTy; + (yyval.Value).type = new TypeInfo(); ;} break; case 245: -#line 1046 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1131 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { + std::string Name = getUniqueName((yyvsp[0].Value).val, (yyvsp[-1].Type)); (yyval.Value) = (yyvsp[0].Value); + delete (yyval.Value).val; + delete (yyval.Value).type; + (yyval.Value).val = new std::string((yyvsp[-1].Type)->getNewTy() + " " + Name); (yyval.Value).type = (yyvsp[-1].Type); - (yyval.Value).val->insert(0, *(yyvsp[-1].Type).newTy + " "); ;} break; case 246: -#line 1052 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1140 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = 0; ;} break; case 247: -#line 1055 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1143 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Do not allow functions with 0 basic blocks (yyval.String) = 0; ;} break; case 248: -#line 1063 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1151 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = 0; ;} break; case 249: -#line 1067 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1155 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << " " << *(yyvsp[0].String) << '\n'; delete (yyvsp[0].String); @@ -3413,14 +3500,14 @@ yyreduce: break; case 250: -#line 1072 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1160 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = 0; ;} break; case 251: -#line 1075 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1163 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << *(yyvsp[0].String) << '\n'; delete (yyvsp[0].String); @@ -3429,12 +3516,12 @@ yyreduce: break; case 253: -#line 1081 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1169 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = (yyvsp[0].String); *(yyval.String) = "unwind"; ;} break; case 254: -#line 1083 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1171 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Return with a result... *O << " " << *(yyvsp[-1].String) << ' ' << *(yyvsp[0].Value).val << '\n'; delete (yyvsp[-1].String); (yyvsp[0].Value).destroy(); @@ -3443,63 +3530,69 @@ yyreduce: break; case 255: -#line 1088 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1176 "/proj/llvm/llvm-3/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(); + *O << " " << *(yyvsp[-1].String) << ' ' << (yyvsp[0].Type)->getNewTy() << '\n'; + delete (yyvsp[-1].String); delete (yyvsp[0].Type); (yyval.String) = 0; ;} break; case 256: -#line 1093 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1181 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Unconditional Branch... - *O << " " << *(yyvsp[-2].String) << ' ' << *(yyvsp[-1].Type).newTy << ' ' << *(yyvsp[0].Value).val << '\n'; - delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy(); + *O << " " << *(yyvsp[-2].String) << ' ' << (yyvsp[-1].Type)->getNewTy() << ' ' << *(yyvsp[0].Value).val << '\n'; + delete (yyvsp[-2].String); delete (yyvsp[-1].Type); (yyvsp[0].Value).destroy(); (yyval.String) = 0; ;} break; case 257: -#line 1098 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1186 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *O << " " << *(yyvsp[-8].String) << ' ' << *(yyvsp[-7].Type).newTy << ' ' << *(yyvsp[-6].Value).val << ", " - << *(yyvsp[-4].Type).newTy << ' ' << *(yyvsp[-3].Value).val << ", " << *(yyvsp[-1].Type).newTy << ' ' + std::string Name = getUniqueName((yyvsp[-6].Value).val, (yyvsp[-7].Type)); + *O << " " << *(yyvsp[-8].String) << ' ' << (yyvsp[-7].Type)->getNewTy() << ' ' << Name << ", " + << (yyvsp[-4].Type)->getNewTy() << ' ' << *(yyvsp[-3].Value).val << ", " << (yyvsp[-1].Type)->getNewTy() << ' ' << *(yyvsp[0].Value).val << '\n'; - delete (yyvsp[-8].String); (yyvsp[-7].Type).destroy(); (yyvsp[-6].Value).destroy(); (yyvsp[-4].Type).destroy(); (yyvsp[-3].Value).destroy(); - (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy(); + delete (yyvsp[-8].String); delete (yyvsp[-7].Type); (yyvsp[-6].Value).destroy(); delete (yyvsp[-4].Type); (yyvsp[-3].Value).destroy(); + delete (yyvsp[-1].Type); (yyvsp[0].Value).destroy(); (yyval.String) = 0; ;} break; case 258: -#line 1106 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1195 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *O << " " << *(yyvsp[-8].String) << ' ' << *(yyvsp[-7].Type).newTy << ' ' << *(yyvsp[-6].Value).val << ", " - << *(yyvsp[-4].Type).newTy << ' ' << *(yyvsp[-3].Value).val << " [" << *(yyvsp[-1].String) << " ]\n"; - delete (yyvsp[-8].String); (yyvsp[-7].Type).destroy(); (yyvsp[-6].Value).destroy(); (yyvsp[-4].Type).destroy(); (yyvsp[-3].Value).destroy(); + std::string Name = getUniqueName((yyvsp[-6].Value).val, (yyvsp[-7].Type)); + *O << " " << *(yyvsp[-8].String) << ' ' << (yyvsp[-7].Type)->getNewTy() << ' ' << Name << ", " + << (yyvsp[-4].Type)->getNewTy() << ' ' << *(yyvsp[-3].Value).val << " [" << *(yyvsp[-1].String) << " ]\n"; + delete (yyvsp[-8].String); delete (yyvsp[-7].Type); (yyvsp[-6].Value).destroy(); delete (yyvsp[-4].Type); (yyvsp[-3].Value).destroy(); delete (yyvsp[-1].String); (yyval.String) = 0; ;} break; case 259: -#line 1113 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1203 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *O << " " << *(yyvsp[-7].String) << ' ' << *(yyvsp[-6].Type).newTy << ' ' << *(yyvsp[-5].Value).val << ", " - << *(yyvsp[-3].Type).newTy << ' ' << *(yyvsp[-2].Value).val << "[]\n"; - delete (yyvsp[-7].String); (yyvsp[-6].Type).destroy(); (yyvsp[-5].Value).destroy(); (yyvsp[-3].Type).destroy(); (yyvsp[-2].Value).destroy(); + std::string Name = getUniqueName((yyvsp[-5].Value).val, (yyvsp[-6].Type)); + *O << " " << *(yyvsp[-7].String) << ' ' << (yyvsp[-6].Type)->getNewTy() << ' ' << Name << ", " + << (yyvsp[-3].Type)->getNewTy() << ' ' << *(yyvsp[-2].Value).val << "[]\n"; + delete (yyvsp[-7].String); delete (yyvsp[-6].Type); (yyvsp[-5].Value).destroy(); delete (yyvsp[-3].Type); (yyvsp[-2].Value).destroy(); (yyval.String) = 0; ;} break; case 260: -#line 1120 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1211 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { + TypeInfo* ResTy = getFunctionReturnType((yyvsp[-10].Type)); *O << " "; - if (!(yyvsp[-13].String)->empty()) - *O << *(yyvsp[-13].String) << " = "; - *O << *(yyvsp[-12].String) << ' ' << *(yyvsp[-11].String) << ' ' << *(yyvsp[-10].Type).newTy << ' ' << *(yyvsp[-9].Value).val << " ("; + if (!(yyvsp[-13].String)->empty()) { + std::string Name = getUniqueName((yyvsp[-13].String), ResTy); + *O << Name << " = "; + } + *O << *(yyvsp[-12].String) << ' ' << *(yyvsp[-11].String) << ' ' << (yyvsp[-10].Type)->getNewTy() << ' ' << *(yyvsp[-9].Value).val << " ("; for (unsigned i = 0; i < (yyvsp[-7].ValList)->size(); ++i) { ValueInfo& VI = (*(yyvsp[-7].ValList))[i]; *O << *VI.val; @@ -3507,17 +3600,17 @@ yyreduce: *O << ", "; VI.destroy(); } - *O << ") " << *(yyvsp[-5].String) << ' ' << *(yyvsp[-4].Type).newTy << ' ' << *(yyvsp[-3].Value).val << ' ' - << *(yyvsp[-2].String) << ' ' << *(yyvsp[-1].Type).newTy << ' ' << *(yyvsp[0].Value).val << '\n'; - delete (yyvsp[-13].String); delete (yyvsp[-12].String); delete (yyvsp[-11].String); (yyvsp[-10].Type).destroy(); (yyvsp[-9].Value).destroy(); delete (yyvsp[-7].ValList); - delete (yyvsp[-5].String); (yyvsp[-4].Type).destroy(); (yyvsp[-3].Value).destroy(); delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); + *O << ") " << *(yyvsp[-5].String) << ' ' << (yyvsp[-4].Type)->getNewTy() << ' ' << *(yyvsp[-3].Value).val << ' ' + << *(yyvsp[-2].String) << ' ' << (yyvsp[-1].Type)->getNewTy() << ' ' << *(yyvsp[0].Value).val << '\n'; + delete (yyvsp[-13].String); delete (yyvsp[-12].String); delete (yyvsp[-11].String); delete (yyvsp[-10].Type); (yyvsp[-9].Value).destroy(); delete (yyvsp[-7].ValList); + delete (yyvsp[-5].String); delete (yyvsp[-4].Type); (yyvsp[-3].Value).destroy(); delete (yyvsp[-2].String); delete (yyvsp[-1].Type); (yyvsp[0].Value).destroy(); (yyval.String) = 0; ;} break; case 261: -#line 1139 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1233 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << " " << *(yyvsp[0].String) << '\n'; delete (yyvsp[0].String); @@ -3526,7 +3619,7 @@ yyreduce: break; case 262: -#line 1144 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1238 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *O << " " << *(yyvsp[0].String) << '\n'; delete (yyvsp[0].String); @@ -3535,26 +3628,27 @@ yyreduce: break; case 263: -#line 1150 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1244 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + " " + *(yyvsp[-3].String) + ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].Value).val; - (yyvsp[-4].Type).destroy(); delete (yyvsp[-3].String); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy(); + *(yyvsp[-5].String) += " " + (yyvsp[-4].Type)->getNewTy() + " " + *(yyvsp[-3].String) + ", " + (yyvsp[-1].Type)->getNewTy() + " " + + *(yyvsp[0].Value).val; + delete (yyvsp[-4].Type); delete (yyvsp[-3].String); delete (yyvsp[-1].Type); (yyvsp[0].Value).destroy(); (yyval.String) = (yyvsp[-5].String); ;} break; case 264: -#line 1155 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1250 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - (yyvsp[-3].String)->insert(0, *(yyvsp[-4].Type).newTy + " " ); - *(yyvsp[-3].String) += ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].Value).val; - (yyvsp[-4].Type).destroy(); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy(); + (yyvsp[-3].String)->insert(0, (yyvsp[-4].Type)->getNewTy() + " " ); + *(yyvsp[-3].String) += ", " + (yyvsp[-1].Type)->getNewTy() + " " + *(yyvsp[0].Value).val; + delete (yyvsp[-4].Type); delete (yyvsp[-1].Type); (yyvsp[0].Value).destroy(); (yyval.String) = (yyvsp[-3].String); ;} break; case 265: -#line 1163 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1258 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-1].String)->empty()) { if (deleteUselessCastFlag && *deleteUselessCastName == *(yyvsp[-1].String)) { @@ -3562,64 +3656,67 @@ yyreduce: (yyvsp[-1].String)->insert(0, "; "); // don't actually delete it, just comment it out delete deleteUselessCastName; } else { - *(yyvsp[-1].String) += " = "; + // Get a unique name for the name of this value, based on its type. + *(yyvsp[-1].String) = getUniqueName((yyvsp[-1].String), (yyvsp[0].Value).type) + " = "; } } - *(yyvsp[-1].String) += *(yyvsp[0].String); - delete (yyvsp[0].String); + *(yyvsp[-1].String) += *(yyvsp[0].Value).val; + (yyvsp[0].Value).destroy(); deleteUselessCastFlag = false; (yyval.String) = (yyvsp[-1].String); ;} break; case 266: -#line 1180 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1276 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { // Used for PHI nodes - (yyvsp[-3].Value).val->insert(0, *(yyvsp[-5].Type).newTy + "["); - *(yyvsp[-3].Value).val += "," + *(yyvsp[-1].Value).val + "]"; - (yyvsp[-5].Type).destroy(); (yyvsp[-1].Value).destroy(); - (yyval.String) = new std::string(*(yyvsp[-3].Value).val); - (yyvsp[-3].Value).destroy(); + std::string Name = getUniqueName((yyvsp[-3].Value).val, (yyvsp[-5].Type)); + Name.insert(0, (yyvsp[-5].Type)->getNewTy() + "["); + Name += "," + *(yyvsp[-1].Value).val + "]"; + (yyval.Value).val = new std::string(Name); + (yyval.Value).type = (yyvsp[-5].Type); + (yyvsp[-3].Value).destroy(); (yyvsp[-1].Value).destroy(); ;} break; case 267: -#line 1187 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1284 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-6].String) += ", [" + *(yyvsp[-3].Value).val + "," + *(yyvsp[-1].Value).val + "]"; + std::string Name = getUniqueName((yyvsp[-3].Value).val, (yyvsp[-6].Value).type); + *(yyvsp[-6].Value).val += ", [" + Name + "," + *(yyvsp[-1].Value).val + "]"; (yyvsp[-3].Value).destroy(); (yyvsp[-1].Value).destroy(); - (yyval.String) = (yyvsp[-6].String); + (yyval.Value) = (yyvsp[-6].Value); ;} break; case 268: -#line 1195 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" - { +#line 1293 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" + { (yyval.ValList) = new ValueList(); (yyval.ValList)->push_back((yyvsp[0].Value)); ;} break; case 269: -#line 1199 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1297 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - (yyvsp[-2].ValList)->push_back((yyvsp[0].Value)); (yyval.ValList) = (yyvsp[-2].ValList); + (yyval.ValList)->push_back((yyvsp[0].Value)); ;} break; case 270: -#line 1206 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1304 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValList) = (yyvsp[0].ValList); ;} break; case 271: -#line 1207 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1305 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValList) = new ValueList(); ;} break; case 272: -#line 1211 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1309 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-1].String) += " " + *(yyvsp[0].String); delete (yyvsp[0].String); @@ -3628,92 +3725,108 @@ yyreduce: break; case 274: -#line 1219 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1317 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const char* op = getDivRemOpcode(*(yyvsp[-4].String), (yyvsp[-3].Type)); - (yyval.String) = new std::string(op); - *(yyval.String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val; - delete (yyvsp[-4].String); (yyvsp[-3].Type).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); + std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type)); + std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type)); + (yyval.Value).val = new std::string(op); + *(yyval.Value).val += " " + (yyvsp[-3].Type)->getNewTy() + " " + Name1 + ", " + Name2; + (yyval.Value).type = (yyvsp[-3].Type); + delete (yyvsp[-4].String); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); ;} break; case 275: -#line 1225 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1326 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val; - (yyvsp[-3].Type).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); - (yyval.String) = (yyvsp[-4].String); + std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type)); + std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type)); + *(yyvsp[-4].String) += " " + (yyvsp[-3].Type)->getNewTy() + " " + Name1 + ", " + Name2; + (yyval.Value).val = (yyvsp[-4].String); + (yyval.Value).type = (yyvsp[-3].Type); + (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); ;} break; case 276: -#line 1230 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1334 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { + std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type)); + std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type)); *(yyvsp[-4].String) = getCompareOp(*(yyvsp[-4].String), (yyvsp[-3].Type)); - *(yyvsp[-4].String) += " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val; - (yyvsp[-3].Type).destroy(); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); - (yyval.String) = (yyvsp[-4].String); + *(yyvsp[-4].String) += " " + (yyvsp[-3].Type)->getNewTy() + " " + Name1 + ", " + Name2; + (yyval.Value).val = (yyvsp[-4].String); + (yyval.Value).type = new TypeInfo("bool",BoolTy); + (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); ;} break; case 277: -#line 1236 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1343 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-5].String) += " " + *(yyvsp[-4].String) + " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].Value).val + "," + *(yyvsp[0].Value).val; + std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type)); + std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type)); + *(yyvsp[-5].String) += " " + *(yyvsp[-4].String) + " " + (yyvsp[-3].Type)->getNewTy() + " " + Name1 + "," + Name2; + (yyval.Value).val = (yyvsp[-5].String); + (yyval.Value).type = new TypeInfo("bool",BoolTy); delete (yyvsp[-4].String); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); - (yyval.String) = (yyvsp[-5].String); ;} break; case 278: -#line 1241 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1351 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-5].String) += " " + *(yyvsp[-4].String) + " " + *(yyvsp[-3].Type).newTy + " " + *(yyvsp[-2].Value).val + "," + *(yyvsp[0].Value).val; + std::string Name1 = getUniqueName((yyvsp[-2].Value).val, (yyvsp[-3].Type)); + std::string Name2 = getUniqueName((yyvsp[0].Value).val, (yyvsp[-3].Type)); + *(yyvsp[-5].String) += " " + *(yyvsp[-4].String) + " " + (yyvsp[-3].Type)->getNewTy() + " " + Name1 + "," + Name2; + (yyval.Value).val = (yyvsp[-5].String); + (yyval.Value).type = new TypeInfo("bool",BoolTy); delete (yyvsp[-4].String); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); - (yyval.String) = (yyvsp[-5].String); ;} break; case 279: -#line 1246 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1359 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val; - (yyvsp[0].Value).destroy(); - (yyval.String) = (yyvsp[-1].String); + (yyval.Value) = (yyvsp[0].Value); + (yyval.Value).val->insert(0, *(yyvsp[-1].String) + " "); + delete (yyvsp[-1].String); ;} break; case 280: -#line 1251 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1364 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { const char* shiftop = (yyvsp[-3].String)->c_str(); if (*(yyvsp[-3].String) == "shr") - shiftop = ((yyvsp[-2].Value).type.isUnsigned()) ? "lshr" : "ashr"; - (yyval.String) = new std::string(shiftop); - *(yyval.String) += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val; - delete (yyvsp[-3].String); (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); + shiftop = ((yyvsp[-2].Value).type->isUnsigned()) ? "lshr" : "ashr"; + (yyval.Value).val = new std::string(shiftop); + *(yyval.Value).val += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val; + (yyval.Value).type = (yyvsp[-2].Value).type; + delete (yyvsp[-3].String); delete (yyvsp[-2].Value).val; (yyvsp[0].Value).destroy(); ;} break; case 281: -#line 1259 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1373 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { 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(); + TypeInfo* SrcTy = (yyvsp[-2].Value).type; + TypeInfo* DstTy = ResolveType((yyvsp[0].Type)); + (yyval.Value).val = new std::string(); if (*(yyvsp[-3].String) == "cast") { - *(yyval.String) += getCastUpgrade(source, SrcTy, DstTy, false); + *(yyval.Value).val += getCastUpgrade(source, SrcTy, DstTy, false); } else { - *(yyval.String) += *(yyvsp[-3].String) + " " + source + " to " + *DstTy.newTy; + *(yyval.Value).val += *(yyvsp[-3].String) + " " + source + " to " + DstTy->getNewTy(); } + (yyval.Value).type = (yyvsp[0].Type); // Check to see if this is a useless cast of a value to the same name // and the same type. Such casts will probably cause redefinition errors // when assembled and perform no code gen action so just remove them. if (*(yyvsp[-3].String) == "cast" || *(yyvsp[-3].String) == "bitcast") - if ((yyvsp[-2].Value).type.isInteger() && (yyvsp[0].Type).isInteger() && - (yyvsp[-2].Value).type.getBitWidth() == (yyvsp[0].Type).getBitWidth()) { + if ((yyvsp[-2].Value).type->isInteger() && DstTy->isInteger() && + (yyvsp[-2].Value).type->getBitWidth() == DstTy->getBitWidth()) { deleteUselessCastFlag = true; // Flag the "Inst" rule deleteUselessCastName = new std::string(*(yyvsp[-2].Value).val); // save the name size_t pos = deleteUselessCastName->find_first_of("%\"",0); @@ -3723,72 +3836,79 @@ yyreduce: } } delete (yyvsp[-3].String); (yyvsp[-2].Value).destroy(); - delete (yyvsp[-1].String); (yyvsp[0].Type).destroy(); + delete (yyvsp[-1].String); ;} break; case 282: -#line 1287 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1401 "/proj/llvm/llvm-3/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(); - (yyval.String) = (yyvsp[-5].String); + (yyval.Value).val = (yyvsp[-5].String); + (yyval.Value).type = (yyvsp[-2].Value).type; + (yyvsp[-4].Value).destroy(); delete (yyvsp[-2].Value).val; (yyvsp[0].Value).destroy(); ;} break; case 283: -#line 1292 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1407 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Type).newTy; - (yyvsp[-2].Value).destroy(); (yyvsp[0].Type).destroy(); - (yyval.String) = (yyvsp[-3].String); + *(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + (yyvsp[0].Type)->getNewTy(); + (yyval.Value).val = (yyvsp[-3].String); + (yyval.Value).type = (yyvsp[0].Type); + (yyvsp[-2].Value).destroy(); ;} break; case 284: -#line 1297 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1413 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-3].String) += " " + *(yyvsp[-2].Value).val + ", " + *(yyvsp[0].Value).val; - (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); - (yyval.String) = (yyvsp[-3].String); + (yyval.Value).val = (yyvsp[-3].String); + ResolveType((yyvsp[-2].Value).type); + (yyval.Value).type = (yyvsp[-2].Value).type->getElementType()->clone(); + delete (yyvsp[-2].Value).val; (yyvsp[0].Value).destroy(); ;} break; case 285: -#line 1302 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1420 "/proj/llvm/llvm-3/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(); - (yyval.String) = (yyvsp[-5].String); + (yyval.Value).val = (yyvsp[-5].String); + (yyval.Value).type = (yyvsp[-4].Value).type; + delete (yyvsp[-4].Value).val; (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); ;} break; case 286: -#line 1307 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1426 "/proj/llvm/llvm-3/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(); - (yyval.String) = (yyvsp[-5].String); + (yyval.Value).val = (yyvsp[-5].String); + (yyval.Value).type = (yyvsp[-4].Value).type; + delete (yyvsp[-4].Value).val; (yyvsp[-2].Value).destroy(); (yyvsp[0].Value).destroy(); ;} break; case 287: -#line 1312 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1432 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-1].String) += " " + *(yyvsp[0].String); - delete (yyvsp[0].String); - (yyval.String) = (yyvsp[-1].String); + *(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val; + (yyval.Value).val = (yyvsp[-1].String); + (yyval.Value).type = (yyvsp[0].Value).type; + delete (yyvsp[0].Value).val; ;} break; case 288: -#line 1317 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1438 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-5].String)->empty()) *(yyvsp[-6].String) += " " + *(yyvsp[-5].String); if (!(yyvsp[-6].String)->empty()) *(yyvsp[-6].String) += " "; - *(yyvsp[-6].String) += *(yyvsp[-4].Type).newTy + " " + *(yyvsp[-3].Value).val + "("; + *(yyvsp[-6].String) += (yyvsp[-4].Type)->getNewTy() + " " + *(yyvsp[-3].Value).val + "("; for (unsigned i = 0; i < (yyvsp[-1].ValList)->size(); ++i) { ValueInfo& VI = (*(yyvsp[-1].ValList))[i]; *(yyvsp[-6].String) += *VI.val; @@ -3797,125 +3917,137 @@ yyreduce: VI.destroy(); } *(yyvsp[-6].String) += ")"; - delete (yyvsp[-5].String); (yyvsp[-4].Type).destroy(); (yyvsp[-3].Value).destroy(); delete (yyvsp[-1].ValList); - (yyval.String) = (yyvsp[-6].String); + (yyval.Value).val = (yyvsp[-6].String); + (yyval.Value).type = getFunctionReturnType((yyvsp[-4].Type)); + delete (yyvsp[-5].String); delete (yyvsp[-4].Type); (yyvsp[-3].Value).destroy(); delete (yyvsp[-1].ValList); ;} break; case 290: -#line 1339 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1461 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValList) = (yyvsp[0].ValList); ;} break; case 291: -#line 1340 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1462 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValList) = new ValueList(); ;} break; case 293: -#line 1345 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1467 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { (yyval.String) = new std::string(); ;} break; case 294: -#line 1348 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1470 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-2].String) += " " + *(yyvsp[-1].Type).newTy; + *(yyvsp[-2].String) += " " + (yyvsp[-1].Type)->getNewTy(); if (!(yyvsp[0].String)->empty()) *(yyvsp[-2].String) += " " + *(yyvsp[0].String); - (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String); - (yyval.String) = (yyvsp[-2].String); + (yyval.Value).val = (yyvsp[-2].String); + (yyval.Value).type = (yyvsp[-1].Type)->getPointerType(); + delete (yyvsp[-1].Type); delete (yyvsp[0].String); ;} break; case 295: -#line 1355 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1478 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + ", " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].Value).val; + std::string Name = getUniqueName((yyvsp[-1].Value).val, (yyvsp[-2].Type)); + *(yyvsp[-5].String) += " " + (yyvsp[-4].Type)->getNewTy() + ", " + (yyvsp[-2].Type)->getNewTy() + " " + Name; if (!(yyvsp[0].String)->empty()) *(yyvsp[-5].String) += " " + *(yyvsp[0].String); - (yyvsp[-4].Type).destroy(); (yyvsp[-2].Type).destroy(); (yyvsp[-1].Value).destroy(); delete (yyvsp[0].String); - (yyval.String) = (yyvsp[-5].String); + (yyval.Value).val = (yyvsp[-5].String); + (yyval.Value).type = (yyvsp[-4].Type)->getPointerType(); + delete (yyvsp[-4].Type); delete (yyvsp[-2].Type); (yyvsp[-1].Value).destroy(); delete (yyvsp[0].String); ;} break; case 296: -#line 1362 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1487 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-2].String) += " " + *(yyvsp[-1].Type).newTy; + *(yyvsp[-2].String) += " " + (yyvsp[-1].Type)->getNewTy(); if (!(yyvsp[0].String)->empty()) *(yyvsp[-2].String) += " " + *(yyvsp[0].String); - (yyvsp[-1].Type).destroy(); delete (yyvsp[0].String); - (yyval.String) = (yyvsp[-2].String); + (yyval.Value).val = (yyvsp[-2].String); + (yyval.Value).type = (yyvsp[-1].Type)->getPointerType(); + delete (yyvsp[-1].Type); delete (yyvsp[0].String); ;} break; case 297: -#line 1369 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1495 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { - *(yyvsp[-5].String) += " " + *(yyvsp[-4].Type).newTy + ", " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].Value).val; + std::string Name = getUniqueName((yyvsp[-1].Value).val, (yyvsp[-2].Type)); + *(yyvsp[-5].String) += " " + (yyvsp[-4].Type)->getNewTy() + ", " + (yyvsp[-2].Type)->getNewTy() + " " + Name; if (!(yyvsp[0].String)->empty()) *(yyvsp[-5].String) += " " + *(yyvsp[0].String); - (yyvsp[-4].Type).destroy(); (yyvsp[-2].Type).destroy(); (yyvsp[-1].Value).destroy(); delete (yyvsp[0].String); - (yyval.String) = (yyvsp[-5].String); + (yyval.Value).val = (yyvsp[-5].String); + (yyval.Value).type = (yyvsp[-4].Type)->getPointerType(); + delete (yyvsp[-4].Type); delete (yyvsp[-2].Type); (yyvsp[-1].Value).destroy(); delete (yyvsp[0].String); ;} break; case 298: -#line 1376 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1504 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { *(yyvsp[-1].String) += " " + *(yyvsp[0].Value).val; + (yyval.Value).val = (yyvsp[-1].String); + (yyval.Value).type = new TypeInfo("void", VoidTy); (yyvsp[0].Value).destroy(); - (yyval.String) = (yyvsp[-1].String); ;} break; case 299: -#line 1381 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1510 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { + std::string Name = getUniqueName((yyvsp[0].Value).val, (yyvsp[-1].Type)); if (!(yyvsp[-3].String)->empty()) *(yyvsp[-3].String) += " "; - *(yyvsp[-3].String) += *(yyvsp[-2].String) + " " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].Value).val; - delete (yyvsp[-2].String); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy(); - (yyval.String) = (yyvsp[-3].String); + *(yyvsp[-3].String) += *(yyvsp[-2].String) + " " + (yyvsp[-1].Type)->getNewTy() + " " + Name; + (yyval.Value).val = (yyvsp[-3].String); + (yyval.Value).type = (yyvsp[-1].Type)->getElementType()->clone(); + delete (yyvsp[-2].String); delete (yyvsp[-1].Type); (yyvsp[0].Value).destroy(); ;} break; case 300: -#line 1388 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1519 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { + std::string Name = getUniqueName((yyvsp[0].Value).val, (yyvsp[-1].Type)); if (!(yyvsp[-5].String)->empty()) *(yyvsp[-5].String) += " "; - *(yyvsp[-5].String) += *(yyvsp[-4].String) + " " + *(yyvsp[-3].Value).val + ", " + *(yyvsp[-1].Type).newTy + " " + *(yyvsp[0].Value).val; - delete (yyvsp[-4].String); (yyvsp[-3].Value).destroy(); (yyvsp[-1].Type).destroy(); (yyvsp[0].Value).destroy(); - (yyval.String) = (yyvsp[-5].String); + *(yyvsp[-5].String) += *(yyvsp[-4].String) + " " + *(yyvsp[-3].Value).val + ", " + (yyvsp[-1].Type)->getNewTy() + " " + Name; + (yyval.Value).val = (yyvsp[-5].String); + (yyval.Value).type = new TypeInfo("void", VoidTy); + delete (yyvsp[-4].String); (yyvsp[-3].Value).destroy(); delete (yyvsp[-1].Type); (yyvsp[0].Value).destroy(); ;} break; case 301: -#line 1395 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1528 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" { + std::string Name = getUniqueName((yyvsp[-1].Value).val, (yyvsp[-2].Type)); // Upgrade the indices for (unsigned i = 0; i < (yyvsp[0].ValList)->size(); ++i) { ValueInfo& VI = (*(yyvsp[0].ValList))[i]; - if (VI.type.isUnsigned() && !VI.isConstant() && - VI.type.getBitWidth() < 64) { + if (VI.type->isUnsigned() && !VI.isConstant() && + VI.type->getBitWidth() < 64) { std::string* old = VI.val; *O << " %gep_upgrade" << unique << " = zext " << *old << " to i64\n"; VI.val = new std::string("i64 %gep_upgrade" + llvm::utostr(unique++)); - VI.type.oldTy = ULongTy; - delete old; + VI.type->setOldTy(ULongTy); } } - *(yyvsp[-3].String) += " " + *(yyvsp[-2].Type).newTy + " " + *(yyvsp[-1].Value).val; + *(yyvsp[-3].String) += " " + (yyvsp[-2].Type)->getNewTy() + " " + Name; for (unsigned i = 0; i < (yyvsp[0].ValList)->size(); ++i) { ValueInfo& VI = (*(yyvsp[0].ValList))[i]; *(yyvsp[-3].String) += ", " + *VI.val; - VI.destroy(); } - (yyvsp[-2].Type).destroy(); (yyvsp[-1].Value).destroy(); delete (yyvsp[0].ValList); - (yyval.String) = (yyvsp[-3].String); + (yyval.Value).val = (yyvsp[-3].String); + (yyval.Value).type = getGEPIndexedType((yyvsp[-2].Type),(yyvsp[0].ValList)); + (yyvsp[-1].Value).destroy(); delete (yyvsp[0].ValList); ;} break; @@ -3924,7 +4056,7 @@ yyreduce: } /* Line 1126 of yacc.c. */ -#line 3928 "UpgradeParser.tab.c" +#line 4060 "UpgradeParser.tab.c" yyvsp -= yylen; yyssp -= yylen; @@ -4192,7 +4324,7 @@ yyreturn: } -#line 1419 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 1552 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" int yyerror(const char *ErrorMsg) { diff --git a/tools/llvm-upgrade/UpgradeParser.h b/tools/llvm-upgrade/UpgradeParser.h index 9e4df221d7a..10b80cdebb0 100644 --- a/tools/llvm-upgrade/UpgradeParser.h +++ b/tools/llvm-upgrade/UpgradeParser.h @@ -333,16 +333,17 @@ #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 289 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 357 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" typedef union YYSTYPE { std::string* String; - TypeInfo Type; + TypeInfo* Type; ValueInfo Value; ConstInfo Const; ValueList* ValList; + TypeList* TypeVec; } YYSTYPE; /* Line 1447 of yacc.c. */ -#line 346 "UpgradeParser.tab.h" +#line 347 "UpgradeParser.tab.h" # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 diff --git a/tools/llvm-upgrade/UpgradeParser.h.cvs b/tools/llvm-upgrade/UpgradeParser.h.cvs index 9e4df221d7a..10b80cdebb0 100644 --- a/tools/llvm-upgrade/UpgradeParser.h.cvs +++ b/tools/llvm-upgrade/UpgradeParser.h.cvs @@ -333,16 +333,17 @@ #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 289 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" +#line 357 "/proj/llvm/llvm-3/tools/llvm-upgrade/UpgradeParser.y" typedef union YYSTYPE { std::string* String; - TypeInfo Type; + TypeInfo* Type; ValueInfo Value; ConstInfo Const; ValueList* ValList; + TypeList* TypeVec; } YYSTYPE; /* Line 1447 of yacc.c. */ -#line 346 "UpgradeParser.tab.h" +#line 347 "UpgradeParser.tab.h" # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 diff --git a/tools/llvm-upgrade/UpgradeParser.y.cvs b/tools/llvm-upgrade/UpgradeParser.y.cvs index 761bda1cdfc..12ad18223be 100644 --- a/tools/llvm-upgrade/UpgradeParser.y.cvs +++ b/tools/llvm-upgrade/UpgradeParser.y.cvs @@ -13,12 +13,10 @@ %{ #include "ParserInternals.h" -#include #include #include #include #include -#include #define YYERROR_VERBOSE 1 #define YYINCLUDED_STDLIB_H @@ -78,71 +76,72 @@ void UpgradeAssembly(const std::string &infile, std::istream& in, } } -static void ResolveType(TypeInfo& Ty) { - if (Ty.oldTy == UnresolvedTy) { - TypeMap::iterator I = NamedTypes.find(*Ty.newTy); +TypeInfo* ResolveType(TypeInfo*& Ty) { + if (Ty->isUnresolved()) { + TypeMap::iterator I = NamedTypes.find(Ty->getNewTy()); if (I != NamedTypes.end()) { - Ty.oldTy = I->second.oldTy; - Ty.elemTy = I->second.elemTy; + Ty = I->second.clone(); + return Ty; } else { - std::string msg("Can't resolve type: "); - msg += *Ty.newTy; + std::string msg("Cannot resolve type: "); + msg += Ty->getNewTy(); yyerror(msg.c_str()); } - } else if (Ty.oldTy == NumericTy) { - unsigned ref = atoi(&((Ty.newTy->c_str())[1])); // Skip the '\\' + } else if (Ty->isNumeric()) { + unsigned ref = atoi(&((Ty->getNewTy().c_str())[1])); // Skip the '\\' if (ref < EnumeratedTypes.size()) { - Ty.oldTy = EnumeratedTypes[ref].oldTy; - Ty.elemTy = EnumeratedTypes[ref].elemTy; + Ty = EnumeratedTypes[ref].clone(); + return Ty; } else { std::string msg("Can't resolve type: "); - msg += *Ty.newTy; + msg += Ty->getNewTy(); yyerror(msg.c_str()); } } // otherwise its already resolved. + return Ty; } static const char* getCastOpcode( - std::string& Source, const TypeInfo& SrcTy, const TypeInfo& DstTy) + std::string& Source, const TypeInfo* SrcTy, const TypeInfo* DstTy) { - unsigned SrcBits = SrcTy.getBitWidth(); - unsigned DstBits = DstTy.getBitWidth(); + unsigned SrcBits = SrcTy->getBitWidth(); + unsigned DstBits = DstTy->getBitWidth(); const char* opcode = "bitcast"; // Run through the possibilities ... - if (DstTy.isIntegral()) { // Casting to integral - if (SrcTy.isIntegral()) { // Casting from integral + if (DstTy->isIntegral()) { // Casting to integral + if (SrcTy->isIntegral()) { // Casting from integral if (DstBits < SrcBits) opcode = "trunc"; else if (DstBits > SrcBits) { // its an extension - if (SrcTy.isSigned()) + if (SrcTy->isSigned()) opcode ="sext"; // signed -> SEXT else opcode = "zext"; // unsigned -> ZEXT } else { opcode = "bitcast"; // Same size, No-op cast } - } else if (SrcTy.isFloatingPoint()) { // Casting from floating pt - if (DstTy.isSigned()) + } else if (SrcTy->isFloatingPoint()) { // Casting from floating pt + if (DstTy->isSigned()) opcode = "fptosi"; // FP -> sint else opcode = "fptoui"; // FP -> uint - } else if (SrcTy.isPacked()) { - assert(DstBits == SrcTy.getBitWidth() && + } else if (SrcTy->isPacked()) { + assert(DstBits == SrcTy->getBitWidth() && "Casting packed to integer of different width"); opcode = "bitcast"; // same size, no-op cast } else { - assert(SrcTy.isPointer() && + assert(SrcTy->isPointer() && "Casting from a value that is not first-class type"); opcode = "ptrtoint"; // ptr -> int } - } else if (DstTy.isFloatingPoint()) { // Casting to floating pt - if (SrcTy.isIntegral()) { // Casting from integral - if (SrcTy.isSigned()) + } else if (DstTy->isFloatingPoint()) { // Casting to floating pt + if (SrcTy->isIntegral()) { // Casting from integral + if (SrcTy->isSigned()) opcode = "sitofp"; // sint -> FP else opcode = "uitofp"; // uint -> FP - } else if (SrcTy.isFloatingPoint()) { // Casting from floating pt + } else if (SrcTy->isFloatingPoint()) { // Casting from floating pt if (DstBits < SrcBits) { opcode = "fptrunc"; // FP -> smaller FP } else if (DstBits > SrcBits) { @@ -150,27 +149,27 @@ static const char* getCastOpcode( } else { opcode ="bitcast"; // same size, no-op cast } - } else if (SrcTy.isPacked()) { - assert(DstBits == SrcTy.getBitWidth() && + } else if (SrcTy->isPacked()) { + assert(DstBits == SrcTy->getBitWidth() && "Casting packed to floating point of different width"); opcode = "bitcast"; // same size, no-op cast } else { assert(0 && "Casting pointer or non-first class to float"); } - } else if (DstTy.isPacked()) { - if (SrcTy.isPacked()) { - assert(DstTy.getBitWidth() == SrcTy.getBitWidth() && + } else if (DstTy->isPacked()) { + if (SrcTy->isPacked()) { + assert(DstTy->getBitWidth() == SrcTy->getBitWidth() && "Casting packed to packed of different widths"); opcode = "bitcast"; // packed -> packed - } else if (DstTy.getBitWidth() == SrcBits) { + } else if (DstTy->getBitWidth() == SrcBits) { opcode = "bitcast"; // float/int -> packed } else { assert(!"Illegal cast to packed (wrong type or size)"); } - } else if (DstTy.isPointer()) { - if (SrcTy.isPointer()) { + } else if (DstTy->isPointer()) { + if (SrcTy->isPointer()) { opcode = "bitcast"; // ptr -> ptr - } else if (SrcTy.isIntegral()) { + } else if (SrcTy->isIntegral()) { opcode = "inttoptr"; // int -> ptr } else { assert(!"Casting invalid type to pointer"); @@ -181,12 +180,12 @@ static const char* getCastOpcode( return opcode; } -static std::string getCastUpgrade( - const std::string& Src, TypeInfo& SrcTy, TypeInfo& DstTy, bool isConst) +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()) { + 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) @@ -197,16 +196,16 @@ static std::string getCastUpgrade( Source = "i64 %cast_upgrade" + llvm::utostr(unique); } // Update the SrcTy for the getCastOpcode call below - SrcTy.destroy(); - SrcTy.newTy = new std::string("i64"); - SrcTy.oldTy = ULongTy; - } else if (DstTy.oldTy == BoolTy && SrcTy.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"); - const char* compareOp = SrcTy.isFloatingPoint() ? "fcmp one " : "icmp ne "; + delete SrcTy; + SrcTy = new TypeInfo("i64", ULongTy); + } else if (DstTy->isBool()) { + // cast type %x to bool was previously defined as setne type %x, null + // The cast semantic is now to truncate, not compare so we must retain + // the original intent by replacing the cast with a setne + const char* comparator = SrcTy->isPointer() ? ", null" : + (SrcTy->isFloatingPoint() ? ", 0.0" : + (SrcTy->isBool() ? ", false" : ", 0")); + const char* compareOp = SrcTy->isFloatingPoint() ? "fcmp one " : "icmp ne "; if (isConst) { Result = "(" + Source + comparator + ")"; Result = compareOp + Result; @@ -218,33 +217,32 @@ static std::string getCastUpgrade( ResolveType(DstTy); std::string Opcode(getCastOpcode(Source, SrcTy, DstTy)); if (isConst) - Result += Opcode + "( " + Source + " to " + *DstTy.newTy + ")"; + Result += Opcode + "( " + Source + " to " + DstTy->getNewTy() + ")"; else - Result += Opcode + " " + Source + " to " + *DstTy.newTy; + Result += Opcode + " " + Source + " to " + DstTy->getNewTy(); return Result; } -const char* getDivRemOpcode(const std::string& opcode, const TypeInfo& TI) { +const char* getDivRemOpcode(const std::string& opcode, TypeInfo* TI) { const char* op = opcode.c_str(); - TypeInfo Ty = TI; - ResolveType(Ty); - if (Ty.isPacked()) - Ty.oldTy = Ty.getElementType(); + const TypeInfo* Ty = ResolveType(TI); + if (Ty->isPacked()) + Ty = Ty->getElementType(); if (opcode == "div") - if (Ty.isFloatingPoint()) + if (Ty->isFloatingPoint()) op = "fdiv"; - else if (Ty.isUnsigned()) + else if (Ty->isUnsigned()) op = "udiv"; - else if (Ty.isSigned()) + else if (Ty->isSigned()) op = "sdiv"; else yyerror("Invalid type for div instruction"); else if (opcode == "rem") - if (Ty.isFloatingPoint()) + if (Ty->isFloatingPoint()) op = "frem"; - else if (Ty.isUnsigned()) + else if (Ty->isUnsigned()) op = "urem"; - else if (Ty.isSigned()) + else if (Ty->isSigned()) op = "srem"; else yyerror("Invalid type for rem instruction"); @@ -252,7 +250,7 @@ const char* getDivRemOpcode(const std::string& opcode, const TypeInfo& TI) { } std::string -getCompareOp(const std::string& setcc, const TypeInfo& TI) { +getCompareOp(const std::string& setcc, const TypeInfo* TI) { assert(setcc.length() == 5); char cc1 = setcc[3]; char cc2 = setcc[4]; @@ -261,20 +259,20 @@ getCompareOp(const std::string& setcc, const TypeInfo& TI) { std::string result("xcmp xxx"); result[6] = cc1; result[7] = cc2; - if (TI.isFloatingPoint()) { + if (TI->isFloatingPoint()) { result[0] = 'f'; result[5] = 'o'; if (cc1 == 'n') result[5] = 'u'; // NE maps to unordered else result[5] = 'o'; // everything else maps to ordered - } else if (TI.isIntegral() || TI.isPointer()) { + } else if (TI->isIntegral() || TI->isPointer()) { result[0] = 'i'; if ((cc1 == 'e' && cc2 == 'q') || (cc1 == 'n' && cc2 == 'e')) result.erase(5,1); - else if (TI.isSigned()) + else if (TI->isSigned()) result[5] = 's'; - else if (TI.isUnsigned() || TI.isPointer() || TI.isBool()) + else if (TI->isUnsigned() || TI->isPointer() || TI->isBool()) result[5] = 'u'; else yyerror("Invalid integral type for setcc"); @@ -282,16 +280,87 @@ getCompareOp(const std::string& setcc, const TypeInfo& TI) { return result; } +static TypeInfo* getFunctionReturnType(TypeInfo* PFTy) { + ResolveType(PFTy); + if (PFTy->isPointer()) { + TypeInfo* ElemTy = PFTy->getElementType(); + ResolveType(ElemTy); + if (ElemTy->isFunction()) + return ElemTy->getResultType()->clone(); + } else if (PFTy->isFunction()) { + return PFTy->getResultType()->clone(); + } + return PFTy->clone(); +} + +static TypeInfo* getGEPIndexedType(TypeInfo* PTy, ValueList* idxs) { + ResolveType(PTy); + assert(PTy->isPointer() && "GEP Operand is not a pointer?"); + TypeInfo* Result = PTy->getElementType(); // just skip first index + ResolveType(Result); + for (unsigned i = 1; i < idxs->size(); ++i) { + if (Result->isComposite()) { + Result = Result->getIndexedType((*idxs)[i]); + ResolveType(Result); + } else + yyerror("Invalid type for index"); + } + return Result->getPointerType(); +} + +static std::string makeUniqueName(const std::string *Name, bool isSigned) { + const char *suffix = ".u"; + if (isSigned) + suffix = ".s"; + if ((*Name)[Name->size()-1] == '"') { + std::string Result(*Name); + Result.insert(Name->size()-1, suffix); + return Result; + } + return *Name + suffix; +} + +// This function handles appending .u or .s to integer value names that +// were previously unsigned or signed, respectively. This avoids name +// collisions since the unsigned and signed type planes have collapsed +// into a single signless type plane. +static std::string getUniqueName(const std::string *Name, TypeInfo* Ty) { + // If its not a symbolic name, don't modify it, probably a constant val. + if ((*Name)[0] != '%' && (*Name)[0] != '"') + return *Name; + // If its a numeric reference, just leave it alone. + if (isdigit((*Name)[1])) + return *Name; + + // Resolve the type + ResolveType(Ty); + + // Default the result to the current name + std::string Result = *Name; + + if (Ty->isInteger()) { + // If its an integer type, make the name unique + Result = makeUniqueName(Name, Ty->isSigned()); + } else if (Ty->isPointer()) { + while (Ty->isPointer()) + Ty = Ty->getElementType(); + if (Ty->isInteger()) + Result = makeUniqueName(Name, Ty->isSigned()); + } + return Result; +} + %} // %file-prefix="UpgradeParser" %union { std::string* String; - TypeInfo Type; + TypeInfo* Type; ValueInfo Value; ConstInfo Const; ValueList* ValList; + TypeList* TypeVec; } %token VOID BOOL SBYTE UBYTE SHORT USHORT INT UINT LONG ULONG @@ -322,19 +391,20 @@ getCompareOp(const std::string& setcc, const TypeInfo& TI) { %type OptAssign OptLinkage OptCallingConv OptAlign OptCAlign %type SectionString OptSection GlobalVarAttributes GlobalVarAttribute -%type ArgTypeListI ConstExpr DefinitionList +%type ConstExpr DefinitionList %type ConstPool TargetDefinition LibrariesDefinition LibList OptName %type ArgVal ArgListH ArgList FunctionHeaderH BEGIN FunctionHeader END -%type Function FunctionProto BasicBlock TypeListI -%type InstructionList BBTerminatorInst JumpTable Inst PHIList -%type OptTailCall InstVal OptVolatile Unwind -%type MemoryInst SymbolicValueRef OptSideEffect GlobalType +%type Function FunctionProto BasicBlock +%type InstructionList BBTerminatorInst JumpTable Inst +%type OptTailCall OptVolatile Unwind +%type SymbolicValueRef OptSideEffect GlobalType %type FnDeclareLinkage BasicBlockList BigOrLittle AsmBlock %type Name ConstValueRef ConstVector External %type ShiftOps SetCondOps LogicalOps ArithmeticOps CastOps %type IPredicates FPredicates %type ValueRefList ValueRefListE IndexList +%type TypeListI ArgTypeListI %type IntType SIntType UIntType FPType TypesV Types %type PrimType UpRTypesV UpRTypes @@ -342,7 +412,7 @@ getCompareOp(const std::string& setcc, const TypeInfo& TI) { %type IntVal EInt64Val %type ConstVal -%type ValueRef ResolvedVal +%type ValueRef ResolvedVal InstVal PHIList MemoryInst %start Module @@ -456,68 +526,79 @@ PrimType : BOOL | SBYTE | UBYTE | SHORT | USHORT | INT | UINT ; PrimType : LONG | ULONG | FLOAT | DOUBLE | LABEL; UpRTypes : OPAQUE { - $$.newTy = $1; - $$.oldTy = OpaqueTy; + $$ = new TypeInfo($1, OpaqueTy); } | SymbolicValueRef { - $$.newTy = $1; - $$.oldTy = UnresolvedTy; + $$ = new TypeInfo($1, UnresolvedTy); } | PrimType { $$ = $1; } | '\\' EUINT64VAL { // Type UpReference $2->insert(0, "\\"); - $$.newTy = $2; - $$.oldTy = NumericTy; + $$ = new TypeInfo($2, NumericTy); } | UpRTypesV '(' ArgTypeListI ')' { // Function derived type? - *$1.newTy += "( " + *$3 + " )"; - delete $3; - $$.newTy = $1.newTy; - $$.oldTy = FunctionTy; + std::string newTy( $1->getNewTy() + "("); + for (unsigned i = 0; i < $3->size(); ++i) { + if (i != 0) + newTy += ", "; + if ((*$3)[i]->isVoid()) + newTy += "..."; + else + newTy += (*$3)[i]->getNewTy(); + } + newTy += ")"; + $$ = new TypeInfo(new std::string(newTy), $1, $3); + EnumeratedTypes.push_back(*$$); } | '[' EUINT64VAL 'x' UpRTypes ']' { // Sized array type? $2->insert(0,"[ "); - *$2 += " x " + *$4.newTy + " ]"; - delete $4.newTy; - $$.newTy = $2; - $$.oldTy = ArrayTy; - $$.elemTy = $4.oldTy; + *$2 += " x " + $4->getNewTy() + " ]"; + uint64_t elems = atoi($2->c_str()); + $$ = new TypeInfo($2, ArrayTy, $4, elems); + EnumeratedTypes.push_back(*$$); } | '<' EUINT64VAL 'x' UpRTypes '>' { // Packed array type? $2->insert(0,"< "); - *$2 += " x " + *$4.newTy + " >"; - delete $4.newTy; - $$.newTy = $2; - $$.oldTy = PackedTy; - $$.elemTy = $4.oldTy; + *$2 += " x " + $4->getNewTy() + " >"; + uint64_t elems = atoi($2->c_str()); + $$ = new TypeInfo($2, PackedTy, $4, elems); + EnumeratedTypes.push_back(*$$); } | '{' TypeListI '}' { // Structure type? - $2->insert(0, "{ "); - *$2 += " }"; - $$.newTy = $2; - $$.oldTy = StructTy; + std::string newTy("{"); + for (unsigned i = 0; i < $2->size(); ++i) { + if (i != 0) + newTy += ", "; + newTy += (*$2)[i]->getNewTy(); + } + newTy += "}"; + $$ = new TypeInfo(new std::string(newTy), StructTy, $2); + EnumeratedTypes.push_back(*$$); } | '{' '}' { // Empty structure type? - $$.newTy = new std::string("{}"); - $$.oldTy = StructTy; + $$ = new TypeInfo(new std::string("{}"), StructTy, new TypeList()); + EnumeratedTypes.push_back(*$$); } | '<' '{' TypeListI '}' '>' { // Packed Structure type? - $3->insert(0, "<{ "); - *$3 += " }>"; - $$.newTy = $3; - $$.oldTy = StructTy; + std::string newTy("<{"); + for (unsigned i = 0; i < $3->size(); ++i) { + if (i != 0) + newTy += ", "; + newTy += (*$3)[i]->getNewTy(); + } + newTy += "}>"; + $$ = new TypeInfo(new std::string(newTy), PackedStructTy, $3); + EnumeratedTypes.push_back(*$$); } | '<' '{' '}' '>' { // Empty packed structure type? - $$.newTy = new std::string("<{}>"); - $$.oldTy = StructTy; + $$ = new TypeInfo(new std::string("<{}>"), PackedStructTy, new TypeList()); + EnumeratedTypes.push_back(*$$); } | UpRTypes '*' { // Pointer type? - *$1.newTy += '*'; - $$.elemTy = $1.oldTy; - $1.oldTy = PointerTy; - $$ = $1; + $$ = $1->getPointerType(); + EnumeratedTypes.push_back(*$$); }; // TypeList - Used for struct declarations and as a basis for function type @@ -525,27 +606,29 @@ UpRTypes // TypeListI : UpRTypes { - $$ = $1.newTy; + $$ = new TypeList(); + $$->push_back($1); } | TypeListI ',' UpRTypes { - *$1 += ", " + *$3.newTy; - delete $3.newTy; $$ = $1; + $$->push_back($3); }; // ArgTypeList - List of types for a function type declaration... ArgTypeListI : TypeListI | TypeListI ',' DOTDOTDOT { - *$1 += ", ..."; - delete $3; $$ = $1; + $$->push_back(new TypeInfo("void",VoidTy)); + delete $3; } | DOTDOTDOT { - $$ = $1; + $$ = new TypeList(); + $$->push_back(new TypeInfo("void",VoidTy)); + delete $1; } | /*empty*/ { - $$ = new std::string(); + $$ = new TypeList(); }; // ConstVal - The various declarations that go into the constant pool. This @@ -556,95 +639,96 @@ ArgTypeListI // ConstVal: Types '[' ConstVector ']' { // Nonempty unsized arr $$.type = $1; - $$.cnst = new std::string(*$1.newTy); + $$.cnst = new std::string($1->getNewTy()); *$$.cnst += " [ " + *$3 + " ]"; delete $3; } | Types '[' ']' { $$.type = $1; - $$.cnst = new std::string(*$1.newTy); + $$.cnst = new std::string($1->getNewTy()); *$$.cnst += "[ ]"; } | Types 'c' STRINGCONSTANT { $$.type = $1; - $$.cnst = new std::string(*$1.newTy); + $$.cnst = new std::string($1->getNewTy()); *$$.cnst += " c" + *$3; delete $3; } | Types '<' ConstVector '>' { // Nonempty unsized arr $$.type = $1; - $$.cnst = new std::string(*$1.newTy); + $$.cnst = new std::string($1->getNewTy()); *$$.cnst += " < " + *$3 + " >"; delete $3; } | Types '{' ConstVector '}' { $$.type = $1; - $$.cnst = new std::string(*$1.newTy); + $$.cnst = new std::string($1->getNewTy()); *$$.cnst += " { " + *$3 + " }"; delete $3; } | Types '{' '}' { $$.type = $1; - $$.cnst = new std::string(*$1.newTy); + $$.cnst = new std::string($1->getNewTy()); *$$.cnst += " {}"; } | Types NULL_TOK { $$.type = $1; - $$.cnst = new std::string(*$1.newTy); + $$.cnst = new std::string($1->getNewTy()); *$$.cnst += " " + *$2; delete $2; } | Types UNDEF { $$.type = $1; - $$.cnst = new std::string(*$1.newTy); + $$.cnst = new std::string($1->getNewTy()); *$$.cnst += " " + *$2; delete $2; } | Types SymbolicValueRef { + std::string Name = getUniqueName($2,$1); $$.type = $1; - $$.cnst = new std::string(*$1.newTy); - *$$.cnst += " " + *$2; + $$.cnst = new std::string($1->getNewTy()); + *$$.cnst += " " + Name; delete $2; } | Types ConstExpr { $$.type = $1; - $$.cnst = new std::string(*$1.newTy); + $$.cnst = new std::string($1->getNewTy()); *$$.cnst += " " + *$2; delete $2; } | Types ZEROINITIALIZER { $$.type = $1; - $$.cnst = new std::string(*$1.newTy); + $$.cnst = new std::string($1->getNewTy()); *$$.cnst += " " + *$2; delete $2; } | SIntType EInt64Val { // integral constants $$.type = $1; - $$.cnst = new std::string(*$1.newTy); + $$.cnst = new std::string($1->getNewTy()); *$$.cnst += " " + *$2; delete $2; } | UIntType EUINT64VAL { // integral constants $$.type = $1; - $$.cnst = new std::string(*$1.newTy); + $$.cnst = new std::string($1->getNewTy()); *$$.cnst += " " + *$2; delete $2; } | BOOL TRUETOK { // Boolean constants $$.type = $1; - $$.cnst = new std::string(*$1.newTy); + $$.cnst = new std::string($1->getNewTy()); *$$.cnst += " " + *$2; delete $2; } | BOOL FALSETOK { // Boolean constants $$.type = $1; - $$.cnst = new std::string(*$1.newTy); + $$.cnst = new std::string($1->getNewTy()); *$$.cnst += " " + *$2; delete $2; } | FPType FPVAL { // Float & Double constants $$.type = $1; - $$.cnst = new std::string(*$1.newTy); + $$.cnst = new std::string($1->getNewTy()); *$$.cnst += " " + *$2; delete $2; }; @@ -652,17 +736,16 @@ ConstVal: Types '[' ConstVector ']' { // Nonempty unsized arr ConstExpr: CastOps '(' ConstVal TO Types ')' { std::string source = *$3.cnst; - TypeInfo DstTy = $5; - ResolveType(DstTy); + TypeInfo* DstTy = ResolveType($5); if (*$1 == "cast") { // Call getCastUpgrade to upgrade the old cast - $$ = new std::string(getCastUpgrade(source, $3.type, $5, true)); + $$ = new std::string(getCastUpgrade(source, $3.type, DstTy, true)); } else { // Nothing to upgrade, just create the cast constant expr $$ = new std::string(*$1); - *$$ += "( " + source + " to " + *$5.newTy + ")"; + *$$ += "( " + source + " to " + $5->getNewTy() + ")"; } - delete $1; $3.destroy(); delete $4; $5.destroy(); + delete $1; $3.destroy(); delete $4; delete $5; } | GETELEMENTPTR '(' ConstVal IndexList ')' { *$1 += "(" + *$3.cnst; @@ -711,7 +794,7 @@ ConstExpr: CastOps '(' ConstVal TO Types ')' { | ShiftOps '(' ConstVal ',' ConstVal ')' { const char* shiftop = $1->c_str(); if (*$1 == "shr") - shiftop = ($3.type.isUnsigned()) ? "lshr" : "ashr"; + shiftop = ($3.type->isUnsigned()) ? "lshr" : "ashr"; $$ = new std::string(shiftop); *$$ += "(" + *$3.cnst + "," + *$5.cnst + ")"; delete $1; $3.destroy(); $5.destroy(); @@ -783,15 +866,13 @@ External : EXTERNAL | UNINITIALIZED { $$ = $1; *$$ = "external"; } // ConstPool - Constants with optional names assigned to them. ConstPool : ConstPool OptAssign TYPE TypesV { - EnumeratedTypes.push_back($4); + EnumeratedTypes.push_back(*$4); if (!$2->empty()) { - NamedTypes[*$2].newTy = new std::string(*$4.newTy); - NamedTypes[*$2].oldTy = $4.oldTy; - NamedTypes[*$2].elemTy = $4.elemTy; + NamedTypes[*$2] = *$4; *O << *$2 << " = "; } - *O << "type " << *$4.newTy << '\n'; - delete $2; delete $3; $4.destroy(); + *O << "type " << $4->getNewTy() << '\n'; + delete $2; delete $3; $$ = 0; } | ConstPool FunctionProto { // Function prototypes can be in const pool @@ -806,38 +887,42 @@ ConstPool : ConstPool OptAssign TYPE TypesV { } | ConstPool OptAssign OptLinkage GlobalType ConstVal GlobalVarAttributes { if (!$2->empty()) { - *O << *$2 << " = "; - Globals[*$2] = $5.type.clone(); + std::string Name = getUniqueName($2,$5.type); + *O << Name << " = "; + Globals[Name] = *$5.type; } *O << *$3 << ' ' << *$4 << ' ' << *$5.cnst << ' ' << *$6 << '\n'; - delete $2; delete $3; delete $4; $5.destroy(); delete $6; + delete $2; delete $3; delete $4; delete $6; $$ = 0; } | ConstPool OptAssign External GlobalType Types GlobalVarAttributes { if (!$2->empty()) { - *O << *$2 << " = "; - Globals[*$2] = $5.clone(); + std::string Name = getUniqueName($2,$5); + *O << Name << " = "; + Globals[Name] = *$5; } - *O << *$3 << ' ' << *$4 << ' ' << *$5.newTy << ' ' << *$6 << '\n'; - delete $2; delete $3; delete $4; $5.destroy(); delete $6; + *O << *$3 << ' ' << *$4 << ' ' << $5->getNewTy() << ' ' << *$6 << '\n'; + delete $2; delete $3; delete $4; delete $6; $$ = 0; } | ConstPool OptAssign DLLIMPORT GlobalType Types GlobalVarAttributes { if (!$2->empty()) { - *O << *$2 << " = "; - Globals[*$2] = $5.clone(); + std::string Name = getUniqueName($2,$5); + *O << Name << " = "; + Globals[Name] = *$5; } - *O << *$3 << ' ' << *$4 << ' ' << *$5.newTy << ' ' << *$6 << '\n'; - delete $2; delete $3; delete $4; $5.destroy(); delete $6; + *O << *$3 << ' ' << *$4 << ' ' << $5->getNewTy() << ' ' << *$6 << '\n'; + delete $2; delete $3; delete $4; delete $6; $$ = 0; } | ConstPool OptAssign EXTERN_WEAK GlobalType Types GlobalVarAttributes { if (!$2->empty()) { - *O << *$2 << " = "; - Globals[*$2] = $5.clone(); + std::string Name = getUniqueName($2,$5); + *O << Name << " = "; + Globals[Name] = *$5; } - *O << *$3 << ' ' << *$4 << ' ' << *$5.newTy << ' ' << *$6 << '\n'; - delete $2; delete $3; delete $4; $5.destroy(); delete $6; + *O << *$3 << ' ' << *$4 << ' ' << $5->getNewTy() << ' ' << *$6 << '\n'; + delete $2; delete $3; delete $4; delete $6; $$ = 0; } | ConstPool TARGET TargetDefinition { @@ -909,9 +994,11 @@ Name : VAR_ID | STRINGCONSTANT; OptName : Name | /*empty*/ { $$ = new std::string(); }; ArgVal : Types OptName { - $$ = $1.newTy; - if (!$2->empty()) - *$$ += " " + *$2; + $$ = new std::string($1->getNewTy()); + if (!$2->empty()) { + std::string Name = getUniqueName($2, $1); + *$$ += " " + Name; + } delete $2; }; @@ -941,14 +1028,13 @@ FunctionHeaderH if (!$1->empty()) { *$1 += " "; } - *$1 += *$2.newTy + " " + *$3 + "(" + *$5 + ")"; + *$1 += $2->getNewTy() + " " + *$3 + "(" + *$5 + ")"; if (!$7->empty()) { *$1 += " " + *$7; } if (!$8->empty()) { *$1 += " " + *$8; } - $2.destroy(); delete $3; delete $5; delete $7; @@ -978,6 +1064,7 @@ Function : FunctionHeader BasicBlockList END { if ($2) *O << *$2; *O << *$3 << "\n\n"; + delete $1; delete $2; delete $3; $$ = 0; }; @@ -1029,14 +1116,12 @@ ValueRef : SymbolicValueRef { $$.val = $1; $$.constant = false; - $$.type.newTy = 0; - $$.type.oldTy = UnresolvedTy; + $$.type = new TypeInfo(); } | ConstValueRef { $$.val = $1; $$.constant = true; - $$.type.newTy = 0; - $$.type.oldTy = UnresolvedTy; + $$.type = new TypeInfo(); } ; @@ -1044,9 +1129,12 @@ ValueRef // type immediately preceeds the value reference, and allows complex constant // pool references (for things like: 'ret [2 x int] [ int 12, int 42]') ResolvedVal : Types ValueRef { + std::string Name = getUniqueName($2.val, $1); $$ = $2; + delete $$.val; + delete $$.type; + $$.val = new std::string($1->getNewTy() + " " + Name); $$.type = $1; - $$.val->insert(0, *$1.newTy + " "); }; BasicBlockList : BasicBlockList BasicBlock { @@ -1086,42 +1174,48 @@ BBTerminatorInst : RET ResolvedVal { // Return with a result... $$ = 0; } | RET VOID { // Return with no result... - *O << " " << *$1 << ' ' << *$2.newTy << '\n'; - delete $1; $2.destroy(); + *O << " " << *$1 << ' ' << $2->getNewTy() << '\n'; + delete $1; delete $2; $$ = 0; } | BR LABEL ValueRef { // Unconditional Branch... - *O << " " << *$1 << ' ' << *$2.newTy << ' ' << *$3.val << '\n'; - delete $1; $2.destroy(); $3.destroy(); + *O << " " << *$1 << ' ' << $2->getNewTy() << ' ' << *$3.val << '\n'; + delete $1; delete $2; $3.destroy(); $$ = 0; } // Conditional Branch... | BR BOOL ValueRef ',' LABEL ValueRef ',' LABEL ValueRef { - *O << " " << *$1 << ' ' << *$2.newTy << ' ' << *$3.val << ", " - << *$5.newTy << ' ' << *$6.val << ", " << *$8.newTy << ' ' + std::string Name = getUniqueName($3.val, $2); + *O << " " << *$1 << ' ' << $2->getNewTy() << ' ' << Name << ", " + << $5->getNewTy() << ' ' << *$6.val << ", " << $8->getNewTy() << ' ' << *$9.val << '\n'; - delete $1; $2.destroy(); $3.destroy(); $5.destroy(); $6.destroy(); - $8.destroy(); $9.destroy(); + delete $1; delete $2; $3.destroy(); delete $5; $6.destroy(); + delete $8; $9.destroy(); $$ = 0; } | SWITCH IntType ValueRef ',' LABEL ValueRef '[' JumpTable ']' { - *O << " " << *$1 << ' ' << *$2.newTy << ' ' << *$3.val << ", " - << *$5.newTy << ' ' << *$6.val << " [" << *$8 << " ]\n"; - delete $1; $2.destroy(); $3.destroy(); $5.destroy(); $6.destroy(); + std::string Name = getUniqueName($3.val, $2); + *O << " " << *$1 << ' ' << $2->getNewTy() << ' ' << Name << ", " + << $5->getNewTy() << ' ' << *$6.val << " [" << *$8 << " ]\n"; + delete $1; delete $2; $3.destroy(); delete $5; $6.destroy(); delete $8; $$ = 0; } | SWITCH IntType ValueRef ',' LABEL ValueRef '[' ']' { - *O << " " << *$1 << ' ' << *$2.newTy << ' ' << *$3.val << ", " - << *$5.newTy << ' ' << *$6.val << "[]\n"; - delete $1; $2.destroy(); $3.destroy(); $5.destroy(); $6.destroy(); + std::string Name = getUniqueName($3.val, $2); + *O << " " << *$1 << ' ' << $2->getNewTy() << ' ' << Name << ", " + << $5->getNewTy() << ' ' << *$6.val << "[]\n"; + delete $1; delete $2; $3.destroy(); delete $5; $6.destroy(); $$ = 0; } | OptAssign INVOKE OptCallingConv TypesV ValueRef '(' ValueRefListE ')' TO LABEL ValueRef Unwind LABEL ValueRef { + TypeInfo* ResTy = getFunctionReturnType($4); *O << " "; - if (!$1->empty()) - *O << *$1 << " = "; - *O << *$2 << ' ' << *$3 << ' ' << *$4.newTy << ' ' << *$5.val << " ("; + if (!$1->empty()) { + std::string Name = getUniqueName($1, ResTy); + *O << Name << " = "; + } + *O << *$2 << ' ' << *$3 << ' ' << $4->getNewTy() << ' ' << *$5.val << " ("; for (unsigned i = 0; i < $7->size(); ++i) { ValueInfo& VI = (*$7)[i]; *O << *VI.val; @@ -1129,10 +1223,10 @@ BBTerminatorInst : RET ResolvedVal { // Return with a result... *O << ", "; VI.destroy(); } - *O << ") " << *$9 << ' ' << *$10.newTy << ' ' << *$11.val << ' ' - << *$12 << ' ' << *$13.newTy << ' ' << *$14.val << '\n'; - delete $1; delete $2; delete $3; $4.destroy(); $5.destroy(); delete $7; - delete $9; $10.destroy(); $11.destroy(); delete $12; $13.destroy(); + *O << ") " << *$9 << ' ' << $10->getNewTy() << ' ' << *$11.val << ' ' + << *$12 << ' ' << $13->getNewTy() << ' ' << *$14.val << '\n'; + delete $1; delete $2; delete $3; delete $4; $5.destroy(); delete $7; + delete $9; delete $10; $11.destroy(); delete $12; delete $13; $14.destroy(); $$ = 0; } @@ -1148,14 +1242,15 @@ BBTerminatorInst : RET ResolvedVal { // Return with a result... }; JumpTable : JumpTable IntType ConstValueRef ',' LABEL ValueRef { - *$1 += " " + *$2.newTy + " " + *$3 + ", " + *$5.newTy + " " + *$6.val; - $2.destroy(); delete $3; $5.destroy(); $6.destroy(); + *$1 += " " + $2->getNewTy() + " " + *$3 + ", " + $5->getNewTy() + " " + + *$6.val; + delete $2; delete $3; delete $5; $6.destroy(); $$ = $1; } | IntType ConstValueRef ',' LABEL ValueRef { - $2->insert(0, *$1.newTy + " " ); - *$2 += ", " + *$4.newTy + " " + *$5.val; - $1.destroy(); $4.destroy(); $5.destroy(); + $2->insert(0, $1->getNewTy() + " " ); + *$2 += ", " + $4->getNewTy() + " " + *$5.val; + delete $1; delete $4; $5.destroy(); $$ = $2; }; @@ -1167,38 +1262,41 @@ Inst $1->insert(0, "; "); // don't actually delete it, just comment it out delete deleteUselessCastName; } else { - *$1 += " = "; + // Get a unique name for the name of this value, based on its type. + *$1 = getUniqueName($1, $2.type) + " = "; } } - *$1 += *$2; - delete $2; + *$1 += *$2.val; + $2.destroy(); deleteUselessCastFlag = false; $$ = $1; }; PHIList : Types '[' ValueRef ',' ValueRef ']' { // Used for PHI nodes - $3.val->insert(0, *$1.newTy + "["); - *$3.val += "," + *$5.val + "]"; - $1.destroy(); $5.destroy(); - $$ = new std::string(*$3.val); - $3.destroy(); + std::string Name = getUniqueName($3.val, $1); + Name.insert(0, $1->getNewTy() + "["); + Name += "," + *$5.val + "]"; + $$.val = new std::string(Name); + $$.type = $1; + $3.destroy(); $5.destroy(); } | PHIList ',' '[' ValueRef ',' ValueRef ']' { - *$1 += ", [" + *$4.val + "," + *$6.val + "]"; + std::string Name = getUniqueName($4.val, $1.type); + *$1.val += ", [" + Name + "," + *$6.val + "]"; $4.destroy(); $6.destroy(); $$ = $1; }; ValueRefList - : ResolvedVal { + : ResolvedVal { $$ = new ValueList(); $$->push_back($1); } | ValueRefList ',' ResolvedVal { - $1->push_back($3); $$ = $1; + $$->push_back($3); }; // ValueRefListE - Just like ValueRefList, except that it may also be empty! @@ -1218,61 +1316,77 @@ OptTailCall InstVal : ArithmeticOps Types ValueRef ',' ValueRef { const char* op = getDivRemOpcode(*$1, $2); - $$ = new std::string(op); - *$$ += " " + *$2.newTy + " " + *$3.val + ", " + *$5.val; - delete $1; $2.destroy(); $3.destroy(); $5.destroy(); + std::string Name1 = getUniqueName($3.val, $2); + std::string Name2 = getUniqueName($5.val, $2); + $$.val = new std::string(op); + *$$.val += " " + $2->getNewTy() + " " + Name1 + ", " + Name2; + $$.type = $2; + delete $1; $3.destroy(); $5.destroy(); } | LogicalOps Types ValueRef ',' ValueRef { - *$1 += " " + *$2.newTy + " " + *$3.val + ", " + *$5.val; - $2.destroy(); $3.destroy(); $5.destroy(); - $$ = $1; + std::string Name1 = getUniqueName($3.val, $2); + std::string Name2 = getUniqueName($5.val, $2); + *$1 += " " + $2->getNewTy() + " " + Name1 + ", " + Name2; + $$.val = $1; + $$.type = $2; + $3.destroy(); $5.destroy(); } | SetCondOps Types ValueRef ',' ValueRef { + std::string Name1 = getUniqueName($3.val, $2); + std::string Name2 = getUniqueName($5.val, $2); *$1 = getCompareOp(*$1, $2); - *$1 += " " + *$2.newTy + " " + *$3.val + ", " + *$5.val; - $2.destroy(); $3.destroy(); $5.destroy(); - $$ = $1; + *$1 += " " + $2->getNewTy() + " " + Name1 + ", " + Name2; + $$.val = $1; + $$.type = new TypeInfo("bool",BoolTy); + $3.destroy(); $5.destroy(); } | ICMP IPredicates Types ValueRef ',' ValueRef { - *$1 += " " + *$2 + " " + *$3.newTy + " " + *$4.val + "," + *$6.val; + std::string Name1 = getUniqueName($4.val, $3); + std::string Name2 = getUniqueName($6.val, $3); + *$1 += " " + *$2 + " " + $3->getNewTy() + " " + Name1 + "," + Name2; + $$.val = $1; + $$.type = new TypeInfo("bool",BoolTy); delete $2; $4.destroy(); $6.destroy(); - $$ = $1; } | FCMP FPredicates Types ValueRef ',' ValueRef { - *$1 += " " + *$2 + " " + *$3.newTy + " " + *$4.val + "," + *$6.val; + std::string Name1 = getUniqueName($4.val, $3); + std::string Name2 = getUniqueName($6.val, $3); + *$1 += " " + *$2 + " " + $3->getNewTy() + " " + Name1 + "," + Name2; + $$.val = $1; + $$.type = new TypeInfo("bool",BoolTy); delete $2; $4.destroy(); $6.destroy(); - $$ = $1; } | NOT ResolvedVal { - *$1 += " " + *$2.val; - $2.destroy(); - $$ = $1; + $$ = $2; + $$.val->insert(0, *$1 + " "); + delete $1; } | ShiftOps ResolvedVal ',' ResolvedVal { const char* shiftop = $1->c_str(); if (*$1 == "shr") - shiftop = ($2.type.isUnsigned()) ? "lshr" : "ashr"; - $$ = new std::string(shiftop); - *$$ += " " + *$2.val + ", " + *$4.val; - delete $1; $2.destroy(); $4.destroy(); + shiftop = ($2.type->isUnsigned()) ? "lshr" : "ashr"; + $$.val = new std::string(shiftop); + *$$.val += " " + *$2.val + ", " + *$4.val; + $$.type = $2.type; + delete $1; delete $2.val; $4.destroy(); } | CastOps ResolvedVal TO Types { std::string source = *$2.val; - TypeInfo SrcTy = $2.type; - TypeInfo DstTy = $4; - ResolveType(DstTy); - $$ = new std::string(); + TypeInfo* SrcTy = $2.type; + TypeInfo* DstTy = ResolveType($4); + $$.val = new std::string(); if (*$1 == "cast") { - *$$ += getCastUpgrade(source, SrcTy, DstTy, false); + *$$.val += getCastUpgrade(source, SrcTy, DstTy, false); } else { - *$$ += *$1 + " " + source + " to " + *DstTy.newTy; + *$$.val += *$1 + " " + source + " to " + DstTy->getNewTy(); } + $$.type = $4; // Check to see if this is a useless cast of a value to the same name // and the same type. Such casts will probably cause redefinition errors // when assembled and perform no code gen action so just remove them. if (*$1 == "cast" || *$1 == "bitcast") - if ($2.type.isInteger() && $4.isInteger() && - $2.type.getBitWidth() == $4.getBitWidth()) { + if ($2.type->isInteger() && DstTy->isInteger() && + $2.type->getBitWidth() == DstTy->getBitWidth()) { deleteUselessCastFlag = true; // Flag the "Inst" rule deleteUselessCastName = new std::string(*$2.val); // save the name size_t pos = deleteUselessCastName->find_first_of("%\"",0); @@ -1282,44 +1396,51 @@ InstVal : ArithmeticOps Types ValueRef ',' ValueRef { } } delete $1; $2.destroy(); - delete $3; $4.destroy(); + delete $3; } | SELECT ResolvedVal ',' ResolvedVal ',' ResolvedVal { *$1 += " " + *$2.val + ", " + *$4.val + ", " + *$6.val; - $2.destroy(); $4.destroy(); $6.destroy(); - $$ = $1; + $$.val = $1; + $$.type = $4.type; + $2.destroy(); delete $4.val; $6.destroy(); } | VAARG ResolvedVal ',' Types { - *$1 += " " + *$2.val + ", " + *$4.newTy; - $2.destroy(); $4.destroy(); - $$ = $1; + *$1 += " " + *$2.val + ", " + $4->getNewTy(); + $$.val = $1; + $$.type = $4; + $2.destroy(); } | EXTRACTELEMENT ResolvedVal ',' ResolvedVal { *$1 += " " + *$2.val + ", " + *$4.val; - $2.destroy(); $4.destroy(); - $$ = $1; + $$.val = $1; + ResolveType($2.type); + $$.type = $2.type->getElementType()->clone(); + delete $2.val; $4.destroy(); } | INSERTELEMENT ResolvedVal ',' ResolvedVal ',' ResolvedVal { *$1 += " " + *$2.val + ", " + *$4.val + ", " + *$6.val; - $2.destroy(); $4.destroy(); $6.destroy(); - $$ = $1; + $$.val = $1; + $$.type = $2.type; + delete $2.val; $4.destroy(); $6.destroy(); } | SHUFFLEVECTOR ResolvedVal ',' ResolvedVal ',' ResolvedVal { *$1 += " " + *$2.val + ", " + *$4.val + ", " + *$6.val; - $2.destroy(); $4.destroy(); $6.destroy(); - $$ = $1; + $$.val = $1; + $$.type = $2.type; + delete $2.val; $4.destroy(); $6.destroy(); } | PHI_TOK PHIList { - *$1 += " " + *$2; - delete $2; - $$ = $1; + *$1 += " " + *$2.val; + $$.val = $1; + $$.type = $2.type; + delete $2.val; } | OptTailCall OptCallingConv TypesV ValueRef '(' ValueRefListE ')' { if (!$2->empty()) *$1 += " " + *$2; if (!$1->empty()) *$1 += " "; - *$1 += *$3.newTy + " " + *$4.val + "("; + *$1 += $3->getNewTy() + " " + *$4.val + "("; for (unsigned i = 0; i < $6->size(); ++i) { ValueInfo& VI = (*$6)[i]; *$1 += *VI.val; @@ -1328,8 +1449,9 @@ InstVal : ArithmeticOps Types ValueRef ',' ValueRef { VI.destroy(); } *$1 += ")"; - delete $2; $3.destroy(); $4.destroy(); delete $6; - $$ = $1; + $$.val = $1; + $$.type = getFunctionReturnType($3); + delete $2; delete $3; $4.destroy(); delete $6; } | MemoryInst ; @@ -1346,74 +1468,85 @@ OptVolatile ; MemoryInst : MALLOC Types OptCAlign { - *$1 += " " + *$2.newTy; + *$1 += " " + $2->getNewTy(); if (!$3->empty()) *$1 += " " + *$3; - $2.destroy(); delete $3; - $$ = $1; + $$.val = $1; + $$.type = $2->getPointerType(); + delete $2; delete $3; } | MALLOC Types ',' UINT ValueRef OptCAlign { - *$1 += " " + *$2.newTy + ", " + *$4.newTy + " " + *$5.val; + std::string Name = getUniqueName($5.val, $4); + *$1 += " " + $2->getNewTy() + ", " + $4->getNewTy() + " " + Name; if (!$6->empty()) *$1 += " " + *$6; - $2.destroy(); $4.destroy(); $5.destroy(); delete $6; - $$ = $1; + $$.val = $1; + $$.type = $2->getPointerType(); + delete $2; delete $4; $5.destroy(); delete $6; } | ALLOCA Types OptCAlign { - *$1 += " " + *$2.newTy; + *$1 += " " + $2->getNewTy(); if (!$3->empty()) *$1 += " " + *$3; - $2.destroy(); delete $3; - $$ = $1; + $$.val = $1; + $$.type = $2->getPointerType(); + delete $2; delete $3; } | ALLOCA Types ',' UINT ValueRef OptCAlign { - *$1 += " " + *$2.newTy + ", " + *$4.newTy + " " + *$5.val; + std::string Name = getUniqueName($5.val, $4); + *$1 += " " + $2->getNewTy() + ", " + $4->getNewTy() + " " + Name; if (!$6->empty()) *$1 += " " + *$6; - $2.destroy(); $4.destroy(); $5.destroy(); delete $6; - $$ = $1; + $$.val = $1; + $$.type = $2->getPointerType(); + delete $2; delete $4; $5.destroy(); delete $6; } | FREE ResolvedVal { *$1 += " " + *$2.val; + $$.val = $1; + $$.type = new TypeInfo("void", VoidTy); $2.destroy(); - $$ = $1; } | OptVolatile LOAD Types ValueRef { + std::string Name = getUniqueName($4.val, $3); if (!$1->empty()) *$1 += " "; - *$1 += *$2 + " " + *$3.newTy + " " + *$4.val; - delete $2; $3.destroy(); $4.destroy(); - $$ = $1; + *$1 += *$2 + " " + $3->getNewTy() + " " + Name; + $$.val = $1; + $$.type = $3->getElementType()->clone(); + delete $2; delete $3; $4.destroy(); } | OptVolatile STORE ResolvedVal ',' Types ValueRef { + std::string Name = getUniqueName($6.val, $5); if (!$1->empty()) *$1 += " "; - *$1 += *$2 + " " + *$3.val + ", " + *$5.newTy + " " + *$6.val; - delete $2; $3.destroy(); $5.destroy(); $6.destroy(); - $$ = $1; + *$1 += *$2 + " " + *$3.val + ", " + $5->getNewTy() + " " + Name; + $$.val = $1; + $$.type = new TypeInfo("void", VoidTy); + delete $2; $3.destroy(); delete $5; $6.destroy(); } | GETELEMENTPTR Types ValueRef IndexList { + std::string Name = getUniqueName($3.val, $2); // Upgrade the indices for (unsigned i = 0; i < $4->size(); ++i) { ValueInfo& VI = (*$4)[i]; - if (VI.type.isUnsigned() && !VI.isConstant() && - VI.type.getBitWidth() < 64) { + if (VI.type->isUnsigned() && !VI.isConstant() && + VI.type->getBitWidth() < 64) { std::string* old = VI.val; *O << " %gep_upgrade" << unique << " = zext " << *old << " to i64\n"; VI.val = new std::string("i64 %gep_upgrade" + llvm::utostr(unique++)); - VI.type.oldTy = ULongTy; - delete old; + VI.type->setOldTy(ULongTy); } } - *$1 += " " + *$2.newTy + " " + *$3.val; + *$1 += " " + $2->getNewTy() + " " + Name; for (unsigned i = 0; i < $4->size(); ++i) { ValueInfo& VI = (*$4)[i]; *$1 += ", " + *VI.val; - VI.destroy(); } - $2.destroy(); $3.destroy(); delete $4; - $$ = $1; + $$.val = $1; + $$.type = getGEPIndexedType($2,$4); + $3.destroy(); delete $4; }; %%