On 10/29/2011 09:17 PM, Tom de Vries wrote:
> Richard,
>
> I have a tentative fix for PR50764.
>
> In the example from the test-case, -fsched2-use-superblocks moves an insn from
> block 4 to block 3.
>
> 2
> bar
> |
> -------+-----
> / \
> * *
> 5 *------------ 3
> abort bar
> |
> |
> *
> 4
> return
>
>
> The insn has a REG_CFA_DEF_CFA note and is frame-related.
> ...
> (insn/f 51 50 52 4 (set (reg:DI 39 r10)
> (mem/c:DI (plus:DI (reg/f:DI 6 bp)
> (const_int -8 [0xfffffffffffffff8])) [3 S8 A8])) pr50764.c:13
> 62 {*movdi_internal_rex64}
> (expr_list:REG_CFA_DEF_CFA (reg:DI 39 r10)
> (nil)))
> ...
>
> This causes the assert in maybe_record_trace_start to trigger:
> ...
> /* We ought to have the same state incoming to a given trace no
> matter how we arrive at the trace. Anything else means we've
> got some kind of optimization error. */
> gcc_checking_assert (cfi_row_equal_p (cur_row, ti->beg_row));
> ...
>
> The assert does not occur with -fno-tree-tail-merge, but that is due to the
> following:
> - -fsched-use-superblocks does not handle dead labels explicitly
> - -freorder-blocks introduces a dead label, which is not removed until after
> sched2
> - -ftree-tail-merge makes a difference in which block -freorder-blocks
> introduces the dead label. In the case of -ftree-tail-merge, the dead label
> is introduced at the start of block 3, and block 3 and 4 end up in the same
> ebb. In the case of -fno-tree-tail-merge, the dead label is introduced at
> the
> start of block 4, and block 3 and 4 don't end up in the same ebb.
>
> attached untested patch fixes PR50764 in a similar way as the patch for
> PR49994,
> which is also about an ICE in maybe_record_trace_start with
> -fsched2-use-superblocks.
>
> The patch for PR49994 makes sure frame-related instructions are not moved past
> the following jump.
>
> Attached patch makes sure frame-related instructions are not moved past the
> preceding jump.
>
> Is this the way to fix this PR?
>
Bootstrapped and reg-tested on x86_64.
Ok for trunk?
Thanks,
- Tom
> Thanks,
> - Tom
>
> 2011-10-29 Tom de Vries <[email protected]>
>
> PR rtl-optimization/50764
> * (sched_analyze_insn): Make sure frame-related insns are not moved past
> preceding jump.
>
>
>