]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR debug/53948 (Assignment line missing for -O0 -g)
authorJeff Law <law@redhat.com>
Fri, 8 Feb 2013 20:03:52 +0000 (13:03 -0700)
committerJeff Law <law@gcc.gnu.org>
Fri, 8 Feb 2013 20:03:52 +0000 (13:03 -0700)
       PR debug/53948
        * emit-rtl.c (reg_is_parm_p): New function.
        * regs.h (reg_is_parm_p): New prototype.
        * ira-conflicts.c (ira_build_conflicts): Allow parameters in
        callee-clobbered registers.

       PR debug/53948
        * gcc.dg/debug/dwarf2/pr53948.c: New test.

From-SVN: r195900

gcc/ChangeLog
gcc/emit-rtl.c
gcc/ira-conflicts.c
gcc/regs.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/debug/dwarf2/pr53948.c [new file with mode: 0644]

index 9d668885f259f0d9c88c43ea382da41f091e722b..2693b7e843e6c5759fac1d06d4fad0b065379ce5 100644 (file)
@@ -1,3 +1,11 @@
+2013-02-08  Jeff Law  <law@redhat.com>
+
+       PR debug/53948
+       * emit-rtl.c (reg_is_parm_p): New function.
+       * regs.h (reg_is_parm_p): New prototype.
+       * ira-conflicts.c (ira_build_conflicts): Allow parameters in
+       callee-clobbered registers.
+
 2013-02-08  Michael Meissner  <meissner@linux.vnet.ibm.com>
 
        PR target/56043
index f997e5d319bcd6051cf6e2fc9daa2ce8582193de..2c70fb1841daecee753b11852e189b5495e0c222 100644 (file)
@@ -919,6 +919,18 @@ gen_reg_rtx (enum machine_mode mode)
   return val;
 }
 
+/* Return TRUE if REG is a PARM_DECL, FALSE otherwise.  */
+
+bool
+reg_is_parm_p (rtx reg)
+{
+  tree decl;
+
+  gcc_assert (REG_P (reg));
+  decl = REG_EXPR (reg);
+  return (decl && TREE_CODE (decl) == PARM_DECL);
+}
+
 /* Update NEW with the same attributes as REG, but with OFFSET added
    to the REG_OFFSET.  */
 
index 711db0fb4c1f451a5aadeb35f1d1a58f688f1bce..710986b073e4598b3d4e23b53f340cc34bb8c616 100644 (file)
@@ -895,8 +895,12 @@ ira_build_conflicts (void)
 
          if ((! flag_caller_saves && ALLOCNO_CALLS_CROSSED_NUM (a) != 0)
              /* For debugging purposes don't put user defined variables in
-                callee-clobbered registers.  */
-             || (optimize == 0 && REG_USERVAR_P (allocno_reg)))
+                callee-clobbered registers.  However, do allow parameters
+                in callee-clobbered registers to improve debugging.  This
+                is a bit of a fragile hack.  */
+             || (optimize == 0
+                 && REG_USERVAR_P (allocno_reg)
+                 && ! reg_is_parm_p (allocno_reg)))
            {
              IOR_HARD_REG_SET (OBJECT_TOTAL_CONFLICT_HARD_REGS (obj),
                                call_used_reg_set);
index 0532d08ca1f65e934a2c3d2bb76252161bb25525..090d6b64e8334967903c3a0ea823b9259e723662 100644 (file)
@@ -89,6 +89,8 @@ REG_N_SETS (int regno)
 #define SET_REG_N_SETS(N,V) (regstat_n_sets_and_refs[N].sets = V)
 #define INC_REG_N_SETS(N,V) (regstat_n_sets_and_refs[N].sets += V)
 
+/* Given a REG, return TRUE if the reg is a PARM_DECL, FALSE otherwise.  */
+extern bool reg_is_parm_p (rtx);
 
 /* Functions defined in regstat.c.  */
 extern void regstat_init_n_sets_and_refs (void);
index 583e7d59f45108b14c282cf67664202736c4c955..83843b765810ad7eca61d15022319654f75e98f6 100644 (file)
@@ -1,3 +1,8 @@
+2013-02-08  Jeff Law  <law@redhat.com>
+
+       PR debug/53948
+       * gcc.dg/debug/dwarf2/pr53948.c: New test.
+
 2013-02-08  Michael Meissner  <meissner@linux.vnet.ibm.com>
 
        PR target/56043
diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr53948.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr53948.c
new file mode 100644 (file)
index 0000000..f0600b7
--- /dev/null
@@ -0,0 +1,10 @@
+/* Test that we have line information for the line
+   with local variable initializations.  */
+/* { dg-options "-O0 -g -dA" } */
+/* { dg-final { scan-assembler ".loc 1 8 0|# line 8" } } */
+
+
+int f (register int a, register int b) {
+  register int x = b, y = a;
+  return x + y; }
+