This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA 2/n] Don't lift loads above register using jumps in postreload-gcse.c


On 05/09/12 13:02, Steven Bosscher wrote:
> On Wed, Sep 5, 2012 at 1:42 PM, Matthew Gretton-Dann wrote:
>> Whilst this fix works for this particular case I am not sure it is the
>> best fix for the general issue, and so if others have a better idea how
>> to fix this I would be very happy.
> 
> postreload-gcse.c is broken in "interesting" ways. Look at this gem for example:
> 
> static bool
> reg_changed_after_insn_p (rtx x, int cuid)
> {
>   unsigned int regno, end_regno;
> 
>   regno = REGNO (x);
>   end_regno = END_HARD_REGNO (x);
>   do
>     if (reg_avail_info[regno] > cuid)
>       return true;
>   while (++regno < end_regno);
>   return false;
> }
> 
> So the more conservative the fix, the better :-)
> 
> The patch looks correct to me. But perhaps the pass should just punt
> on blocks not ending in a simple jump in
> bb_has_well_behaved_predecessors?
> 
> Ciao!
> Steven
> 


That sort of makes sense.  Why would we ever want to hoist an insn out
of a cold block into a hot one?  I could see it making sense to do the
reverse on occasion, but clearly care is needed here.

R.




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]