Patch to fix unintentional(?) pessimisation in dbr_schedule

Richard Henderson rth@redhat.com
Mon Apr 5 22:37:00 GMT 2004


On Mon, Apr 05, 2004 at 11:13:44PM +0100, Richard Sandiford wrote:
>      [A] if always_true()
>            /      \
>  [B] x = foo()   eventually_abort_but_not_marked_noreturn () [C]
>            \       /
>         [D] blah(x)
[...]
>   (2) A: if always_true () goto B else goto PC
>       C: eventually_abort_but_not_marked_noreturn ()
>          goto D
>          barrier
>       B: x = foo ()
>       D: blah(x)
[...]
> Which statement and rtl expansion will get the wrong liveness
> info with IOR?  Assuming that the cfg code correctly marks
> "x" as live on entry to and exit from A and C, I think both
> techniques will correctly detect whether "x" is live.

Why should it?  Recall that this is after reload, and x might
live in a call-clobbered register.  So it's live between foo
and blah.


r~



More information about the Gcc-patches mailing list