> 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 <[email protected]>
>
> 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