[llvm-commits] CVS: llvm/tools/llvm-upgrade/UpgradeLexer.cpp.cvs UpgradeLexer.l.cvs UpgradeParser.cpp.cvs UpgradeParser.h.cvs UpgradeParser.y.cvs
Evan Cheng
evan.cheng at apple.com
Thu Mar 22 00:42:00 PDT 2007
Reid,
Shouldn't Signedness::dump be wrapped in #ifndef NDEBUG? I think this
is breaking non-debug builds.
Evan
On Mar 21, 2007, at 10:16 AM, Reid Spencer wrote:
>
>
> Changes in directory llvm/tools/llvm-upgrade:
>
> UpgradeLexer.cpp.cvs updated: 1.22 -> 1.23
> UpgradeLexer.l.cvs updated: 1.19 -> 1.20
> UpgradeParser.cpp.cvs updated: 1.66 -> 1.67
> UpgradeParser.h.cvs updated: 1.50 -> 1.51
> UpgradeParser.y.cvs updated: 1.65 -> 1.66
> ---
> Log message:
>
> Regenerate.
>
>
> ---
> Diffs of the changes: (+1558 -905)
>
> UpgradeLexer.cpp.cvs | 379 +++++++-------
> UpgradeLexer.l.cvs | 43 -
> UpgradeParser.cpp.cvs | 1282 ++++++++++++++++++++++++++++++
> +-------------------
> UpgradeParser.h.cvs | 4
> UpgradeParser.y.cvs | 755 ++++++++++++++++++++---------
> 5 files changed, 1558 insertions(+), 905 deletions(-)
>
>
> Index: llvm/tools/llvm-upgrade/UpgradeLexer.cpp.cvs
> diff -u llvm/tools/llvm-upgrade/UpgradeLexer.cpp.cvs:1.22 llvm/
> tools/llvm-upgrade/UpgradeLexer.cpp.cvs:1.23
> --- llvm/tools/llvm-upgrade/UpgradeLexer.cpp.cvs:1.22 Wed Mar 14
> 22:26:42 2007
> +++ llvm/tools/llvm-upgrade/UpgradeLexer.cpp.cvs Wed Mar 21
> 12:15:50 2007
> @@ -20,7 +20,7 @@
> /* A lexical scanner generated by flex*/
>
> /* Scanner skeleton version:
> - * $Header: /var/cvs/llvm/llvm/tools/llvm-upgrade/
> UpgradeLexer.cpp.cvs,v 1.22 2007/03/15 03:26:42 reid Exp $
> + * $Header: /var/cvs/llvm/llvm/tools/llvm-upgrade/
> UpgradeLexer.cpp.cvs,v 1.23 2007/03/21 17:15:50 reid Exp $
> */
>
> #define FLEX_SCANNER
> @@ -976,7 +976,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 {
> @@ -1085,7 +1090,7 @@
> /* 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 @@
> 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 @@
> { /* 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_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_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_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_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_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_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_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_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 @@
> 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 @@
> 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"
>
>
>
> Index: llvm/tools/llvm-upgrade/UpgradeLexer.l.cvs
> diff -u llvm/tools/llvm-upgrade/UpgradeLexer.l.cvs:1.19 llvm/tools/
> llvm-upgrade/UpgradeLexer.l.cvs:1.20
> --- llvm/tools/llvm-upgrade/UpgradeLexer.l.cvs:1.19 Wed Feb 7
> 18:21:40 2007
> +++ llvm/tools/llvm-upgrade/UpgradeLexer.l.cvs Wed Mar 21 12:15:50
> 2007
> @@ -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 @@
> 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; }
>
>
>
> Index: llvm/tools/llvm-upgrade/UpgradeParser.cpp.cvs
> diff -u llvm/tools/llvm-upgrade/UpgradeParser.cpp.cvs:1.66 llvm/
> tools/llvm-upgrade/UpgradeParser.cpp.cvs:1.67
> --- llvm/tools/llvm-upgrade/UpgradeParser.cpp.cvs:1.66 Wed Mar 14
> 22:26:42 2007
> +++ llvm/tools/llvm-upgrade/UpgradeParser.cpp.cvs Wed Mar 21
> 12:15:50 2007
> @@ -427,7 +427,7 @@
> //
> typedef std::vector<Value *> ValueList; // Numbered defs
>
> -typedef std::pair<std::string,const Type*> RenameMapKey;
> +typedef std::pair<std::string,TypeInfo> RenameMapKey;
> typedef std::map<RenameMapKey,std::string> RenameMapType;
>
> static void
> @@ -438,7 +438,10 @@
> Module *CurrentModule;
> std::map<const Type *, ValueList> Values; // Module level
> numbered definitions
> std::map<const Type *,ValueList> LateResolveValues;
> - std::vector<PATypeHolder> Types;
> + std::vector<PATypeHolder> Types;
> + std::vector<Signedness> TypeSigns;
> + std::map<std::string,Signedness> NamedTypeSigns;
> + std::map<std::string,Signedness> NamedValueSigns;
> std::map<ValID, PATypeHolder> LateResolveTypes;
> static Module::Endianness Endian;
> static Module::PointerSize PointerSize;
> @@ -495,6 +498,9 @@
>
> Values.clear(); // Clear out function local definitions
> Types.clear();
> + TypeSigns.clear();
> + NamedTypeSigns.clear();
> + NamedValueSigns.clear();
> CurrentModule = 0;
> }
>
> @@ -568,6 +574,24 @@
>
> 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 @@
> 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 @@
> //
> 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 @@
> 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<std::string,Signedness>::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<Value*>
> &Indices) {
> + const Type *Ptr = VI.V->getType();
> + assert(isa<PointerType>(Ptr) && "Need pointer type");
> +
> + unsigned CurIdx = 0;
> + Signedness S(VI.S);
> + while (const CompositeType *CT = dyn_cast<CompositeType>(Ptr)) {
> + if (CurIdx == Indices.size())
> + break;
> +
> + Value *Index = Indices[CurIdx++];
> + assert(!isa<PointerType>(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<StructType>(CT)) {
> + S = S.get(cast<ConstantInt>(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<Constant*>
> &Indices) {
> + ValueInfo VI;
> + VI.V = CI.C;
> + VI.S.copy(CI.S);
> + std::vector<Value*> 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 @@
> 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<PointerType>(Ty);
> + const PointerType *PF2 = dyn_cast<PointerType>(V->getType());
> + if (PF1 && PF2) {
> + const FunctionType* FT1 = dyn_cast<FunctionType>(PF1-
> >getElementType());
> + const FunctionType* FT2 = dyn_cast<FunctionType>(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 @@
> if (V->getType() == Ty)
> return V;
>
> - Value* Result = 0;
> const PointerType *PF1 = dyn_cast<PointerType>(Ty);
> const PointerType *PF2 = dyn_cast<PointerType>(V->getType());
> if (PF1 && PF2) {
> - const FunctionType *FT1 =
> - dyn_cast<FunctionType>(PF1->getElementType());
> - const FunctionType *FT2 =
> - dyn_cast<FunctionType>(PF2->getElementType());
> + const FunctionType *FT1 = dyn_cast<FunctionType>(PF1-
> >getElementType());
> + const FunctionType *FT2 = dyn_cast<FunctionType>(PF2-
> >getElementType());
> if (FT1 && FT2 && FuncTysDifferOnlyBySRet(FT1, FT2))
> if (FT2->paramHasAttr(1, FunctionType::StructRetAttribute))
> - Result = V;
> + return V;
> else if (Constant *C = dyn_cast<Constant>(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 @@
>
> 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 @@
> 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 @@
> 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 @@
> 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 @@
> 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<ValID, PATypeHolder>::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 @@
> // 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 @@
> 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 @@
> // 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 GlobalVariable *
> ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage,
> bool isConstantGlobal, const Type *Ty,
> - Constant *Initializer) {
> + Constant *Initializer,
> + const Signedness &Sign) {
> if (isa<FunctionType>(Ty))
> error("Cannot declare global vars of function type");
>
> @@ -1129,6 +1264,7 @@
> } 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 @@
> // 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 @@
> }
>
> // 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 @@
> 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 @@
> // 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 @@
> // opaque type. In this case, Existing will be an opaque type.
> if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
> // We ARE replacing an opaque type!
> - const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
> + const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(Ty);
> return true;
> }
>
> @@ -1226,11 +1363,11 @@
> // 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 @@
> OpaqueType *UpRefTy;
>
> UpRefRecord(unsigned NL, OpaqueType *URTy)
> - : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
> + : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) { }
> };
> }
>
> @@ -1276,7 +1413,7 @@
> /// 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 @@
> // 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 @@
> 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 @@
>
> 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 @@
> }
>
> 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 @@
> 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 @@
> // 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 @@
> 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 @@
>
> 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::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 @@
> }
>
> 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 @@
> }
> // 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 @@
> // all indices for SequentialType elements. We must retain
> the same
> // semantic (zext) for unsigned types.
> if (const IntegerType *Ity = dyn_cast<IntegerType>(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<Constant>(Index), Type::Int64Ty);
> @@ -1830,13 +2069,13 @@
> #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<llvm::PATypeInfo, char*> *ArgVal;
> llvm::BasicBlock *BasicBlockVal;
> - llvm::TerminatorInst *TermInstVal;
> + llvm::TermInstInfo TermInstVal;
> llvm::InstrInfo InstVal;
> llvm::ConstInfo ConstVal;
> llvm::ValueInfo ValueVal;
> @@ -1873,7 +2112,7 @@
> 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 @@
>
>
> /* 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 @@
> /* 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 @@
> 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 @@
> 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 @@
> 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 @@
> 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 @@
> 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 @@
> 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 @@
> 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 @@
> 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 @@
> 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 @@
> 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<const Type*> Params;
> for (std::list<llvm::PATypeInfo>::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 @@
>
> (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<const Type*> Elements;
> + (yyval.TypeVal).S.makeComposite();
> for (std::list<llvm::PATypeInfo>::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<const Type*>()));
> - (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<const Type*> Elements;
> for (std::list<llvm::PATypeInfo>::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<const Type*>(),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<PATypeInfo>();
> (yyval.TypeList)->push_back((yyvsp[0].TypeVal));
> @@ -4182,42 +4427,42 @@
> 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>();
> 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<PATypeInfo>();
> ;}
> 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<ArrayType>((yyvsp
> [-3].TypeVal).PAT->get());
> if (ATy == 0)
> @@ -4244,14 +4489,14 @@
> 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<ArrayType>((yyvsp
> [-2].TypeVal).PAT->get());
> if (ATy == 0)
> @@ -4262,13 +4507,13 @@
> error("Type mismatch: constant sized array initialized with 0"
> " arguments, but has size of " + itostr(NumElements)
> +"");
> (yyval.ConstVal).C = ConstantArray::get(ATy,
> std::vector<Constant*>());
> - (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<ArrayType>((yyvsp
> [-2].TypeVal).PAT->get());
> if (ATy == 0)
> @@ -4289,13 +4534,13 @@
> 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<VectorType>((yyvsp
> [-3].TypeVal).PAT->get());
> if (PTy == 0)
> @@ -4320,14 +4565,14 @@
> 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<StructType>((yyvsp
> [-3].TypeVal).PAT->get());
> if (STy == 0)
> @@ -4346,14 +4591,14 @@
> 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<StructType>((yyvsp
> [-2].TypeVal).PAT->get());
> if (STy == 0)
> @@ -4362,13 +4607,13 @@
> if (STy->getNumContainedTypes() != 0)
> error("Illegal number of initializers for structure type");
> (yyval.ConstVal).C = ConstantStruct::get(STy,
> std::vector<Constant*>());
> - (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<StructType>((yyvsp
> [-5].TypeVal).PAT->get());
> if (STy == 0)
> @@ -4387,14 +4632,14 @@
> 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<StructType>((yyvsp
> [-4].TypeVal).PAT->get());
> if (STy == 0)
> @@ -4403,35 +4648,35 @@
> if (STy->getNumContainedTypes() != 0)
> error("Illegal number of initializers for packed structure
> type");
> (yyval.ConstVal).C = ConstantStruct::get(STy,
> std::vector<Constant*>());
> - (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<PointerType>((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<PointerType>((yyvsp
> [-1].TypeVal).PAT->get());
> if (Ty == 0)
> @@ -4447,6 +4692,7 @@
> //
> 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 @@
> }
> }
> (yyval.ConstVal).C = cast<GlobalValue>(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<FunctionType>(Ty) || Ty == Type::LabelTy ||
> isa<OpaqueType>(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 @@
> error("cast constant expression to a non-primitive type: '" +
> DstTy->getDescription() + "'");
> (yyval.ConstVal).C = cast<Constant>(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<PointerType>(Ty))
> @@ -4595,12 +4841,12 @@
>
> 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<IntegerType>((yyvsp[-5].ConstVal).C->getType())-
> >getBitWidth() != 1)
> @@ -4608,12 +4854,12 @@
> 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 @@
> 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 @@
> }
> 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 @@
> 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<IntegerType>((yyvsp[-1].ConstVal).C->getType())-
> >getBitWidth() != 8)
> @@ -4705,47 +4951,47 @@
> 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<ConstInfo>();
> (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
> @@ -4753,17 +4999,17 @@
> 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 @@
> 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 @@
> 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 @@
> // 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 @@
> 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 @@
> 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 @@
> 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 @@
> 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 @@
> 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 @@
> 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 @@
> 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 @@
> 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<std::pair<PATypeInfo,char*> >
> ();
> (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal));
> @@ -5039,39 +5288,39 @@
> 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<PATypeInfo, char*>
> (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<std::pair<PATypeInfo,char*> >
> ();
> PATypeInfo VoidTI;
> VoidTI.PAT = new PATypeHolder(Type::VoidTy);
> - VoidTI.S = Signless;
> + VoidTI.S.makeSignless();
> (yyval.ArgList)->push_back(std::pair<PATypeInfo, char*>
> (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 @@
> if (!RetTy->isFirstClassType() && RetTy != Type::VoidTy)
> error("LLVM functions cannot return aggregate types");
>
> + Signedness FTySign;
> + FTySign.makeComposite((yyvsp[-6].TypeVal).S);
> std::vector<const Type*> ParamTyList;
>
> // In LLVM 2.0 the signatures of three varargs intrinsics
> changed to take
> @@ -5097,6 +5348,7 @@
> 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 @@
> } else {
> ID = ValID::create((int)CurModule.Values[PFT].size());
> }
> + ID.S.makeComposite(FTySign);
>
> Function *Fn = 0;
> Module* M = CurModule.CurrentModule;
> @@ -5149,14 +5402,16 @@
> 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 @@
> // 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 @@
> 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 @@
> "' 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 @@
> std::vector<std::pair<PATypeInfo,char*> >::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 @@
> 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 @@
> 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 @@
> 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<Constant*> Elems;
> @@ -5375,14 +5639,15 @@
> 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 @@
> 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 @@
> 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 @@
> 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 @@
> 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<std::pair<Constant*,BasicBlock*> >::iterator I =
> (yyvsp[-1].JumpTable)->begin(),
> E = (yyvsp[-1].JumpTable)->end();
> for (; I != E; ++I) {
> @@ -5526,29 +5803,36 @@
> 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<PointerType>((yyvsp[-10].TypeVal).PAT-
> >get())) ||
> !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
> // Pull out the types of all of the arguments...
> std::vector<const Type*> ParamTypes;
> + FTySign.makeComposite((yyvsp[-10].TypeVal).S);
> if ((yyvsp[-7].ValueList)) {
> for (std::vector<ValueInfo>::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 @@
> 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 @@
> 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<InvokeInst>((yyval.TermInstVal))->setCallingConv
> (upgradeCallingConv((yyvsp[-11].UIntVal)));
> + cast<InvokeInst>((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<Constant>(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<std::pair<Constant*,
> BasicBlock*> >();
> + (yyvsp[-3].ValIDVal).S.copy((yyvsp[-4].PrimType).S);
> Constant *V = cast<Constant>(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 @@
> 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 @@
> 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<std::pair<Value*,
> BasicBlock*> >();
> - (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 @@
> 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<ValueInfo>();
> (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
> @@ -5699,7 +5999,7 @@
> 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 @@
> 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<VectorType>(Ty))
> error("Arithmetic operator requires integer, FP, or packed
> operands");
> @@ -5741,14 +6043,16 @@
> (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<VectorType>(Ty) ||
> @@ -5761,14 +6065,16 @@
> (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<VectorType>(Ty))
> error("VectorTypes currently not supported in setcc
> instructions");
> @@ -5779,14 +6085,16 @@
> (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<VectorType>(Ty))
> error("VectorTypes currently not supported in icmp
> instructions");
> @@ -5795,14 +6103,16 @@
> 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<VectorType>(Ty))
> error("VectorTypes currently not supported in fcmp
> instructions");
> @@ -5811,13 +6121,13 @@
> 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 @@
> (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<IntegerType>((yyvsp[0].ValueVal).V->getType())-
> >getBitWidth() != 8)
> @@ -5849,25 +6159,25 @@
> 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<Instruction>(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<IntegerType>((yyvsp[-4].ValueVal).V->getType())-
> >getBitWidth() != 1)
> @@ -5875,23 +6185,23 @@
> 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 @@
> 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 @@
> 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 @@
> (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<PointerType>((yyvsp[-4].TypeVal).PAT->get
> ())) ||
> !(FTy = dyn_cast<FunctionType>(PFTy->getElementType()))) {
> // Pull out the types of all of the arguments...
> std::vector<const Type*> ParamTypes;
> + FTySign.makeComposite((yyvsp[-4].TypeVal).S);
> if ((yyvsp[-1].ValueList)) {
> for (std::vector<ValueInfo>::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 @@
>
> 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<Value*> Args;
> @@ -6036,7 +6354,6 @@
> // 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 @@
> 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 @@
> 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<ValueInfo>(); ;}
> 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<PointerType>(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<PointerType>(Ty))
> error("Can't load from nonpointer type: " + Ty-
> >getDescription());
> if (!cast<PointerType>(Ty)->getElementType()->isFirstClassType())
> @@ -6165,13 +6483,15 @@
> 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<PointerType>((yyvsp
> [-1].TypeVal).PAT->get());
> if (!PTy)
> error("Can't store to a nonpointer type: " +
> @@ -6193,14 +6513,15 @@
> }
> }
> (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<PointerType>(Ty))
> error("getelementptr insn requires pointer operand");
> @@ -6210,7 +6531,8 @@
>
> 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 @@
> }
>
> /* Line 1126 of yacc.c. */
> -#line 6225 "UpgradeParser.tab.c"
> +#line 6547 "UpgradeParser.tab.c"
>
> yyvsp -= yylen;
> yyssp -= yylen;
> @@ -6489,7 +6811,7 @@
> }
>
>
> -#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) {
>
>
> Index: llvm/tools/llvm-upgrade/UpgradeParser.h.cvs
> diff -u llvm/tools/llvm-upgrade/UpgradeParser.h.cvs:1.50 llvm/tools/
> llvm-upgrade/UpgradeParser.h.cvs:1.51
> --- llvm/tools/llvm-upgrade/UpgradeParser.h.cvs:1.50 Wed Mar 14
> 22:26:42 2007
> +++ llvm/tools/llvm-upgrade/UpgradeParser.h.cvs Wed Mar 21 12:15:50
> 2007
> @@ -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<llvm::PATypeInfo, char*> *ArgVal;
> llvm::BasicBlock *BasicBlockVal;
> - llvm::TerminatorInst *TermInstVal;
> + llvm::TermInstInfo TermInstVal;
> llvm::InstrInfo InstVal;
> llvm::ConstInfo ConstVal;
> llvm::ValueInfo ValueVal;
>
>
> Index: llvm/tools/llvm-upgrade/UpgradeParser.y.cvs
> diff -u llvm/tools/llvm-upgrade/UpgradeParser.y.cvs:1.65 llvm/tools/
> llvm-upgrade/UpgradeParser.y.cvs:1.66
> --- llvm/tools/llvm-upgrade/UpgradeParser.y.cvs:1.65 Wed Mar 14
> 22:26:42 2007
> +++ llvm/tools/llvm-upgrade/UpgradeParser.y.cvs Wed Mar 21 12:15:50
> 2007
> @@ -67,7 +67,7 @@
> //
> typedef std::vector<Value *> ValueList; // Numbered defs
>
> -typedef std::pair<std::string,const Type*> RenameMapKey;
> +typedef std::pair<std::string,TypeInfo> RenameMapKey;
> typedef std::map<RenameMapKey,std::string> RenameMapType;
>
> static void
> @@ -78,7 +78,10 @@
> Module *CurrentModule;
> std::map<const Type *, ValueList> Values; // Module level
> numbered definitions
> std::map<const Type *,ValueList> LateResolveValues;
> - std::vector<PATypeHolder> Types;
> + std::vector<PATypeHolder> Types;
> + std::vector<Signedness> TypeSigns;
> + std::map<std::string,Signedness> NamedTypeSigns;
> + std::map<std::string,Signedness> NamedValueSigns;
> std::map<ValID, PATypeHolder> LateResolveTypes;
> static Module::Endianness Endian;
> static Module::PointerSize PointerSize;
> @@ -135,6 +138,9 @@
>
> Values.clear(); // Clear out function local definitions
> Types.clear();
> + TypeSigns.clear();
> + NamedTypeSigns.clear();
> + NamedValueSigns.clear();
> CurrentModule = 0;
> }
>
> @@ -208,6 +214,24 @@
>
> 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 @@
> 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 @@
> //
> 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 @@
> 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<std::string,Signedness>::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<Value*>
> &Indices) {
> + const Type *Ptr = VI.V->getType();
> + assert(isa<PointerType>(Ptr) && "Need pointer type");
> +
> + unsigned CurIdx = 0;
> + Signedness S(VI.S);
> + while (const CompositeType *CT = dyn_cast<CompositeType>(Ptr)) {
> + if (CurIdx == Indices.size())
> + break;
> +
> + Value *Index = Indices[CurIdx++];
> + assert(!isa<PointerType>(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<StructType>(CT)) {
> + S = S.get(cast<ConstantInt>(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<Constant*>
> &Indices) {
> + ValueInfo VI;
> + VI.V = CI.C;
> + VI.S.copy(CI.S);
> + std::vector<Value*> 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 @@
> 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<PointerType>(Ty);
> + const PointerType *PF2 = dyn_cast<PointerType>(V->getType());
> + if (PF1 && PF2) {
> + const FunctionType* FT1 = dyn_cast<FunctionType>(PF1-
> >getElementType());
> + const FunctionType* FT2 = dyn_cast<FunctionType>(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 @@
> if (V->getType() == Ty)
> return V;
>
> - Value* Result = 0;
> const PointerType *PF1 = dyn_cast<PointerType>(Ty);
> const PointerType *PF2 = dyn_cast<PointerType>(V->getType());
> if (PF1 && PF2) {
> - const FunctionType *FT1 =
> - dyn_cast<FunctionType>(PF1->getElementType());
> - const FunctionType *FT2 =
> - dyn_cast<FunctionType>(PF2->getElementType());
> + const FunctionType *FT1 = dyn_cast<FunctionType>(PF1-
> >getElementType());
> + const FunctionType *FT2 = dyn_cast<FunctionType>(PF2-
> >getElementType());
> if (FT1 && FT2 && FuncTysDifferOnlyBySRet(FT1, FT2))
> if (FT2->paramHasAttr(1, FunctionType::StructRetAttribute))
> - Result = V;
> + return V;
> else if (Constant *C = dyn_cast<Constant>(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 @@
>
> 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 @@
> 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 @@
> 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 @@
> 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 @@
> 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<ValID, PATypeHolder>::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 @@
> // 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 @@
> 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 @@
> // 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 GlobalVariable *
> ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage,
> bool isConstantGlobal, const Type *Ty,
> - Constant *Initializer) {
> + Constant *Initializer,
> + const Signedness &Sign) {
> if (isa<FunctionType>(Ty))
> error("Cannot declare global vars of function type");
>
> @@ -769,6 +904,7 @@
> } 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 @@
> // 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 @@
> }
>
> // 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 @@
> 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 @@
> // 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 @@
> // opaque type. In this case, Existing will be an opaque type.
> if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
> // We ARE replacing an opaque type!
> - const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
> + const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(Ty);
> return true;
> }
>
> @@ -866,11 +1003,11 @@
> // 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 @@
> OpaqueType *UpRefTy;
>
> UpRefRecord(unsigned NL, OpaqueType *URTy)
> - : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
> + : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) { }
> };
> }
>
> @@ -916,7 +1053,7 @@
> /// 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 @@
> // 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 @@
> 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 @@
>
> 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 @@
> }
>
> 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 @@
> 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 @@
> // 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 @@
> 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 @@
>
> 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::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 @@
> }
>
> 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 @@
> }
> // 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 @@
> // all indices for SequentialType elements. We must retain
> the same
> // semantic (zext) for unsigned types.
> if (const IntegerType *Ity = dyn_cast<IntegerType>(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<Constant>(Index), Type::Int64Ty);
> @@ -1456,7 +1695,7 @@
> llvm::Function *FunctionVal;
> std::pair<llvm::PATypeInfo, char*> *ArgVal;
> llvm::BasicBlock *BasicBlockVal;
> - llvm::TerminatorInst *TermInstVal;
> + llvm::TermInstInfo TermInstVal;
> llvm::InstrInfo InstVal;
> llvm::ConstInfo ConstVal;
> llvm::ValueInfo ValueVal;
> @@ -1769,7 +2008,7 @@
> : Types
> | VOID {
> $$.PAT = new PATypeHolder($1.T);
> - $$.S = Signless;
> + $$.S.makeSignless();
> }
> ;
>
> @@ -1777,7 +2016,7 @@
> : UpRTypes
> | VOID {
> $$.PAT = new PATypeHolder($1.T);
> - $$.S = Signless;
> + $$.S.makeSignless();
> }
> ;
>
> @@ -1798,16 +2037,16 @@
> 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 @@
> 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<const Type*> Params;
> for (std::list<llvm::PATypeInfo>::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 @@
>
> $$.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<const Type*> Elements;
> + $$.S.makeComposite();
> for (std::list<llvm::PATypeInfo>::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<const
> Type*>()));
> - $$.S = Signless;
> + $$.S.makeComposite();
> }
> | '<' '{' TypeListI '}' '>' { // Packed Structure
> type?
> + $$.S.makeComposite();
> std::vector<const Type*> Elements;
> for (std::list<llvm::PATypeInfo>::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<const
> Type*>(),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 @@
> | 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>();
> PATypeInfo VoidTI;
> VoidTI.PAT = new PATypeHolder(Type::VoidTy);
> - VoidTI.S = Signless;
> + VoidTI.S.makeSignless();
> $$->push_back(VoidTI);
> }
> | /*empty*/ {
> @@ -1958,7 +2203,7 @@
> 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 @@
> error("Type mismatch: constant sized array initialized with 0"
> " arguments, but has size of " + itostr(NumElements)
> +"");
> $$.C = ConstantArray::get(ATy, std::vector<Constant*>());
> - $$.S = $1.S;
> + $$.S.copy($1.S);
> delete $1.PAT;
> }
> | Types 'c' STRINGCONSTANT {
> @@ -1995,7 +2240,7 @@
> 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 @@
> 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 @@
> 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 @@
> if (STy->getNumContainedTypes() != 0)
> error("Illegal number of initializers for structure type");
> $$.C = ConstantStruct::get(STy, std::vector<Constant*>());
> - $$.S = $1.S;
> + $$.S.copy($1.S);
> delete $1.PAT;
> }
> | Types '<' '{' ConstVector '}' '>' {
> @@ -2077,7 +2322,7 @@
> 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 @@
> if (STy->getNumContainedTypes() != 0)
> error("Illegal number of initializers for packed structure
> type");
> $$.C = ConstantStruct::get(STy, std::vector<Constant*>());
> - $$.S = $1.S;
> + $$.S.copy($1.S);
> delete $1.PAT;
> }
> | Types NULL_TOK {
> @@ -2098,12 +2343,12 @@
> 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 @@
> //
> Function *SavedCurFn = CurFun.CurrentFunction;
> CurFun.CurrentFunction = 0;
> + $2.S.copy($1.S);
> Value *V = getExistingValue(Ty, $2);
> CurFun.CurrentFunction = SavedCurFn;
>
> @@ -2161,14 +2407,14 @@
> }
> }
> $$.C = cast<GlobalValue>(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 @@
> if (isa<FunctionType>(Ty) || Ty == Type::LabelTy ||
> isa<OpaqueType>(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 @@
> 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 @@
> : 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 @@
> error("cast constant expression to a non-primitive type: '" +
> DstTy->getDescription() + "'");
> $$.C = cast<Constant>(getCast($1, $3.C, SrcSign, DstTy,
> DstSign));
> - $$.S = DstSign;
> + $$.S.copy(DstSign);
> delete $5.PAT;
> }
> | GETELEMENTPTR '(' ConstVal IndexList ')' {
> @@ -2236,7 +2482,7 @@
>
> 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 @@
> 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 @@
> 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 @@
> }
> 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 @@
> 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 @@
> 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 @@
> // 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 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 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 @@
> $$ = $1;
> PATypeInfo VoidTI;
> VoidTI.PAT = new PATypeHolder(Type::VoidTy);
> - VoidTI.S = Signless;
> + VoidTI.S.makeSignless();
> $$->push_back(std::pair<PATypeInfo, char*>(VoidTI, 0));
> }
> | DOTDOTDOT {
> $$ = new std::vector<std::pair<PATypeInfo,char*> >();
> PATypeInfo VoidTI;
> VoidTI.PAT = new PATypeHolder(Type::VoidTy);
> - VoidTI.S = Signless;
> + VoidTI.S.makeSignless();
> $$->push_back(std::pair<PATypeInfo, char*>(VoidTI, 0));
> }
> | /* empty */ { $$ = 0; }
> @@ -2577,6 +2826,8 @@
> if (!RetTy->isFirstClassType() && RetTy != Type::VoidTy)
> error("LLVM functions cannot return aggregate types");
>
> + Signedness FTySign;
> + FTySign.makeComposite($2.S);
> std::vector<const Type*> ParamTyList;
>
> // In LLVM 2.0 the signatures of three varargs intrinsics
> changed to take
> @@ -2592,6 +2843,7 @@
> 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 @@
> } else {
> ID = ValID::create((int)CurModule.Values[PFT].size());
> }
> + ID.S.makeComposite(FTySign);
>
> Function *Fn = 0;
> Module* M = CurModule.CurrentModule;
> @@ -2644,14 +2897,16 @@
> 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 @@
> // 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 @@
> 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 @@
> "' 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 @@
> std::vector<std::pair<PATypeInfo,char*> >::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 @@
>
> 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 @@
> 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<Constant*> Elems;
> @@ -2822,6 +3086,7 @@
> }
> | ConstExpr {
> $$ = ValID::create($1.C);
> + $$.S.copy($1.S);
> }
> | ASM_TOK OptSideEffect STRINGCONSTANT ',' STRINGCONSTANT {
> char *End = UnEscapeLexed($3, true);
> @@ -2834,12 +3099,11 @@
> }
> ;
>
> -// 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 @@
> 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 @@
> //
> 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 @@
> $$ = $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 @@
>
> 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<std::pair<Constant*,BasicBlock*> >::iterator I =
> $8->begin(),
> E = $8->end();
> for (; I != E; ++I) {
> @@ -2943,24 +3219,31 @@
> 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<PointerType>($3.PAT->get())) ||
> !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
> // Pull out the types of all of the arguments...
> std::vector<const Type*> ParamTypes;
> + FTySign.makeComposite($3.S);
> if ($6) {
> for (std::vector<ValueInfo>::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 @@
> 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 @@
> 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<InvokeInst>($$)->setCallingConv(upgradeCallingConv($2));
> + cast<InvokeInst>($$.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<Constant>(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<std::pair<Constant*, BasicBlock*> >();
> + $2.S.copy($1.S);
> Constant *V = cast<Constant>(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 @@
> 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 @@
>
> PHIList : Types '[' ValueRef ',' ValueRef ']' { // Used for PHI
> nodes
> $$.P = new std::list<std::pair<Value*, BasicBlock*> >();
> - $$.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 @@
>
> 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<VectorType>(Ty))
> error("Arithmetic operator requires integer, FP, or packed
> operands");
> @@ -3120,10 +3421,12 @@
> $$.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<VectorType>(Ty) ||
> @@ -3136,10 +3439,12 @@
> $$.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<VectorType>(Ty))
> error("VectorTypes currently not supported in setcc
> instructions");
> @@ -3150,10 +3455,12 @@
> $$.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<VectorType>(Ty))
> error("VectorTypes currently not supported in icmp
> instructions");
> @@ -3162,10 +3469,12 @@
> 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<VectorType>(Ty))
> error("VectorTypes currently not supported in fcmp
> instructions");
> @@ -3174,7 +3483,7 @@
> 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 @@
> $$.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 @@
> 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 @@
> error("cast instruction to a non-primitive type: '" +
> DstTy->getDescription() + "'");
> $$.I = cast<Instruction>(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 @@
> 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 @@
> 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 @@
> 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 @@
> $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<PointerType>($3.PAT->get())) ||
> !(FTy = dyn_cast<FunctionType>(PFTy->getElementType()))) {
> // Pull out the types of all of the arguments...
> std::vector<const Type*> ParamTypes;
> + FTySign.makeComposite($3.S);
> if ($6) {
> for (std::vector<ValueInfo>::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 @@
>
> 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<Value*> Args;
> @@ -3351,7 +3668,6 @@
> // 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 @@
> CI->setTailCall($1);
> CI->setCallingConv(upgradeCallingConv($2));
> $$.I = CI;
> - $$.S = $3.S;
> }
> delete $3.PAT;
> delete $6;
> @@ -3408,25 +3723,27 @@
> 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 @@
> if (!isa<PointerType>(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<PointerType>(Ty))
> error("Can't load from nonpointer type: " + Ty-
> >getDescription());
> if (!cast<PointerType>(Ty)->getElementType()->isFirstClassType())
> @@ -3447,9 +3764,11 @@
> 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<PointerType>($5.PAT->get());
> if (!PTy)
> error("Can't store to a nonpointer type: " +
> @@ -3471,10 +3790,11 @@
> }
> }
> $$.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<PointerType>(Ty))
> error("getelementptr insn requires pointer operand");
> @@ -3484,7 +3804,8 @@
>
> 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;
> };
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list