> This removes the TYPE_IS_SIZETYPE macro and all its uses (by
> assuming it returns zero and applying trivial folding).  Sizes
> and bitsizes can still be treat specially by means of knowing
> what the values represent and by means of using helper functions
> that assume you are dealing with "sizes" (in particular size_binop
> and friends and bit_from_pos, byte_from_pos or pos_from_bit).

Fine with me, if you add the blurb I talked about in the other reply.

> Bootstrapped and tested on x86_64-unknown-linux-gnu for all languages
> including Ada with the patch optimizing bute_from_pos and pos_from_bit

Results on our internal testsuite are clean on x86-64 and almost clean on x86, 
an exception being:

package t is
    type x (m : natural) is record
        s : string (1 .. m);
        r : natural;
        b : boolean;
    end record;
    for x'alignment use 4;

    pragma Pack (x);
end t;

Without the patches, compiling the package with -gnatR3 yields:

Representation information for unit t (spec)
--------------------------------------------

for x'Object_Size use 17179869248;
for x'Value_Size use  ((#1 + 8) * 8) ;
for x'Alignment use 4;
for x use record
   m at  0 range  0 .. 30;
   s at  4 range  0 ..  ((#1 * 8))  - 1;
   r at bit offset (((#1 + 4) * 8))  size in bits = 31
   b at bit offset ((((#1 + 7) * 8) + 7))  size in bits = 1
end record;

With the patches, this yields:

Representation information for unit t (spec)
--------------------------------------------

for x'Object_Size use 17179869248;
for x'Value_Size use  (((#1 + 7) + 1) * 8) ;
for x'Alignment use 4;
for x use record
   m at  0 range  0 .. 30;
   s at  4 range  0 ..  ((#1 * 8))  - 1;
   r at bit offset (((#1 + 4) * 8))  size in bits = 31
   b at bit offset ((((#1 + 7) * 8) + 7))  size in bits = 1
end record;

so we have lost a simple folding for x'Value_Size (TYPE_ADA_SIZE field).

> 2012-05-08  Richard Guenther  <rguent...@suse.de>
>
>       ada/
>       * gcc-interface/cuintp.c (UI_From_gnu): Remove TYPE_IS_SIZETYPE use.

OK, modulo the formatting:

> Index: trunk/gcc/ada/gcc-interface/cuintp.c
> ===================================================================
> *** trunk.orig/gcc/ada/gcc-interface/cuintp.c 2011-04-11 17:01:30.000000000
> +0200 --- trunk/gcc/ada/gcc-interface/cuintp.c        2012-05-07
> 16:43:43.497218058 +0200 *************** UI_From_gnu (tree Input)
> *** 178,186 ****
>     if (host_integerp (Input, 0))
>       return UI_From_Int (TREE_INT_CST_LOW (Input));
>     else if (TREE_INT_CST_HIGH (Input) < 0
> !        && TYPE_UNSIGNED (gnu_type)
> !        && !(TREE_CODE (gnu_type) == INTEGER_TYPE
> !             && TYPE_IS_SIZETYPE (gnu_type)))
>       return No_Uint;
>   #endif
>
> --- 178,184 ----
>     if (host_integerp (Input, 0))
>       return UI_From_Int (TREE_INT_CST_LOW (Input));
>     else if (TREE_INT_CST_HIGH (Input) < 0
> !        && TYPE_UNSIGNED (gnu_type))
>       return No_Uint;
>   #endif

&& TYPE_UNSIGNED (gnu_type)) on the same line.

-- 
Eric Botcazou

Reply via email to