[PATCH] Fix PR 44919
Andrey Belevantsev
abel@ispras.ru
Tue Aug 24 10:55:00 GMT 2010
Hello,
As noted in the PR, when we have added support for moving insns through
mutually exclusive insns, it was made possible to move conditional jumps
across block boundaries. But we didn't fix move_cond_jump accordingly, as
it assumes that the jump can be moved only through insns in the same block.
The fix is to support moving a jump through series of fallthru blocks which
all have only mutually exclusive insns with a jump. So to do this, the
failing assert was changed to an enable-checking code that ensures the
several blocks case only happens with mutually exclusive insns, that the
actual code to do movement is rewritten via reorder_insns instead of manual
twiddling with PREV/NEXT_INSN and df_insn_change_bb.
Now, the ICE can be seen only on 4.4 branch, on trunk the problematic code
is not generated, so I wonder how we got in 4.4 a series of fallthru basic
blocks in first place, they seem to exist before the scheduler is run.
Anyways, even for the branch the fix seems to be quite safe.
Bootstrap and test on ia64 is in progress. OK for trunk if it succeeds?
4.4? The patch misses adding a test case from PR, this will be done of course.
Thanks, Andrey
2010-08-24 Andrey Belevantsev <abel@ispras.ru>
PR rtl-optimization/44919
* sel-sched.c (move_cond_jump): Remove assert, check that
the several blocks case can only happen with mutually exclusive
insns instead. Rewrite the movement code to support moving through
several basic blocks.
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: pr44919-context
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20100824/9d88f71f/attachment.ksh>
More information about the Gcc-patches
mailing list