[ping][PATCH][1 of 2] Add value range info to SSA_NAME for zero sign extension elimination in RTL
Kugan
kugan.vivekanandarajah@linaro.org
Thu Sep 19 07:25:00 GMT 2013
Thanks Richard for the review.
On 18/09/13 18:55, Richard Biener wrote:
> On Wed, 18 Sep 2013, Kugan wrote:
>
>>
>> Thanks Richard for the review.
>> On 16/09/13 23:43, Richard Biener wrote:
>>> On Mon, 16 Sep 2013, Kugan wrote:
>>>
[Snip]
>>
>> +2013-09-17 Kugan Vivekanandarajah <kuganv@linaro.org>
>> +
>> + * gimple-pretty-print.c (dump_ssaname_info) : New function.
>> + * gimple-pretty-print.c (dump_gimple_phi) : Dump range info.
>> + * (pp_gimple_stmt_1) : Likewise.
>
> ChangeLog should be formated
>
> * gimple-pretty-print.c (dump_ssaname_info): New function.
> (dump_gimple_phi): Call it.
> (pp_gimple_stmt_1: Likewise.
> * tree-pretty-print.c (dump_intger_cst_node): New function.
> ...
>
>
> + pp_printf (buffer, "# RANGE ");
> + pp_printf (buffer, "%s[", range_type == VR_RANGE ? "" : "~");
> + dump_intger_cst_node (buffer,
> + double_int_to_tree (TREE_TYPE (node),
> min));
>
> I was asking for a pp_double_int, not a dump_integer_cst_node function
> as now you are creating a tree node in GC memory just to dump its
> contents ... pp_double_int needs to be passed information on the
> signedness of the value. It would roughly look like
>
Sorry, I understood it wrong.
> pp_double_int (pretty_printer *pp, double_int d, bool uns)
> {
> if (d.fits_shwi ())
> pp_wide_integer (pp, d.low);
> else if (d.fits_uhwi ())
> pp_unsigned_wide_integer (pp, d.low);
> else
> {
> unsigned HOST_WIDE_INT low = d.low;
> HOST_WIDE_INT high = d.high;
> if (!uns && d.is_negative ())
> {
> pp_minus (pp);
> high = ~high + !low;
> low = -low;
> }
> /* Would "%x%0*x" or "%x%*0x" get zero-padding on all
> systems? */
> sprintf (pp_buffer (pp)->digit_buffer,
> HOST_WIDE_INT_PRINT_DOUBLE_HEX,
> (unsigned HOST_WIDE_INT) high, low);
> pp_string (pp, pp_buffer (pp)->digit_buffer);
> }
> }
>
> and the INTEGER_CST case would use it like
>
> if (TREE_CODE (TREE_TYPE (node)) == POINTER_TYPE)
> ...
> else
> pp_double_int (buffer, tree_to_double_int (node),
> TYPE_UNSIGNED (TREE_TYPE (node)));
>
>
> +enum value_range_type
> +get_range_info (tree name, double_int *min, double_int *max)
> +{
>
> ah, I see you have already made an appropriate change here.
>
> + /* Check for an empty range with minimum zero (of type
> + unsigned) that will wraparround. */
> + if (!(TYPE_UNSIGNED (TREE_TYPE (name))
> + && integer_zerop (vr_value[i]->min)))
> + set_range_info (name,
> + tree_to_double_int (vr_value[i]->max)
> + + double_int_one,
> + tree_to_double_int (vr_value[i]->min)
> + - double_int_one);
>
> Yeah, I think ~[0,0] is the only anti-range that can be represented as
> range that we keep. So maybe
>
> if (TYPE_UNSIGNED (TREE_TYPE (name))
> && integer_zerop (vr_value[i]->min)
> && integer_zerop (vr_value[i]->max))
> set_range_info (name,
> double_int_one,
> double_int::max_value
> (TYPE_PRECISION (TREE_TYPE (name)), true));
> else
> set_range_info (name,
> + tree_to_double_int (vr_value[i]->max)
> + + double_int_one,
> + tree_to_double_int (vr_value[i]->min)
> + - double_int_one);
>
> to preserve ~[0,0] which looks like an important case when for example
> looking at a divisor in a division.
>
> Ok with those changes.
>
I have changed all of the above in the attached patch and ChangeLog. If
this is OK, could someone please commit it for me. I donÂ’t have access
to commit it.
Bootstrapped and regtested on x86_64-unknown-linux-gnu and arm-none
linux-gnueabi.
Thanks,
Kugan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ChangeLog.diff
Type: text/x-patch
Size: 1169 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20130919/3db9140e/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: vrp_extension_elimination_patch1_r6.diff
Type: text/x-patch
Size: 18135 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20130919/3db9140e/attachment-0001.bin>
More information about the Gcc-patches
mailing list