On Wed, Sep 5, 2012 at 3:18 PM, Matthew Gretton-Dann
<matthew.gretton-d...@linaro.org> wrote:
> On 5 September 2012 13:45, Richard Earnshaw <rearn...@arm.com> wrote:
>> 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 :-)
>
> I suppose removing the pass is too conservative :-)
>
>>> 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?
>
> By 'simple jump' you mean any block with at most only EDGE_FALLTHRU on the 
> edge?

No, I mean using the onlyjump_p predicate.

Ciao!
Steven

Reply via email to