[vta,trunk?] inlining gen_rtvec_v into gen_rtvec warns
Paolo Bonzini
bonzini@gnu.org
Tue Aug 12 15:33:00 GMT 2008
Richard Guenther wrote:
> 2008/8/12 Alexandre Oliva <aoliva@redhat.com>:
>> Bootstrapping with -O3 on x86/64? causes gen_rtvec_v() to be inlined
>> into gen_rtvec(). This in turns causes the test for n == 0, already
>> performed in the caller, to be warned about, since it's always false.
>> I don't think it is appropriate to warn in this case, but this patches
>> permits bootstrap with -O3 to succeed.
>>
>> I'm installing it on the branch. Should I install it on the trunk as
>> well?
>
> Why not fix gen_rtvec instead to not allocate the temporary array
> on the stack?
You mean inlining gen_rtvec_v into gen_rtvec like this (totally untested)?
I could not resist the urge of replacing code dating to...
471 rms /* gen_rtvec (n, [rt1, ..., rtn])
r471 | rms | 1992-03-14 06:04:21 +0100 (Sat, 14 Mar 1992) | 2 lines
Paolo
Index: emit-rtl.c
===================================================================
--- emit-rtl.c (revision 134435)
+++ emit-rtl.c (working copy)
@@ -793,35 +793,29 @@ gen_lowpart_SUBREG (enum machine_mode mo
subreg_lowpart_offset (mode, inmode));
}
-/* gen_rtvec (n, [rt1, ..., rtn])
-**
-** This routine creates an rtvec and stores within it the
-** pointers to rtx's which are its arguments.
-*/
+/* Create an rtvec and stores within it the RTXen passed in the
arguments. */
-/*VARARGS1*/
rtvec
gen_rtvec (int n, ...)
{
- int i, save_n;
- rtx *vector;
+ int i;
+ rtvec rt_val;
va_list p;
va_start (p, n);
+ /* Don't allocate an empty rtvec... */
if (n == 0)
- return NULL_RTVEC; /* Don't allocate an empty rtvec... */
+ return NULL_RTVEC;
- vector = alloca (n * sizeof (rtx));
+ rt_val = rtvec_alloc (n);
for (i = 0; i < n; i++)
- vector[i] = va_arg (p, rtx);
+ rt_val->elem[i] = va_arg (p, rtx);
- /* The definition of VA_* in K&R C causes `n' to go out of scope. */
- save_n = n;
va_end (p);
- return gen_rtvec_v (save_n, vector);
+ return rt_val;
}
rtvec
@@ -830,10 +824,11 @@ gen_rtvec_v (int n, rtx *argp)
int i;
rtvec rt_val;
+ /* Don't allocate an empty rtvec... */
if (n == 0)
- return NULL_RTVEC; /* Don't allocate an empty rtvec... */
+ return NULL_RTVEC;
- rt_val = rtvec_alloc (n); /* Allocate an rtvec... */
+ rt_val = rtvec_alloc (n);
for (i = 0; i < n; i++)
rt_val->elem[i] = *argp++;
More information about the Gcc-patches
mailing list