]> gcc.gnu.org Git - gcc.git/commitdiff
a29k.h (ELIGIBLE_FOR_EPILOGUE_DELAY): Avoid loads from varying addresses in the epilo...
authorJ"orn Rennecke <amylaar@cygnus.co.uk>
Sun, 9 Nov 1997 08:59:55 +0000 (08:59 +0000)
committerJeff Law <law@gcc.gnu.org>
Sun, 9 Nov 1997 08:59:55 +0000 (01:59 -0700)
        * a29k.h (ELIGIBLE_FOR_EPILOGUE_DELAY): Avoid loads from varying
        addresses in the epilogue delay slot.

From-SVN: r16394

gcc/ChangeLog
gcc/config/a29k/a29k.h

index 6b2ac810124d9d1a9331a52440b26964ea5b9bc4..2541b830dc2b9523a662c5d132b5b29f89c43b6e 100644 (file)
@@ -1,3 +1,8 @@
+Sun Nov  9 02:00:29 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * a29k.h (ELIGIBLE_FOR_EPILOGUE_DELAY): Avoid loads from varying
+       addresses in the epilogue delay slot.
+
 Sun Nov  9 01:40:40 1997  Manfred Hollstein  (manfred@s-direktnet.de)
 
        * m88k/dgux.h (ASM_CPU_SPEC): Reformatted to suppress wrong whitespace
index 59e9a13d628c5db6eca99795ab41faa192418818..db6e378d252c350788b72564050e44bfd6e763aa 100644 (file)
@@ -987,13 +987,18 @@ extern char *a29k_function_name;
 
    On the 29k, we must be able to place it in a delay slot, it must
    not use sp if the frame pointer cannot be eliminated, and it cannot
-   use local regs if we need to push the register stack.  */
+   use local regs if we need to push the register stack.
+   If this is a SET with a memory as source, it might load from
+   a stack slot, unless the address is constant.  */
 
 #define ELIGIBLE_FOR_EPILOGUE_DELAY(INSN,N)                            \
   (get_attr_in_delay_slot (INSN) == IN_DELAY_SLOT_YES                  \
    && ! (frame_pointer_needed                                          \
         && reg_mentioned_p (stack_pointer_rtx, PATTERN (INSN)))        \
-   && ! (needs_regstack_p () && uses_local_reg_p (PATTERN (INSN))))
+   && ! (needs_regstack_p () && uses_local_reg_p (PATTERN (INSN)))     \
+   && (GET_CODE (PATTERN (INSN)) != SET                                        \
+       || GET_CODE (SET_SRC (PATTERN (INSN))) != MEM                   \
+       || ! rtx_varies_p (XEXP (SET_SRC (PATTERN (INSN)), 0))))
 \f
 /* Output assembler code for a block containing the constant parts
    of a trampoline, leaving space for the variable parts.
This page took 0.07176 seconds and 5 git commands to generate.