From: Jeff Law Date: Tue, 13 Feb 2018 03:07:04 +0000 (-0700) Subject: re PR target/83760 ([SH] ICE in maybe_record_trace_start building glibc tst-copy_file... X-Git-Tag: basepoints/gcc-9~1252 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8df1868d92b45fb257bd09bc8cd8af3baff0ae85;p=thirdparty%2Fgcc.git re PR target/83760 ([SH] ICE in maybe_record_trace_start building glibc tst-copy_file_range.c) PR target/83760 * config/sh/sh.c (find_barrier): Consider a sibling call a barrier as well. From-SVN: r257611 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d5913d0a7db5..a74c8610443b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2018-02-12 Jeff Law + PR target/83760 + * config/sh/sh.c (find_barrier): Consider a sibling call + a barrier as well. + * cse.c (try_back_substitute_reg): Move any REG_ARGS_SIZE note when successfully back substituting a reg. diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 48e99a3cadf1..90d6c733d335 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -5233,10 +5233,22 @@ find_barrier (int num_mova, rtx_insn *mova, rtx_insn *from) CALL_ARG_LOCATION note. */ if (CALL_P (from)) { + bool sibcall_p = SIBLING_CALL_P (from); + rtx_insn *next = NEXT_INSN (from); if (next && NOTE_P (next) && NOTE_KIND (next) == NOTE_INSN_CALL_ARG_LOCATION) from = next; + + /* If FROM was a sibling call, then we know that control + will not return. In fact, we were guaranteed to hit + a barrier before another real insn. + + The jump around the constant pool is unnecessary. It + costs space, but more importantly it confuses dwarf2cfi + generation. */ + if (sibcall_p) + return emit_barrier_after (from); } from = emit_jump_insn_after (gen_jump (label), from);