[llvm-commits] CVS: llvm/tools/llvm-upgrade/UpgradeLexer.cpp.cvs UpgradeLexer.l.cvs UpgradeParser.cpp.cvs UpgradeParser.h.cvs UpgradeParser.y.cvs
Reid Spencer
rspencer at reidspencer.com
Thu Mar 22 02:07:41 PDT 2007
On Thu, 2007-03-22 at 00:42 -0700, Evan Cheng wrote:
> Reid,
>
> Shouldn't Signedness::dump be wrapped in #ifndef NDEBUG? I think this
> is breaking non-debug builds.
Yeah, sorry about that .. 1/2 done change. I was actually going the
other way .. remove the #ifdef from the declaration so the function is
always there. Its not like its a critical space-sensitive library :)
But, what you did is fine.
Thanks for fixing it.
Reid.
>
> 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