This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: SPECfp2000's APSI hits RTL flag checking.
- From: Jim Wilson <wilson at redhat dot com>
- To: Toon Moene <toon at moene dot indiv dot nluug dot nl>
- Cc: gcc-bugs at gcc dot gnu dot org
- Date: 21 May 2002 19:58:57 -0400
- Subject: Re: SPECfp2000's APSI hits RTL flag checking.
- References: <3CE8D7BA.AB2AB024@moene.indiv.nluug.nl>
>So somewhere this array must have been filled incorrectly - but where ?
The immediately previous set is here:
integrate.c: map->x_regno_reg_rtx = inl_f->emit->x_regno_reg_rtx;
This is putting regno_reg_rtx[] of the inline function into map, for use
during inlining. See the definition of regno_reg_rtx[] in function.h.
regno_reg_rtx[] of the inline function was set when RTL was generated for
the inline function. This probably happened via a mark_reg_pointer call
somewhere during RTL generation.
It seems curious that the code is using x_regno_reg_rtx anyways. Why doesn't
the code just use REG_POINTER (orig) which is faster and more obvious? This
might be an oversight from when the code was originally written, since
REG_POINTER got introduced as a rewrite of the previous code for tracking
this info. If we don't need x_regno_reg_rtx, we can simplify the inlining
code a little. We can get rid of that field in the inline_map struct.
If there is some reason why we need to keep it, then I'd look for memory
corruption problems. Maybe the inline function's regno_reg_rtx was
accidentally freed somewhere and got reused. Or maybe it needs to be marked
as a ggc root. If the inl_f->emit->x_regno_reg_rtx[regno] value correct
when function inlining starts?
Jim