]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
s390.c (s390_can_use_return_insn): Check for call-saved FPRs on 31 bit.
authorAndreas Krebbel <Andreas.Krebbel@de.ibm.com>
Thu, 27 Mar 2014 15:38:29 +0000 (15:38 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Thu, 27 Mar 2014 15:38:29 +0000 (15:38 +0000)
2014-03-27  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>

* config/s390/s390.c (s390_can_use_return_insn): Check for
call-saved FPRs on 31 bit.

2014-03-27  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>

* gcc.target/s390/20140327-1.c: New testcase.

From-SVN: r208867

gcc/ChangeLog
gcc/config/s390/s390.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/s390/20140327-1.c [new file with mode: 0644]

index fb6181277c50c736c873e43535d2933946ff52ee..674f3a44fb4ca6526e02a78821b7a84004ee2e03 100644 (file)
@@ -1,3 +1,8 @@
+2014-03-27  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
+
+       * config/s390/s390.c (s390_can_use_return_insn): Check for
+       call-saved FPRs on 31 bit.
+
 2014-03-27  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/60682
index 7a79286c9b406495c8cf4414c9cab22e41cf44b1..bdb577c97481169a7b135641f639cc9ae4f85d4d 100644 (file)
@@ -9225,6 +9225,13 @@ s390_can_use_return_insn (void)
     if (cfun_gpr_save_slot (i))
       return false;
 
+  /* For 31 bit this is not covered by the frame_size check below
+     since f4, f6 are saved in the register save area without needing
+     additional stack space.  */
+  if (!TARGET_64BIT
+      && (cfun_fpr_save_p (FPR4_REGNUM) || cfun_fpr_save_p (FPR6_REGNUM)))
+    return false;
+
   if (cfun->machine->base_reg
       && !call_really_used_regs[REGNO (cfun->machine->base_reg)])
     return false;
index c2a13d94931324148ba1a6c61ee20391939c31cf..bcdaa3d17c79ea22c301dcea38065f9bb775a36a 100644 (file)
@@ -1,3 +1,7 @@
+2014-03-27  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
+
+       * gcc.target/s390/20140327-1.c: New testcase.
+
 2014-03-27  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/60682
diff --git a/gcc/testsuite/gcc.target/s390/20140327-1.c b/gcc/testsuite/gcc.target/s390/20140327-1.c
new file mode 100644 (file)
index 0000000..f71c38f
--- /dev/null
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -m31 -mzarch" } */
+
+void
+foo ()
+{
+  asm ("" ::: "%f4");
+}
+
+/* { dg-final { scan-assembler "ld" } } */