This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH]: Fix PR29201 - [4.2 Regression] ICE in create_recovery_block, at haifa-sched.c:3692 at -O3
- From: Ian Lance Taylor <iant at google dot com>
- To: Maxim Kuvyrkov <mkuvyrkov at ispras dot ru>
- Cc: Vladimir Makarov <vmakarov at redhat dot com>, gcc-patches at gcc dot gnu dot org, fang at csl dot cornell dot edu
- Date: 03 Oct 2006 08:26:15 -0700
- Subject: Re: [PATCH]: Fix PR29201 - [4.2 Regression] ICE in create_recovery_block, at haifa-sched.c:3692 at -O3
- References: <4520109E.3090800@ispras.ru>
Maxim Kuvyrkov <mkuvyrkov@ispras.ru> writes:
> The bug due to lack of handling of table jumps during speculative
> scheduling on ia64. There is assert that fails when a basic block
> that doesn't have a fallthrough successor is not immediately followed
> by a barrier. The table jumps have that barrier but a little later.
> The fix simply searches for that barrier.
> 2006-10-01 Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
>
> PR target/29201
> * haifa-sched.c (get_barrier): New static function.
> (create_recovery_block): Use it.
> (extend_bb): Clear BLOCK_FOR_INSN for note that is out of the block.
All of this code is kind of ugly, but I don't particularly like this
solution. I think that you should not change extend_bb nor add
get_barrier. In create_recovery_block, just write
barrier = next_nonnote_insn (BB_END (before_recovery));
gcc_assert (BARRIER_P (barrier));
It seems like that should fix this relatively cleanly.
Ian