]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
sh.c (sh_can_use_simple_return_p): Return false for SHmedia and SHcompact using call_...
authorKaz Kojima <kkojima@gcc.gnu.org>
Thu, 4 Oct 2012 03:03:12 +0000 (03:03 +0000)
committerKaz Kojima <kkojima@gcc.gnu.org>
Thu, 4 Oct 2012 03:03:12 +0000 (03:03 +0000)
* sh.c (sh_can_use_simple_return_p): Return false for SHmedia
and SHcompact using call_cookie.
* sh.md (epilogue): Emit non-inlined return insns for SHmedia
and SHcompact using call_cookie.

From-SVN: r192061

gcc/ChangeLog
gcc/config/sh/sh.c
gcc/config/sh/sh.md

index 0ac802f811e54ef8bc92c52cf8484314c22be51f..168376a3544e99e26ec0a7e18f21f90c32f3e0c9 100644 (file)
@@ -1,3 +1,10 @@
+2012-10-04  Kaz Kojima  <kkojima@gcc.gnu.org>
+
+       * config/sh/sh.c (sh_can_use_simple_return_p): Return false for
+       SHmedia and SHcompact using call cookie.
+       * config/sh/sh.md (epilogue): Emit non-inlined return insns for
+       SHmedia and SHcompact using call cookie.
+
 2012-10-03  Oleg Endo  <olegendo@gcc.gnu.org>
 
        PR target/51244
index 9f6b796f466c5aabd0c3eae9bba8cc0d366338a2..33ae28e7a69633539667eeb88541903b86ff5b81 100644 (file)
@@ -13134,6 +13134,12 @@ sh_can_use_simple_return_p (void)
   HARD_REG_SET live_regs_mask;
   int d;
 
+  /* Some targets require special return insns.  */
+  if (TARGET_SHMEDIA
+      || (TARGET_SHCOMPACT
+         && (crtl->args.info.call_cookie & CALL_COOKIE_RET_TRAMP (1))))
+    return false;
+
   if (! reload_completed || frame_pointer_needed)
     return false;
 
index 91a09c510c0d121d05712fb672db505ae95ee24a..7a1c4d33a58017365cad9f7530ba60bde38a74b4 100644 (file)
@@ -10460,6 +10460,13 @@ label:
   ""
 {
   sh_expand_epilogue (false);
+  if (TARGET_SHMEDIA
+      || (TARGET_SHCOMPACT
+         && (crtl->args.info.call_cookie & CALL_COOKIE_RET_TRAMP (1))))
+    {
+      emit_jump_insn (gen_return ());
+      DONE;
+    }
 })
 
 (define_expand "eh_return"