[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