[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