On Thu, 17 Oct 2013, Kenneth Zadeck wrote:

> On 10/17/2013 10:05 AM, Richard Sandiford wrote:
> > Richard Biener <rguent...@suse.de> writes:
> > > > > What's the reason again to not use my original proposed encoding
> > > > > of the MSB being the sign bit?  RTL constants simply are all signed
> > > > > then.  Just you have to also sign-extend in functions like lts_p
> > > > > as not all constants are sign-extended.  But we can use both tree
> > > > > (with the now appended zero) and RTL constants representation
> > > > > unchanged.
> > > > The answer's the same as always.  RTL constants don't have a sign.
> > > > Any time we extend an RTL constant, we need to say whether the extension
> > > > should be sign extension or zero extension.  So the natural model for
> > > > RTL is that an SImode addition is done to SImode width, not some
> > > > arbitrary wider width.
> > > RTL constants are sign-extended (whether you call them then "signed"
> > > is up to you).  They have a precision.  This is how they are
> > > valid reps for wide-ints, and that doesn't change.
> > > 
> > > I was saying that if we make not _all_ wide-ints sign-extended
> > > then we can use the tree rep as-is.  We'd then have the wide-int
> > > rep being either zero or sign extended but not arbitrary random
> > > bits outside of the precision (same as the tree rep).
> > OK, but does that have any practical value over leaving them arbitrary,
> > as in Kenny's original implementation?  Saying that upper bits can be
> > either signs or zeros means that readers wouldn't be able to rely on
> > one particular extension (so would have to do the work that they did
> > in Kenny's implementation).  At the same time it means that writers
> > can't leave the upper bits in an arbitrary state, so would have to
> > make sure that they are signs or zeros (presumably having a free
> > choice of which).
> > 
> > Thanks,
> > Richard
> > 
> not so easy here.    We would still need to clean things up when we convert
> back to tree-cst or rtl at least for the short precisions.    Otherwise, the

Sure.  But wide-int to tree / RTL is already expensive as we're going to
allocate memory and copy the rep anyway (and modify-on-copy makes the
modify part almost free I'd say).

> parts of the compiler that look inside of trees, in particular the hash
> functions have to clean the value them selves.
> 
> As much as my arm still hurts from richi forcing me to change this, it is true
> that it seems to have been the right thing to do.
> 
> the change for the wider unsigned trees perhaps should be backed out.

Yeah, I suppose we can avoid the 2nd copy for the fixed_wide_int
interface in other ways.

Richard.

Reply via email to