This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [0/10] Replace host_integerp and tree_low_cst


On Mon, Nov 18, 2013 at 10:08 AM, Richard Sandiford
<rdsandiford@googlemail.com> wrote:
> Jeff Law <law@redhat.com> writes:
>> On 11/16/13 05:53, Richard Sandiford wrote:
>>> After the patch that went in yesterday, all calls to host_integerp and
>>> tree_low_cst pass a constant "pos" argument.  This series replaces each
>>> function with two separate ones:
>> [ ... ]
>> So I've almost entirely ignored the whole wide-int conversion discussion
>> and I suspect I'm not entirely alone.
>>
>> Can you briefly summarize what's y'all are trying to accomplish with the
>> wide-int changes?
>
> At the moment, we can only handle tree and rtl integer constants that
> fit in 2 HOST_WIDE_INTs.  The idea is to remove that limit.  E.g. things
> like OImode (used in a few ports) will become a first-class citizen,
> with all OImode values being representable.
>
> Besides that headline reason, there are various side benefits.  E.g.:
>
> - All INTEGER_CSTs can be viewed either in their TYPE_PRECISION or in
>   "infinite" precision, which isn't possible for 128-bit constants today.
>   (I.e. there's no way to distinguish signed and unsigned 128-bit constants
>   in a double_int.)
>
> - Wider-than-2-HWI intermediate results can be represented as a single
>   integer.  I'm told this is useful for VRP.  (wide-int is mostly Kenny
>   and Mike's work, I've just been butting in recently.)
>
> - rtl-level constant folding can use the same code to handle all
>   combinations of CONST_INT and CONST_DOUBLE (and CONST_WIDE_INT,
>   on converted ports).  At the moment we handle CONST_INT cases
>   specially, and don't try as hard with CONST_DOUBLEs.
>
> Implementation-wise, it tries to make it so that the common single-HWI
> cases are still fast.

Sadly CONST_WIDE_INTs don't get a mode:

rtx
immed_wide_int_const (const wide_int &v, enum machine_mode mode)
{
...
    /* It is so tempting to just put the mode in here.  Must control
       myself ... */
    PUT_MODE (value, VOIDmode);
    CWI_PUT_NUM_ELEM (value, len);

so much for an incentive to get more targets converted...
(only after all targets are converted we possibly can merge CONST_INT
and CONST_WIDE_INT).

Richard.

> Thanks,
> Richard


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]