re PR debug/54402 (var-tracking does not scale)
authorJakub Jelinek <jakub@redhat.com>
Mon, 5 Nov 2012 07:58:48 +0000 (08:58 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 5 Nov 2012 07:58:48 +0000 (08:58 +0100)
PR debug/54402
* var-tracking.c (fp_setter): Return false if there is REG_CFA_RESTORE
hfp note.
(vt_initialize): Look for fp_setter in any bb, not just successor of
entry bb.

From-SVN: r193152

gcc/ChangeLog
gcc/var-tracking.c

index 94c9acc..16f3a65 100644 (file)
@@ -1,3 +1,11 @@
+2012-11-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/54402
+       * var-tracking.c (fp_setter): Return false if there is REG_CFA_RESTORE
+       hfp note.
+       (vt_initialize): Look for fp_setter in any bb, not just successor of
+       entry bb.
+
 2012-11-05  Oleg Endo  <olegendo@gcc.gnu.org>
 
        * config/sh/sh.h (TARGET_CACHE32, TARGET_HARVARD): Delete macro.
index e0daa83..adccf7c 100644 (file)
@@ -9543,16 +9543,25 @@ fp_setter (rtx insn)
        pat = XEXP (expr, 0);
     }
   if (GET_CODE (pat) == SET)
-    return SET_DEST (pat) == hard_frame_pointer_rtx;
+    {
+      if (SET_DEST (pat) != hard_frame_pointer_rtx)
+       return false;
+    }
   else if (GET_CODE (pat) == PARALLEL)
     {
       int i;
       for (i = XVECLEN (pat, 0) - 1; i >= 0; i--)
        if (GET_CODE (XVECEXP (pat, 0, i)) == SET
            && SET_DEST (XVECEXP (pat, 0, i)) == hard_frame_pointer_rtx)
-         return true;
+         break;
+      if (i < 0)
+       return false;
     }
-  return false;
+  else
+    return false;
+  if (find_reg_note (insn, REG_CFA_RESTORE, hard_frame_pointer_rtx))
+    return false;
+  return true;
 }
 
 /* Initialize cfa_base_rtx, create a preserved VALUE for it and
@@ -9600,7 +9609,7 @@ vt_init_cfa_base (void)
 static bool
 vt_initialize (void)
 {
-  basic_block bb, prologue_bb = single_succ (ENTRY_BLOCK_PTR);
+  basic_block bb;
   HOST_WIDE_INT fp_cfa_offset = -1;
 
   alloc_aux_for_blocks (sizeof (struct variable_tracking_info_def));
@@ -9858,8 +9867,7 @@ vt_initialize (void)
                      VTI (bb)->out.stack_adjust += post;
                    }
 
-                 if (bb == prologue_bb
-                     && fp_cfa_offset != -1
+                 if (fp_cfa_offset != -1
                      && hard_frame_pointer_adjustment == -1
                      && RTX_FRAME_RELATED_P (insn)
                      && fp_setter (insn))