On Thu, Oct 13, 2016 at 10:34 AM, Andre Vieira (lists) <andre.simoesdiasvie...@arm.com> wrote: > >> That is correct. In RTL constants are always sign-extended from their >> precision to HOST_BITS_PER_WIDE_INT, regardless if it is "signed" or >> "unsigned" constant. Whether you treat the low precision bits of the >> constant as signed or unsigned is something encoded in the operation on it. >> >> Jakub >> > Euhm, but then surely we must get rid of the is_sign_extended parameter > altogether? > > Right now if you call that function for the same example, but with > is_sign_extended set to true, the value will __NOT__ be sign extended.
I believe that is an optimization to cater for the difference between the internal storage used for INTEGER_CST trees and CONST_INT RTLs. INTEGER_CSTs representation is _not_ sign-extended (but it carries precision and sign information). Both CONST_INT and INTEGER_CST can be accessed as wide-ints without copying the storage via some clever adaptor use but users need to care about this subtle difference. Richard.