[PATCH] Fix bootstrap failure on s390x-linux - ICE with __morestack side-effect jump (PR bootstrap/79069)

Jeff Law law@redhat.com
Thu Jan 12 21:10:00 GMT 2017


On 01/12/2017 01:24 PM, Jakub Jelinek wrote:
> Hi!
>
> The RTL verification in rtl_verify_edges as well as various other routines
> in cfgrtl.c etc. require that any_uncondjump_p jumps never have fallthru
> edges - even if their destination is right after them, there still needs to
> be barrier in between them and code_label after that.
> rtl_tidy_fallthru_edge can violate this.
> If
>   if (JUMP_P (q)
>       && onlyjump_p (q)
>       && (any_uncondjump_p (q)
>           || single_succ_p (b)))
> it will delete also the JUMP_INSN and everything is fine, but if
> any_uncondjump_p (q) is true, but onlyjump_p (q) is false, we can't remove
> the jump (as is the case of the split_stack_call_<mode> insn), but still
> remove the barrier and make the edge EDGE_FALLTHRU, which then violates
> the verification, or with --enable-checking=rtl, ICEs later in
> fixup_reorder_chain.
>
> The following patch avoids doing that, if it is any_uncondjump_p that can't
> have fallthru edges, either we manage to remove the jump, or we don't tidy
> anything.
>
> Bootstrapped/regtested on x86_64-linux, i686-linux and bootstrapped on
> s390x-linux (regtests there still ongoing).  Ok for trunk if the regtests
> pass there?
>
> 2017-01-12  Jakub Jelinek  <jakub@redhat.com>
>
> 	PR bootstrap/79069
> 	* cfgrtl.c (rtl_tidy_fallthru_edge): For any_uncondjump_p that can't
> 	be removed due to side-effects, don't remove following barrier nor
> 	turn the successor edge into fallthru edge.
Presumably it makes more sense to filter these cases out here rather 
than in the callers.

OK.

jeff



More information about the Gcc-patches mailing list