re PR target/85666 (gcc-8.0.1 fails to build mmix target: gcc/libgcc/libgcc2.h:203...
authorHans-Peter Nilsson <hp@bitrange.com>
Sun, 9 Sep 2018 18:05:48 +0000 (18:05 +0000)
committerHans-Peter Nilsson <hp@gcc.gnu.org>
Sun, 9 Sep 2018 18:05:48 +0000 (18:05 +0000)
PR target/85666
* config/mmix/mmix.c (MMIX_CFUN_NEEDS_SAVED_EH_RETURN_ADDRESS): Don't
call leaf_function_p, instead use has_hard_reg_initial_val.

From-SVN: r264182

gcc/ChangeLog
gcc/config/mmix/mmix.c

index e8b623711f62f7725a704c04460fd2e8ac47b42e..270c67e37b232d9548cff9f90ca7b268742551ae 100644 (file)
@@ -1,3 +1,9 @@
+2018-09-09  Hans-Peter Nilsson  <hp@bitrange.com>
+
+       PR target/85666
+       * config/mmix/mmix.c (MMIX_CFUN_NEEDS_SAVED_EH_RETURN_ADDRESS): Don't
+       call leaf_function_p, instead use has_hard_reg_initial_val.
+
 2018-09-09  Nathan Sidwell  <nathan@acm.org>
 
        * gcc.h (pfatal_with_name): Don't declare here.
index 9da826ca926d241d14c1a551292899f7b2ac2901..5ee9930620c32eea6c5761f01dc729027b3c46a2 100644 (file)
@@ -60,19 +60,16 @@ along with GCC; see the file COPYING3.  If not see
 
 /* We have no means to tell DWARF 2 about the register stack, so we need
    to store the return address on the stack if an exception can get into
-   this function.  FIXME: Narrow condition.  Before any whole-function
-   analysis, df_regs_ever_live_p () isn't initialized.  We know it's up-to-date
-   after reload_completed; it may contain incorrect information some time
-   before that.  Within a RTL sequence (after a call to start_sequence,
-   such as in RTL expanders), leaf_function_p doesn't see all insns
-   (perhaps any insn).  But regs_ever_live is up-to-date when
-   leaf_function_p () isn't, so we "or" them together to get accurate
-   information.  FIXME: Some tweak to leaf_function_p might be
-   preferable.  */
+   this function.  We'll have an "initial value" recorded for the
+   return-register if we've seen a call instruction emitted.  This note
+   will be inaccurate before instructions are emitted, but the only caller
+   at that time is looking for modulo from stack-boundary, to which the
+   return-address does not contribute, and which is always 0 for MMIX
+   anyway.  Beware of calling leaf_function_p here, as it'll abort if
+   called within a sequence.  */
 #define MMIX_CFUN_NEEDS_SAVED_EH_RETURN_ADDRESS                        \
  (flag_exceptions                                              \
-  && ((reload_completed && df_regs_ever_live_p (MMIX_rJ_REGNUM))       \
-      || !leaf_function_p ()))
+  && has_hard_reg_initial_val (Pmode, MMIX_INCOMING_RETURN_ADDRESS_REGNUM))
 
 #define IS_MMIX_EH_RETURN_DATA_REG(REGNO)      \
  (crtl->calls_eh_return                \