S/390: Fix cfi for GPR 2 FPR saves
authorAndreas Krebbel <krebbel@linux.vnet.ibm.com>
Fri, 24 Jul 2015 11:29:50 +0000 (11:29 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Fri, 24 Jul 2015 11:29:50 +0000 (11:29 +0000)
gcc/ChangeLog:

2015-07-24  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

    * config/s390/s390.c (s390_save_gprs_to_fprs): Add CFA_REGISTER
    reg note to the GPR -> FPR save instructions.

gcc/testsuite/ChangeLog:

2015-07-24  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

    * gcc.target/s390/gpr2fprsavecfi.c: New test.

From-SVN: r226149

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

index f375a3a594319a2554623e89c038b3c7dcebea6c..b613180edaf6251893b738b1b8c67489e3edfb6a 100644 (file)
@@ -1,3 +1,8 @@
+2015-07-24  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       * config/s390/s390.c (s390_save_gprs_to_fprs): Add CFA_REGISTER
+       reg note to the GPR -> FPR save instructions.
+
 2015-07-24  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
 
        * config/s390/s390.c (s390_rtx_costs): Make risbg patterns
index f421e884c66594a3f961b0aae408a4293af11ec8..7f609baba7b3d7bfb9b4525cd55b2d720aad0695 100644 (file)
@@ -10132,6 +10132,10 @@ s390_save_gprs_to_fprs (void)
            emit_move_insn (gen_rtx_REG (DImode, cfun_gpr_save_slot (i)),
                            gen_rtx_REG (DImode, i));
          RTX_FRAME_RELATED_P (insn) = 1;
+         /* This prevents dwarf2cfi from interpreting the set.  Doing
+            so it might emit def_cfa_register infos setting an FPR as
+            new CFA.  */
+         add_reg_note (insn, REG_CFA_REGISTER, PATTERN (insn));
        }
     }
 }
index 27278a195d6e6bede7a5e809085d4df82c887af7..72955da88ee6d8f92eff8f258f3edcecef42a66c 100644 (file)
@@ -1,3 +1,7 @@
+2015-07-24  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
+
+       * gcc.target/s390/gpr2fprsavecfi.c: New test.
+
 2015-07-24  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
 
        * gcc.target/s390/insv-1.c: New test.
diff --git a/gcc/testsuite/gcc.target/s390/gpr2fprsavecfi.c b/gcc/testsuite/gcc.target/s390/gpr2fprsavecfi.c
new file mode 100644 (file)
index 0000000..92a0d3a
--- /dev/null
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -march=z10 -mzarch -fdwarf2-cfi-asm" } */
+
+char *gl[100];
+
+long
+foo ()
+{
+  long r = 0;
+  char bla[100];
+  int i;
+
+  __builtin_memcpy (bla, gl, 100);
+
+  for (i = 0; i < 100; i++)
+    r += bla[i];
+
+  return r;
+}
+
+/* { dg-final { scan-assembler-not "cfi_def_cfa_register" } } */
+/* { dg-final { scan-assembler "cfi_register" } } */
+/* { dg-final { scan-assembler "cfi_def_cfa_offset" } } */