From bb1fd5770debf03c085777eef7ad121fb4b3eecf Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Wed, 21 Mar 2007 17:15:50 +0000 Subject: [PATCH] Regenerate. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35235 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/llvm-upgrade/UpgradeLexer.cpp.cvs | 377 +++---- tools/llvm-upgrade/UpgradeLexer.l.cvs | 43 +- tools/llvm-upgrade/UpgradeParser.cpp.cvs | 1282 ++++++++++++++-------- tools/llvm-upgrade/UpgradeParser.h.cvs | 4 +- tools/llvm-upgrade/UpgradeParser.y.cvs | 755 +++++++++---- 5 files changed, 1557 insertions(+), 904 deletions(-) diff --git a/tools/llvm-upgrade/UpgradeLexer.cpp.cvs b/tools/llvm-upgrade/UpgradeLexer.cpp.cvs index 753cd7d3b94..68ae9a47c5a 100644 --- a/tools/llvm-upgrade/UpgradeLexer.cpp.cvs +++ b/tools/llvm-upgrade/UpgradeLexer.cpp.cvs @@ -976,7 +976,12 @@ char *yytext; #define RET_TY(sym,NewTY,sign) \ Upgradelval.PrimType.T = NewTY; \ - Upgradelval.PrimType.S = sign; \ + switch (sign) { \ + case 0: Upgradelval.PrimType.S.makeSignless(); break; \ + case 1: Upgradelval.PrimType.S.makeUnsigned(); break; \ + case 2: Upgradelval.PrimType.S.makeSigned(); break; \ + default: assert(0 && "Invalid sign kind"); break; \ + }\ return sym namespace llvm { @@ -1085,7 +1090,7 @@ using namespace llvm; /* HexIntConstant - Hexadecimal constant generated by the CFE to avoid forcing * it to deal with 64 bit numbers. */ -#line 1089 "UpgradeLexer.cpp" +#line 1094 "UpgradeLexer.cpp" /* Macros after this point can all be overridden by user definitions in * section 1. @@ -1236,10 +1241,10 @@ YY_DECL register char *yy_cp = NULL, *yy_bp = NULL; register int yy_act; -#line 189 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 194 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -#line 1243 "UpgradeLexer.cpp" +#line 1248 "UpgradeLexer.cpp" if ( yy_init ) { @@ -1332,742 +1337,742 @@ do_action: /* This label is used only to access EOF actions. */ { /* beginning of action switch */ case 1: YY_RULE_SETUP -#line 191 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 196 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { /* Ignore comments for now */ } YY_BREAK case 2: YY_RULE_SETUP -#line 193 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 198 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return BEGINTOK; } YY_BREAK case 3: YY_RULE_SETUP -#line 194 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 199 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return ENDTOK; } YY_BREAK case 4: YY_RULE_SETUP -#line 195 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 200 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return TRUETOK; } YY_BREAK case 5: YY_RULE_SETUP -#line 196 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 201 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return FALSETOK; } YY_BREAK case 6: YY_RULE_SETUP -#line 197 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 202 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return DECLARE; } YY_BREAK case 7: YY_RULE_SETUP -#line 198 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 203 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return GLOBAL; } YY_BREAK case 8: YY_RULE_SETUP -#line 199 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 204 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return CONSTANT; } YY_BREAK case 9: YY_RULE_SETUP -#line 200 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 205 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return INTERNAL; } YY_BREAK case 10: YY_RULE_SETUP -#line 201 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 206 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return LINKONCE; } YY_BREAK case 11: YY_RULE_SETUP -#line 202 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 207 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return WEAK; } YY_BREAK case 12: YY_RULE_SETUP -#line 203 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 208 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return APPENDING; } YY_BREAK case 13: YY_RULE_SETUP -#line 204 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 209 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return DLLIMPORT; } YY_BREAK case 14: YY_RULE_SETUP -#line 205 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 210 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return DLLEXPORT; } YY_BREAK case 15: YY_RULE_SETUP -#line 206 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 211 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return EXTERN_WEAK; } YY_BREAK case 16: YY_RULE_SETUP -#line 207 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 212 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return EXTERNAL; } /* Deprecated, turn into external */ YY_BREAK case 17: YY_RULE_SETUP -#line 208 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 213 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return EXTERNAL; } YY_BREAK case 18: YY_RULE_SETUP -#line 209 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 214 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return IMPLEMENTATION; } YY_BREAK case 19: YY_RULE_SETUP -#line 210 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 215 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return ZEROINITIALIZER; } YY_BREAK case 20: YY_RULE_SETUP -#line 211 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 216 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return DOTDOTDOT; } YY_BREAK case 21: YY_RULE_SETUP -#line 212 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 217 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return UNDEF; } YY_BREAK case 22: YY_RULE_SETUP -#line 213 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 218 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return NULL_TOK; } YY_BREAK case 23: YY_RULE_SETUP -#line 214 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 219 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return TO; } YY_BREAK case 24: YY_RULE_SETUP -#line 215 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 220 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return EXCEPT; } YY_BREAK case 25: YY_RULE_SETUP -#line 216 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 221 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return NOT; } /* Deprecated, turned into XOR */ YY_BREAK case 26: YY_RULE_SETUP -#line 217 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 222 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return TAIL; } YY_BREAK case 27: YY_RULE_SETUP -#line 218 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 223 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return TARGET; } YY_BREAK case 28: YY_RULE_SETUP -#line 219 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 224 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return TRIPLE; } YY_BREAK case 29: YY_RULE_SETUP -#line 220 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 225 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return DEPLIBS; } YY_BREAK case 30: YY_RULE_SETUP -#line 221 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 226 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return ENDIAN; } YY_BREAK case 31: YY_RULE_SETUP -#line 222 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 227 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return POINTERSIZE; } YY_BREAK case 32: YY_RULE_SETUP -#line 223 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 228 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return DATALAYOUT; } YY_BREAK case 33: YY_RULE_SETUP -#line 224 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 229 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return LITTLE; } YY_BREAK case 34: YY_RULE_SETUP -#line 225 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 230 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return BIG; } YY_BREAK case 35: YY_RULE_SETUP -#line 226 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 231 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return VOLATILE; } YY_BREAK case 36: YY_RULE_SETUP -#line 227 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 232 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return ALIGN; } YY_BREAK case 37: YY_RULE_SETUP -#line 228 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 233 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return SECTION; } YY_BREAK case 38: YY_RULE_SETUP -#line 229 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 234 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return MODULE; } YY_BREAK case 39: YY_RULE_SETUP -#line 230 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 235 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return ASM_TOK; } YY_BREAK case 40: YY_RULE_SETUP -#line 231 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 236 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return SIDEEFFECT; } YY_BREAK case 41: YY_RULE_SETUP -#line 233 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 238 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return CC_TOK; } YY_BREAK case 42: YY_RULE_SETUP -#line 234 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 239 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return CCC_TOK; } YY_BREAK case 43: YY_RULE_SETUP -#line 235 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 240 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return CSRETCC_TOK; } YY_BREAK case 44: YY_RULE_SETUP -#line 236 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 241 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return FASTCC_TOK; } YY_BREAK case 45: YY_RULE_SETUP -#line 237 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 242 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return COLDCC_TOK; } YY_BREAK case 46: YY_RULE_SETUP -#line 238 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 243 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return X86_STDCALLCC_TOK; } YY_BREAK case 47: YY_RULE_SETUP -#line 239 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 244 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return X86_FASTCALLCC_TOK; } YY_BREAK case 48: YY_RULE_SETUP -#line 241 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ RET_TY(SBYTE, Type::Int8Ty, Signed); } +#line 246 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +{ RET_TY(SBYTE, Type::Int8Ty, 2); } YY_BREAK case 49: YY_RULE_SETUP -#line 242 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ RET_TY(UBYTE, Type::Int8Ty, Unsigned); } +#line 247 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +{ RET_TY(UBYTE, Type::Int8Ty, 1); } YY_BREAK case 50: YY_RULE_SETUP -#line 243 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ RET_TY(UBYTE, Type::Int8Ty, Unsigned); } +#line 248 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +{ RET_TY(UBYTE, Type::Int8Ty, 1); } YY_BREAK case 51: YY_RULE_SETUP -#line 244 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ RET_TY(SHORT, Type::Int16Ty, Signed); } +#line 249 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +{ RET_TY(SHORT, Type::Int16Ty, 2); } YY_BREAK case 52: YY_RULE_SETUP -#line 245 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ RET_TY(USHORT, Type::Int16Ty, Unsigned); } +#line 250 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +{ RET_TY(USHORT, Type::Int16Ty, 1); } YY_BREAK case 53: YY_RULE_SETUP -#line 246 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ RET_TY(USHORT, Type::Int16Ty, Unsigned); } +#line 251 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +{ RET_TY(USHORT, Type::Int16Ty, 1); } YY_BREAK case 54: YY_RULE_SETUP -#line 247 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ RET_TY(INT, Type::Int32Ty, Signed); } +#line 252 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +{ RET_TY(INT, Type::Int32Ty, 2); } YY_BREAK case 55: YY_RULE_SETUP -#line 248 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ RET_TY(UINT, Type::Int32Ty, Unsigned); } +#line 253 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +{ RET_TY(UINT, Type::Int32Ty, 1); } YY_BREAK case 56: YY_RULE_SETUP -#line 249 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ RET_TY(UINT, Type::Int32Ty, Unsigned); } +#line 254 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +{ RET_TY(UINT, Type::Int32Ty, 1); } YY_BREAK case 57: YY_RULE_SETUP -#line 250 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ RET_TY(LONG, Type::Int64Ty, Signed); } +#line 255 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +{ RET_TY(LONG, Type::Int64Ty, 2); } YY_BREAK case 58: YY_RULE_SETUP -#line 251 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ RET_TY(ULONG, Type::Int64Ty, Unsigned); } +#line 256 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +{ RET_TY(ULONG, Type::Int64Ty, 1); } YY_BREAK case 59: YY_RULE_SETUP -#line 252 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ RET_TY(ULONG, Type::Int64Ty, Unsigned); } +#line 257 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +{ RET_TY(ULONG, Type::Int64Ty, 1); } YY_BREAK case 60: YY_RULE_SETUP -#line 253 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ RET_TY(VOID, Type::VoidTy, Signless ); } +#line 258 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +{ RET_TY(VOID, Type::VoidTy, 0); } YY_BREAK case 61: YY_RULE_SETUP -#line 254 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ RET_TY(BOOL, Type::Int1Ty, Unsigned ); } +#line 259 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +{ RET_TY(BOOL, Type::Int1Ty, 1); } YY_BREAK case 62: YY_RULE_SETUP -#line 255 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ RET_TY(BOOL, Type::Int1Ty, Unsigned ); } +#line 260 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +{ RET_TY(BOOL, Type::Int1Ty, 1); } YY_BREAK case 63: YY_RULE_SETUP -#line 256 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ RET_TY(FLOAT, Type::FloatTy, Signless ); } +#line 261 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +{ RET_TY(FLOAT, Type::FloatTy, 0); } YY_BREAK case 64: YY_RULE_SETUP -#line 257 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ RET_TY(DOUBLE, Type::DoubleTy,Signless); } +#line 262 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +{ RET_TY(DOUBLE, Type::DoubleTy,0); } YY_BREAK case 65: YY_RULE_SETUP -#line 258 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" -{ RET_TY(LABEL, Type::LabelTy, Signless ); } +#line 263 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +{ RET_TY(LABEL, Type::LabelTy, 0); } YY_BREAK case 66: YY_RULE_SETUP -#line 259 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 264 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return TYPE; } YY_BREAK case 67: YY_RULE_SETUP -#line 260 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 265 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return OPAQUE; } YY_BREAK case 68: YY_RULE_SETUP -#line 262 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 267 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, AddOp, ADD); } YY_BREAK case 69: YY_RULE_SETUP -#line 263 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 268 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SubOp, SUB); } YY_BREAK case 70: YY_RULE_SETUP -#line 264 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 269 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, MulOp, MUL); } YY_BREAK case 71: YY_RULE_SETUP -#line 265 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 270 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, DivOp, DIV); } YY_BREAK case 72: YY_RULE_SETUP -#line 266 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 271 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, UDivOp, UDIV); } YY_BREAK case 73: YY_RULE_SETUP -#line 267 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 272 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SDivOp, SDIV); } YY_BREAK case 74: YY_RULE_SETUP -#line 268 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 273 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, FDivOp, FDIV); } YY_BREAK case 75: YY_RULE_SETUP -#line 269 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 274 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, RemOp, REM); } YY_BREAK case 76: YY_RULE_SETUP -#line 270 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 275 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, URemOp, UREM); } YY_BREAK case 77: YY_RULE_SETUP -#line 271 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 276 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SRemOp, SREM); } YY_BREAK case 78: YY_RULE_SETUP -#line 272 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 277 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, FRemOp, FREM); } YY_BREAK case 79: YY_RULE_SETUP -#line 273 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 278 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, AndOp, AND); } YY_BREAK case 80: YY_RULE_SETUP -#line 274 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 279 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, OrOp , OR ); } YY_BREAK case 81: YY_RULE_SETUP -#line 275 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 280 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, XorOp, XOR); } YY_BREAK case 82: YY_RULE_SETUP -#line 276 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 281 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetNE, SETNE); } YY_BREAK case 83: YY_RULE_SETUP -#line 277 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 282 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetEQ, SETEQ); } YY_BREAK case 84: YY_RULE_SETUP -#line 278 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 283 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetLT, SETLT); } YY_BREAK case 85: YY_RULE_SETUP -#line 279 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 284 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetGT, SETGT); } YY_BREAK case 86: YY_RULE_SETUP -#line 280 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 285 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetLE, SETLE); } YY_BREAK case 87: YY_RULE_SETUP -#line 281 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 286 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetGE, SETGE); } YY_BREAK case 88: YY_RULE_SETUP -#line 282 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 287 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, ShlOp, SHL); } YY_BREAK case 89: YY_RULE_SETUP -#line 283 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 288 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, ShrOp, SHR); } YY_BREAK case 90: YY_RULE_SETUP -#line 284 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 289 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, LShrOp, LSHR); } YY_BREAK case 91: YY_RULE_SETUP -#line 285 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 290 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, AShrOp, ASHR); } YY_BREAK case 92: YY_RULE_SETUP -#line 287 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 292 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, ICmpOp, ICMP); } YY_BREAK case 93: YY_RULE_SETUP -#line 288 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 293 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, FCmpOp, FCMP); } YY_BREAK case 94: YY_RULE_SETUP -#line 290 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 295 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return EQ; } YY_BREAK case 95: YY_RULE_SETUP -#line 291 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 296 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return NE; } YY_BREAK case 96: YY_RULE_SETUP -#line 292 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 297 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return SLT; } YY_BREAK case 97: YY_RULE_SETUP -#line 293 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 298 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return SGT; } YY_BREAK case 98: YY_RULE_SETUP -#line 294 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 299 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return SLE; } YY_BREAK case 99: YY_RULE_SETUP -#line 295 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 300 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return SGE; } YY_BREAK case 100: YY_RULE_SETUP -#line 296 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 301 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return ULT; } YY_BREAK case 101: YY_RULE_SETUP -#line 297 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 302 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return UGT; } YY_BREAK case 102: YY_RULE_SETUP -#line 298 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 303 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return ULE; } YY_BREAK case 103: YY_RULE_SETUP -#line 299 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 304 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return UGE; } YY_BREAK case 104: YY_RULE_SETUP -#line 300 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 305 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return OEQ; } YY_BREAK case 105: YY_RULE_SETUP -#line 301 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 306 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return ONE; } YY_BREAK case 106: YY_RULE_SETUP -#line 302 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 307 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return OLT; } YY_BREAK case 107: YY_RULE_SETUP -#line 303 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 308 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return OGT; } YY_BREAK case 108: YY_RULE_SETUP -#line 304 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 309 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return OLE; } YY_BREAK case 109: YY_RULE_SETUP -#line 305 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 310 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return OGE; } YY_BREAK case 110: YY_RULE_SETUP -#line 306 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 311 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return ORD; } YY_BREAK case 111: YY_RULE_SETUP -#line 307 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 312 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return UNO; } YY_BREAK case 112: YY_RULE_SETUP -#line 308 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 313 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return UEQ; } YY_BREAK case 113: YY_RULE_SETUP -#line 309 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 314 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return UNE; } YY_BREAK case 114: YY_RULE_SETUP -#line 311 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 316 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, PHIOp, PHI_TOK); } YY_BREAK case 115: YY_RULE_SETUP -#line 312 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 317 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, CallOp, CALL); } YY_BREAK case 116: YY_RULE_SETUP -#line 313 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 318 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, CastOp, CAST); } YY_BREAK case 117: YY_RULE_SETUP -#line 314 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 319 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, TruncOp, TRUNC); } YY_BREAK case 118: YY_RULE_SETUP -#line 315 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 320 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, ZExtOp , ZEXT); } YY_BREAK case 119: YY_RULE_SETUP -#line 316 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 321 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, SExtOp, SEXT); } YY_BREAK case 120: YY_RULE_SETUP -#line 317 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 322 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, FPTruncOp, FPTRUNC); } YY_BREAK case 121: YY_RULE_SETUP -#line 318 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 323 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, FPExtOp, FPEXT); } YY_BREAK case 122: YY_RULE_SETUP -#line 319 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 324 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, FPToUIOp, FPTOUI); } YY_BREAK case 123: YY_RULE_SETUP -#line 320 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 325 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, FPToSIOp, FPTOSI); } YY_BREAK case 124: YY_RULE_SETUP -#line 321 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 326 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, UIToFPOp, UITOFP); } YY_BREAK case 125: YY_RULE_SETUP -#line 322 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 327 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, SIToFPOp, SITOFP); } YY_BREAK case 126: YY_RULE_SETUP -#line 323 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 328 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, PtrToIntOp, PTRTOINT); } YY_BREAK case 127: YY_RULE_SETUP -#line 324 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 329 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, IntToPtrOp, INTTOPTR); } YY_BREAK case 128: YY_RULE_SETUP -#line 325 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 330 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, BitCastOp, BITCAST); } YY_BREAK case 129: YY_RULE_SETUP -#line 326 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 331 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, SelectOp, SELECT); } YY_BREAK case 130: YY_RULE_SETUP -#line 327 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 332 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return VANEXT_old; } YY_BREAK case 131: YY_RULE_SETUP -#line 328 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 333 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return VAARG_old; } YY_BREAK case 132: YY_RULE_SETUP -#line 329 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 334 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, VAArg , VAARG); } YY_BREAK case 133: YY_RULE_SETUP -#line 330 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 335 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, RetOp, RET); } YY_BREAK case 134: YY_RULE_SETUP -#line 331 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 336 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, BrOp, BR); } YY_BREAK case 135: YY_RULE_SETUP -#line 332 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 337 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, SwitchOp, SWITCH); } YY_BREAK case 136: YY_RULE_SETUP -#line 333 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 338 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, InvokeOp, INVOKE); } YY_BREAK case 137: YY_RULE_SETUP -#line 334 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 339 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return UNWIND; } YY_BREAK case 138: YY_RULE_SETUP -#line 335 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 340 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, UnreachableOp, UNREACHABLE); } YY_BREAK case 139: YY_RULE_SETUP -#line 337 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 342 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, MallocOp, MALLOC); } YY_BREAK case 140: YY_RULE_SETUP -#line 338 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 343 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, AllocaOp, ALLOCA); } YY_BREAK case 141: YY_RULE_SETUP -#line 339 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 344 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, FreeOp, FREE); } YY_BREAK case 142: YY_RULE_SETUP -#line 340 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 345 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, LoadOp, LOAD); } YY_BREAK case 143: YY_RULE_SETUP -#line 341 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 346 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, StoreOp, STORE); } YY_BREAK case 144: YY_RULE_SETUP -#line 342 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 347 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, GetElementPtrOp, GETELEMENTPTR); } YY_BREAK case 145: YY_RULE_SETUP -#line 344 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 349 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, ExtractElementOp, EXTRACTELEMENT); } YY_BREAK case 146: YY_RULE_SETUP -#line 345 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 350 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, InsertElementOp, INSERTELEMENT); } YY_BREAK case 147: YY_RULE_SETUP -#line 346 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 351 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, ShuffleVectorOp, SHUFFLEVECTOR); } YY_BREAK case 148: YY_RULE_SETUP -#line 349 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 354 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { UnEscapeLexed(yytext+1); Upgradelval.StrVal = strdup(yytext+1); // Skip % @@ -2076,7 +2081,7 @@ YY_RULE_SETUP YY_BREAK case 149: YY_RULE_SETUP -#line 354 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 359 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { yytext[strlen(yytext)-1] = 0; // nuke colon UnEscapeLexed(yytext); @@ -2086,7 +2091,7 @@ YY_RULE_SETUP YY_BREAK case 150: YY_RULE_SETUP -#line 360 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 365 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { yytext[strlen(yytext)-2] = 0; // nuke colon, end quote UnEscapeLexed(yytext+1); @@ -2096,7 +2101,7 @@ YY_RULE_SETUP YY_BREAK case 151: YY_RULE_SETUP -#line 367 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 372 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { // Note that we cannot unescape a string constant here! The // string constant might contain a \00 which would not be // understood by the string stuff. It is valid to make a @@ -2109,12 +2114,12 @@ YY_RULE_SETUP YY_BREAK case 152: YY_RULE_SETUP -#line 378 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 383 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { Upgradelval.UInt64Val = atoull(yytext); return EUINT64VAL; } YY_BREAK case 153: YY_RULE_SETUP -#line 379 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 384 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { uint64_t Val = atoull(yytext+1); // +1: we have bigger negative range @@ -2126,7 +2131,7 @@ YY_RULE_SETUP YY_BREAK case 154: YY_RULE_SETUP -#line 387 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 392 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { Upgradelval.UInt64Val = HexIntToVal(yytext+3); return yytext[0] == 's' ? ESINT64VAL : EUINT64VAL; @@ -2134,7 +2139,7 @@ YY_RULE_SETUP YY_BREAK case 155: YY_RULE_SETUP -#line 392 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 397 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { uint64_t Val = atoull(yytext+1); if ((unsigned)Val != Val) @@ -2145,7 +2150,7 @@ YY_RULE_SETUP YY_BREAK case 156: YY_RULE_SETUP -#line 399 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 404 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { uint64_t Val = atoull(yytext+2); // +1: we have bigger negative range @@ -2157,16 +2162,16 @@ YY_RULE_SETUP YY_BREAK case 157: YY_RULE_SETUP -#line 408 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 413 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { Upgradelval.FPVal = atof(yytext); return FPVAL; } YY_BREAK case 158: YY_RULE_SETUP -#line 409 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 414 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { Upgradelval.FPVal = HexToFP(yytext); return FPVAL; } YY_BREAK case YY_STATE_EOF(INITIAL): -#line 411 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 416 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { /* Make sure to free the internal buffers for flex when we are * done reading our input! @@ -2177,20 +2182,20 @@ case YY_STATE_EOF(INITIAL): YY_BREAK case 159: YY_RULE_SETUP -#line 419 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 424 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { /* Ignore whitespace */ } YY_BREAK case 160: YY_RULE_SETUP -#line 420 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 425 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" { return yytext[0]; } YY_BREAK case 161: YY_RULE_SETUP -#line 422 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 427 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK -#line 2194 "UpgradeLexer.cpp" +#line 2199 "UpgradeLexer.cpp" case YY_END_OF_BUFFER: { @@ -3068,5 +3073,5 @@ int main() return 0; } #endif -#line 422 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 427 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" diff --git a/tools/llvm-upgrade/UpgradeLexer.l.cvs b/tools/llvm-upgrade/UpgradeLexer.l.cvs index ebab6db9c0c..300cf5cc1aa 100644 --- a/tools/llvm-upgrade/UpgradeLexer.l.cvs +++ b/tools/llvm-upgrade/UpgradeLexer.l.cvs @@ -51,7 +51,12 @@ #define RET_TY(sym,NewTY,sign) \ Upgradelval.PrimType.T = NewTY; \ - Upgradelval.PrimType.S = sign; \ + switch (sign) { \ + case 0: Upgradelval.PrimType.S.makeSignless(); break; \ + case 1: Upgradelval.PrimType.S.makeUnsigned(); break; \ + case 2: Upgradelval.PrimType.S.makeSigned(); break; \ + default: assert(0 && "Invalid sign kind"); break; \ + }\ return sym namespace llvm { @@ -238,24 +243,24 @@ coldcc { return COLDCC_TOK; } x86_stdcallcc { return X86_STDCALLCC_TOK; } x86_fastcallcc { return X86_FASTCALLCC_TOK; } -sbyte { RET_TY(SBYTE, Type::Int8Ty, Signed); } -ubyte { RET_TY(UBYTE, Type::Int8Ty, Unsigned); } -i8 { RET_TY(UBYTE, Type::Int8Ty, Unsigned); } -short { RET_TY(SHORT, Type::Int16Ty, Signed); } -ushort { RET_TY(USHORT, Type::Int16Ty, Unsigned); } -i16 { RET_TY(USHORT, Type::Int16Ty, Unsigned); } -int { RET_TY(INT, Type::Int32Ty, Signed); } -uint { RET_TY(UINT, Type::Int32Ty, Unsigned); } -i32 { RET_TY(UINT, Type::Int32Ty, Unsigned); } -long { RET_TY(LONG, Type::Int64Ty, Signed); } -ulong { RET_TY(ULONG, Type::Int64Ty, Unsigned); } -i64 { RET_TY(ULONG, Type::Int64Ty, Unsigned); } -void { RET_TY(VOID, Type::VoidTy, Signless ); } -bool { RET_TY(BOOL, Type::Int1Ty, Unsigned ); } -i1 { RET_TY(BOOL, Type::Int1Ty, Unsigned ); } -float { RET_TY(FLOAT, Type::FloatTy, Signless ); } -double { RET_TY(DOUBLE, Type::DoubleTy,Signless); } -label { RET_TY(LABEL, Type::LabelTy, Signless ); } +sbyte { RET_TY(SBYTE, Type::Int8Ty, 2); } +ubyte { RET_TY(UBYTE, Type::Int8Ty, 1); } +i8 { RET_TY(UBYTE, Type::Int8Ty, 1); } +short { RET_TY(SHORT, Type::Int16Ty, 2); } +ushort { RET_TY(USHORT, Type::Int16Ty, 1); } +i16 { RET_TY(USHORT, Type::Int16Ty, 1); } +int { RET_TY(INT, Type::Int32Ty, 2); } +uint { RET_TY(UINT, Type::Int32Ty, 1); } +i32 { RET_TY(UINT, Type::Int32Ty, 1); } +long { RET_TY(LONG, Type::Int64Ty, 2); } +ulong { RET_TY(ULONG, Type::Int64Ty, 1); } +i64 { RET_TY(ULONG, Type::Int64Ty, 1); } +void { RET_TY(VOID, Type::VoidTy, 0); } +bool { RET_TY(BOOL, Type::Int1Ty, 1); } +i1 { RET_TY(BOOL, Type::Int1Ty, 1); } +float { RET_TY(FLOAT, Type::FloatTy, 0); } +double { RET_TY(DOUBLE, Type::DoubleTy,0); } +label { RET_TY(LABEL, Type::LabelTy, 0); } type { return TYPE; } opaque { return OPAQUE; } diff --git a/tools/llvm-upgrade/UpgradeParser.cpp.cvs b/tools/llvm-upgrade/UpgradeParser.cpp.cvs index a04facb6143..bf154251962 100644 --- a/tools/llvm-upgrade/UpgradeParser.cpp.cvs +++ b/tools/llvm-upgrade/UpgradeParser.cpp.cvs @@ -427,7 +427,7 @@ static GlobalVariable *CurGV; // typedef std::vector ValueList; // Numbered defs -typedef std::pair RenameMapKey; +typedef std::pair RenameMapKey; typedef std::map RenameMapType; static void @@ -438,7 +438,10 @@ static struct PerModuleInfo { Module *CurrentModule; std::map Values; // Module level numbered definitions std::map LateResolveValues; - std::vector Types; + std::vector Types; + std::vector TypeSigns; + std::map NamedTypeSigns; + std::map NamedValueSigns; std::map LateResolveTypes; static Module::Endianness Endian; static Module::PointerSize PointerSize; @@ -495,6 +498,9 @@ static struct PerModuleInfo { Values.clear(); // Clear out function local definitions Types.clear(); + TypeSigns.clear(); + NamedTypeSigns.clear(); + NamedValueSigns.clear(); CurrentModule = 0; } @@ -568,6 +574,24 @@ static struct PerFunctionInfo { static bool inFunctionScope() { return CurFun.CurrentFunction != 0; } +/// This function is just a utility to make a Key value for the rename map. +/// The Key is a combination of the name, type, Signedness of the original +/// value (global/function). This just constructs the key and ensures that +/// named Signedness values are resolved to the actual Signedness. +/// @brief Make a key for the RenameMaps +static RenameMapKey makeRenameMapKey(const std::string &Name, const Type* Ty, + const Signedness &Sign) { + TypeInfo TI; + TI.T = Ty; + if (Sign.isNamed()) + // Don't allow Named Signedness nodes because they won't match. The actual + // Signedness must be looked up in the NamedTypeSigns map. + TI.S.copy(CurModule.NamedTypeSigns[Sign.getName()]); + else + TI.S.copy(Sign); + return std::make_pair(Name, TI); +} + //===----------------------------------------------------------------------===// // Code to handle definitions of all the types @@ -593,7 +617,6 @@ static const Type *getType(const ValID &D, bool DoNotImprovise = false) { break; case ValID::NameVal: // Is it a named definition? if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) { - D.destroy(); // Free old strdup'd memory... return N; } break; @@ -608,7 +631,6 @@ static const Type *getType(const ValID &D, bool DoNotImprovise = false) { // if (DoNotImprovise) return 0; // Do we just want a null to be returned? - if (inFunctionScope()) { if (D.Type == ValID::NameVal) { error("Reference to an undefined type: '" + D.getName() + "'"); @@ -626,13 +648,94 @@ static const Type *getType(const ValID &D, bool DoNotImprovise = false) { Type *Typ = OpaqueType::get(); CurModule.LateResolveTypes.insert(std::make_pair(D, Typ)); return Typ; - } +} + +/// This is like the getType method except that instead of looking up the type +/// for a given ID, it looks up that type's sign. +/// @brief Get the signedness of a referenced type +static Signedness getTypeSign(const ValID &D) { + switch (D.Type) { + case ValID::NumberVal: // Is it a numbered definition? + // Module constants occupy the lowest numbered slots... + if ((unsigned)D.Num < CurModule.TypeSigns.size()) { + return CurModule.TypeSigns[(unsigned)D.Num]; + } + break; + case ValID::NameVal: { // Is it a named definition? + std::map::const_iterator I = + CurModule.NamedTypeSigns.find(D.Name); + if (I != CurModule.NamedTypeSigns.end()) + return I->second; + // Perhaps its a named forward .. just cache the name + Signedness S; + S.makeNamed(D.Name); + return S; + } + default: + break; + } + // If we don't find it, its signless + Signedness S; + S.makeSignless(); + return S; +} + +/// This function is analagous to getElementType in LLVM. It provides the same +/// function except that it looks up the Signedness instead of the type. This is +/// used when processing GEP instructions that need to extract the type of an +/// indexed struct/array/ptr member. +/// @brief Look up an element's sign. +static Signedness getElementSign(const ValueInfo& VI, + const std::vector &Indices) { + const Type *Ptr = VI.V->getType(); + assert(isa(Ptr) && "Need pointer type"); + + unsigned CurIdx = 0; + Signedness S(VI.S); + while (const CompositeType *CT = dyn_cast(Ptr)) { + if (CurIdx == Indices.size()) + break; + + Value *Index = Indices[CurIdx++]; + assert(!isa(CT) || CurIdx == 1 && "Invalid type"); + Ptr = CT->getTypeAtIndex(Index); + if (const Type* Ty = Ptr->getForwardedType()) + Ptr = Ty; + assert(S.isComposite() && "Bad Signedness type"); + if (isa(CT)) { + S = S.get(cast(Index)->getZExtValue()); + } else { + S = S.get(0UL); + } + if (S.isNamed()) + S = CurModule.NamedTypeSigns[S.getName()]; + } + Signedness Result; + Result.makeComposite(S); + return Result; +} + +/// This function just translates a ConstantInfo into a ValueInfo and calls +/// getElementSign(ValueInfo,...). Its just a convenience. +/// @brief ConstantInfo version of getElementSign. +static Signedness getElementSign(const ConstInfo& CI, + const std::vector &Indices) { + ValueInfo VI; + VI.V = CI.C; + VI.S.copy(CI.S); + std::vector Idx; + for (unsigned i = 0; i < Indices.size(); ++i) + Idx.push_back(Indices[i]); + Signedness result = getElementSign(VI, Idx); + VI.destroy(); + return result; +} /// This function determines if two function types differ only in their use of /// the sret parameter attribute in the first argument. If they are identical /// in all other respects, it returns true. Otherwise, it returns false. -bool FuncTysDifferOnlyBySRet(const FunctionType *F1, - const FunctionType *F2) { +static bool FuncTysDifferOnlyBySRet(const FunctionType *F1, + const FunctionType *F2) { if (F1->getReturnType() != F2->getReturnType() || F1->getNumParams() != F2->getNumParams() || F1->getParamAttrs(0) != F2->getParamAttrs(0)) @@ -647,10 +750,27 @@ bool FuncTysDifferOnlyBySRet(const FunctionType *F1, return true; } +/// This function determines if the type of V and Ty differ only by the SRet +/// parameter attribute. This is a more generalized case of +/// FuncTysDIfferOnlyBySRet since it doesn't require FunctionType arguments. +static bool TypesDifferOnlyBySRet(Value *V, const Type* Ty) { + if (V->getType() == Ty) + return true; + const PointerType *PF1 = dyn_cast(Ty); + const PointerType *PF2 = dyn_cast(V->getType()); + if (PF1 && PF2) { + const FunctionType* FT1 = dyn_cast(PF1->getElementType()); + const FunctionType* FT2 = dyn_cast(PF2->getElementType()); + if (FT1 && FT2) + return FuncTysDifferOnlyBySRet(FT1, FT2); + } + return false; +} + // The upgrade of csretcc to sret param attribute may have caused a function // to not be found because the param attribute changed the type of the called // function. This helper function, used in getExistingValue, detects that -// situation and returns V if it occurs and 0 otherwise. +// situation and bitcasts the function to the correct type. static Value* handleSRetFuncTypeMerge(Value *V, const Type* Ty) { // Handle degenerate cases if (!V) @@ -658,23 +778,21 @@ static Value* handleSRetFuncTypeMerge(Value *V, const Type* Ty) { if (V->getType() == Ty) return V; - Value* Result = 0; const PointerType *PF1 = dyn_cast(Ty); const PointerType *PF2 = dyn_cast(V->getType()); if (PF1 && PF2) { - const FunctionType *FT1 = - dyn_cast(PF1->getElementType()); - const FunctionType *FT2 = - dyn_cast(PF2->getElementType()); + const FunctionType *FT1 = dyn_cast(PF1->getElementType()); + const FunctionType *FT2 = dyn_cast(PF2->getElementType()); if (FT1 && FT2 && FuncTysDifferOnlyBySRet(FT1, FT2)) if (FT2->paramHasAttr(1, FunctionType::StructRetAttribute)) - Result = V; + return V; else if (Constant *C = dyn_cast(V)) - Result = ConstantExpr::getBitCast(C, PF1); + return ConstantExpr::getBitCast(C, PF1); else - Result = new BitCastInst(V, PF1, "upgrd.cast", CurBB); + return new BitCastInst(V, PF1, "upgrd.cast", CurBB); + } - return Result; + return 0; } // getExistingValue - Look up the value specified by the provided type and @@ -710,9 +828,8 @@ static Value *getExistingValue(const Type *Ty, const ValID &D) { case ValID::NameVal: { // Is it a named definition? // Get the name out of the ID - std::string Name(D.Name); - Value* V = 0; - RenameMapKey Key = std::make_pair(Name, Ty); + RenameMapKey Key = makeRenameMapKey(D.Name, Ty, D.S); + Value *V = 0; if (inFunctionScope()) { // See if the name was renamed RenameMapType::const_iterator I = CurFun.RenameMap.find(Key); @@ -720,10 +837,12 @@ static Value *getExistingValue(const Type *Ty, const ValID &D) { if (I != CurFun.RenameMap.end()) LookupName = I->second; else - LookupName = Name; + LookupName = D.Name; ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable(); V = SymTab.lookup(LookupName); - V = handleSRetFuncTypeMerge(V, Ty); + if (V && V->getType() != Ty) + V = handleSRetFuncTypeMerge(V, Ty); + assert((!V || TypesDifferOnlyBySRet(V, Ty)) && "Found wrong type"); } if (!V) { RenameMapType::const_iterator I = CurModule.RenameMap.find(Key); @@ -731,9 +850,11 @@ static Value *getExistingValue(const Type *Ty, const ValID &D) { if (I != CurModule.RenameMap.end()) LookupName = I->second; else - LookupName = Name; + LookupName = D.Name; V = CurModule.CurrentModule->getValueSymbolTable().lookup(LookupName); - V = handleSRetFuncTypeMerge(V, Ty); + if (V && V->getType() != Ty) + V = handleSRetFuncTypeMerge(V, Ty); + assert((!V || TypesDifferOnlyBySRet(V, Ty)) && "Found wrong type"); } if (!V) return 0; @@ -866,14 +987,13 @@ static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) { break; case ValID::NameVal: // Is it a named definition? Name = ID.Name; - if (Value *N = CurFun.CurrentFunction-> - getValueSymbolTable().lookup(Name)) { + if (Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name)) { if (N->getType() != Type::LabelTy) { // Register names didn't use to conflict with basic block names // because of type planes. Now they all have to be unique. So, we just // rename the register and treat this name as if no basic block // had been found. - RenameMapKey Key = std::make_pair(N->getName(),N->getType()); + RenameMapKey Key = makeRenameMapKey(ID.Name, N->getType(), ID.S); N->setName(makeNameUnique(N->getName())); CurModule.RenameMap[Key] = N->getName(); BB = 0; @@ -984,19 +1104,33 @@ ResolveDefinitions(std::map &LateResolvers, LateResolvers.clear(); } -// ResolveTypeTo - A brand new type was just declared. This means that (if -// name is not null) things referencing Name can be resolved. Otherwise, things -// refering to the number can be resolved. Do this now. -// -static void ResolveTypeTo(char *Name, const Type *ToTy) { +/// This function is used for type resolution and upref handling. When a type +/// becomes concrete, this function is called to adjust the signedness for the +/// concrete type. +static void ResolveTypeSign(const Type* oldTy, const Signedness &Sign) { + std::string TyName = CurModule.CurrentModule->getTypeName(oldTy); + if (!TyName.empty()) + CurModule.NamedTypeSigns[TyName] = Sign; +} + +/// ResolveTypeTo - A brand new type was just declared. This means that (if +/// name is not null) things referencing Name can be resolved. Otherwise, +/// things refering to the number can be resolved. Do this now. +static void ResolveTypeTo(char *Name, const Type *ToTy, const Signedness& Sign){ ValID D; - if (Name) D = ValID::create(Name); - else D = ValID::create((int)CurModule.Types.size()); + if (Name) + D = ValID::create(Name); + else + D = ValID::create((int)CurModule.Types.size()); + D.S.copy(Sign); + + CurModule.NamedTypeSigns[Name] = Sign; std::map::iterator I = CurModule.LateResolveTypes.find(D); if (I != CurModule.LateResolveTypes.end()) { - ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy); + const Type *OldTy = I->second.get(); + ((DerivedType*)OldTy)->refineAbstractTypeTo(ToTy); CurModule.LateResolveTypes.erase(I); } } @@ -1056,12 +1190,12 @@ static inline bool TypeHasInteger(const Type *Ty) { // null potentially, in which case this is a noop. The string passed in is // assumed to be a malloc'd string buffer, and is free'd by this function. // -static void setValueName(Value *V, char *NameStr) { +static void setValueName(const ValueInfo &V, char *NameStr) { if (NameStr) { std::string Name(NameStr); // Copy string free(NameStr); // Free old string - if (V->getType() == Type::VoidTy) { + if (V.V->getType() == Type::VoidTy) { error("Can't assign name '" + Name + "' to value with void type"); return; } @@ -1074,13 +1208,13 @@ static void setValueName(Value *V, char *NameStr) { if (Existing) { // An existing value of the same name was found. This might have happened // because of the integer type planes collapsing in LLVM 2.0. - if (Existing->getType() == V->getType() && + if (Existing->getType() == V.V->getType() && !TypeHasInteger(Existing->getType())) { // If the type does not contain any integers in them then this can't be // a type plane collapsing issue. It truly is a redefinition and we // should error out as the assembly is invalid. error("Redefinition of value named '" + Name + "' of type '" + - V->getType()->getDescription() + "'"); + V.V->getType()->getDescription() + "'"); return; } // In LLVM 2.0 we don't allow names to be re-used for any values in a @@ -1094,13 +1228,13 @@ static void setValueName(Value *V, char *NameStr) { // We're changing the name but it will probably be used by other // instructions as operands later on. Consequently we have to retain // a mapping of the renaming that we're doing. - RenameMapKey Key = std::make_pair(Name,V->getType()); + RenameMapKey Key = makeRenameMapKey(Name, V.V->getType(), V.S); CurFun.RenameMap[Key] = NewName; Name = NewName; } // Set the name. - V->setName(Name); + V.V->setName(Name); } } @@ -1109,7 +1243,8 @@ static void setValueName(Value *V, char *NameStr) { static GlobalVariable * ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage, bool isConstantGlobal, const Type *Ty, - Constant *Initializer) { + Constant *Initializer, + const Signedness &Sign) { if (isa(Ty)) error("Cannot declare global vars of function type"); @@ -1129,6 +1264,7 @@ ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage, } else { ID = ValID::create((int)CurModule.Values[PTy].size()); } + ID.S.makeComposite(Sign); if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) { // Move the global to the end of the list, from whereever it was @@ -1154,13 +1290,7 @@ ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage, // There is alread a global of the same name which means there is a // conflict. Let's see what we can do about it. std::string NewName(makeNameUnique(Name)); - if (Linkage == GlobalValue::InternalLinkage) { - // The linkage type is internal so just warn about the rename without - // invoking "scarey language" about linkage failures. GVars with - // InternalLinkage can be renamed at will. - warning("Global variable '" + Name + "' was renamed to '"+ - NewName + "'"); - } else { + if (Linkage != GlobalValue::InternalLinkage) { // The linkage of this gval is external so we can't reliably rename // it because it could potentially create a linking problem. // However, we can't leave the name conflict in the output either or @@ -1171,7 +1301,7 @@ ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage, } // Put the renaming in the global rename map - RenameMapKey Key = std::make_pair(Name,PointerType::get(Ty)); + RenameMapKey Key = makeRenameMapKey(Name, PointerType::get(Ty), ID.S); CurModule.RenameMap[Key] = NewName; // Rename it @@ -1184,6 +1314,8 @@ ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage, new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name, CurModule.CurrentModule); InsertValue(GV, CurModule.Values); + // Remember the sign of this global. + CurModule.NamedValueSigns[Name] = ID.S; return GV; } @@ -1194,21 +1326,26 @@ ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage, // This function returns true if the type has already been defined, but is // allowed to be redefined in the specified context. If the name is a new name // for the type plane, it is inserted and false is returned. -static bool setTypeName(const Type *T, char *NameStr) { +static bool setTypeName(const PATypeInfo& TI, char *NameStr) { assert(!inFunctionScope() && "Can't give types function-local names"); if (NameStr == 0) return false; std::string Name(NameStr); // Copy string free(NameStr); // Free old string + const Type* Ty = TI.PAT->get(); + // We don't allow assigning names to void type - if (T == Type::VoidTy) { + if (Ty == Type::VoidTy) { error("Can't assign name '" + Name + "' to the void type"); return false; } // Set the type name, checking for conflicts as we do so. - bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T); + bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, Ty); + + // Save the sign information for later use + CurModule.NamedTypeSigns[Name] = TI.S; if (AlreadyExists) { // Inserting a name that is already defined??? const Type *Existing = CurModule.CurrentModule->getTypeByName(Name); @@ -1218,7 +1355,7 @@ static bool setTypeName(const Type *T, char *NameStr) { // opaque type. In this case, Existing will be an opaque type. if (const OpaqueType *OpTy = dyn_cast(Existing)) { // We ARE replacing an opaque type! - const_cast(OpTy)->refineAbstractTypeTo(T); + const_cast(OpTy)->refineAbstractTypeTo(Ty); return true; } @@ -1226,11 +1363,11 @@ static bool setTypeName(const Type *T, char *NameStr) { // the redefinition is identical to the original. This will be so if // Existing and T point to the same Type object. In this one case we // allow the equivalent redefinition. - if (Existing == T) return true; // Yes, it's equal. + if (Existing == Ty) return true; // Yes, it's equal. // Any other kind of (non-equivalent) redefinition is an error. error("Redefinition of type named '" + Name + "' in the '" + - T->getDescription() + "' type plane"); + Ty->getDescription() + "' type plane"); } return false; @@ -1262,7 +1399,7 @@ namespace { OpaqueType *UpRefTy; UpRefRecord(unsigned NL, OpaqueType *URTy) - : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {} + : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) { } }; } @@ -1276,7 +1413,7 @@ static std::vector UpRefs; /// count reaches zero, the upreferenced type is the type that is passed in: /// thus we can complete the cycle. /// -static PATypeHolder HandleUpRefs(const Type *ty) { +static PATypeHolder HandleUpRefs(const Type *ty, const Signedness& Sign) { // If Ty isn't abstract, or if there are no up-references in it, then there is // nothing to resolve here. if (!ty->isAbstract() || UpRefs.empty()) return ty; @@ -1292,10 +1429,11 @@ static PATypeHolder HandleUpRefs(const Type *ty) { // this variable. OpaqueType *TypeToResolve = 0; - for (unsigned i = 0; i != UpRefs.size(); ++i) { + unsigned i = 0; + for (; i != UpRefs.size(); ++i) { UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", " - << UpRefs[i].second->getDescription() << ") = " - << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n"); + << UpRefs[i].UpRefTy->getDescription() << ") = " + << (TypeContains(Ty, UpRefs[i].UpRefTy) ? "true" : "false") << "\n"); if (TypeContains(Ty, UpRefs[i].LastContainedTy)) { // Decrement level of upreference unsigned Level = --UpRefs[i].NestingLevel; @@ -1306,8 +1444,9 @@ static PATypeHolder HandleUpRefs(const Type *ty) { TypeToResolve = UpRefs[i].UpRefTy; } else { UR_OUT(" * Resolving upreference for " - << UpRefs[i].second->getDescription() << "\n"; - std::string OldName = UpRefs[i].UpRefTy->getDescription()); + << UpRefs[i].UpRefTy->getDescription() << "\n"; + std::string OldName = UpRefs[i].UpRefTy->getDescription()); + ResolveTypeSign(UpRefs[i].UpRefTy, Sign); UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve); UR_OUT(" * Type '" << OldName << "' refined upreference to: " << (const void*)Ty << ", " << Ty->getDescription() << "\n"); @@ -1320,14 +1459,113 @@ static PATypeHolder HandleUpRefs(const Type *ty) { if (TypeToResolve) { UR_OUT(" * Resolving upreference for " - << UpRefs[i].second->getDescription() << "\n"; + << UpRefs[i].UpRefTy->getDescription() << "\n"; std::string OldName = TypeToResolve->getDescription()); + ResolveTypeSign(TypeToResolve, Sign); TypeToResolve->refineAbstractTypeTo(Ty); } return Ty; } +bool Signedness::operator<(const Signedness &that) const { + if (isNamed()) { + if (that.isNamed()) + return *(this->name) < *(that.name); + else + return CurModule.NamedTypeSigns[*name] < that; + } else if (that.isNamed()) { + return *this < CurModule.NamedTypeSigns[*that.name]; + } + + if (isComposite() && that.isComposite()) { + if (sv->size() == that.sv->size()) { + SignVector::const_iterator thisI = sv->begin(), thisE = sv->end(); + SignVector::const_iterator thatI = that.sv->begin(), + thatE = that.sv->end(); + for (; thisI != thisE; ++thisI, ++thatI) { + if (*thisI < *thatI) + return true; + else if (!(*thisI == *thatI)) + return false; + } + return false; + } + return sv->size() < that.sv->size(); + } + return kind < that.kind; +} + +bool Signedness::operator==(const Signedness &that) const { + if (isNamed()) + if (that.isNamed()) + return *(this->name) == *(that.name); + else + return CurModule.NamedTypeSigns[*(this->name)] == that; + else if (that.isNamed()) + return *this == CurModule.NamedTypeSigns[*(that.name)]; + if (isComposite() && that.isComposite()) { + if (sv->size() == that.sv->size()) { + SignVector::const_iterator thisI = sv->begin(), thisE = sv->end(); + SignVector::const_iterator thatI = that.sv->begin(), + thatE = that.sv->end(); + for (; thisI != thisE; ++thisI, ++thatI) { + if (!(*thisI == *thatI)) + return false; + } + return true; + } + return false; + } + return kind == that.kind; +} + +void Signedness::copy(const Signedness &that) { + if (that.isNamed()) { + kind = Named; + name = new std::string(*that.name); + } else if (that.isComposite()) { + kind = Composite; + sv = new SignVector(); + *sv = *that.sv; + } else { + kind = that.kind; + sv = 0; + } +} + +void Signedness::destroy() { + if (isNamed()) { + delete name; + } else if (isComposite()) { + delete sv; + } +} + +void Signedness::dump() const { + if (isComposite()) { + if (sv->size() == 1) { + (*sv)[0].dump(); + std::cerr << "*"; + } else { + std::cerr << "{ " ; + for (unsigned i = 0; i < sv->size(); ++i) { + if (i != 0) + std::cerr << ", "; + (*sv)[i].dump(); + } + std::cerr << "} " ; + } + } else if (isNamed()) { + std::cerr << *name; + } else if (isSigned()) { + std::cerr << "S"; + } else if (isUnsigned()) { + std::cerr << "U"; + } else + std::cerr << "."; +} + static inline Instruction::TermOps getTermOp(TermOps op) { switch (op) { @@ -1342,7 +1580,7 @@ getTermOp(TermOps op) { } static inline Instruction::BinaryOps -getBinaryOp(BinaryOps op, const Type *Ty, Signedness Sign) { +getBinaryOp(BinaryOps op, const Type *Ty, const Signedness& Sign) { switch (op) { default : assert(0 && "Invalid OldBinaryOps"); case SetEQ : @@ -1363,7 +1601,7 @@ getBinaryOp(BinaryOps op, const Type *Ty, Signedness Sign) { isFP = PTy->getElementType()->isFloatingPoint(); if (isFP) return Instruction::FDiv; - else if (Sign == Signed) + else if (Sign.isSigned()) return Instruction::SDiv; return Instruction::UDiv; } @@ -1380,7 +1618,7 @@ getBinaryOp(BinaryOps op, const Type *Ty, Signedness Sign) { // Select correct opcode if (isFP) return Instruction::FRem; - else if (Sign == Signed) + else if (Sign.isSigned()) return Instruction::SRem; return Instruction::URem; } @@ -1391,7 +1629,7 @@ getBinaryOp(BinaryOps op, const Type *Ty, Signedness Sign) { case AShrOp : return Instruction::AShr; case ShlOp : return Instruction::Shl; case ShrOp : - if (Sign == Signed) + if (Sign.isSigned()) return Instruction::AShr; return Instruction::LShr; case AndOp : return Instruction::And; @@ -1402,8 +1640,8 @@ getBinaryOp(BinaryOps op, const Type *Ty, Signedness Sign) { static inline Instruction::OtherOps getCompareOp(BinaryOps op, unsigned short &predicate, const Type* &Ty, - Signedness Sign) { - bool isSigned = Sign == Signed; + const Signedness &Sign) { + bool isSigned = Sign.isSigned(); bool isFP = Ty->isFloatingPoint(); switch (op) { default : assert(0 && "Invalid OldSetCC"); @@ -1483,7 +1721,7 @@ static inline Instruction::MemoryOps getMemoryOp(MemoryOps op) { } static inline Instruction::OtherOps -getOtherOp(OtherOps op, Signedness Sign) { +getOtherOp(OtherOps op, const Signedness &Sign) { switch (op) { default : assert(0 && "Invalid OldOtherOps"); case PHIOp : return Instruction::PHI; @@ -1501,8 +1739,8 @@ getOtherOp(OtherOps op, Signedness Sign) { } static inline Value* -getCast(CastOps op, Value *Src, Signedness SrcSign, const Type *DstTy, - Signedness DstSign, bool ForceInstruction = false) { +getCast(CastOps op, Value *Src, const Signedness &SrcSign, const Type *DstTy, + const Signedness &DstSign, bool ForceInstruction = false) { Instruction::CastOps Opcode; const Type* SrcTy = Src->getType(); if (op == CastOp) { @@ -1539,7 +1777,8 @@ getCast(CastOps op, Value *Src, Signedness SrcSign, const Type *DstTy, } // Determine the opcode to use by calling CastInst::getCastOpcode Opcode = - CastInst::getCastOpcode(Src, SrcSign == Signed, DstTy, DstSign == Signed); + CastInst::getCastOpcode(Src, SrcSign.isSigned(), DstTy, + DstSign.isSigned()); } else switch (op) { default: assert(0 && "Invalid cast token"); @@ -1631,7 +1870,7 @@ const Type* upgradeGEPIndices(const Type* PTy, // all indices for SequentialType elements. We must retain the same // semantic (zext) for unsigned types. if (const IntegerType *Ity = dyn_cast(Index->getType())) - if (Ity->getBitWidth() < 64 && (*Indices)[i].S == Unsigned) { + if (Ity->getBitWidth() < 64 && (*Indices)[i].S.isUnsigned()) { if (CIndices) Index = ConstantExpr::getCast(Instruction::ZExt, cast(Index), Type::Int64Ty); @@ -1830,13 +2069,13 @@ using namespace llvm; #endif #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 1454 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1693 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" typedef union YYSTYPE { llvm::Module *ModuleVal; llvm::Function *FunctionVal; std::pair *ArgVal; llvm::BasicBlock *BasicBlockVal; - llvm::TerminatorInst *TermInstVal; + llvm::TermInstInfo TermInstVal; llvm::InstrInfo InstVal; llvm::ConstInfo ConstVal; llvm::ValueInfo ValueVal; @@ -1873,7 +2112,7 @@ typedef union YYSTYPE { llvm::Module::Endianness Endianness; } YYSTYPE; /* Line 196 of yacc.c. */ -#line 1877 "UpgradeParser.tab.c" +#line 2116 "UpgradeParser.tab.c" # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 @@ -1885,7 +2124,7 @@ typedef union YYSTYPE { /* Line 219 of yacc.c. */ -#line 1889 "UpgradeParser.tab.c" +#line 2128 "UpgradeParser.tab.c" #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) # define YYSIZE_T __SIZE_TYPE__ @@ -2244,37 +2483,37 @@ static const short int yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short int yyrline[] = { - 0, 1594, 1594, 1595, 1603, 1604, 1614, 1614, 1614, 1614, - 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1618, 1618, 1618, - 1622, 1622, 1622, 1622, 1622, 1622, 1626, 1626, 1627, 1627, - 1628, 1628, 1629, 1629, 1630, 1630, 1634, 1634, 1635, 1635, - 1636, 1636, 1637, 1637, 1638, 1638, 1639, 1639, 1640, 1640, - 1641, 1642, 1645, 1645, 1645, 1645, 1649, 1649, 1649, 1649, - 1649, 1649, 1649, 1650, 1650, 1650, 1650, 1650, 1650, 1656, - 1656, 1656, 1656, 1660, 1660, 1660, 1660, 1664, 1664, 1668, - 1668, 1673, 1676, 1681, 1682, 1683, 1684, 1685, 1686, 1687, - 1688, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1709, - 1710, 1718, 1719, 1727, 1736, 1737, 1744, 1745, 1749, 1753, - 1769, 1770, 1777, 1778, 1785, 1793, 1793, 1793, 1793, 1793, - 1793, 1793, 1794, 1794, 1794, 1794, 1794, 1799, 1803, 1807, - 1812, 1821, 1838, 1844, 1857, 1866, 1870, 1881, 1885, 1898, - 1902, 1909, 1910, 1916, 1923, 1935, 1965, 1978, 2001, 2029, - 2051, 2062, 2084, 2095, 2104, 2109, 2167, 2174, 2182, 2189, - 2196, 2200, 2204, 2213, 2228, 2241, 2250, 2278, 2291, 2300, - 2306, 2312, 2323, 2329, 2335, 2346, 2347, 2356, 2357, 2369, - 2378, 2379, 2380, 2381, 2382, 2398, 2418, 2420, 2422, 2422, - 2429, 2429, 2436, 2436, 2443, 2443, 2451, 2453, 2455, 2460, - 2474, 2475, 2479, 2482, 2490, 2494, 2501, 2505, 2509, 2513, - 2521, 2521, 2525, 2526, 2530, 2538, 2543, 2551, 2552, 2559, - 2566, 2570, 2746, 2746, 2750, 2760, 2760, 2764, 2769, 2770, - 2771, 2775, 2776, 2775, 2788, 2789, 2794, 2795, 2796, 2797, - 2798, 2799, 2800, 2801, 2802, 2823, 2826, 2841, 2842, 2847, - 2847, 2855, 2864, 2867, 2876, 2886, 2891, 2900, 2911, 2911, - 2914, 2917, 2920, 2924, 2930, 2945, 2951, 3007, 3010, 3016, - 3026, 3039, 3068, 3076, 3084, 3088, 3095, 3096, 3100, 3103, - 3109, 3126, 3142, 3156, 3168, 3180, 3191, 3209, 3218, 3227, - 3234, 3255, 3279, 3285, 3291, 3297, 3313, 3391, 3399, 3400, - 3404, 3405, 3409, 3415, 3421, 3427, 3433, 3440, 3452, 3477 + 0, 1833, 1833, 1834, 1842, 1843, 1853, 1853, 1853, 1853, + 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1857, 1857, 1857, + 1861, 1861, 1861, 1861, 1861, 1861, 1865, 1865, 1866, 1866, + 1867, 1867, 1868, 1868, 1869, 1869, 1873, 1873, 1874, 1874, + 1875, 1875, 1876, 1876, 1877, 1877, 1878, 1878, 1879, 1879, + 1880, 1881, 1884, 1884, 1884, 1884, 1888, 1888, 1888, 1888, + 1888, 1888, 1888, 1889, 1889, 1889, 1889, 1889, 1889, 1895, + 1895, 1895, 1895, 1899, 1899, 1899, 1899, 1903, 1903, 1907, + 1907, 1912, 1915, 1920, 1921, 1922, 1923, 1924, 1925, 1926, + 1927, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1948, + 1949, 1957, 1958, 1966, 1975, 1976, 1983, 1984, 1988, 1992, + 2008, 2009, 2016, 2017, 2024, 2032, 2032, 2032, 2032, 2032, + 2032, 2032, 2033, 2033, 2033, 2033, 2033, 2038, 2042, 2046, + 2051, 2060, 2078, 2084, 2097, 2108, 2112, 2125, 2129, 2143, + 2147, 2154, 2155, 2161, 2168, 2180, 2210, 2223, 2246, 2274, + 2296, 2307, 2329, 2340, 2349, 2354, 2413, 2420, 2428, 2435, + 2442, 2446, 2450, 2459, 2474, 2487, 2496, 2524, 2537, 2546, + 2552, 2558, 2569, 2575, 2581, 2592, 2593, 2602, 2603, 2615, + 2624, 2625, 2626, 2627, 2628, 2644, 2664, 2666, 2668, 2668, + 2675, 2675, 2683, 2683, 2691, 2691, 2700, 2702, 2704, 2709, + 2723, 2724, 2728, 2731, 2739, 2743, 2750, 2754, 2758, 2762, + 2770, 2770, 2774, 2775, 2779, 2787, 2792, 2800, 2801, 2808, + 2815, 2819, 3004, 3004, 3008, 3018, 3018, 3022, 3027, 3028, + 3029, 3033, 3034, 3033, 3046, 3047, 3052, 3053, 3054, 3055, + 3059, 3063, 3064, 3065, 3066, 3087, 3091, 3105, 3106, 3111, + 3111, 3119, 3129, 3132, 3141, 3152, 3157, 3166, 3177, 3177, + 3180, 3184, 3188, 3193, 3203, 3221, 3230, 3295, 3299, 3306, + 3318, 3333, 3363, 3373, 3383, 3387, 3394, 3395, 3399, 3402, + 3408, 3427, 3445, 3461, 3475, 3489, 3500, 3518, 3527, 3536, + 3543, 3564, 3588, 3594, 3600, 3606, 3622, 3706, 3714, 3715, + 3719, 3720, 3724, 3730, 3737, 3743, 3750, 3757, 3770, 3796 }; #endif @@ -3686,7 +3925,7 @@ yyreduce: switch (yyn) { case 3: -#line 1595 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1834 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[0].UIntVal) > (uint32_t)INT32_MAX) // Outside of my range! error("Value too large for type"); @@ -3695,7 +3934,7 @@ yyreduce: break; case 5: -#line 1604 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1843 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[0].UInt64Val) > (uint64_t)INT64_MAX) // Outside of my range! error("Value too large for type"); @@ -3704,226 +3943,226 @@ yyreduce: break; case 26: -#line 1626 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1865 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_EQ; ;} break; case 27: -#line 1626 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1865 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_NE; ;} break; case 28: -#line 1627 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1866 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_SLT; ;} break; case 29: -#line 1627 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1866 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_SGT; ;} break; case 30: -#line 1628 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1867 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_SLE; ;} break; case 31: -#line 1628 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1867 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_SGE; ;} break; case 32: -#line 1629 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1868 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_ULT; ;} break; case 33: -#line 1629 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1868 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_UGT; ;} break; case 34: -#line 1630 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1869 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_ULE; ;} break; case 35: -#line 1630 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1869 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_UGE; ;} break; case 36: -#line 1634 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1873 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_OEQ; ;} break; case 37: -#line 1634 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1873 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_ONE; ;} break; case 38: -#line 1635 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1874 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_OLT; ;} break; case 39: -#line 1635 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1874 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_OGT; ;} break; case 40: -#line 1636 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1875 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_OLE; ;} break; case 41: -#line 1636 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1875 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_OGE; ;} break; case 42: -#line 1637 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1876 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_ORD; ;} break; case 43: -#line 1637 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1876 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_UNO; ;} break; case 44: -#line 1638 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1877 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_UEQ; ;} break; case 45: -#line 1638 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1877 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_UNE; ;} break; case 46: -#line 1639 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1878 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_ULT; ;} break; case 47: -#line 1639 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1878 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_UGT; ;} break; case 48: -#line 1640 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1879 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_ULE; ;} break; case 49: -#line 1640 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1879 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_UGE; ;} break; case 50: -#line 1641 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1880 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_TRUE; ;} break; case 51: -#line 1642 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1881 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_FALSE; ;} break; case 81: -#line 1673 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1912 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.StrVal) = (yyvsp[-1].StrVal); ;} break; case 82: -#line 1676 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1915 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.StrVal) = 0; ;} break; case 83: -#line 1681 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1920 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::InternalLinkage; ;} break; case 84: -#line 1682 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1921 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;} break; case 85: -#line 1683 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1922 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::WeakLinkage; ;} break; case 86: -#line 1684 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1923 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;} break; case 87: -#line 1685 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1924 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;} break; case 88: -#line 1686 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1925 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;} break; case 89: -#line 1687 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1926 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;} break; case 90: -#line 1688 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1927 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} break; case 91: -#line 1692 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1931 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.UIntVal) = OldCallingConv::C; ;} break; case 92: -#line 1693 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1932 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.UIntVal) = OldCallingConv::C; ;} break; case 93: -#line 1694 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1933 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.UIntVal) = OldCallingConv::CSRet; ;} break; case 94: -#line 1695 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1934 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.UIntVal) = OldCallingConv::Fast; ;} break; case 95: -#line 1696 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1935 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.UIntVal) = OldCallingConv::Cold; ;} break; case 96: -#line 1697 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1936 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.UIntVal) = OldCallingConv::X86_StdCall; ;} break; case 97: -#line 1698 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1937 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.UIntVal) = OldCallingConv::X86_FastCall; ;} break; case 98: -#line 1699 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1938 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val)) error("Calling conv too large"); @@ -3932,12 +4171,12 @@ yyreduce: break; case 99: -#line 1709 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1948 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.UIntVal) = 0; ;} break; case 100: -#line 1710 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1949 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.UIntVal) = (yyvsp[0].UInt64Val); if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal))) @@ -3946,12 +4185,12 @@ yyreduce: break; case 101: -#line 1718 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1957 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.UIntVal) = 0; ;} break; case 102: -#line 1719 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1958 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.UIntVal) = (yyvsp[0].UInt64Val); if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal))) @@ -3960,7 +4199,7 @@ yyreduce: break; case 103: -#line 1727 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1966 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i) if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\') @@ -3970,27 +4209,27 @@ yyreduce: break; case 104: -#line 1736 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1975 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.StrVal) = 0; ;} break; case 105: -#line 1737 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1976 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.StrVal) = (yyvsp[0].StrVal); ;} break; case 106: -#line 1744 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1983 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" {;} break; case 107: -#line 1745 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1984 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" {;} break; case 108: -#line 1749 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1988 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { CurGV->setSection((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -3998,7 +4237,7 @@ yyreduce: break; case 109: -#line 1753 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1992 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val))) error("Alignment must be a power of two"); @@ -4008,23 +4247,23 @@ yyreduce: break; case 111: -#line 1770 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2009 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeVal).PAT = new PATypeHolder((yyvsp[0].PrimType).T); - (yyval.TypeVal).S = Signless; + (yyval.TypeVal).S.makeSignless(); ;} break; case 113: -#line 1778 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2017 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeVal).PAT = new PATypeHolder((yyvsp[0].PrimType).T); - (yyval.TypeVal).S = Signless; + (yyval.TypeVal).S.makeSignless(); ;} break; case 114: -#line 1785 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2024 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if (!UpRefs.empty()) error("Invalid upreference in type: " + (*(yyvsp[0].TypeVal).PAT)->getDescription()); @@ -4033,50 +4272,52 @@ yyreduce: break; case 127: -#line 1799 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2038 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeVal).PAT = new PATypeHolder((yyvsp[0].PrimType).T); - (yyval.TypeVal).S = (yyvsp[0].PrimType).S; + (yyval.TypeVal).S.copy((yyvsp[0].PrimType).S); ;} break; case 128: -#line 1803 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2042 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeVal).PAT = new PATypeHolder(OpaqueType::get()); - (yyval.TypeVal).S = Signless; + (yyval.TypeVal).S.makeSignless(); ;} break; case 129: -#line 1807 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2046 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Named types are also simple types... + (yyval.TypeVal).S.copy(getTypeSign((yyvsp[0].ValIDVal))); const Type* tmp = getType((yyvsp[0].ValIDVal)); (yyval.TypeVal).PAT = new PATypeHolder(tmp); - (yyval.TypeVal).S = Signless; // FIXME: what if its signed? ;} break; case 130: -#line 1812 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2051 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Type UpReference if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) error("Value out of range"); OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[0].UInt64Val), OT)); // Add to vector... (yyval.TypeVal).PAT = new PATypeHolder(OT); - (yyval.TypeVal).S = Signless; + (yyval.TypeVal).S.makeSignless(); UR_OUT("New Upreference!\n"); ;} break; case 131: -#line 1821 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2060 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Function derived type? + (yyval.TypeVal).S.makeComposite((yyvsp[-3].TypeVal).S); std::vector Params; for (std::list::iterator I = (yyvsp[-1].TypeList)->begin(), E = (yyvsp[-1].TypeList)->end(); I != E; ++I) { Params.push_back(I->PAT->get()); + (yyval.TypeVal).S.add(I->S); } FunctionType::ParamAttrsList ParamAttrs; bool isVarArg = Params.size() && Params.back() == Type::VoidTy; @@ -4084,97 +4325,101 @@ yyreduce: (yyval.TypeVal).PAT = new PATypeHolder( HandleUpRefs(FunctionType::get((yyvsp[-3].TypeVal).PAT->get(), Params, isVarArg, - ParamAttrs))); - (yyval.TypeVal).S = (yyvsp[-3].TypeVal).S; - delete (yyvsp[-3].TypeVal).PAT; // Delete the return type handle + ParamAttrs), (yyval.TypeVal).S)); + delete (yyvsp[-3].TypeVal).PAT; // Delete the return type handle delete (yyvsp[-1].TypeList); // Delete the argument list ;} break; case 132: -#line 1838 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2078 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Sized array type? + (yyval.TypeVal).S.makeComposite((yyvsp[-1].TypeVal).S); (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(ArrayType::get((yyvsp[-1].TypeVal).PAT->get(), - (unsigned)(yyvsp[-3].UInt64Val)))); - (yyval.TypeVal).S = (yyvsp[-1].TypeVal).S; + (unsigned)(yyvsp[-3].UInt64Val)), (yyval.TypeVal).S)); delete (yyvsp[-1].TypeVal).PAT; ;} break; case 133: -#line 1844 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2084 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Vector type? - const llvm::Type* ElemTy = (yyvsp[-1].TypeVal).PAT->get(); - if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val)) - error("Unsigned result not equal to signed result"); - if (!(ElemTy->isInteger() || ElemTy->isFloatingPoint())) - error("Elements of a VectorType must be integer or floating point"); - if (!isPowerOf2_32((yyvsp[-3].UInt64Val))) - error("VectorType length should be a power of 2"); - (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(VectorType::get(ElemTy, - (unsigned)(yyvsp[-3].UInt64Val)))); - (yyval.TypeVal).S = (yyvsp[-1].TypeVal).S; - delete (yyvsp[-1].TypeVal).PAT; + const llvm::Type* ElemTy = (yyvsp[-1].TypeVal).PAT->get(); + if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val)) + error("Unsigned result not equal to signed result"); + if (!(ElemTy->isInteger() || ElemTy->isFloatingPoint())) + error("Elements of a VectorType must be integer or floating point"); + if (!isPowerOf2_32((yyvsp[-3].UInt64Val))) + error("VectorType length should be a power of 2"); + (yyval.TypeVal).S.makeComposite((yyvsp[-1].TypeVal).S); + (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(VectorType::get(ElemTy, + (unsigned)(yyvsp[-3].UInt64Val)), (yyval.TypeVal).S)); + delete (yyvsp[-1].TypeVal).PAT; ;} break; case 134: -#line 1857 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2097 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Structure type? std::vector Elements; + (yyval.TypeVal).S.makeComposite(); for (std::list::iterator I = (yyvsp[-1].TypeList)->begin(), - E = (yyvsp[-1].TypeList)->end(); I != E; ++I) + E = (yyvsp[-1].TypeList)->end(); I != E; ++I) { Elements.push_back(I->PAT->get()); - (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements))); - (yyval.TypeVal).S = Signless; + (yyval.TypeVal).S.add(I->S); + } + (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements), (yyval.TypeVal).S)); delete (yyvsp[-1].TypeList); ;} break; case 135: -#line 1866 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2108 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Empty structure type? (yyval.TypeVal).PAT = new PATypeHolder(StructType::get(std::vector())); - (yyval.TypeVal).S = Signless; + (yyval.TypeVal).S.makeComposite(); ;} break; case 136: -#line 1870 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2112 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Packed Structure type? + (yyval.TypeVal).S.makeComposite(); std::vector Elements; for (std::list::iterator I = (yyvsp[-2].TypeList)->begin(), E = (yyvsp[-2].TypeList)->end(); I != E; ++I) { Elements.push_back(I->PAT->get()); + (yyval.TypeVal).S.add(I->S); delete I->PAT; } - (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true))); - (yyval.TypeVal).S = Signless; + (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true), + (yyval.TypeVal).S)); delete (yyvsp[-2].TypeList); ;} break; case 137: -#line 1881 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2125 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Empty packed structure type? (yyval.TypeVal).PAT = new PATypeHolder(StructType::get(std::vector(),true)); - (yyval.TypeVal).S = Signless; + (yyval.TypeVal).S.makeComposite(); ;} break; case 138: -#line 1885 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2129 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Pointer type? if ((yyvsp[-1].TypeVal).PAT->get() == Type::LabelTy) error("Cannot form a pointer to a basic block"); - (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(PointerType::get((yyvsp[-1].TypeVal).PAT->get()))); - (yyval.TypeVal).S = (yyvsp[-1].TypeVal).S; + (yyval.TypeVal).S.makeComposite((yyvsp[-1].TypeVal).S); + (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(PointerType::get((yyvsp[-1].TypeVal).PAT->get()), + (yyval.TypeVal).S)); delete (yyvsp[-1].TypeVal).PAT; ;} break; case 139: -#line 1898 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2143 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeList) = new std::list(); (yyval.TypeList)->push_back((yyvsp[0].TypeVal)); @@ -4182,42 +4427,42 @@ yyreduce: break; case 140: -#line 1902 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2147 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back((yyvsp[0].TypeVal)); ;} break; case 142: -#line 1910 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2155 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { PATypeInfo VoidTI; VoidTI.PAT = new PATypeHolder(Type::VoidTy); - VoidTI.S = Signless; + VoidTI.S.makeSignless(); ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(VoidTI); ;} break; case 143: -#line 1916 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2161 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeList) = new std::list(); PATypeInfo VoidTI; VoidTI.PAT = new PATypeHolder(Type::VoidTy); - VoidTI.S = Signless; + VoidTI.S.makeSignless(); (yyval.TypeList)->push_back(VoidTI); ;} break; case 144: -#line 1923 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2168 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeList) = new std::list(); ;} break; case 145: -#line 1935 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2180 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Nonempty unsized arr const ArrayType *ATy = dyn_cast((yyvsp[-3].TypeVal).PAT->get()); if (ATy == 0) @@ -4244,14 +4489,14 @@ yyreduce: Elems.push_back(C); } (yyval.ConstVal).C = ConstantArray::get(ATy, Elems); - (yyval.ConstVal).S = (yyvsp[-3].TypeVal).S; + (yyval.ConstVal).S.copy((yyvsp[-3].TypeVal).S); delete (yyvsp[-3].TypeVal).PAT; delete (yyvsp[-1].ConstVector); ;} break; case 146: -#line 1965 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2210 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const ArrayType *ATy = dyn_cast((yyvsp[-2].TypeVal).PAT->get()); if (ATy == 0) @@ -4262,13 +4507,13 @@ yyreduce: error("Type mismatch: constant sized array initialized with 0" " arguments, but has size of " + itostr(NumElements) +""); (yyval.ConstVal).C = ConstantArray::get(ATy, std::vector()); - (yyval.ConstVal).S = (yyvsp[-2].TypeVal).S; + (yyval.ConstVal).S.copy((yyvsp[-2].TypeVal).S); delete (yyvsp[-2].TypeVal).PAT; ;} break; case 147: -#line 1978 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2223 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const ArrayType *ATy = dyn_cast((yyvsp[-2].TypeVal).PAT->get()); if (ATy == 0) @@ -4289,13 +4534,13 @@ yyreduce: Vals.push_back(ConstantInt::get(ETy, *C)); free((yyvsp[0].StrVal)); (yyval.ConstVal).C = ConstantArray::get(ATy, Vals); - (yyval.ConstVal).S = (yyvsp[-2].TypeVal).S; + (yyval.ConstVal).S.copy((yyvsp[-2].TypeVal).S); delete (yyvsp[-2].TypeVal).PAT; ;} break; case 148: -#line 2001 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2246 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Nonempty unsized arr const VectorType *PTy = dyn_cast((yyvsp[-3].TypeVal).PAT->get()); if (PTy == 0) @@ -4320,14 +4565,14 @@ yyreduce: Elems.push_back(C); } (yyval.ConstVal).C = ConstantVector::get(PTy, Elems); - (yyval.ConstVal).S = (yyvsp[-3].TypeVal).S; + (yyval.ConstVal).S.copy((yyvsp[-3].TypeVal).S); delete (yyvsp[-3].TypeVal).PAT; delete (yyvsp[-1].ConstVector); ;} break; case 149: -#line 2029 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2274 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const StructType *STy = dyn_cast((yyvsp[-3].TypeVal).PAT->get()); if (STy == 0) @@ -4346,14 +4591,14 @@ yyreduce: Fields.push_back(C); } (yyval.ConstVal).C = ConstantStruct::get(STy, Fields); - (yyval.ConstVal).S = (yyvsp[-3].TypeVal).S; + (yyval.ConstVal).S.copy((yyvsp[-3].TypeVal).S); delete (yyvsp[-3].TypeVal).PAT; delete (yyvsp[-1].ConstVector); ;} break; case 150: -#line 2051 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2296 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const StructType *STy = dyn_cast((yyvsp[-2].TypeVal).PAT->get()); if (STy == 0) @@ -4362,13 +4607,13 @@ yyreduce: if (STy->getNumContainedTypes() != 0) error("Illegal number of initializers for structure type"); (yyval.ConstVal).C = ConstantStruct::get(STy, std::vector()); - (yyval.ConstVal).S = (yyvsp[-2].TypeVal).S; + (yyval.ConstVal).S.copy((yyvsp[-2].TypeVal).S); delete (yyvsp[-2].TypeVal).PAT; ;} break; case 151: -#line 2062 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2307 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const StructType *STy = dyn_cast((yyvsp[-5].TypeVal).PAT->get()); if (STy == 0) @@ -4387,14 +4632,14 @@ yyreduce: Fields.push_back(C); } (yyval.ConstVal).C = ConstantStruct::get(STy, Fields); - (yyval.ConstVal).S = (yyvsp[-5].TypeVal).S; + (yyval.ConstVal).S.copy((yyvsp[-5].TypeVal).S); delete (yyvsp[-5].TypeVal).PAT; delete (yyvsp[-2].ConstVector); ;} break; case 152: -#line 2084 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2329 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const StructType *STy = dyn_cast((yyvsp[-4].TypeVal).PAT->get()); if (STy == 0) @@ -4403,35 +4648,35 @@ yyreduce: if (STy->getNumContainedTypes() != 0) error("Illegal number of initializers for packed structure type"); (yyval.ConstVal).C = ConstantStruct::get(STy, std::vector()); - (yyval.ConstVal).S = (yyvsp[-4].TypeVal).S; + (yyval.ConstVal).S.copy((yyvsp[-4].TypeVal).S); delete (yyvsp[-4].TypeVal).PAT; ;} break; case 153: -#line 2095 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2340 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const PointerType *PTy = dyn_cast((yyvsp[-1].TypeVal).PAT->get()); if (PTy == 0) error("Cannot make null pointer constant with type: '" + (yyvsp[-1].TypeVal).PAT->get()->getDescription() + "'"); (yyval.ConstVal).C = ConstantPointerNull::get(PTy); - (yyval.ConstVal).S = (yyvsp[-1].TypeVal).S; + (yyval.ConstVal).S.copy((yyvsp[-1].TypeVal).S); delete (yyvsp[-1].TypeVal).PAT; ;} break; case 154: -#line 2104 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2349 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ConstVal).C = UndefValue::get((yyvsp[-1].TypeVal).PAT->get()); - (yyval.ConstVal).S = (yyvsp[-1].TypeVal).S; + (yyval.ConstVal).S.copy((yyvsp[-1].TypeVal).S); delete (yyvsp[-1].TypeVal).PAT; ;} break; case 155: -#line 2109 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2354 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const PointerType *Ty = dyn_cast((yyvsp[-1].TypeVal).PAT->get()); if (Ty == 0) @@ -4447,6 +4692,7 @@ yyreduce: // Function *SavedCurFn = CurFun.CurrentFunction; CurFun.CurrentFunction = 0; + (yyvsp[0].ValIDVal).S.copy((yyvsp[-1].TypeVal).S); Value *V = getExistingValue(Ty, (yyvsp[0].ValIDVal)); CurFun.CurrentFunction = SavedCurFn; @@ -4487,89 +4733,89 @@ yyreduce: } } (yyval.ConstVal).C = cast(V); - (yyval.ConstVal).S = (yyvsp[-1].TypeVal).S; + (yyval.ConstVal).S.copy((yyvsp[-1].TypeVal).S); delete (yyvsp[-1].TypeVal).PAT; // Free the type handle ;} break; case 156: -#line 2167 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2413 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[-1].TypeVal).PAT->get() != (yyvsp[0].ConstVal).C->getType()) error("Mismatched types for constant expression"); (yyval.ConstVal) = (yyvsp[0].ConstVal); - (yyval.ConstVal).S = (yyvsp[-1].TypeVal).S; + (yyval.ConstVal).S.copy((yyvsp[-1].TypeVal).S); delete (yyvsp[-1].TypeVal).PAT; ;} break; case 157: -#line 2174 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2420 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-1].TypeVal).PAT->get(); if (isa(Ty) || Ty == Type::LabelTy || isa(Ty)) error("Cannot create a null initialized value of this type"); (yyval.ConstVal).C = Constant::getNullValue(Ty); - (yyval.ConstVal).S = (yyvsp[-1].TypeVal).S; + (yyval.ConstVal).S.copy((yyvsp[-1].TypeVal).S); delete (yyvsp[-1].TypeVal).PAT; ;} break; case 158: -#line 2182 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2428 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // integral constants const Type *Ty = (yyvsp[-1].PrimType).T; if (!ConstantInt::isValueValidForType(Ty, (yyvsp[0].SInt64Val))) error("Constant value doesn't fit in type"); (yyval.ConstVal).C = ConstantInt::get(Ty, (yyvsp[0].SInt64Val)); - (yyval.ConstVal).S = Signed; + (yyval.ConstVal).S.makeSigned(); ;} break; case 159: -#line 2189 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2435 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // integral constants const Type *Ty = (yyvsp[-1].PrimType).T; if (!ConstantInt::isValueValidForType(Ty, (yyvsp[0].UInt64Val))) error("Constant value doesn't fit in type"); (yyval.ConstVal).C = ConstantInt::get(Ty, (yyvsp[0].UInt64Val)); - (yyval.ConstVal).S = Unsigned; + (yyval.ConstVal).S.makeUnsigned(); ;} break; case 160: -#line 2196 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2442 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Boolean constants (yyval.ConstVal).C = ConstantInt::get(Type::Int1Ty, true); - (yyval.ConstVal).S = Unsigned; + (yyval.ConstVal).S.makeUnsigned(); ;} break; case 161: -#line 2200 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2446 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Boolean constants (yyval.ConstVal).C = ConstantInt::get(Type::Int1Ty, false); - (yyval.ConstVal).S = Unsigned; + (yyval.ConstVal).S.makeUnsigned(); ;} break; case 162: -#line 2204 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2450 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Float & Double constants if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType).T, (yyvsp[0].FPVal))) error("Floating point constant invalid for type"); (yyval.ConstVal).C = ConstantFP::get((yyvsp[-1].PrimType).T, (yyvsp[0].FPVal)); - (yyval.ConstVal).S = Signless; + (yyval.ConstVal).S.makeSignless(); ;} break; case 163: -#line 2213 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2459 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type* SrcTy = (yyvsp[-3].ConstVal).C->getType(); const Type* DstTy = (yyvsp[-1].TypeVal).PAT->get(); - Signedness SrcSign = (yyvsp[-3].ConstVal).S; - Signedness DstSign = (yyvsp[-1].TypeVal).S; + Signedness SrcSign((yyvsp[-3].ConstVal).S); + Signedness DstSign((yyvsp[-1].TypeVal).S); if (!SrcTy->isFirstClassType()) error("cast constant expression from a non-primitive type: '" + SrcTy->getDescription() + "'"); @@ -4577,13 +4823,13 @@ yyreduce: error("cast constant expression to a non-primitive type: '" + DstTy->getDescription() + "'"); (yyval.ConstVal).C = cast(getCast((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal).C, SrcSign, DstTy, DstSign)); - (yyval.ConstVal).S = DstSign; + (yyval.ConstVal).S.copy(DstSign); delete (yyvsp[-1].TypeVal).PAT; ;} break; case 164: -#line 2228 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2474 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-2].ConstVal).C->getType(); if (!isa(Ty)) @@ -4595,12 +4841,12 @@ yyreduce: delete (yyvsp[-1].ValueList); (yyval.ConstVal).C = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal).C, &CIndices[0], CIndices.size()); - (yyval.ConstVal).S = Signless; + (yyval.ConstVal).S.copy(getElementSign((yyvsp[-2].ConstVal), CIndices)); ;} break; case 165: -#line 2241 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2487 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-5].ConstVal).C->getType()->isInteger() || cast((yyvsp[-5].ConstVal).C->getType())->getBitWidth() != 1) @@ -4608,12 +4854,12 @@ yyreduce: if ((yyvsp[-3].ConstVal).C->getType() != (yyvsp[-1].ConstVal).C->getType()) error("Select operand types must match"); (yyval.ConstVal).C = ConstantExpr::getSelect((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C); - (yyval.ConstVal).S = Unsigned; + (yyval.ConstVal).S.copy((yyvsp[-3].ConstVal).S); ;} break; case 166: -#line 2250 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2496 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-3].ConstVal).C->getType(); if (Ty != (yyvsp[-1].ConstVal).C->getType()) @@ -4640,12 +4886,12 @@ yyreduce: ConstantExpr::getCast(Instruction::PtrToInt, (yyvsp[-1].ConstVal).C, IntPtrTy)); (yyval.ConstVal).C = ConstantExpr::getCast(Instruction::IntToPtr, (yyval.ConstVal).C, Ty); } - (yyval.ConstVal).S = (yyvsp[-3].ConstVal).S; + (yyval.ConstVal).S.copy((yyvsp[-3].ConstVal).S); ;} break; case 167: -#line 2278 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2524 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type* Ty = (yyvsp[-3].ConstVal).C->getType(); if (Ty != (yyvsp[-1].ConstVal).C->getType()) @@ -4657,12 +4903,12 @@ yyreduce: } Instruction::BinaryOps Opcode = getBinaryOp((yyvsp[-5].BinaryOpVal), Ty, (yyvsp[-3].ConstVal).S); (yyval.ConstVal).C = ConstantExpr::get(Opcode, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C); - (yyval.ConstVal).S = (yyvsp[-3].ConstVal).S; + (yyval.ConstVal).S.copy((yyvsp[-3].ConstVal).S); ;} break; case 168: -#line 2291 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2537 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type* Ty = (yyvsp[-3].ConstVal).C->getType(); if (Ty != (yyvsp[-1].ConstVal).C->getType()) @@ -4670,32 +4916,32 @@ yyreduce: unsigned short pred; Instruction::OtherOps Opcode = getCompareOp((yyvsp[-5].BinaryOpVal), pred, Ty, (yyvsp[-3].ConstVal).S); (yyval.ConstVal).C = ConstantExpr::getCompare(Opcode, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C); - (yyval.ConstVal).S = Unsigned; + (yyval.ConstVal).S.makeUnsigned(); ;} break; case 169: -#line 2300 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2546 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[-3].ConstVal).C->getType() != (yyvsp[-1].ConstVal).C->getType()) error("icmp operand types must match"); (yyval.ConstVal).C = ConstantExpr::getCompare((yyvsp[-5].IPred), (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C); - (yyval.ConstVal).S = Unsigned; + (yyval.ConstVal).S.makeUnsigned(); ;} break; case 170: -#line 2306 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2552 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[-3].ConstVal).C->getType() != (yyvsp[-1].ConstVal).C->getType()) error("fcmp operand types must match"); (yyval.ConstVal).C = ConstantExpr::getCompare((yyvsp[-5].FPred), (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C); - (yyval.ConstVal).S = Unsigned; + (yyval.ConstVal).S.makeUnsigned(); ;} break; case 171: -#line 2312 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2558 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-1].ConstVal).C->getType()->isInteger() || cast((yyvsp[-1].ConstVal).C->getType())->getBitWidth() != 8) @@ -4705,47 +4951,47 @@ yyreduce: error("Shift constant expression requires integer operand"); Constant *ShiftAmt = ConstantExpr::getZExt((yyvsp[-1].ConstVal).C, Ty); (yyval.ConstVal).C = ConstantExpr::get(getBinaryOp((yyvsp[-5].BinaryOpVal), Ty, (yyvsp[-3].ConstVal).S), (yyvsp[-3].ConstVal).C, ShiftAmt); - (yyval.ConstVal).S = (yyvsp[-3].ConstVal).S; + (yyval.ConstVal).S.copy((yyvsp[-3].ConstVal).S); ;} break; case 172: -#line 2323 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2569 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C)) error("Invalid extractelement operands"); (yyval.ConstVal).C = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C); - (yyval.ConstVal).S = (yyvsp[-3].ConstVal).S; + (yyval.ConstVal).S.copy((yyvsp[-3].ConstVal).S.get(0)); ;} break; case 173: -#line 2329 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2575 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C)) error("Invalid insertelement operands"); (yyval.ConstVal).C = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C); - (yyval.ConstVal).S = (yyvsp[-5].ConstVal).S; + (yyval.ConstVal).S.copy((yyvsp[-5].ConstVal).S); ;} break; case 174: -#line 2335 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2581 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C)) error("Invalid shufflevector operands"); (yyval.ConstVal).C = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C); - (yyval.ConstVal).S = (yyvsp[-5].ConstVal).S; + (yyval.ConstVal).S.copy((yyvsp[-5].ConstVal).S); ;} break; case 175: -#line 2346 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2592 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal)); ;} break; case 176: -#line 2347 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2593 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ConstVector) = new std::vector(); (yyval.ConstVector)->push_back((yyvsp[0].ConstVal)); @@ -4753,17 +4999,17 @@ yyreduce: break; case 177: -#line 2356 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2602 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = false; ;} break; case 178: -#line 2357 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2603 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = true; ;} break; case 179: -#line 2369 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2615 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ModuleVal) = ParserResult = (yyvsp[0].ModuleVal); CurModule.ModuleDone(); @@ -4771,27 +5017,27 @@ yyreduce: break; case 180: -#line 2378 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2624 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); CurFun.FunctionDone(); ;} break; case 181: -#line 2379 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2625 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); ;} break; case 182: -#line 2380 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2626 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ModuleVal) = (yyvsp[-3].ModuleVal); ;} break; case 183: -#line 2381 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2627 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); ;} break; case 184: -#line 2382 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2628 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ModuleVal) = CurModule.CurrentModule; // Emit an error if there are any unresolved types left. @@ -4807,7 +5053,7 @@ yyreduce: break; case 185: -#line 2398 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2644 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Eagerly resolve types. This is not an optimization, this is a // requirement that is due to the fact that we could have this: @@ -4818,115 +5064,118 @@ yyreduce: // If types are not resolved eagerly, then the two types will not be // determined to be the same type! // - const Type* Ty = (yyvsp[0].TypeVal).PAT->get(); - ResolveTypeTo((yyvsp[-2].StrVal), Ty); + ResolveTypeTo((yyvsp[-2].StrVal), (yyvsp[0].TypeVal).PAT->get(), (yyvsp[0].TypeVal).S); - if (!setTypeName(Ty, (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) { - // If this is a named type that is not a redefinition, add it to the slot - // table. - CurModule.Types.push_back(Ty); + if (!setTypeName((yyvsp[0].TypeVal), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) { + // If this is a numbered type that is not a redefinition, add it to the + // slot table. + CurModule.Types.push_back((yyvsp[0].TypeVal).PAT->get()); + CurModule.TypeSigns.push_back((yyvsp[0].TypeVal).S); } delete (yyvsp[0].TypeVal).PAT; ;} break; case 186: -#line 2418 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2664 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Function prototypes can be in const pool ;} break; case 187: -#line 2420 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2666 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Asm blocks can be in the const pool ;} break; case 188: -#line 2422 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2668 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[0].ConstVal).C == 0) error("Global value initializer is not a constant"); - CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), (yyvsp[-2].Linkage), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal).C->getType(), (yyvsp[0].ConstVal).C); + CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), (yyvsp[-2].Linkage), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal).C->getType(), (yyvsp[0].ConstVal).C, (yyvsp[0].ConstVal).S); ;} break; case 189: -#line 2426 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2672 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { CurGV = 0; ;} break; case 190: -#line 2429 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2675 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[0].TypeVal).PAT->get(); - CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage, (yyvsp[-1].BoolVal), Ty, 0); + CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage, (yyvsp[-1].BoolVal), Ty, 0, + (yyvsp[0].TypeVal).S); delete (yyvsp[0].TypeVal).PAT; ;} break; case 191: -#line 2433 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2680 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { CurGV = 0; ;} break; case 192: -#line 2436 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2683 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[0].TypeVal).PAT->get(); - CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::DLLImportLinkage, (yyvsp[-1].BoolVal), Ty, 0); + CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::DLLImportLinkage, (yyvsp[-1].BoolVal), Ty, 0, + (yyvsp[0].TypeVal).S); delete (yyvsp[0].TypeVal).PAT; ;} break; case 193: -#line 2440 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2688 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { CurGV = 0; ;} break; case 194: -#line 2443 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2691 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[0].TypeVal).PAT->get(); CurGV = - ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalWeakLinkage, (yyvsp[-1].BoolVal), Ty, 0); + ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalWeakLinkage, (yyvsp[-1].BoolVal), Ty, 0, + (yyvsp[0].TypeVal).S); delete (yyvsp[0].TypeVal).PAT; ;} break; case 195: -#line 2448 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2697 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { CurGV = 0; ;} break; case 196: -#line 2451 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2700 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { ;} break; case 197: -#line 2453 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2702 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { ;} break; case 198: -#line 2455 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2704 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { ;} break; case 199: -#line 2460 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2709 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm(); char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true); @@ -4941,24 +5190,24 @@ yyreduce: break; case 200: -#line 2474 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2723 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Endianness) = Module::BigEndian; ;} break; case 201: -#line 2475 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2724 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Endianness) = Module::LittleEndian; ;} break; case 202: -#line 2479 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2728 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { CurModule.setEndianness((yyvsp[0].Endianness)); ;} break; case 203: -#line 2482 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2731 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[0].UInt64Val) == 32) CurModule.setPointerSize(Module::Pointer32); @@ -4970,7 +5219,7 @@ yyreduce: break; case 204: -#line 2490 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2739 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -4978,7 +5227,7 @@ yyreduce: break; case 205: -#line 2494 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2743 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -4986,7 +5235,7 @@ yyreduce: break; case 207: -#line 2505 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2754 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -4994,7 +5243,7 @@ yyreduce: break; case 208: -#line 2509 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2758 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -5002,17 +5251,17 @@ yyreduce: break; case 209: -#line 2513 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2762 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { ;} break; case 213: -#line 2526 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2775 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.StrVal) = 0; ;} break; case 214: -#line 2530 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2779 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[-1].TypeVal).PAT->get() == Type::VoidTy) error("void typed arguments are invalid"); @@ -5021,7 +5270,7 @@ yyreduce: break; case 215: -#line 2538 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2787 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ArgList) = (yyvsp[-2].ArgList); (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal)); @@ -5030,7 +5279,7 @@ yyreduce: break; case 216: -#line 2543 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2792 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ArgList) = new std::vector >(); (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal)); @@ -5039,39 +5288,39 @@ yyreduce: break; case 217: -#line 2551 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2800 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ArgList) = (yyvsp[0].ArgList); ;} break; case 218: -#line 2552 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2801 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ArgList) = (yyvsp[-2].ArgList); PATypeInfo VoidTI; VoidTI.PAT = new PATypeHolder(Type::VoidTy); - VoidTI.S = Signless; + VoidTI.S.makeSignless(); (yyval.ArgList)->push_back(std::pair(VoidTI, 0)); ;} break; case 219: -#line 2559 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2808 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ArgList) = new std::vector >(); PATypeInfo VoidTI; VoidTI.PAT = new PATypeHolder(Type::VoidTy); - VoidTI.S = Signless; + VoidTI.S.makeSignless(); (yyval.ArgList)->push_back(std::pair(VoidTI, 0)); ;} break; case 220: -#line 2566 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2815 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ArgList) = 0; ;} break; case 221: -#line 2570 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 2819 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { UnEscapeLexed((yyvsp[-5].StrVal)); std::string FunctionName((yyvsp[-5].StrVal)); @@ -5082,6 +5331,8 @@ yyreduce: if (!RetTy->isFirstClassType() && RetTy != Type::VoidTy) error("LLVM functions cannot return aggregate types"); + Signedness FTySign; + FTySign.makeComposite((yyvsp[-6].TypeVal).S); std::vector ParamTyList; // In LLVM 2.0 the signatures of three varargs intrinsics changed to take @@ -5097,6 +5348,7 @@ yyreduce: I = (yyvsp[-3].ArgList)->begin(), E = (yyvsp[-3].ArgList)->end(); I != E; ++I) { const Type *Ty = I->first.PAT->get(); ParamTyList.push_back(Ty); + FTySign.add(I->first.S); } } @@ -5123,6 +5375,7 @@ yyreduce: } else { ID = ValID::create((int)CurModule.Values[PFT].size()); } + ID.S.makeComposite(FTySign); Function *Fn = 0; Module* M = CurModule.CurrentModule; @@ -5149,14 +5402,16 @@ yyreduce: std::string NewName(makeNameUnique(FunctionName)); if (Conflict->hasInternalLinkage()) { Conflict->setName(NewName); - RenameMapKey Key = std::make_pair(FunctionName,Conflict->getType()); + RenameMapKey Key = + makeRenameMapKey(FunctionName, Conflict->getType(), ID.S); CurModule.RenameMap[Key] = NewName; Fn = new Function(FT, CurFun.Linkage, FunctionName, M); InsertValue(Fn, CurModule.Values); } else { Fn = new Function(FT, CurFun.Linkage, NewName, M); InsertValue(Fn, CurModule.Values); - RenameMapKey Key = std::make_pair(FunctionName,PFT); + RenameMapKey Key = + makeRenameMapKey(FunctionName, PFT, ID.S); CurModule.RenameMap[Key] = NewName; } } else { @@ -5178,9 +5433,11 @@ yyreduce: // type plane. After PR411 was fixed, this is no loner the case. // To resolve this we must rename one of the two. if (Conflict->hasInternalLinkage()) { - // We can safely renamed the Conflict. + // We can safely rename the Conflict. + RenameMapKey Key = + makeRenameMapKey(Conflict->getName(), Conflict->getType(), + CurModule.NamedValueSigns[Conflict->getName()]); Conflict->setName(makeNameUnique(Conflict->getName())); - RenameMapKey Key = std::make_pair(FunctionName,Conflict->getType()); CurModule.RenameMap[Key] = Conflict->getName(); Fn = new Function(FT, CurFun.Linkage, FunctionName, M); InsertValue(Fn, CurModule.Values); @@ -5189,7 +5446,7 @@ yyreduce: std::string NewName = makeNameUnique(FunctionName); Fn = new Function(FT, CurFun.Linkage, NewName, M); InsertValue(Fn, CurModule.Values); - RenameMapKey Key = std::make_pair(FunctionName,PFT); + RenameMapKey Key = makeRenameMapKey(FunctionName, PFT, ID.S); CurModule.RenameMap[Key] = NewName; } else { // We can't quietly rename either of these things, but we must @@ -5200,7 +5457,7 @@ yyreduce: "' may cause linkage errors"); Fn = new Function(FT, CurFun.Linkage, NewName, M); InsertValue(Fn, CurModule.Values); - RenameMapKey Key = std::make_pair(FunctionName,PFT); + RenameMapKey Key = makeRenameMapKey(FunctionName, PFT, ID.S); CurModule.RenameMap[Key] = NewName; } } else { @@ -5239,7 +5496,8 @@ yyreduce: std::vector >::iterator E = (yyvsp[-3].ArgList)->end(); for ( ; I != E && ArgIt != ArgEnd; ++I, ++ArgIt) { delete I->first.PAT; // Delete the typeholder... - setValueName(ArgIt, I->second); // Insert arg into symtab... + ValueInfo VI; VI.V = ArgIt; VI.S.copy(I->first.S); + setValueName(VI, I->second); // Insert arg into symtab... InsertValue(ArgIt); } delete (yyvsp[-3].ArgList); // We're now done with the argument list @@ -5248,7 +5506,7 @@ yyreduce: break; case 224: -#line 2750 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3008 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FunctionVal) = CurFun.CurrentFunction; @@ -5259,39 +5517,39 @@ yyreduce: break; case 227: -#line 2764 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3022 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FunctionVal) = (yyvsp[-1].FunctionVal); ;} break; case 228: -#line 2769 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3027 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} break; case 229: -#line 2770 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3028 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;} break; case 230: -#line 2771 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3029 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;} break; case 231: -#line 2775 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3033 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { CurFun.isDeclare = true; ;} break; case 232: -#line 2776 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3034 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { CurFun.Linkage = (yyvsp[0].Linkage); ;} break; case 233: -#line 2776 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3034 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FunctionVal) = CurFun.CurrentFunction; CurFun.FunctionDone(); @@ -5300,63 +5558,69 @@ yyreduce: break; case 234: -#line 2788 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3046 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = false; ;} break; case 235: -#line 2789 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3047 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = true; ;} break; case 236: -#line 2794 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val)); ;} +#line 3052 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" + { (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val)); ;} break; case 237: -#line 2795 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3053 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val)); ;} break; case 238: -#line 2796 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3054 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal)); ;} break; case 239: -#line 2797 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ValIDVal) = ValID::create(ConstantInt::get(Type::Int1Ty, true)); ;} +#line 3055 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" + { + (yyval.ValIDVal) = ValID::create(ConstantInt::get(Type::Int1Ty, true)); + (yyval.ValIDVal).S.makeUnsigned(); + ;} break; case 240: -#line 2798 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ValIDVal) = ValID::create(ConstantInt::get(Type::Int1Ty, false)); ;} +#line 3059 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" + { + (yyval.ValIDVal) = ValID::create(ConstantInt::get(Type::Int1Ty, false)); + (yyval.ValIDVal).S.makeUnsigned(); + ;} break; case 241: -#line 2799 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3063 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::createNull(); ;} break; case 242: -#line 2800 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3064 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::createUndef(); ;} break; case 243: -#line 2801 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3065 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::createZeroInit(); ;} break; case 244: -#line 2802 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3066 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Nonempty unsized packed vector const Type *ETy = (*(yyvsp[-1].ConstVector))[0].C->getType(); int NumElements = (yyvsp[-1].ConstVector)->size(); VectorType* pt = VectorType::get(ETy, NumElements); - PATypeHolder* PTy = new PATypeHolder( - HandleUpRefs(VectorType::get(ETy, NumElements))); + (yyval.ValIDVal).S.makeComposite((*(yyvsp[-1].ConstVector))[0].S); + PATypeHolder* PTy = new PATypeHolder(HandleUpRefs(pt, (yyval.ValIDVal).S)); // Verify all elements are correct type! std::vector Elems; @@ -5375,14 +5639,15 @@ yyreduce: break; case 245: -#line 2823 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3087 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal).C); + (yyval.ValIDVal).S.copy((yyvsp[0].ConstVal).S); ;} break; case 246: -#line 2826 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3091 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { char *End = UnEscapeLexed((yyvsp[-2].StrVal), true); std::string AsmStr = std::string((yyvsp[-2].StrVal), End); @@ -5395,52 +5660,54 @@ yyreduce: break; case 247: -#line 2841 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal)); ;} +#line 3105 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" + { (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal)); (yyval.ValIDVal).S.makeSignless(); ;} break; case 248: -#line 2842 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal)); ;} +#line 3106 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" + { (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal)); (yyval.ValIDVal).S.makeSignless(); ;} break; case 251: -#line 2855 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3119 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-1].TypeVal).PAT->get(); - (yyval.ValueVal).S = (yyvsp[-1].TypeVal).S; + (yyvsp[0].ValIDVal).S.copy((yyvsp[-1].TypeVal).S); (yyval.ValueVal).V = getVal(Ty, (yyvsp[0].ValIDVal)); + (yyval.ValueVal).S.copy((yyvsp[-1].TypeVal).S); delete (yyvsp[-1].TypeVal).PAT; ;} break; case 252: -#line 2864 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3129 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FunctionVal) = (yyvsp[-1].FunctionVal); ;} break; case 253: -#line 2867 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3132 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Do not allow functions with 0 basic blocks (yyval.FunctionVal) = (yyvsp[-1].FunctionVal); ;} break; case 254: -#line 2876 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3141 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { - setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal)); - InsertValue((yyvsp[0].TermInstVal)); - (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal)); + ValueInfo VI; VI.V = (yyvsp[0].TermInstVal).TI; VI.S.copy((yyvsp[0].TermInstVal).S); + setValueName(VI, (yyvsp[-1].StrVal)); + InsertValue((yyvsp[0].TermInstVal).TI); + (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal).TI); InsertValue((yyvsp[-2].BasicBlockVal)); (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal); ;} break; case 255: -#line 2886 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3152 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[0].InstVal).I) (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal).I); @@ -5449,9 +5716,9 @@ yyreduce: break; case 256: -#line 2891 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3157 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++), true); + (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++),true); // Make sure to move the basic block to the correct location in the // function, instead of leaving it inserted wherever it was first // referenced. @@ -5462,7 +5729,7 @@ yyreduce: break; case 257: -#line 2900 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3166 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((yyvsp[0].StrVal)), true); // Make sure to move the basic block to the correct location in the @@ -5475,44 +5742,54 @@ yyreduce: break; case 260: -#line 2914 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3180 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Return with a result... - (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal).V); + (yyval.TermInstVal).TI = new ReturnInst((yyvsp[0].ValueVal).V); + (yyval.TermInstVal).S.makeSignless(); ;} break; case 261: -#line 2917 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3184 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Return with no result... - (yyval.TermInstVal) = new ReturnInst(); + (yyval.TermInstVal).TI = new ReturnInst(); + (yyval.TermInstVal).S.makeSignless(); ;} break; case 262: -#line 2920 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3188 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Unconditional Branch... BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal)); - (yyval.TermInstVal) = new BranchInst(tmpBB); + (yyval.TermInstVal).TI = new BranchInst(tmpBB); + (yyval.TermInstVal).S.makeSignless(); ;} break; case 263: -#line 2924 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3193 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { + (yyvsp[-3].ValIDVal).S.makeSignless(); + (yyvsp[0].ValIDVal).S.makeSignless(); BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal)); BasicBlock* tmpBBB = getBBVal((yyvsp[0].ValIDVal)); + (yyvsp[-6].ValIDVal).S.makeUnsigned(); Value* tmpVal = getVal(Type::Int1Ty, (yyvsp[-6].ValIDVal)); - (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal); + (yyval.TermInstVal).TI = new BranchInst(tmpBBA, tmpBBB, tmpVal); + (yyval.TermInstVal).S.makeSignless(); ;} break; case 264: -#line 2930 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3203 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { + (yyvsp[-6].ValIDVal).S.copy((yyvsp[-7].PrimType).S); Value* tmpVal = getVal((yyvsp[-7].PrimType).T, (yyvsp[-6].ValIDVal)); + (yyvsp[-3].ValIDVal).S.makeSignless(); BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal)); SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[-1].JumpTable)->size()); - (yyval.TermInstVal) = S; + (yyval.TermInstVal).TI = S; + (yyval.TermInstVal).S.makeSignless(); std::vector >::iterator I = (yyvsp[-1].JumpTable)->begin(), E = (yyvsp[-1].JumpTable)->end(); for (; I != E; ++I) { @@ -5526,29 +5803,36 @@ yyreduce: break; case 265: -#line 2945 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3221 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { + (yyvsp[-5].ValIDVal).S.copy((yyvsp[-6].PrimType).S); Value* tmpVal = getVal((yyvsp[-6].PrimType).T, (yyvsp[-5].ValIDVal)); + (yyvsp[-2].ValIDVal).S.makeSignless(); BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal)); SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0); - (yyval.TermInstVal) = S; + (yyval.TermInstVal).TI = S; + (yyval.TermInstVal).S.makeSignless(); ;} break; case 266: -#line 2952 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3231 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const PointerType *PFTy; const FunctionType *Ty; + Signedness FTySign; if (!(PFTy = dyn_cast((yyvsp[-10].TypeVal).PAT->get())) || !(Ty = dyn_cast(PFTy->getElementType()))) { // Pull out the types of all of the arguments... std::vector ParamTypes; + FTySign.makeComposite((yyvsp[-10].TypeVal).S); if ((yyvsp[-7].ValueList)) { for (std::vector::iterator I = (yyvsp[-7].ValueList)->begin(), E = (yyvsp[-7].ValueList)->end(); - I != E; ++I) + I != E; ++I) { ParamTypes.push_back((*I).V->getType()); + FTySign.add(I->S); + } } FunctionType::ParamAttrsList ParamAttrs; if ((yyvsp[-11].UIntVal) == OldCallingConv::CSRet) { @@ -5559,14 +5843,19 @@ yyreduce: if (isVarArg) ParamTypes.pop_back(); Ty = FunctionType::get((yyvsp[-10].TypeVal).PAT->get(), ParamTypes, isVarArg, ParamAttrs); PFTy = PointerType::get(Ty); + (yyval.TermInstVal).S.copy((yyvsp[-10].TypeVal).S); + } else { + FTySign = (yyvsp[-10].TypeVal).S; + (yyval.TermInstVal).S.copy((yyvsp[-10].TypeVal).S.get(0)); // 0th element of FuncTy sign is result ty } + (yyvsp[-9].ValIDVal).S.makeComposite(FTySign); Value *V = getVal(PFTy, (yyvsp[-9].ValIDVal)); // Get the function we're calling... BasicBlock *Normal = getBBVal((yyvsp[-3].ValIDVal)); BasicBlock *Except = getBBVal((yyvsp[0].ValIDVal)); // Create the call node... if (!(yyvsp[-7].ValueList)) { // Has no arguments? - (yyval.TermInstVal) = new InvokeInst(V, Normal, Except, 0, 0); + (yyval.TermInstVal).TI = new InvokeInst(V, Normal, Except, 0, 0); } else { // Has arguments? // Loop through FunctionType's arguments and ensure they are specified // correctly! @@ -5586,58 +5875,64 @@ yyreduce: if (I != E || (ArgI != ArgE && !Ty->isVarArg())) error("Invalid number of parameters detected"); - (yyval.TermInstVal) = new InvokeInst(V, Normal, Except, &Args[0], Args.size()); + (yyval.TermInstVal).TI = new InvokeInst(V, Normal, Except, &Args[0], Args.size()); } - cast((yyval.TermInstVal))->setCallingConv(upgradeCallingConv((yyvsp[-11].UIntVal))); + cast((yyval.TermInstVal).TI)->setCallingConv(upgradeCallingConv((yyvsp[-11].UIntVal))); delete (yyvsp[-10].TypeVal).PAT; delete (yyvsp[-7].ValueList); ;} break; case 267: -#line 3007 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3295 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.TermInstVal) = new UnwindInst(); + (yyval.TermInstVal).TI = new UnwindInst(); + (yyval.TermInstVal).S.makeSignless(); ;} break; case 268: -#line 3010 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3299 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { - (yyval.TermInstVal) = new UnreachableInst(); + (yyval.TermInstVal).TI = new UnreachableInst(); + (yyval.TermInstVal).S.makeSignless(); ;} break; case 269: -#line 3016 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3306 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.JumpTable) = (yyvsp[-5].JumpTable); + (yyvsp[-3].ValIDVal).S.copy((yyvsp[-4].PrimType).S); Constant *V = cast(getExistingValue((yyvsp[-4].PrimType).T, (yyvsp[-3].ValIDVal))); if (V == 0) error("May only switch on a constant pool value"); + (yyvsp[0].ValIDVal).S.makeSignless(); BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal)); (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB)); ;} break; case 270: -#line 3026 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3318 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.JumpTable) = new std::vector >(); + (yyvsp[-3].ValIDVal).S.copy((yyvsp[-4].PrimType).S); Constant *V = cast(getExistingValue((yyvsp[-4].PrimType).T, (yyvsp[-3].ValIDVal))); if (V == 0) error("May only switch on a constant pool value"); + (yyvsp[0].ValIDVal).S.makeSignless(); BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal)); (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB)); ;} break; case 271: -#line 3039 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3333 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { bool omit = false; if ((yyvsp[-1].StrVal)) @@ -5659,9 +5954,10 @@ yyreduce: omit = true; if (omit) { (yyval.InstVal).I = 0; - (yyval.InstVal).S = Signless; + (yyval.InstVal).S.makeSignless(); } else { - setValueName((yyvsp[0].InstVal).I, (yyvsp[-1].StrVal)); + ValueInfo VI; VI.V = (yyvsp[0].InstVal).I; VI.S.copy((yyvsp[0].InstVal).S); + setValueName(VI, (yyvsp[-1].StrVal)); InsertValue((yyvsp[0].InstVal).I); (yyval.InstVal) = (yyvsp[0].InstVal); } @@ -5669,11 +5965,13 @@ yyreduce: break; case 272: -#line 3068 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3363 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Used for PHI nodes (yyval.PHIList).P = new std::list >(); - (yyval.PHIList).S = (yyvsp[-5].TypeVal).S; + (yyval.PHIList).S.copy((yyvsp[-5].TypeVal).S); + (yyvsp[-3].ValIDVal).S.copy((yyvsp[-5].TypeVal).S); Value* tmpVal = getVal((yyvsp[-5].TypeVal).PAT->get(), (yyvsp[-3].ValIDVal)); + (yyvsp[-1].ValIDVal).S.makeSignless(); BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal)); (yyval.PHIList).P->push_back(std::make_pair(tmpVal, tmpBB)); delete (yyvsp[-5].TypeVal).PAT; @@ -5681,17 +5979,19 @@ yyreduce: break; case 273: -#line 3076 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3373 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.PHIList) = (yyvsp[-6].PHIList); + (yyvsp[-3].ValIDVal).S.copy((yyvsp[-6].PHIList).S); Value* tmpVal = getVal((yyvsp[-6].PHIList).P->front().first->getType(), (yyvsp[-3].ValIDVal)); + (yyvsp[-1].ValIDVal).S.makeSignless(); BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal)); (yyvsp[-6].PHIList).P->push_back(std::make_pair(tmpVal, tmpBB)); ;} break; case 274: -#line 3084 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3383 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { // Used for call statements, and memory insts... (yyval.ValueList) = new std::vector(); (yyval.ValueList)->push_back((yyvsp[0].ValueVal)); @@ -5699,7 +5999,7 @@ yyreduce: break; case 275: -#line 3088 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3387 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValueList) = (yyvsp[-2].ValueList); (yyvsp[-2].ValueList)->push_back((yyvsp[0].ValueVal)); @@ -5707,27 +6007,29 @@ yyreduce: break; case 277: -#line 3096 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3395 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValueList) = 0; ;} break; case 278: -#line 3100 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3399 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = true; ;} break; case 279: -#line 3103 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3402 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = false; ;} break; case 280: -#line 3109 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3408 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { + (yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); + (yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); const Type* Ty = (yyvsp[-3].TypeVal).PAT->get(); if (!Ty->isInteger() && !Ty->isFloatingPoint() && !isa(Ty)) error("Arithmetic operator requires integer, FP, or packed operands"); @@ -5741,14 +6043,16 @@ yyreduce: (yyval.InstVal).I = BinaryOperator::create(Opcode, val1, val2); if ((yyval.InstVal).I == 0) error("binary operator returned null"); - (yyval.InstVal).S = (yyvsp[-3].TypeVal).S; + (yyval.InstVal).S.copy((yyvsp[-3].TypeVal).S); delete (yyvsp[-3].TypeVal).PAT; ;} break; case 281: -#line 3126 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3427 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { + (yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); + (yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); const Type *Ty = (yyvsp[-3].TypeVal).PAT->get(); if (!Ty->isInteger()) { if (!isa(Ty) || @@ -5761,14 +6065,16 @@ yyreduce: (yyval.InstVal).I = BinaryOperator::create(Opcode, tmpVal1, tmpVal2); if ((yyval.InstVal).I == 0) error("binary operator returned null"); - (yyval.InstVal).S = (yyvsp[-3].TypeVal).S; + (yyval.InstVal).S.copy((yyvsp[-3].TypeVal).S); delete (yyvsp[-3].TypeVal).PAT; ;} break; case 282: -#line 3142 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3445 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { + (yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); + (yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); const Type* Ty = (yyvsp[-3].TypeVal).PAT->get(); if(isa(Ty)) error("VectorTypes currently not supported in setcc instructions"); @@ -5779,14 +6085,16 @@ yyreduce: (yyval.InstVal).I = CmpInst::create(Opcode, pred, tmpVal1, tmpVal2); if ((yyval.InstVal).I == 0) error("binary operator returned null"); - (yyval.InstVal).S = Unsigned; + (yyval.InstVal).S.makeUnsigned(); delete (yyvsp[-3].TypeVal).PAT; ;} break; case 283: -#line 3156 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3461 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { + (yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); + (yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); const Type *Ty = (yyvsp[-3].TypeVal).PAT->get(); if (isa(Ty)) error("VectorTypes currently not supported in icmp instructions"); @@ -5795,14 +6103,16 @@ yyreduce: Value* tmpVal1 = getVal(Ty, (yyvsp[-2].ValIDVal)); Value* tmpVal2 = getVal(Ty, (yyvsp[0].ValIDVal)); (yyval.InstVal).I = new ICmpInst((yyvsp[-4].IPred), tmpVal1, tmpVal2); - (yyval.InstVal).S = Unsigned; + (yyval.InstVal).S.makeUnsigned(); delete (yyvsp[-3].TypeVal).PAT; ;} break; case 284: -#line 3168 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3475 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { + (yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); + (yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); const Type *Ty = (yyvsp[-3].TypeVal).PAT->get(); if (isa(Ty)) error("VectorTypes currently not supported in fcmp instructions"); @@ -5811,13 +6121,13 @@ yyreduce: Value* tmpVal1 = getVal(Ty, (yyvsp[-2].ValIDVal)); Value* tmpVal2 = getVal(Ty, (yyvsp[0].ValIDVal)); (yyval.InstVal).I = new FCmpInst((yyvsp[-4].FPred), tmpVal1, tmpVal2); - (yyval.InstVal).S = Unsigned; + (yyval.InstVal).S.makeUnsigned(); delete (yyvsp[-3].TypeVal).PAT; ;} break; case 285: -#line 3180 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3489 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { warning("Use of obsolete 'not' instruction: Replacing with 'xor"); const Type *Ty = (yyvsp[0].ValueVal).V->getType(); @@ -5827,12 +6137,12 @@ yyreduce: (yyval.InstVal).I = BinaryOperator::create(Instruction::Xor, (yyvsp[0].ValueVal).V, Ones); if ((yyval.InstVal).I == 0) error("Could not create a xor instruction"); - (yyval.InstVal).S = (yyvsp[0].ValueVal).S; + (yyval.InstVal).S.copy((yyvsp[0].ValueVal).S); ;} break; case 286: -#line 3191 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3500 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[0].ValueVal).V->getType()->isInteger() || cast((yyvsp[0].ValueVal).V->getType())->getBitWidth() != 8) @@ -5849,25 +6159,25 @@ yyreduce: else ShiftAmt = (yyvsp[0].ValueVal).V; (yyval.InstVal).I = BinaryOperator::create(getBinaryOp((yyvsp[-3].BinaryOpVal), Ty, (yyvsp[-2].ValueVal).S), (yyvsp[-2].ValueVal).V, ShiftAmt); - (yyval.InstVal).S = (yyvsp[-2].ValueVal).S; + (yyval.InstVal).S.copy((yyvsp[-2].ValueVal).S); ;} break; case 287: -#line 3209 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3518 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type *DstTy = (yyvsp[0].TypeVal).PAT->get(); if (!DstTy->isFirstClassType()) error("cast instruction to a non-primitive type: '" + DstTy->getDescription() + "'"); (yyval.InstVal).I = cast(getCast((yyvsp[-3].CastOpVal), (yyvsp[-2].ValueVal).V, (yyvsp[-2].ValueVal).S, DstTy, (yyvsp[0].TypeVal).S, true)); - (yyval.InstVal).S = (yyvsp[0].TypeVal).S; + (yyval.InstVal).S.copy((yyvsp[0].TypeVal).S); delete (yyvsp[0].TypeVal).PAT; ;} break; case 288: -#line 3218 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3527 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-4].ValueVal).V->getType()->isInteger() || cast((yyvsp[-4].ValueVal).V->getType())->getBitWidth() != 1) @@ -5875,23 +6185,23 @@ yyreduce: if ((yyvsp[-2].ValueVal).V->getType() != (yyvsp[0].ValueVal).V->getType()) error("select value types should match"); (yyval.InstVal).I = new SelectInst((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V); - (yyval.InstVal).S = (yyvsp[-4].ValueVal).S; + (yyval.InstVal).S.copy((yyvsp[-2].ValueVal).S); ;} break; case 289: -#line 3227 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3536 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[0].TypeVal).PAT->get(); NewVarArgs = true; (yyval.InstVal).I = new VAArgInst((yyvsp[-2].ValueVal).V, Ty); - (yyval.InstVal).S = (yyvsp[0].TypeVal).S; + (yyval.InstVal).S.copy((yyvsp[0].TypeVal).S); delete (yyvsp[0].TypeVal).PAT; ;} break; case 290: -#line 3234 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3543 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type* ArgTy = (yyvsp[-2].ValueVal).V->getType(); const Type* DstTy = (yyvsp[0].TypeVal).PAT->get(); @@ -5910,13 +6220,13 @@ yyreduce: CurBB->getInstList().push_back(bar); CurBB->getInstList().push_back(new StoreInst(bar, foo)); (yyval.InstVal).I = new VAArgInst(foo, DstTy); - (yyval.InstVal).S = (yyvsp[0].TypeVal).S; + (yyval.InstVal).S.copy((yyvsp[0].TypeVal).S); delete (yyvsp[0].TypeVal).PAT; ;} break; case 291: -#line 3255 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3564 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type* ArgTy = (yyvsp[-2].ValueVal).V->getType(); const Type* DstTy = (yyvsp[0].TypeVal).PAT->get(); @@ -5938,43 +6248,43 @@ yyreduce: Instruction* tmp = new VAArgInst(foo, DstTy); CurBB->getInstList().push_back(tmp); (yyval.InstVal).I = new LoadInst(foo); - (yyval.InstVal).S = (yyvsp[0].TypeVal).S; + (yyval.InstVal).S.copy((yyvsp[0].TypeVal).S); delete (yyvsp[0].TypeVal).PAT; ;} break; case 292: -#line 3279 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3588 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V)) error("Invalid extractelement operands"); (yyval.InstVal).I = new ExtractElementInst((yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V); - (yyval.InstVal).S = (yyvsp[-2].ValueVal).S; + (yyval.InstVal).S.copy((yyvsp[-2].ValueVal).S.get(0)); ;} break; case 293: -#line 3285 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3594 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V)) error("Invalid insertelement operands"); (yyval.InstVal).I = new InsertElementInst((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V); - (yyval.InstVal).S = (yyvsp[-4].ValueVal).S; + (yyval.InstVal).S.copy((yyvsp[-4].ValueVal).S); ;} break; case 294: -#line 3291 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3600 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V)) error("Invalid shufflevector operands"); (yyval.InstVal).I = new ShuffleVectorInst((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V); - (yyval.InstVal).S = (yyvsp[-4].ValueVal).S; + (yyval.InstVal).S.copy((yyvsp[-4].ValueVal).S); ;} break; case 295: -#line 3297 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3606 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[0].PHIList).P->front().first->getType(); if (!Ty->isFirstClassType()) @@ -5988,26 +6298,29 @@ yyreduce: (yyvsp[0].PHIList).P->pop_front(); } (yyval.InstVal).I = PHI; - (yyval.InstVal).S = (yyvsp[0].PHIList).S; + (yyval.InstVal).S.copy((yyvsp[0].PHIList).S); delete (yyvsp[0].PHIList).P; // Free the list... ;} break; case 296: -#line 3313 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3622 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { - // Handle the short call syntax const PointerType *PFTy; const FunctionType *FTy; + Signedness FTySign; if (!(PFTy = dyn_cast((yyvsp[-4].TypeVal).PAT->get())) || !(FTy = dyn_cast(PFTy->getElementType()))) { // Pull out the types of all of the arguments... std::vector ParamTypes; + FTySign.makeComposite((yyvsp[-4].TypeVal).S); if ((yyvsp[-1].ValueList)) { for (std::vector::iterator I = (yyvsp[-1].ValueList)->begin(), E = (yyvsp[-1].ValueList)->end(); - I != E; ++I) + I != E; ++I) { ParamTypes.push_back((*I).V->getType()); + FTySign.add(I->S); + } } FunctionType::ParamAttrsList ParamAttrs; @@ -6024,7 +6337,12 @@ yyreduce: FTy = FunctionType::get(RetTy, ParamTypes, isVarArg, ParamAttrs); PFTy = PointerType::get(FTy); + (yyval.InstVal).S.copy((yyvsp[-4].TypeVal).S); + } else { + FTySign = (yyvsp[-4].TypeVal).S; + (yyval.InstVal).S.copy((yyvsp[-4].TypeVal).S.get(0)); // 0th element of FuncTy signedness is result sign } + (yyvsp[-3].ValIDVal).S.makeComposite(FTySign); // First upgrade any intrinsic calls. std::vector Args; @@ -6036,7 +6354,6 @@ yyreduce: // If we got an upgraded intrinsic if (Inst) { (yyval.InstVal).I = Inst; - (yyval.InstVal).S = Signless; } else { // Get the function we're calling Value *V = getVal(PFTy, (yyvsp[-3].ValIDVal)); @@ -6068,7 +6385,6 @@ yyreduce: CI->setTailCall((yyvsp[-6].BoolVal)); CI->setCallingConv(upgradeCallingConv((yyvsp[-5].UIntVal))); (yyval.InstVal).I = CI; - (yyval.InstVal).S = (yyvsp[-4].TypeVal).S; } delete (yyvsp[-4].TypeVal).PAT; delete (yyvsp[-1].ValueList); @@ -6076,88 +6392,90 @@ yyreduce: break; case 297: -#line 3391 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3706 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.InstVal) = (yyvsp[0].InstVal); ;} break; case 298: -#line 3399 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3714 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValueList) = (yyvsp[0].ValueList); ;} break; case 299: -#line 3400 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3715 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValueList) = new std::vector(); ;} break; case 300: -#line 3404 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3719 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = true; ;} break; case 301: -#line 3405 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3720 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = false; ;} break; case 302: -#line 3409 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3724 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-1].TypeVal).PAT->get(); - (yyval.InstVal).S = (yyvsp[-1].TypeVal).S; + (yyval.InstVal).S.makeComposite((yyvsp[-1].TypeVal).S); (yyval.InstVal).I = new MallocInst(Ty, 0, (yyvsp[0].UIntVal)); delete (yyvsp[-1].TypeVal).PAT; ;} break; case 303: -#line 3415 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3730 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-4].TypeVal).PAT->get(); - (yyval.InstVal).S = (yyvsp[-4].TypeVal).S; + (yyvsp[-1].ValIDVal).S.makeUnsigned(); + (yyval.InstVal).S.makeComposite((yyvsp[-4].TypeVal).S); (yyval.InstVal).I = new MallocInst(Ty, getVal((yyvsp[-2].PrimType).T, (yyvsp[-1].ValIDVal)), (yyvsp[0].UIntVal)); delete (yyvsp[-4].TypeVal).PAT; ;} break; case 304: -#line 3421 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3737 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-1].TypeVal).PAT->get(); - (yyval.InstVal).S = (yyvsp[-1].TypeVal).S; + (yyval.InstVal).S.makeComposite((yyvsp[-1].TypeVal).S); (yyval.InstVal).I = new AllocaInst(Ty, 0, (yyvsp[0].UIntVal)); delete (yyvsp[-1].TypeVal).PAT; ;} break; case 305: -#line 3427 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3743 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-4].TypeVal).PAT->get(); - (yyval.InstVal).S = (yyvsp[-4].TypeVal).S; + (yyvsp[-1].ValIDVal).S.makeUnsigned(); + (yyval.InstVal).S.makeComposite((yyvsp[-2].PrimType).S); (yyval.InstVal).I = new AllocaInst(Ty, getVal((yyvsp[-2].PrimType).T, (yyvsp[-1].ValIDVal)), (yyvsp[0].UIntVal)); delete (yyvsp[-4].TypeVal).PAT; ;} break; case 306: -#line 3433 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3750 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type *PTy = (yyvsp[0].ValueVal).V->getType(); if (!isa(PTy)) error("Trying to free nonpointer type '" + PTy->getDescription() + "'"); (yyval.InstVal).I = new FreeInst((yyvsp[0].ValueVal).V); - (yyval.InstVal).S = Signless; + (yyval.InstVal).S.makeSignless(); ;} break; case 307: -#line 3440 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3757 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { const Type* Ty = (yyvsp[-1].TypeVal).PAT->get(); - (yyval.InstVal).S = (yyvsp[-1].TypeVal).S; + (yyvsp[0].ValIDVal).S.copy((yyvsp[-1].TypeVal).S); if (!isa(Ty)) error("Can't load from nonpointer type: " + Ty->getDescription()); if (!cast(Ty)->getElementType()->isFirstClassType()) @@ -6165,13 +6483,15 @@ yyreduce: Ty->getDescription()); Value* tmpVal = getVal(Ty, (yyvsp[0].ValIDVal)); (yyval.InstVal).I = new LoadInst(tmpVal, "", (yyvsp[-3].BoolVal)); + (yyval.InstVal).S.copy((yyvsp[-1].TypeVal).S.get(0)); delete (yyvsp[-1].TypeVal).PAT; ;} break; case 308: -#line 3452 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3770 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { + (yyvsp[0].ValIDVal).S.copy((yyvsp[-1].TypeVal).S); const PointerType *PTy = dyn_cast((yyvsp[-1].TypeVal).PAT->get()); if (!PTy) error("Can't store to a nonpointer type: " + @@ -6193,14 +6513,15 @@ yyreduce: } } (yyval.InstVal).I = new StoreInst(StoreVal, tmpVal, (yyvsp[-5].BoolVal)); - (yyval.InstVal).S = Signless; + (yyval.InstVal).S.makeSignless(); delete (yyvsp[-1].TypeVal).PAT; ;} break; case 309: -#line 3477 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3796 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" { + (yyvsp[-1].ValIDVal).S.copy((yyvsp[-2].TypeVal).S); const Type* Ty = (yyvsp[-2].TypeVal).PAT->get(); if (!isa(Ty)) error("getelementptr insn requires pointer operand"); @@ -6210,7 +6531,8 @@ yyreduce: Value* tmpVal = getVal(Ty, (yyvsp[-1].ValIDVal)); (yyval.InstVal).I = new GetElementPtrInst(tmpVal, &VIndices[0], VIndices.size()); - (yyval.InstVal).S = Signless; + ValueInfo VI; VI.V = tmpVal; VI.S.copy((yyvsp[-2].TypeVal).S); + (yyval.InstVal).S.copy(getElementSign(VI, VIndices)); delete (yyvsp[-2].TypeVal).PAT; delete (yyvsp[0].ValueList); ;} @@ -6221,7 +6543,7 @@ yyreduce: } /* Line 1126 of yacc.c. */ -#line 6225 "UpgradeParser.tab.c" +#line 6547 "UpgradeParser.tab.c" yyvsp -= yylen; yyssp -= yylen; @@ -6489,7 +6811,7 @@ yyreturn: } -#line 3493 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 3814 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" int yyerror(const char *ErrorMsg) { diff --git a/tools/llvm-upgrade/UpgradeParser.h.cvs b/tools/llvm-upgrade/UpgradeParser.h.cvs index f182a679e84..b166e627580 100644 --- a/tools/llvm-upgrade/UpgradeParser.h.cvs +++ b/tools/llvm-upgrade/UpgradeParser.h.cvs @@ -335,13 +335,13 @@ #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 1454 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" +#line 1693 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeParser.y" typedef union YYSTYPE { llvm::Module *ModuleVal; llvm::Function *FunctionVal; std::pair *ArgVal; llvm::BasicBlock *BasicBlockVal; - llvm::TerminatorInst *TermInstVal; + llvm::TermInstInfo TermInstVal; llvm::InstrInfo InstVal; llvm::ConstInfo ConstVal; llvm::ValueInfo ValueVal; diff --git a/tools/llvm-upgrade/UpgradeParser.y.cvs b/tools/llvm-upgrade/UpgradeParser.y.cvs index 75d85e33691..9dabc23d751 100644 --- a/tools/llvm-upgrade/UpgradeParser.y.cvs +++ b/tools/llvm-upgrade/UpgradeParser.y.cvs @@ -67,7 +67,7 @@ static GlobalVariable *CurGV; // typedef std::vector ValueList; // Numbered defs -typedef std::pair RenameMapKey; +typedef std::pair RenameMapKey; typedef std::map RenameMapType; static void @@ -78,7 +78,10 @@ static struct PerModuleInfo { Module *CurrentModule; std::map Values; // Module level numbered definitions std::map LateResolveValues; - std::vector Types; + std::vector Types; + std::vector TypeSigns; + std::map NamedTypeSigns; + std::map NamedValueSigns; std::map LateResolveTypes; static Module::Endianness Endian; static Module::PointerSize PointerSize; @@ -135,6 +138,9 @@ static struct PerModuleInfo { Values.clear(); // Clear out function local definitions Types.clear(); + TypeSigns.clear(); + NamedTypeSigns.clear(); + NamedValueSigns.clear(); CurrentModule = 0; } @@ -208,6 +214,24 @@ static struct PerFunctionInfo { static bool inFunctionScope() { return CurFun.CurrentFunction != 0; } +/// This function is just a utility to make a Key value for the rename map. +/// The Key is a combination of the name, type, Signedness of the original +/// value (global/function). This just constructs the key and ensures that +/// named Signedness values are resolved to the actual Signedness. +/// @brief Make a key for the RenameMaps +static RenameMapKey makeRenameMapKey(const std::string &Name, const Type* Ty, + const Signedness &Sign) { + TypeInfo TI; + TI.T = Ty; + if (Sign.isNamed()) + // Don't allow Named Signedness nodes because they won't match. The actual + // Signedness must be looked up in the NamedTypeSigns map. + TI.S.copy(CurModule.NamedTypeSigns[Sign.getName()]); + else + TI.S.copy(Sign); + return std::make_pair(Name, TI); +} + //===----------------------------------------------------------------------===// // Code to handle definitions of all the types @@ -233,7 +257,6 @@ static const Type *getType(const ValID &D, bool DoNotImprovise = false) { break; case ValID::NameVal: // Is it a named definition? if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) { - D.destroy(); // Free old strdup'd memory... return N; } break; @@ -248,7 +271,6 @@ static const Type *getType(const ValID &D, bool DoNotImprovise = false) { // if (DoNotImprovise) return 0; // Do we just want a null to be returned? - if (inFunctionScope()) { if (D.Type == ValID::NameVal) { error("Reference to an undefined type: '" + D.getName() + "'"); @@ -266,13 +288,94 @@ static const Type *getType(const ValID &D, bool DoNotImprovise = false) { Type *Typ = OpaqueType::get(); CurModule.LateResolveTypes.insert(std::make_pair(D, Typ)); return Typ; - } +} + +/// This is like the getType method except that instead of looking up the type +/// for a given ID, it looks up that type's sign. +/// @brief Get the signedness of a referenced type +static Signedness getTypeSign(const ValID &D) { + switch (D.Type) { + case ValID::NumberVal: // Is it a numbered definition? + // Module constants occupy the lowest numbered slots... + if ((unsigned)D.Num < CurModule.TypeSigns.size()) { + return CurModule.TypeSigns[(unsigned)D.Num]; + } + break; + case ValID::NameVal: { // Is it a named definition? + std::map::const_iterator I = + CurModule.NamedTypeSigns.find(D.Name); + if (I != CurModule.NamedTypeSigns.end()) + return I->second; + // Perhaps its a named forward .. just cache the name + Signedness S; + S.makeNamed(D.Name); + return S; + } + default: + break; + } + // If we don't find it, its signless + Signedness S; + S.makeSignless(); + return S; +} + +/// This function is analagous to getElementType in LLVM. It provides the same +/// function except that it looks up the Signedness instead of the type. This is +/// used when processing GEP instructions that need to extract the type of an +/// indexed struct/array/ptr member. +/// @brief Look up an element's sign. +static Signedness getElementSign(const ValueInfo& VI, + const std::vector &Indices) { + const Type *Ptr = VI.V->getType(); + assert(isa(Ptr) && "Need pointer type"); + + unsigned CurIdx = 0; + Signedness S(VI.S); + while (const CompositeType *CT = dyn_cast(Ptr)) { + if (CurIdx == Indices.size()) + break; + + Value *Index = Indices[CurIdx++]; + assert(!isa(CT) || CurIdx == 1 && "Invalid type"); + Ptr = CT->getTypeAtIndex(Index); + if (const Type* Ty = Ptr->getForwardedType()) + Ptr = Ty; + assert(S.isComposite() && "Bad Signedness type"); + if (isa(CT)) { + S = S.get(cast(Index)->getZExtValue()); + } else { + S = S.get(0UL); + } + if (S.isNamed()) + S = CurModule.NamedTypeSigns[S.getName()]; + } + Signedness Result; + Result.makeComposite(S); + return Result; +} + +/// This function just translates a ConstantInfo into a ValueInfo and calls +/// getElementSign(ValueInfo,...). Its just a convenience. +/// @brief ConstantInfo version of getElementSign. +static Signedness getElementSign(const ConstInfo& CI, + const std::vector &Indices) { + ValueInfo VI; + VI.V = CI.C; + VI.S.copy(CI.S); + std::vector Idx; + for (unsigned i = 0; i < Indices.size(); ++i) + Idx.push_back(Indices[i]); + Signedness result = getElementSign(VI, Idx); + VI.destroy(); + return result; +} /// This function determines if two function types differ only in their use of /// the sret parameter attribute in the first argument. If they are identical /// in all other respects, it returns true. Otherwise, it returns false. -bool FuncTysDifferOnlyBySRet(const FunctionType *F1, - const FunctionType *F2) { +static bool FuncTysDifferOnlyBySRet(const FunctionType *F1, + const FunctionType *F2) { if (F1->getReturnType() != F2->getReturnType() || F1->getNumParams() != F2->getNumParams() || F1->getParamAttrs(0) != F2->getParamAttrs(0)) @@ -287,10 +390,27 @@ bool FuncTysDifferOnlyBySRet(const FunctionType *F1, return true; } +/// This function determines if the type of V and Ty differ only by the SRet +/// parameter attribute. This is a more generalized case of +/// FuncTysDIfferOnlyBySRet since it doesn't require FunctionType arguments. +static bool TypesDifferOnlyBySRet(Value *V, const Type* Ty) { + if (V->getType() == Ty) + return true; + const PointerType *PF1 = dyn_cast(Ty); + const PointerType *PF2 = dyn_cast(V->getType()); + if (PF1 && PF2) { + const FunctionType* FT1 = dyn_cast(PF1->getElementType()); + const FunctionType* FT2 = dyn_cast(PF2->getElementType()); + if (FT1 && FT2) + return FuncTysDifferOnlyBySRet(FT1, FT2); + } + return false; +} + // The upgrade of csretcc to sret param attribute may have caused a function // to not be found because the param attribute changed the type of the called // function. This helper function, used in getExistingValue, detects that -// situation and returns V if it occurs and 0 otherwise. +// situation and bitcasts the function to the correct type. static Value* handleSRetFuncTypeMerge(Value *V, const Type* Ty) { // Handle degenerate cases if (!V) @@ -298,23 +418,21 @@ static Value* handleSRetFuncTypeMerge(Value *V, const Type* Ty) { if (V->getType() == Ty) return V; - Value* Result = 0; const PointerType *PF1 = dyn_cast(Ty); const PointerType *PF2 = dyn_cast(V->getType()); if (PF1 && PF2) { - const FunctionType *FT1 = - dyn_cast(PF1->getElementType()); - const FunctionType *FT2 = - dyn_cast(PF2->getElementType()); + const FunctionType *FT1 = dyn_cast(PF1->getElementType()); + const FunctionType *FT2 = dyn_cast(PF2->getElementType()); if (FT1 && FT2 && FuncTysDifferOnlyBySRet(FT1, FT2)) if (FT2->paramHasAttr(1, FunctionType::StructRetAttribute)) - Result = V; + return V; else if (Constant *C = dyn_cast(V)) - Result = ConstantExpr::getBitCast(C, PF1); + return ConstantExpr::getBitCast(C, PF1); else - Result = new BitCastInst(V, PF1, "upgrd.cast", CurBB); + return new BitCastInst(V, PF1, "upgrd.cast", CurBB); + } - return Result; + return 0; } // getExistingValue - Look up the value specified by the provided type and @@ -350,9 +468,8 @@ static Value *getExistingValue(const Type *Ty, const ValID &D) { case ValID::NameVal: { // Is it a named definition? // Get the name out of the ID - std::string Name(D.Name); - Value* V = 0; - RenameMapKey Key = std::make_pair(Name, Ty); + RenameMapKey Key = makeRenameMapKey(D.Name, Ty, D.S); + Value *V = 0; if (inFunctionScope()) { // See if the name was renamed RenameMapType::const_iterator I = CurFun.RenameMap.find(Key); @@ -360,10 +477,12 @@ static Value *getExistingValue(const Type *Ty, const ValID &D) { if (I != CurFun.RenameMap.end()) LookupName = I->second; else - LookupName = Name; + LookupName = D.Name; ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable(); V = SymTab.lookup(LookupName); - V = handleSRetFuncTypeMerge(V, Ty); + if (V && V->getType() != Ty) + V = handleSRetFuncTypeMerge(V, Ty); + assert((!V || TypesDifferOnlyBySRet(V, Ty)) && "Found wrong type"); } if (!V) { RenameMapType::const_iterator I = CurModule.RenameMap.find(Key); @@ -371,9 +490,11 @@ static Value *getExistingValue(const Type *Ty, const ValID &D) { if (I != CurModule.RenameMap.end()) LookupName = I->second; else - LookupName = Name; + LookupName = D.Name; V = CurModule.CurrentModule->getValueSymbolTable().lookup(LookupName); - V = handleSRetFuncTypeMerge(V, Ty); + if (V && V->getType() != Ty) + V = handleSRetFuncTypeMerge(V, Ty); + assert((!V || TypesDifferOnlyBySRet(V, Ty)) && "Found wrong type"); } if (!V) return 0; @@ -506,14 +627,13 @@ static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) { break; case ValID::NameVal: // Is it a named definition? Name = ID.Name; - if (Value *N = CurFun.CurrentFunction-> - getValueSymbolTable().lookup(Name)) { + if (Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name)) { if (N->getType() != Type::LabelTy) { // Register names didn't use to conflict with basic block names // because of type planes. Now they all have to be unique. So, we just // rename the register and treat this name as if no basic block // had been found. - RenameMapKey Key = std::make_pair(N->getName(),N->getType()); + RenameMapKey Key = makeRenameMapKey(ID.Name, N->getType(), ID.S); N->setName(makeNameUnique(N->getName())); CurModule.RenameMap[Key] = N->getName(); BB = 0; @@ -624,19 +744,33 @@ ResolveDefinitions(std::map &LateResolvers, LateResolvers.clear(); } -// ResolveTypeTo - A brand new type was just declared. This means that (if -// name is not null) things referencing Name can be resolved. Otherwise, things -// refering to the number can be resolved. Do this now. -// -static void ResolveTypeTo(char *Name, const Type *ToTy) { +/// This function is used for type resolution and upref handling. When a type +/// becomes concrete, this function is called to adjust the signedness for the +/// concrete type. +static void ResolveTypeSign(const Type* oldTy, const Signedness &Sign) { + std::string TyName = CurModule.CurrentModule->getTypeName(oldTy); + if (!TyName.empty()) + CurModule.NamedTypeSigns[TyName] = Sign; +} + +/// ResolveTypeTo - A brand new type was just declared. This means that (if +/// name is not null) things referencing Name can be resolved. Otherwise, +/// things refering to the number can be resolved. Do this now. +static void ResolveTypeTo(char *Name, const Type *ToTy, const Signedness& Sign){ ValID D; - if (Name) D = ValID::create(Name); - else D = ValID::create((int)CurModule.Types.size()); + if (Name) + D = ValID::create(Name); + else + D = ValID::create((int)CurModule.Types.size()); + D.S.copy(Sign); + + CurModule.NamedTypeSigns[Name] = Sign; std::map::iterator I = CurModule.LateResolveTypes.find(D); if (I != CurModule.LateResolveTypes.end()) { - ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy); + const Type *OldTy = I->second.get(); + ((DerivedType*)OldTy)->refineAbstractTypeTo(ToTy); CurModule.LateResolveTypes.erase(I); } } @@ -696,12 +830,12 @@ static inline bool TypeHasInteger(const Type *Ty) { // null potentially, in which case this is a noop. The string passed in is // assumed to be a malloc'd string buffer, and is free'd by this function. // -static void setValueName(Value *V, char *NameStr) { +static void setValueName(const ValueInfo &V, char *NameStr) { if (NameStr) { std::string Name(NameStr); // Copy string free(NameStr); // Free old string - if (V->getType() == Type::VoidTy) { + if (V.V->getType() == Type::VoidTy) { error("Can't assign name '" + Name + "' to value with void type"); return; } @@ -714,13 +848,13 @@ static void setValueName(Value *V, char *NameStr) { if (Existing) { // An existing value of the same name was found. This might have happened // because of the integer type planes collapsing in LLVM 2.0. - if (Existing->getType() == V->getType() && + if (Existing->getType() == V.V->getType() && !TypeHasInteger(Existing->getType())) { // If the type does not contain any integers in them then this can't be // a type plane collapsing issue. It truly is a redefinition and we // should error out as the assembly is invalid. error("Redefinition of value named '" + Name + "' of type '" + - V->getType()->getDescription() + "'"); + V.V->getType()->getDescription() + "'"); return; } // In LLVM 2.0 we don't allow names to be re-used for any values in a @@ -734,13 +868,13 @@ static void setValueName(Value *V, char *NameStr) { // We're changing the name but it will probably be used by other // instructions as operands later on. Consequently we have to retain // a mapping of the renaming that we're doing. - RenameMapKey Key = std::make_pair(Name,V->getType()); + RenameMapKey Key = makeRenameMapKey(Name, V.V->getType(), V.S); CurFun.RenameMap[Key] = NewName; Name = NewName; } // Set the name. - V->setName(Name); + V.V->setName(Name); } } @@ -749,7 +883,8 @@ static void setValueName(Value *V, char *NameStr) { static GlobalVariable * ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage, bool isConstantGlobal, const Type *Ty, - Constant *Initializer) { + Constant *Initializer, + const Signedness &Sign) { if (isa(Ty)) error("Cannot declare global vars of function type"); @@ -769,6 +904,7 @@ ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage, } else { ID = ValID::create((int)CurModule.Values[PTy].size()); } + ID.S.makeComposite(Sign); if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) { // Move the global to the end of the list, from whereever it was @@ -794,13 +930,7 @@ ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage, // There is alread a global of the same name which means there is a // conflict. Let's see what we can do about it. std::string NewName(makeNameUnique(Name)); - if (Linkage == GlobalValue::InternalLinkage) { - // The linkage type is internal so just warn about the rename without - // invoking "scarey language" about linkage failures. GVars with - // InternalLinkage can be renamed at will. - warning("Global variable '" + Name + "' was renamed to '"+ - NewName + "'"); - } else { + if (Linkage != GlobalValue::InternalLinkage) { // The linkage of this gval is external so we can't reliably rename // it because it could potentially create a linking problem. // However, we can't leave the name conflict in the output either or @@ -811,7 +941,7 @@ ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage, } // Put the renaming in the global rename map - RenameMapKey Key = std::make_pair(Name,PointerType::get(Ty)); + RenameMapKey Key = makeRenameMapKey(Name, PointerType::get(Ty), ID.S); CurModule.RenameMap[Key] = NewName; // Rename it @@ -824,6 +954,8 @@ ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage, new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name, CurModule.CurrentModule); InsertValue(GV, CurModule.Values); + // Remember the sign of this global. + CurModule.NamedValueSigns[Name] = ID.S; return GV; } @@ -834,21 +966,26 @@ ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage, // This function returns true if the type has already been defined, but is // allowed to be redefined in the specified context. If the name is a new name // for the type plane, it is inserted and false is returned. -static bool setTypeName(const Type *T, char *NameStr) { +static bool setTypeName(const PATypeInfo& TI, char *NameStr) { assert(!inFunctionScope() && "Can't give types function-local names"); if (NameStr == 0) return false; std::string Name(NameStr); // Copy string free(NameStr); // Free old string + const Type* Ty = TI.PAT->get(); + // We don't allow assigning names to void type - if (T == Type::VoidTy) { + if (Ty == Type::VoidTy) { error("Can't assign name '" + Name + "' to the void type"); return false; } // Set the type name, checking for conflicts as we do so. - bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T); + bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, Ty); + + // Save the sign information for later use + CurModule.NamedTypeSigns[Name] = TI.S; if (AlreadyExists) { // Inserting a name that is already defined??? const Type *Existing = CurModule.CurrentModule->getTypeByName(Name); @@ -858,7 +995,7 @@ static bool setTypeName(const Type *T, char *NameStr) { // opaque type. In this case, Existing will be an opaque type. if (const OpaqueType *OpTy = dyn_cast(Existing)) { // We ARE replacing an opaque type! - const_cast(OpTy)->refineAbstractTypeTo(T); + const_cast(OpTy)->refineAbstractTypeTo(Ty); return true; } @@ -866,11 +1003,11 @@ static bool setTypeName(const Type *T, char *NameStr) { // the redefinition is identical to the original. This will be so if // Existing and T point to the same Type object. In this one case we // allow the equivalent redefinition. - if (Existing == T) return true; // Yes, it's equal. + if (Existing == Ty) return true; // Yes, it's equal. // Any other kind of (non-equivalent) redefinition is an error. error("Redefinition of type named '" + Name + "' in the '" + - T->getDescription() + "' type plane"); + Ty->getDescription() + "' type plane"); } return false; @@ -902,7 +1039,7 @@ namespace { OpaqueType *UpRefTy; UpRefRecord(unsigned NL, OpaqueType *URTy) - : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {} + : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) { } }; } @@ -916,7 +1053,7 @@ static std::vector UpRefs; /// count reaches zero, the upreferenced type is the type that is passed in: /// thus we can complete the cycle. /// -static PATypeHolder HandleUpRefs(const Type *ty) { +static PATypeHolder HandleUpRefs(const Type *ty, const Signedness& Sign) { // If Ty isn't abstract, or if there are no up-references in it, then there is // nothing to resolve here. if (!ty->isAbstract() || UpRefs.empty()) return ty; @@ -932,10 +1069,11 @@ static PATypeHolder HandleUpRefs(const Type *ty) { // this variable. OpaqueType *TypeToResolve = 0; - for (unsigned i = 0; i != UpRefs.size(); ++i) { + unsigned i = 0; + for (; i != UpRefs.size(); ++i) { UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", " - << UpRefs[i].second->getDescription() << ") = " - << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n"); + << UpRefs[i].UpRefTy->getDescription() << ") = " + << (TypeContains(Ty, UpRefs[i].UpRefTy) ? "true" : "false") << "\n"); if (TypeContains(Ty, UpRefs[i].LastContainedTy)) { // Decrement level of upreference unsigned Level = --UpRefs[i].NestingLevel; @@ -946,8 +1084,9 @@ static PATypeHolder HandleUpRefs(const Type *ty) { TypeToResolve = UpRefs[i].UpRefTy; } else { UR_OUT(" * Resolving upreference for " - << UpRefs[i].second->getDescription() << "\n"; - std::string OldName = UpRefs[i].UpRefTy->getDescription()); + << UpRefs[i].UpRefTy->getDescription() << "\n"; + std::string OldName = UpRefs[i].UpRefTy->getDescription()); + ResolveTypeSign(UpRefs[i].UpRefTy, Sign); UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve); UR_OUT(" * Type '" << OldName << "' refined upreference to: " << (const void*)Ty << ", " << Ty->getDescription() << "\n"); @@ -960,14 +1099,113 @@ static PATypeHolder HandleUpRefs(const Type *ty) { if (TypeToResolve) { UR_OUT(" * Resolving upreference for " - << UpRefs[i].second->getDescription() << "\n"; + << UpRefs[i].UpRefTy->getDescription() << "\n"; std::string OldName = TypeToResolve->getDescription()); + ResolveTypeSign(TypeToResolve, Sign); TypeToResolve->refineAbstractTypeTo(Ty); } return Ty; } +bool Signedness::operator<(const Signedness &that) const { + if (isNamed()) { + if (that.isNamed()) + return *(this->name) < *(that.name); + else + return CurModule.NamedTypeSigns[*name] < that; + } else if (that.isNamed()) { + return *this < CurModule.NamedTypeSigns[*that.name]; + } + + if (isComposite() && that.isComposite()) { + if (sv->size() == that.sv->size()) { + SignVector::const_iterator thisI = sv->begin(), thisE = sv->end(); + SignVector::const_iterator thatI = that.sv->begin(), + thatE = that.sv->end(); + for (; thisI != thisE; ++thisI, ++thatI) { + if (*thisI < *thatI) + return true; + else if (!(*thisI == *thatI)) + return false; + } + return false; + } + return sv->size() < that.sv->size(); + } + return kind < that.kind; +} + +bool Signedness::operator==(const Signedness &that) const { + if (isNamed()) + if (that.isNamed()) + return *(this->name) == *(that.name); + else + return CurModule.NamedTypeSigns[*(this->name)] == that; + else if (that.isNamed()) + return *this == CurModule.NamedTypeSigns[*(that.name)]; + if (isComposite() && that.isComposite()) { + if (sv->size() == that.sv->size()) { + SignVector::const_iterator thisI = sv->begin(), thisE = sv->end(); + SignVector::const_iterator thatI = that.sv->begin(), + thatE = that.sv->end(); + for (; thisI != thisE; ++thisI, ++thatI) { + if (!(*thisI == *thatI)) + return false; + } + return true; + } + return false; + } + return kind == that.kind; +} + +void Signedness::copy(const Signedness &that) { + if (that.isNamed()) { + kind = Named; + name = new std::string(*that.name); + } else if (that.isComposite()) { + kind = Composite; + sv = new SignVector(); + *sv = *that.sv; + } else { + kind = that.kind; + sv = 0; + } +} + +void Signedness::destroy() { + if (isNamed()) { + delete name; + } else if (isComposite()) { + delete sv; + } +} + +void Signedness::dump() const { + if (isComposite()) { + if (sv->size() == 1) { + (*sv)[0].dump(); + std::cerr << "*"; + } else { + std::cerr << "{ " ; + for (unsigned i = 0; i < sv->size(); ++i) { + if (i != 0) + std::cerr << ", "; + (*sv)[i].dump(); + } + std::cerr << "} " ; + } + } else if (isNamed()) { + std::cerr << *name; + } else if (isSigned()) { + std::cerr << "S"; + } else if (isUnsigned()) { + std::cerr << "U"; + } else + std::cerr << "."; +} + static inline Instruction::TermOps getTermOp(TermOps op) { switch (op) { @@ -982,7 +1220,7 @@ getTermOp(TermOps op) { } static inline Instruction::BinaryOps -getBinaryOp(BinaryOps op, const Type *Ty, Signedness Sign) { +getBinaryOp(BinaryOps op, const Type *Ty, const Signedness& Sign) { switch (op) { default : assert(0 && "Invalid OldBinaryOps"); case SetEQ : @@ -1003,7 +1241,7 @@ getBinaryOp(BinaryOps op, const Type *Ty, Signedness Sign) { isFP = PTy->getElementType()->isFloatingPoint(); if (isFP) return Instruction::FDiv; - else if (Sign == Signed) + else if (Sign.isSigned()) return Instruction::SDiv; return Instruction::UDiv; } @@ -1020,7 +1258,7 @@ getBinaryOp(BinaryOps op, const Type *Ty, Signedness Sign) { // Select correct opcode if (isFP) return Instruction::FRem; - else if (Sign == Signed) + else if (Sign.isSigned()) return Instruction::SRem; return Instruction::URem; } @@ -1031,7 +1269,7 @@ getBinaryOp(BinaryOps op, const Type *Ty, Signedness Sign) { case AShrOp : return Instruction::AShr; case ShlOp : return Instruction::Shl; case ShrOp : - if (Sign == Signed) + if (Sign.isSigned()) return Instruction::AShr; return Instruction::LShr; case AndOp : return Instruction::And; @@ -1042,8 +1280,8 @@ getBinaryOp(BinaryOps op, const Type *Ty, Signedness Sign) { static inline Instruction::OtherOps getCompareOp(BinaryOps op, unsigned short &predicate, const Type* &Ty, - Signedness Sign) { - bool isSigned = Sign == Signed; + const Signedness &Sign) { + bool isSigned = Sign.isSigned(); bool isFP = Ty->isFloatingPoint(); switch (op) { default : assert(0 && "Invalid OldSetCC"); @@ -1123,7 +1361,7 @@ static inline Instruction::MemoryOps getMemoryOp(MemoryOps op) { } static inline Instruction::OtherOps -getOtherOp(OtherOps op, Signedness Sign) { +getOtherOp(OtherOps op, const Signedness &Sign) { switch (op) { default : assert(0 && "Invalid OldOtherOps"); case PHIOp : return Instruction::PHI; @@ -1141,8 +1379,8 @@ getOtherOp(OtherOps op, Signedness Sign) { } static inline Value* -getCast(CastOps op, Value *Src, Signedness SrcSign, const Type *DstTy, - Signedness DstSign, bool ForceInstruction = false) { +getCast(CastOps op, Value *Src, const Signedness &SrcSign, const Type *DstTy, + const Signedness &DstSign, bool ForceInstruction = false) { Instruction::CastOps Opcode; const Type* SrcTy = Src->getType(); if (op == CastOp) { @@ -1179,7 +1417,8 @@ getCast(CastOps op, Value *Src, Signedness SrcSign, const Type *DstTy, } // Determine the opcode to use by calling CastInst::getCastOpcode Opcode = - CastInst::getCastOpcode(Src, SrcSign == Signed, DstTy, DstSign == Signed); + CastInst::getCastOpcode(Src, SrcSign.isSigned(), DstTy, + DstSign.isSigned()); } else switch (op) { default: assert(0 && "Invalid cast token"); @@ -1271,7 +1510,7 @@ const Type* upgradeGEPIndices(const Type* PTy, // all indices for SequentialType elements. We must retain the same // semantic (zext) for unsigned types. if (const IntegerType *Ity = dyn_cast(Index->getType())) - if (Ity->getBitWidth() < 64 && (*Indices)[i].S == Unsigned) { + if (Ity->getBitWidth() < 64 && (*Indices)[i].S.isUnsigned()) { if (CIndices) Index = ConstantExpr::getCast(Instruction::ZExt, cast(Index), Type::Int64Ty); @@ -1456,7 +1695,7 @@ using namespace llvm; llvm::Function *FunctionVal; std::pair *ArgVal; llvm::BasicBlock *BasicBlockVal; - llvm::TerminatorInst *TermInstVal; + llvm::TermInstInfo TermInstVal; llvm::InstrInfo InstVal; llvm::ConstInfo ConstVal; llvm::ValueInfo ValueVal; @@ -1769,7 +2008,7 @@ TypesV : Types | VOID { $$.PAT = new PATypeHolder($1.T); - $$.S = Signless; + $$.S.makeSignless(); } ; @@ -1777,7 +2016,7 @@ UpRTypesV : UpRTypes | VOID { $$.PAT = new PATypeHolder($1.T); - $$.S = Signless; + $$.S.makeSignless(); } ; @@ -1798,16 +2037,16 @@ PrimType UpRTypes : PrimType { $$.PAT = new PATypeHolder($1.T); - $$.S = $1.S; + $$.S.copy($1.S); } | OPAQUE { $$.PAT = new PATypeHolder(OpaqueType::get()); - $$.S = Signless; + $$.S.makeSignless(); } | SymbolicValueRef { // Named types are also simple types... + $$.S.copy(getTypeSign($1)); const Type* tmp = getType($1); $$.PAT = new PATypeHolder(tmp); - $$.S = Signless; // FIXME: what if its signed? } | '\\' EUINT64VAL { // Type UpReference if ($2 > (uint64_t)~0U) @@ -1815,14 +2054,16 @@ UpRTypes OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder UpRefs.push_back(UpRefRecord((unsigned)$2, OT)); // Add to vector... $$.PAT = new PATypeHolder(OT); - $$.S = Signless; + $$.S.makeSignless(); UR_OUT("New Upreference!\n"); } | UpRTypesV '(' ArgTypeListI ')' { // Function derived type? + $$.S.makeComposite($1.S); std::vector Params; for (std::list::iterator I = $3->begin(), E = $3->end(); I != E; ++I) { Params.push_back(I->PAT->get()); + $$.S.add(I->S); } FunctionType::ParamAttrsList ParamAttrs; bool isVarArg = Params.size() && Params.back() == Type::VoidTy; @@ -1830,63 +2071,67 @@ UpRTypes $$.PAT = new PATypeHolder( HandleUpRefs(FunctionType::get($1.PAT->get(), Params, isVarArg, - ParamAttrs))); - $$.S = $1.S; - delete $1.PAT; // Delete the return type handle + ParamAttrs), $$.S)); + delete $1.PAT; // Delete the return type handle delete $3; // Delete the argument list } | '[' EUINT64VAL 'x' UpRTypes ']' { // Sized array type? + $$.S.makeComposite($4.S); $$.PAT = new PATypeHolder(HandleUpRefs(ArrayType::get($4.PAT->get(), - (unsigned)$2))); - $$.S = $4.S; + (unsigned)$2), $$.S)); delete $4.PAT; } | '<' EUINT64VAL 'x' UpRTypes '>' { // Vector type? - const llvm::Type* ElemTy = $4.PAT->get(); - if ((unsigned)$2 != $2) - error("Unsigned result not equal to signed result"); - if (!(ElemTy->isInteger() || ElemTy->isFloatingPoint())) - error("Elements of a VectorType must be integer or floating point"); - if (!isPowerOf2_32($2)) - error("VectorType length should be a power of 2"); - $$.PAT = new PATypeHolder(HandleUpRefs(VectorType::get(ElemTy, - (unsigned)$2))); - $$.S = $4.S; - delete $4.PAT; + const llvm::Type* ElemTy = $4.PAT->get(); + if ((unsigned)$2 != $2) + error("Unsigned result not equal to signed result"); + if (!(ElemTy->isInteger() || ElemTy->isFloatingPoint())) + error("Elements of a VectorType must be integer or floating point"); + if (!isPowerOf2_32($2)) + error("VectorType length should be a power of 2"); + $$.S.makeComposite($4.S); + $$.PAT = new PATypeHolder(HandleUpRefs(VectorType::get(ElemTy, + (unsigned)$2), $$.S)); + delete $4.PAT; } | '{' TypeListI '}' { // Structure type? std::vector Elements; + $$.S.makeComposite(); for (std::list::iterator I = $2->begin(), - E = $2->end(); I != E; ++I) + E = $2->end(); I != E; ++I) { Elements.push_back(I->PAT->get()); - $$.PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements))); - $$.S = Signless; + $$.S.add(I->S); + } + $$.PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements), $$.S)); delete $2; } | '{' '}' { // Empty structure type? $$.PAT = new PATypeHolder(StructType::get(std::vector())); - $$.S = Signless; + $$.S.makeComposite(); } | '<' '{' TypeListI '}' '>' { // Packed Structure type? + $$.S.makeComposite(); std::vector Elements; for (std::list::iterator I = $3->begin(), E = $3->end(); I != E; ++I) { Elements.push_back(I->PAT->get()); + $$.S.add(I->S); delete I->PAT; } - $$.PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true))); - $$.S = Signless; + $$.PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true), + $$.S)); delete $3; } | '<' '{' '}' '>' { // Empty packed structure type? $$.PAT = new PATypeHolder(StructType::get(std::vector(),true)); - $$.S = Signless; + $$.S.makeComposite(); } | UpRTypes '*' { // Pointer type? if ($1.PAT->get() == Type::LabelTy) error("Cannot form a pointer to a basic block"); - $$.PAT = new PATypeHolder(HandleUpRefs(PointerType::get($1.PAT->get()))); - $$.S = $1.S; + $$.S.makeComposite($1.S); + $$.PAT = new PATypeHolder(HandleUpRefs(PointerType::get($1.PAT->get()), + $$.S)); delete $1.PAT; } ; @@ -1910,14 +2155,14 @@ ArgTypeListI | TypeListI ',' DOTDOTDOT { PATypeInfo VoidTI; VoidTI.PAT = new PATypeHolder(Type::VoidTy); - VoidTI.S = Signless; + VoidTI.S.makeSignless(); ($$=$1)->push_back(VoidTI); } | DOTDOTDOT { $$ = new std::list(); PATypeInfo VoidTI; VoidTI.PAT = new PATypeHolder(Type::VoidTy); - VoidTI.S = Signless; + VoidTI.S.makeSignless(); $$->push_back(VoidTI); } | /*empty*/ { @@ -1958,7 +2203,7 @@ ConstVal Elems.push_back(C); } $$.C = ConstantArray::get(ATy, Elems); - $$.S = $1.S; + $$.S.copy($1.S); delete $1.PAT; delete $3; } @@ -1972,7 +2217,7 @@ ConstVal error("Type mismatch: constant sized array initialized with 0" " arguments, but has size of " + itostr(NumElements) +""); $$.C = ConstantArray::get(ATy, std::vector()); - $$.S = $1.S; + $$.S.copy($1.S); delete $1.PAT; } | Types 'c' STRINGCONSTANT { @@ -1995,7 +2240,7 @@ ConstVal Vals.push_back(ConstantInt::get(ETy, *C)); free($3); $$.C = ConstantArray::get(ATy, Vals); - $$.S = $1.S; + $$.S.copy($1.S); delete $1.PAT; } | Types '<' ConstVector '>' { // Nonempty unsized arr @@ -2022,7 +2267,7 @@ ConstVal Elems.push_back(C); } $$.C = ConstantVector::get(PTy, Elems); - $$.S = $1.S; + $$.S.copy($1.S); delete $1.PAT; delete $3; } @@ -2044,7 +2289,7 @@ ConstVal Fields.push_back(C); } $$.C = ConstantStruct::get(STy, Fields); - $$.S = $1.S; + $$.S.copy($1.S); delete $1.PAT; delete $3; } @@ -2056,7 +2301,7 @@ ConstVal if (STy->getNumContainedTypes() != 0) error("Illegal number of initializers for structure type"); $$.C = ConstantStruct::get(STy, std::vector()); - $$.S = $1.S; + $$.S.copy($1.S); delete $1.PAT; } | Types '<' '{' ConstVector '}' '>' { @@ -2077,7 +2322,7 @@ ConstVal Fields.push_back(C); } $$.C = ConstantStruct::get(STy, Fields); - $$.S = $1.S; + $$.S.copy($1.S); delete $1.PAT; delete $4; } @@ -2089,7 +2334,7 @@ ConstVal if (STy->getNumContainedTypes() != 0) error("Illegal number of initializers for packed structure type"); $$.C = ConstantStruct::get(STy, std::vector()); - $$.S = $1.S; + $$.S.copy($1.S); delete $1.PAT; } | Types NULL_TOK { @@ -2098,12 +2343,12 @@ ConstVal error("Cannot make null pointer constant with type: '" + $1.PAT->get()->getDescription() + "'"); $$.C = ConstantPointerNull::get(PTy); - $$.S = $1.S; + $$.S.copy($1.S); delete $1.PAT; } | Types UNDEF { $$.C = UndefValue::get($1.PAT->get()); - $$.S = $1.S; + $$.S.copy($1.S); delete $1.PAT; } | Types SymbolicValueRef { @@ -2121,6 +2366,7 @@ ConstVal // Function *SavedCurFn = CurFun.CurrentFunction; CurFun.CurrentFunction = 0; + $2.S.copy($1.S); Value *V = getExistingValue(Ty, $2); CurFun.CurrentFunction = SavedCurFn; @@ -2161,14 +2407,14 @@ ConstVal } } $$.C = cast(V); - $$.S = $1.S; + $$.S.copy($1.S); delete $1.PAT; // Free the type handle } | Types ConstExpr { if ($1.PAT->get() != $2.C->getType()) error("Mismatched types for constant expression"); $$ = $2; - $$.S = $1.S; + $$.S.copy($1.S); delete $1.PAT; } | Types ZEROINITIALIZER { @@ -2176,7 +2422,7 @@ ConstVal if (isa(Ty) || Ty == Type::LabelTy || isa(Ty)) error("Cannot create a null initialized value of this type"); $$.C = Constant::getNullValue(Ty); - $$.S = $1.S; + $$.S.copy($1.S); delete $1.PAT; } | SIntType EINT64VAL { // integral constants @@ -2184,28 +2430,28 @@ ConstVal if (!ConstantInt::isValueValidForType(Ty, $2)) error("Constant value doesn't fit in type"); $$.C = ConstantInt::get(Ty, $2); - $$.S = Signed; + $$.S.makeSigned(); } | UIntType EUINT64VAL { // integral constants const Type *Ty = $1.T; if (!ConstantInt::isValueValidForType(Ty, $2)) error("Constant value doesn't fit in type"); $$.C = ConstantInt::get(Ty, $2); - $$.S = Unsigned; + $$.S.makeUnsigned(); } | BOOL TRUETOK { // Boolean constants $$.C = ConstantInt::get(Type::Int1Ty, true); - $$.S = Unsigned; + $$.S.makeUnsigned(); } | BOOL FALSETOK { // Boolean constants $$.C = ConstantInt::get(Type::Int1Ty, false); - $$.S = Unsigned; + $$.S.makeUnsigned(); } | FPType FPVAL { // Float & Double constants if (!ConstantFP::isValueValidForType($1.T, $2)) error("Floating point constant invalid for type"); $$.C = ConstantFP::get($1.T, $2); - $$.S = Signless; + $$.S.makeSignless(); } ; @@ -2213,8 +2459,8 @@ ConstExpr : CastOps '(' ConstVal TO Types ')' { const Type* SrcTy = $3.C->getType(); const Type* DstTy = $5.PAT->get(); - Signedness SrcSign = $3.S; - Signedness DstSign = $5.S; + Signedness SrcSign($3.S); + Signedness DstSign($5.S); if (!SrcTy->isFirstClassType()) error("cast constant expression from a non-primitive type: '" + SrcTy->getDescription() + "'"); @@ -2222,7 +2468,7 @@ ConstExpr error("cast constant expression to a non-primitive type: '" + DstTy->getDescription() + "'"); $$.C = cast(getCast($1, $3.C, SrcSign, DstTy, DstSign)); - $$.S = DstSign; + $$.S.copy(DstSign); delete $5.PAT; } | GETELEMENTPTR '(' ConstVal IndexList ')' { @@ -2236,7 +2482,7 @@ ConstExpr delete $4; $$.C = ConstantExpr::getGetElementPtr($3.C, &CIndices[0], CIndices.size()); - $$.S = Signless; + $$.S.copy(getElementSign($3, CIndices)); } | SELECT '(' ConstVal ',' ConstVal ',' ConstVal ')' { if (!$3.C->getType()->isInteger() || @@ -2245,7 +2491,7 @@ ConstExpr if ($5.C->getType() != $7.C->getType()) error("Select operand types must match"); $$.C = ConstantExpr::getSelect($3.C, $5.C, $7.C); - $$.S = Unsigned; + $$.S.copy($5.S); } | ArithmeticOps '(' ConstVal ',' ConstVal ')' { const Type *Ty = $3.C->getType(); @@ -2273,7 +2519,7 @@ ConstExpr ConstantExpr::getCast(Instruction::PtrToInt, $5.C, IntPtrTy)); $$.C = ConstantExpr::getCast(Instruction::IntToPtr, $$.C, Ty); } - $$.S = $3.S; + $$.S.copy($3.S); } | LogicalOps '(' ConstVal ',' ConstVal ')' { const Type* Ty = $3.C->getType(); @@ -2286,7 +2532,7 @@ ConstExpr } Instruction::BinaryOps Opcode = getBinaryOp($1, Ty, $3.S); $$.C = ConstantExpr::get(Opcode, $3.C, $5.C); - $$.S = $3.S; + $$.S.copy($3.S); } | SetCondOps '(' ConstVal ',' ConstVal ')' { const Type* Ty = $3.C->getType(); @@ -2295,19 +2541,19 @@ ConstExpr unsigned short pred; Instruction::OtherOps Opcode = getCompareOp($1, pred, Ty, $3.S); $$.C = ConstantExpr::getCompare(Opcode, $3.C, $5.C); - $$.S = Unsigned; + $$.S.makeUnsigned(); } | ICMP IPredicates '(' ConstVal ',' ConstVal ')' { if ($4.C->getType() != $6.C->getType()) error("icmp operand types must match"); $$.C = ConstantExpr::getCompare($2, $4.C, $6.C); - $$.S = Unsigned; + $$.S.makeUnsigned(); } | FCMP FPredicates '(' ConstVal ',' ConstVal ')' { if ($4.C->getType() != $6.C->getType()) error("fcmp operand types must match"); $$.C = ConstantExpr::getCompare($2, $4.C, $6.C); - $$.S = Unsigned; + $$.S.makeUnsigned(); } | ShiftOps '(' ConstVal ',' ConstVal ')' { if (!$5.C->getType()->isInteger() || @@ -2318,25 +2564,25 @@ ConstExpr error("Shift constant expression requires integer operand"); Constant *ShiftAmt = ConstantExpr::getZExt($5.C, Ty); $$.C = ConstantExpr::get(getBinaryOp($1, Ty, $3.S), $3.C, ShiftAmt); - $$.S = $3.S; + $$.S.copy($3.S); } | EXTRACTELEMENT '(' ConstVal ',' ConstVal ')' { if (!ExtractElementInst::isValidOperands($3.C, $5.C)) error("Invalid extractelement operands"); $$.C = ConstantExpr::getExtractElement($3.C, $5.C); - $$.S = $3.S; + $$.S.copy($3.S.get(0)); } | INSERTELEMENT '(' ConstVal ',' ConstVal ',' ConstVal ')' { if (!InsertElementInst::isValidOperands($3.C, $5.C, $7.C)) error("Invalid insertelement operands"); $$.C = ConstantExpr::getInsertElement($3.C, $5.C, $7.C); - $$.S = $3.S; + $$.S.copy($3.S); } | SHUFFLEVECTOR '(' ConstVal ',' ConstVal ',' ConstVal ')' { if (!ShuffleVectorInst::isValidOperands($3.C, $5.C, $7.C)) error("Invalid shufflevector operands"); $$.C = ConstantExpr::getShuffleVector($3.C, $5.C, $7.C); - $$.S = $3.S; + $$.S.copy($3.S); } ; @@ -2405,13 +2651,13 @@ ConstPool // If types are not resolved eagerly, then the two types will not be // determined to be the same type! // - const Type* Ty = $4.PAT->get(); - ResolveTypeTo($2, Ty); + ResolveTypeTo($2, $4.PAT->get(), $4.S); - if (!setTypeName(Ty, $2) && !$2) { - // If this is a named type that is not a redefinition, add it to the slot - // table. - CurModule.Types.push_back(Ty); + if (!setTypeName($4, $2) && !$2) { + // If this is a numbered type that is not a redefinition, add it to the + // slot table. + CurModule.Types.push_back($4.PAT->get()); + CurModule.TypeSigns.push_back($4.S); } delete $4.PAT; } @@ -2422,20 +2668,22 @@ ConstPool | ConstPool OptAssign OptLinkage GlobalType ConstVal { if ($5.C == 0) error("Global value initializer is not a constant"); - CurGV = ParseGlobalVariable($2, $3, $4, $5.C->getType(), $5.C); + CurGV = ParseGlobalVariable($2, $3, $4, $5.C->getType(), $5.C, $5.S); } GlobalVarAttributes { CurGV = 0; } | ConstPool OptAssign EXTERNAL GlobalType Types { const Type *Ty = $5.PAT->get(); - CurGV = ParseGlobalVariable($2, GlobalValue::ExternalLinkage, $4, Ty, 0); + CurGV = ParseGlobalVariable($2, GlobalValue::ExternalLinkage, $4, Ty, 0, + $5.S); delete $5.PAT; } GlobalVarAttributes { CurGV = 0; } | ConstPool OptAssign DLLIMPORT GlobalType Types { const Type *Ty = $5.PAT->get(); - CurGV = ParseGlobalVariable($2, GlobalValue::DLLImportLinkage, $4, Ty, 0); + CurGV = ParseGlobalVariable($2, GlobalValue::DLLImportLinkage, $4, Ty, 0, + $5.S); delete $5.PAT; } GlobalVarAttributes { CurGV = 0; @@ -2443,7 +2691,8 @@ ConstPool | ConstPool OptAssign EXTERN_WEAK GlobalType Types { const Type *Ty = $5.PAT->get(); CurGV = - ParseGlobalVariable($2, GlobalValue::ExternalWeakLinkage, $4, Ty, 0); + ParseGlobalVariable($2, GlobalValue::ExternalWeakLinkage, $4, Ty, 0, + $5.S); delete $5.PAT; } GlobalVarAttributes { CurGV = 0; @@ -2553,14 +2802,14 @@ ArgList $$ = $1; PATypeInfo VoidTI; VoidTI.PAT = new PATypeHolder(Type::VoidTy); - VoidTI.S = Signless; + VoidTI.S.makeSignless(); $$->push_back(std::pair(VoidTI, 0)); } | DOTDOTDOT { $$ = new std::vector >(); PATypeInfo VoidTI; VoidTI.PAT = new PATypeHolder(Type::VoidTy); - VoidTI.S = Signless; + VoidTI.S.makeSignless(); $$->push_back(std::pair(VoidTI, 0)); } | /* empty */ { $$ = 0; } @@ -2577,6 +2826,8 @@ FunctionHeaderH if (!RetTy->isFirstClassType() && RetTy != Type::VoidTy) error("LLVM functions cannot return aggregate types"); + Signedness FTySign; + FTySign.makeComposite($2.S); std::vector ParamTyList; // In LLVM 2.0 the signatures of three varargs intrinsics changed to take @@ -2592,6 +2843,7 @@ FunctionHeaderH I = $5->begin(), E = $5->end(); I != E; ++I) { const Type *Ty = I->first.PAT->get(); ParamTyList.push_back(Ty); + FTySign.add(I->first.S); } } @@ -2618,6 +2870,7 @@ FunctionHeaderH } else { ID = ValID::create((int)CurModule.Values[PFT].size()); } + ID.S.makeComposite(FTySign); Function *Fn = 0; Module* M = CurModule.CurrentModule; @@ -2644,14 +2897,16 @@ FunctionHeaderH std::string NewName(makeNameUnique(FunctionName)); if (Conflict->hasInternalLinkage()) { Conflict->setName(NewName); - RenameMapKey Key = std::make_pair(FunctionName,Conflict->getType()); + RenameMapKey Key = + makeRenameMapKey(FunctionName, Conflict->getType(), ID.S); CurModule.RenameMap[Key] = NewName; Fn = new Function(FT, CurFun.Linkage, FunctionName, M); InsertValue(Fn, CurModule.Values); } else { Fn = new Function(FT, CurFun.Linkage, NewName, M); InsertValue(Fn, CurModule.Values); - RenameMapKey Key = std::make_pair(FunctionName,PFT); + RenameMapKey Key = + makeRenameMapKey(FunctionName, PFT, ID.S); CurModule.RenameMap[Key] = NewName; } } else { @@ -2673,9 +2928,11 @@ FunctionHeaderH // type plane. After PR411 was fixed, this is no loner the case. // To resolve this we must rename one of the two. if (Conflict->hasInternalLinkage()) { - // We can safely renamed the Conflict. + // We can safely rename the Conflict. + RenameMapKey Key = + makeRenameMapKey(Conflict->getName(), Conflict->getType(), + CurModule.NamedValueSigns[Conflict->getName()]); Conflict->setName(makeNameUnique(Conflict->getName())); - RenameMapKey Key = std::make_pair(FunctionName,Conflict->getType()); CurModule.RenameMap[Key] = Conflict->getName(); Fn = new Function(FT, CurFun.Linkage, FunctionName, M); InsertValue(Fn, CurModule.Values); @@ -2684,7 +2941,7 @@ FunctionHeaderH std::string NewName = makeNameUnique(FunctionName); Fn = new Function(FT, CurFun.Linkage, NewName, M); InsertValue(Fn, CurModule.Values); - RenameMapKey Key = std::make_pair(FunctionName,PFT); + RenameMapKey Key = makeRenameMapKey(FunctionName, PFT, ID.S); CurModule.RenameMap[Key] = NewName; } else { // We can't quietly rename either of these things, but we must @@ -2695,7 +2952,7 @@ FunctionHeaderH "' may cause linkage errors"); Fn = new Function(FT, CurFun.Linkage, NewName, M); InsertValue(Fn, CurModule.Values); - RenameMapKey Key = std::make_pair(FunctionName,PFT); + RenameMapKey Key = makeRenameMapKey(FunctionName, PFT, ID.S); CurModule.RenameMap[Key] = NewName; } } else { @@ -2734,7 +2991,8 @@ FunctionHeaderH std::vector >::iterator E = $5->end(); for ( ; I != E && ArgIt != ArgEnd; ++I, ++ArgIt) { delete I->first.PAT; // Delete the typeholder... - setValueName(ArgIt, I->second); // Insert arg into symtab... + ValueInfo VI; VI.V = ArgIt; VI.S.copy(I->first.S); + setValueName(VI, I->second); // Insert arg into symtab... InsertValue(ArgIt); } delete $5; // We're now done with the argument list @@ -2791,11 +3049,17 @@ OptSideEffect ConstValueRef // A reference to a direct constant - : ESINT64VAL { $$ = ValID::create($1); } + : ESINT64VAL { $$ = ValID::create($1); } | EUINT64VAL { $$ = ValID::create($1); } | FPVAL { $$ = ValID::create($1); } - | TRUETOK { $$ = ValID::create(ConstantInt::get(Type::Int1Ty, true)); } - | FALSETOK { $$ = ValID::create(ConstantInt::get(Type::Int1Ty, false)); } + | TRUETOK { + $$ = ValID::create(ConstantInt::get(Type::Int1Ty, true)); + $$.S.makeUnsigned(); + } + | FALSETOK { + $$ = ValID::create(ConstantInt::get(Type::Int1Ty, false)); + $$.S.makeUnsigned(); + } | NULL_TOK { $$ = ValID::createNull(); } | UNDEF { $$ = ValID::createUndef(); } | ZEROINITIALIZER { $$ = ValID::createZeroInit(); } @@ -2803,8 +3067,8 @@ ConstValueRef const Type *ETy = (*$2)[0].C->getType(); int NumElements = $2->size(); VectorType* pt = VectorType::get(ETy, NumElements); - PATypeHolder* PTy = new PATypeHolder( - HandleUpRefs(VectorType::get(ETy, NumElements))); + $$.S.makeComposite((*$2)[0].S); + PATypeHolder* PTy = new PATypeHolder(HandleUpRefs(pt, $$.S)); // Verify all elements are correct type! std::vector Elems; @@ -2822,6 +3086,7 @@ ConstValueRef } | ConstExpr { $$ = ValID::create($1.C); + $$.S.copy($1.S); } | ASM_TOK OptSideEffect STRINGCONSTANT ',' STRINGCONSTANT { char *End = UnEscapeLexed($3, true); @@ -2834,12 +3099,11 @@ ConstValueRef } ; -// SymbolicValueRef - Reference to one of two ways of symbolically refering to -// another value. +// SymbolicValueRef - Reference to one of two ways of symbolically refering to // another value. // SymbolicValueRef - : INTVAL { $$ = ValID::create($1); } - | Name { $$ = ValID::create($1); } + : INTVAL { $$ = ValID::create($1); $$.S.makeSignless(); } + | Name { $$ = ValID::create($1); $$.S.makeSignless(); } ; // ValueRef - A reference to a definition... either constant or symbolic @@ -2854,8 +3118,9 @@ ValueRef ResolvedVal : Types ValueRef { const Type *Ty = $1.PAT->get(); - $$.S = $1.S; + $2.S.copy($1.S); $$.V = getVal(Ty, $2); + $$.S.copy($1.S); delete $1.PAT; } ; @@ -2874,9 +3139,10 @@ BasicBlockList // BasicBlock : InstructionList OptAssign BBTerminatorInst { - setValueName($3, $2); - InsertValue($3); - $1->getInstList().push_back($3); + ValueInfo VI; VI.V = $3.TI; VI.S.copy($3.S); + setValueName(VI, $2); + InsertValue($3.TI); + $1->getInstList().push_back($3.TI); InsertValue($1); $$ = $1; } @@ -2889,7 +3155,7 @@ InstructionList $$ = $1; } | /* empty */ { - $$ = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++), true); + $$ = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++),true); // Make sure to move the basic block to the correct location in the // function, instead of leaving it inserted wherever it was first // referenced. @@ -2912,26 +3178,36 @@ Unwind : UNWIND | EXCEPT; BBTerminatorInst : RET ResolvedVal { // Return with a result... - $$ = new ReturnInst($2.V); + $$.TI = new ReturnInst($2.V); + $$.S.makeSignless(); } | RET VOID { // Return with no result... - $$ = new ReturnInst(); + $$.TI = new ReturnInst(); + $$.S.makeSignless(); } | BR LABEL ValueRef { // Unconditional Branch... BasicBlock* tmpBB = getBBVal($3); - $$ = new BranchInst(tmpBB); + $$.TI = new BranchInst(tmpBB); + $$.S.makeSignless(); } // Conditional Branch... | BR BOOL ValueRef ',' LABEL ValueRef ',' LABEL ValueRef { + $6.S.makeSignless(); + $9.S.makeSignless(); BasicBlock* tmpBBA = getBBVal($6); BasicBlock* tmpBBB = getBBVal($9); + $3.S.makeUnsigned(); Value* tmpVal = getVal(Type::Int1Ty, $3); - $$ = new BranchInst(tmpBBA, tmpBBB, tmpVal); + $$.TI = new BranchInst(tmpBBA, tmpBBB, tmpVal); + $$.S.makeSignless(); } | SWITCH IntType ValueRef ',' LABEL ValueRef '[' JumpTable ']' { + $3.S.copy($2.S); Value* tmpVal = getVal($2.T, $3); + $6.S.makeSignless(); BasicBlock* tmpBB = getBBVal($6); SwitchInst *S = new SwitchInst(tmpVal, tmpBB, $8->size()); - $$ = S; + $$.TI = S; + $$.S.makeSignless(); std::vector >::iterator I = $8->begin(), E = $8->end(); for (; I != E; ++I) { @@ -2943,24 +3219,31 @@ BBTerminatorInst delete $8; } | SWITCH IntType ValueRef ',' LABEL ValueRef '[' ']' { + $3.S.copy($2.S); Value* tmpVal = getVal($2.T, $3); + $6.S.makeSignless(); BasicBlock* tmpBB = getBBVal($6); SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0); - $$ = S; + $$.TI = S; + $$.S.makeSignless(); } | INVOKE OptCallingConv TypesV ValueRef '(' ValueRefListE ')' TO LABEL ValueRef Unwind LABEL ValueRef { const PointerType *PFTy; const FunctionType *Ty; + Signedness FTySign; if (!(PFTy = dyn_cast($3.PAT->get())) || !(Ty = dyn_cast(PFTy->getElementType()))) { // Pull out the types of all of the arguments... std::vector ParamTypes; + FTySign.makeComposite($3.S); if ($6) { for (std::vector::iterator I = $6->begin(), E = $6->end(); - I != E; ++I) + I != E; ++I) { ParamTypes.push_back((*I).V->getType()); + FTySign.add(I->S); + } } FunctionType::ParamAttrsList ParamAttrs; if ($2 == OldCallingConv::CSRet) { @@ -2971,14 +3254,19 @@ BBTerminatorInst if (isVarArg) ParamTypes.pop_back(); Ty = FunctionType::get($3.PAT->get(), ParamTypes, isVarArg, ParamAttrs); PFTy = PointerType::get(Ty); + $$.S.copy($3.S); + } else { + FTySign = $3.S; + $$.S.copy($3.S.get(0)); // 0th element of FuncTy sign is result ty } + $4.S.makeComposite(FTySign); Value *V = getVal(PFTy, $4); // Get the function we're calling... BasicBlock *Normal = getBBVal($10); BasicBlock *Except = getBBVal($13); // Create the call node... if (!$6) { // Has no arguments? - $$ = new InvokeInst(V, Normal, Except, 0, 0); + $$.TI = new InvokeInst(V, Normal, Except, 0, 0); } else { // Has arguments? // Loop through FunctionType's arguments and ensure they are specified // correctly! @@ -2998,38 +3286,44 @@ BBTerminatorInst if (I != E || (ArgI != ArgE && !Ty->isVarArg())) error("Invalid number of parameters detected"); - $$ = new InvokeInst(V, Normal, Except, &Args[0], Args.size()); + $$.TI = new InvokeInst(V, Normal, Except, &Args[0], Args.size()); } - cast($$)->setCallingConv(upgradeCallingConv($2)); + cast($$.TI)->setCallingConv(upgradeCallingConv($2)); delete $3.PAT; delete $6; } | Unwind { - $$ = new UnwindInst(); + $$.TI = new UnwindInst(); + $$.S.makeSignless(); } | UNREACHABLE { - $$ = new UnreachableInst(); + $$.TI = new UnreachableInst(); + $$.S.makeSignless(); } ; JumpTable : JumpTable IntType ConstValueRef ',' LABEL ValueRef { $$ = $1; + $3.S.copy($2.S); Constant *V = cast(getExistingValue($2.T, $3)); if (V == 0) error("May only switch on a constant pool value"); + $6.S.makeSignless(); BasicBlock* tmpBB = getBBVal($6); $$->push_back(std::make_pair(V, tmpBB)); } | IntType ConstValueRef ',' LABEL ValueRef { $$ = new std::vector >(); + $2.S.copy($1.S); Constant *V = cast(getExistingValue($1.T, $2)); if (V == 0) error("May only switch on a constant pool value"); + $5.S.makeSignless(); BasicBlock* tmpBB = getBBVal($5); $$->push_back(std::make_pair(V, tmpBB)); } @@ -3057,9 +3351,10 @@ Inst omit = true; if (omit) { $$.I = 0; - $$.S = Signless; + $$.S.makeSignless(); } else { - setValueName($2.I, $1); + ValueInfo VI; VI.V = $2.I; VI.S.copy($2.S); + setValueName(VI, $1); InsertValue($2.I); $$ = $2; } @@ -3067,15 +3362,19 @@ Inst PHIList : Types '[' ValueRef ',' ValueRef ']' { // Used for PHI nodes $$.P = new std::list >(); - $$.S = $1.S; + $$.S.copy($1.S); + $3.S.copy($1.S); Value* tmpVal = getVal($1.PAT->get(), $3); + $5.S.makeSignless(); BasicBlock* tmpBB = getBBVal($5); $$.P->push_back(std::make_pair(tmpVal, tmpBB)); delete $1.PAT; } | PHIList ',' '[' ValueRef ',' ValueRef ']' { $$ = $1; + $4.S.copy($1.S); Value* tmpVal = getVal($1.P->front().first->getType(), $4); + $6.S.makeSignless(); BasicBlock* tmpBB = getBBVal($6); $1.P->push_back(std::make_pair(tmpVal, tmpBB)); } @@ -3107,6 +3406,8 @@ OptTailCall InstVal : ArithmeticOps Types ValueRef ',' ValueRef { + $3.S.copy($2.S); + $5.S.copy($2.S); const Type* Ty = $2.PAT->get(); if (!Ty->isInteger() && !Ty->isFloatingPoint() && !isa(Ty)) error("Arithmetic operator requires integer, FP, or packed operands"); @@ -3120,10 +3421,12 @@ InstVal $$.I = BinaryOperator::create(Opcode, val1, val2); if ($$.I == 0) error("binary operator returned null"); - $$.S = $2.S; + $$.S.copy($2.S); delete $2.PAT; } | LogicalOps Types ValueRef ',' ValueRef { + $3.S.copy($2.S); + $5.S.copy($2.S); const Type *Ty = $2.PAT->get(); if (!Ty->isInteger()) { if (!isa(Ty) || @@ -3136,10 +3439,12 @@ InstVal $$.I = BinaryOperator::create(Opcode, tmpVal1, tmpVal2); if ($$.I == 0) error("binary operator returned null"); - $$.S = $2.S; + $$.S.copy($2.S); delete $2.PAT; } | SetCondOps Types ValueRef ',' ValueRef { + $3.S.copy($2.S); + $5.S.copy($2.S); const Type* Ty = $2.PAT->get(); if(isa(Ty)) error("VectorTypes currently not supported in setcc instructions"); @@ -3150,10 +3455,12 @@ InstVal $$.I = CmpInst::create(Opcode, pred, tmpVal1, tmpVal2); if ($$.I == 0) error("binary operator returned null"); - $$.S = Unsigned; + $$.S.makeUnsigned(); delete $2.PAT; } | ICMP IPredicates Types ValueRef ',' ValueRef { + $4.S.copy($3.S); + $6.S.copy($3.S); const Type *Ty = $3.PAT->get(); if (isa(Ty)) error("VectorTypes currently not supported in icmp instructions"); @@ -3162,10 +3469,12 @@ InstVal Value* tmpVal1 = getVal(Ty, $4); Value* tmpVal2 = getVal(Ty, $6); $$.I = new ICmpInst($2, tmpVal1, tmpVal2); - $$.S = Unsigned; + $$.S.makeUnsigned(); delete $3.PAT; } | FCMP FPredicates Types ValueRef ',' ValueRef { + $4.S.copy($3.S); + $6.S.copy($3.S); const Type *Ty = $3.PAT->get(); if (isa(Ty)) error("VectorTypes currently not supported in fcmp instructions"); @@ -3174,7 +3483,7 @@ InstVal Value* tmpVal1 = getVal(Ty, $4); Value* tmpVal2 = getVal(Ty, $6); $$.I = new FCmpInst($2, tmpVal1, tmpVal2); - $$.S = Unsigned; + $$.S.makeUnsigned(); delete $3.PAT; } | NOT ResolvedVal { @@ -3186,7 +3495,7 @@ InstVal $$.I = BinaryOperator::create(Instruction::Xor, $2.V, Ones); if ($$.I == 0) error("Could not create a xor instruction"); - $$.S = $2.S; + $$.S.copy($2.S); } | ShiftOps ResolvedVal ',' ResolvedVal { if (!$4.V->getType()->isInteger() || @@ -3204,7 +3513,7 @@ InstVal else ShiftAmt = $4.V; $$.I = BinaryOperator::create(getBinaryOp($1, Ty, $2.S), $2.V, ShiftAmt); - $$.S = $2.S; + $$.S.copy($2.S); } | CastOps ResolvedVal TO Types { const Type *DstTy = $4.PAT->get(); @@ -3212,7 +3521,7 @@ InstVal error("cast instruction to a non-primitive type: '" + DstTy->getDescription() + "'"); $$.I = cast(getCast($1, $2.V, $2.S, DstTy, $4.S, true)); - $$.S = $4.S; + $$.S.copy($4.S); delete $4.PAT; } | SELECT ResolvedVal ',' ResolvedVal ',' ResolvedVal { @@ -3222,13 +3531,13 @@ InstVal if ($4.V->getType() != $6.V->getType()) error("select value types should match"); $$.I = new SelectInst($2.V, $4.V, $6.V); - $$.S = $2.S; + $$.S.copy($4.S); } | VAARG ResolvedVal ',' Types { const Type *Ty = $4.PAT->get(); NewVarArgs = true; $$.I = new VAArgInst($2.V, Ty); - $$.S = $4.S; + $$.S.copy($4.S); delete $4.PAT; } | VAARG_old ResolvedVal ',' Types { @@ -3249,7 +3558,7 @@ InstVal CurBB->getInstList().push_back(bar); CurBB->getInstList().push_back(new StoreInst(bar, foo)); $$.I = new VAArgInst(foo, DstTy); - $$.S = $4.S; + $$.S.copy($4.S); delete $4.PAT; } | VANEXT_old ResolvedVal ',' Types { @@ -3273,26 +3582,26 @@ InstVal Instruction* tmp = new VAArgInst(foo, DstTy); CurBB->getInstList().push_back(tmp); $$.I = new LoadInst(foo); - $$.S = $4.S; + $$.S.copy($4.S); delete $4.PAT; } | EXTRACTELEMENT ResolvedVal ',' ResolvedVal { if (!ExtractElementInst::isValidOperands($2.V, $4.V)) error("Invalid extractelement operands"); $$.I = new ExtractElementInst($2.V, $4.V); - $$.S = $2.S; + $$.S.copy($2.S.get(0)); } | INSERTELEMENT ResolvedVal ',' ResolvedVal ',' ResolvedVal { if (!InsertElementInst::isValidOperands($2.V, $4.V, $6.V)) error("Invalid insertelement operands"); $$.I = new InsertElementInst($2.V, $4.V, $6.V); - $$.S = $2.S; + $$.S.copy($2.S); } | SHUFFLEVECTOR ResolvedVal ',' ResolvedVal ',' ResolvedVal { if (!ShuffleVectorInst::isValidOperands($2.V, $4.V, $6.V)) error("Invalid shufflevector operands"); $$.I = new ShuffleVectorInst($2.V, $4.V, $6.V); - $$.S = $2.S; + $$.S.copy($2.S); } | PHI_TOK PHIList { const Type *Ty = $2.P->front().first->getType(); @@ -3307,22 +3616,25 @@ InstVal $2.P->pop_front(); } $$.I = PHI; - $$.S = $2.S; + $$.S.copy($2.S); delete $2.P; // Free the list... } | OptTailCall OptCallingConv TypesV ValueRef '(' ValueRefListE ')' { - // Handle the short call syntax const PointerType *PFTy; const FunctionType *FTy; + Signedness FTySign; if (!(PFTy = dyn_cast($3.PAT->get())) || !(FTy = dyn_cast(PFTy->getElementType()))) { // Pull out the types of all of the arguments... std::vector ParamTypes; + FTySign.makeComposite($3.S); if ($6) { for (std::vector::iterator I = $6->begin(), E = $6->end(); - I != E; ++I) + I != E; ++I) { ParamTypes.push_back((*I).V->getType()); + FTySign.add(I->S); + } } FunctionType::ParamAttrsList ParamAttrs; @@ -3339,7 +3651,12 @@ InstVal FTy = FunctionType::get(RetTy, ParamTypes, isVarArg, ParamAttrs); PFTy = PointerType::get(FTy); + $$.S.copy($3.S); + } else { + FTySign = $3.S; + $$.S.copy($3.S.get(0)); // 0th element of FuncTy signedness is result sign } + $4.S.makeComposite(FTySign); // First upgrade any intrinsic calls. std::vector Args; @@ -3351,7 +3668,6 @@ InstVal // If we got an upgraded intrinsic if (Inst) { $$.I = Inst; - $$.S = Signless; } else { // Get the function we're calling Value *V = getVal(PFTy, $4); @@ -3383,7 +3699,6 @@ InstVal CI->setTailCall($1); CI->setCallingConv(upgradeCallingConv($2)); $$.I = CI; - $$.S = $3.S; } delete $3.PAT; delete $6; @@ -3408,25 +3723,27 @@ OptVolatile MemoryInst : MALLOC Types OptCAlign { const Type *Ty = $2.PAT->get(); - $$.S = $2.S; + $$.S.makeComposite($2.S); $$.I = new MallocInst(Ty, 0, $3); delete $2.PAT; } | MALLOC Types ',' UINT ValueRef OptCAlign { const Type *Ty = $2.PAT->get(); - $$.S = $2.S; + $5.S.makeUnsigned(); + $$.S.makeComposite($2.S); $$.I = new MallocInst(Ty, getVal($4.T, $5), $6); delete $2.PAT; } | ALLOCA Types OptCAlign { const Type *Ty = $2.PAT->get(); - $$.S = $2.S; + $$.S.makeComposite($2.S); $$.I = new AllocaInst(Ty, 0, $3); delete $2.PAT; } | ALLOCA Types ',' UINT ValueRef OptCAlign { const Type *Ty = $2.PAT->get(); - $$.S = $2.S; + $5.S.makeUnsigned(); + $$.S.makeComposite($4.S); $$.I = new AllocaInst(Ty, getVal($4.T, $5), $6); delete $2.PAT; } @@ -3435,11 +3752,11 @@ MemoryInst if (!isa(PTy)) error("Trying to free nonpointer type '" + PTy->getDescription() + "'"); $$.I = new FreeInst($2.V); - $$.S = Signless; + $$.S.makeSignless(); } | OptVolatile LOAD Types ValueRef { const Type* Ty = $3.PAT->get(); - $$.S = $3.S; + $4.S.copy($3.S); if (!isa(Ty)) error("Can't load from nonpointer type: " + Ty->getDescription()); if (!cast(Ty)->getElementType()->isFirstClassType()) @@ -3447,9 +3764,11 @@ MemoryInst Ty->getDescription()); Value* tmpVal = getVal(Ty, $4); $$.I = new LoadInst(tmpVal, "", $1); + $$.S.copy($3.S.get(0)); delete $3.PAT; } | OptVolatile STORE ResolvedVal ',' Types ValueRef { + $6.S.copy($5.S); const PointerType *PTy = dyn_cast($5.PAT->get()); if (!PTy) error("Can't store to a nonpointer type: " + @@ -3471,10 +3790,11 @@ MemoryInst } } $$.I = new StoreInst(StoreVal, tmpVal, $1); - $$.S = Signless; + $$.S.makeSignless(); delete $5.PAT; } | GETELEMENTPTR Types ValueRef IndexList { + $3.S.copy($2.S); const Type* Ty = $2.PAT->get(); if (!isa(Ty)) error("getelementptr insn requires pointer operand"); @@ -3484,7 +3804,8 @@ MemoryInst Value* tmpVal = getVal(Ty, $3); $$.I = new GetElementPtrInst(tmpVal, &VIndices[0], VIndices.size()); - $$.S = Signless; + ValueInfo VI; VI.V = tmpVal; VI.S.copy($2.S); + $$.S.copy(getElementSign(VI, VIndices)); delete $2.PAT; delete $4; };