On 06/14/2011 01:29 PM, Richard Guenther wrote:
> On Tue, Jun 14, 2011 at 1:16 PM, Joern Rennecke <[email protected]> wrote:
>> Quoting Richard Guenther <[email protected]>:
>>
>>> On Tue, Jun 14, 2011 at 11:40 AM, Joern Rennecke <[email protected]>
>>> wrote:
>>>>
>>>> Except or the fortran/java bits (committed), this patch hasn't been
>>>> reviewed for five weeks:
>>>> http://gcc.gnu.org/ml/gcc-patches/2011-05/msg00582.html
>>>
>>> A patch doing s/CUMULATIVE_ARGS*/cumulative_args_t/ only
>>> is ok.
>>
>> It's not quite that simple. The patch makes a distinction between pointers
>> to the target specific types CUMULATIVE_ARGS, and the target-independent
>> cumulative_args_t.
>>
>> Is it still OK if I selectively do the replacement where the
>> target-independent type is meant, and add a provisional
>> typedef CUMULATIVE_ARGS *cumulative_args_t to tie it together?
>>
>>> Posting compressed attached patches makes it too easy
>>> to not review things btw ...
>>
>> The mailing list size limits did't allow this patch to be posted
>> without compression.
>>
>>> After that patch the "meat" of the patch should be much much smaller
>>> and easier to review (if there is anything left besides the renaming?).
>>
>> It should be somewhat smaller, but there are lots of places where we have
>> to convert between cumulative_args_t and CUMULATIVE_ARGS *.
>> Were a target-independent interface is required, we need cumulative_args_t .
>> Where a target accesses struct components, it needs CUMULATIVE_ARGS *.
>> There are some places that just pass CUMULATIVE_ARGS * around, both in
>> rtl-centric middle-end/ rtl-optimizer code and in target code, which
>> could be electively converted. In general, I haven't done such optional
>> conversions. They could be added according to taste once the interface
>> has been straightened out. There is also a judgement call in each place
>> how closely the code is tied to the cumulative_args_t side or the
>> CUMULATIVE_ARGS * side.
>
> Hmm, I see. Maybe a GWP wants to ack your patch in whole then.
I'm not getting the point of the use of attribute((transparent_union)).
That should be removed to eliminate potential differences when compiling
other compilers, and to eliminate a potential source of bugs when
passing cumulative_args_t arguments.
Some of the formatting changes to avoid long lines are unfortunate (and
it's not done consistently); I think I'd prefer to add temporary
variables to hold the return value of pack_cumulative_args and
get_cumulative_args.
- targetm.calls.setup_incoming_varargs (&all->args_so_far,
- data->promoted_mode,
- data->passed_type,
- &varargs_pretend_bytes, no_rtl);
+ (targetm.calls.setup_incoming_varargs
+ (pack_cumulative_args (&all->args_so_far), data->promoted_mode,
+ data->passed_type, &varargs_pretend_bytes,
no_rtl));
No need for parentheses around the expression. Occurs in three places.
See previous comment about using temporary variables to avoid ugly
formatting.
I think it would be best just to minimize changes in backends as much as
possible by using the following pattern everywhere:
static void
-ix86_function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode,
+ix86_function_arg_advance (cumulative_args_t cum_v, enum machine_mode mode,
const_tree type, bool named)
{
+ CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
I.e., avoid changes such as the one in mn10300_function_arg_advance.
Also,
- if (iq2000_function_arg (&temp, mode, type, named) != 0)
+ if (iq2000_function_arg (pack_cumulative_args (&temp), mode,
type, named) != 0)
Extra tab character before !=.
- if (targetm.calls.strict_argument_naming (arg_regs_used_so_far))
+ /* ??? the code inside is a pointer increment. */
+ if (targetm.calls.strict_argument_naming (arg_regs_used_so_far_v))
What does this comment mean?
Finally, I could do without the comments squished to the right-hand side
like this:
+#include "tm.h" /* For INTMAX_TYPE, INT8_TYPE,
INT16_TYPE, INT32_TYPE,
+ INT64_TYPE, INT_LEAST8_TYPE, INT_LEAST16_TYPE,
+ INT_LEAST32_TYPE, INT_LEAST64_TYPE,
INT_FAST8_TYPE,
+ INT_FAST16_TYPE, INT_FAST32_TYPE,
INT_FAST64_TYPE,
+ BOOL_TYPE_SIZE, BITS_PER_UNIT, POINTER_SIZE,
+ INT_TYPE_SIZE, CHAR_TYPE_SIZE, SHORT_TYPE_SIZE,
+ LONG_TYPE_SIZE, LONG_LONG_TYPE_SIZE,
+ FLOAT_TYPE_SIZE, DOUBLE_TYPE_SIZE,
+ LONG_DOUBLE_TYPE_SIZE and
LIBGCC2_HAS_TF_MODE. */
(I could do without these comments entirely but I see from the archives
that Joseph requested it.)
With these changes I think it'll be OK, but I'd like to see a new patch
version first.
Bernd