[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