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