]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
var-tracking.c (var_debug_decl): Save DECL_DEBUG_EXPR value in a temporary instead...
authorJakub Jelinek <jakub@redhat.com>
Wed, 5 May 2010 09:25:01 +0000 (11:25 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 5 May 2010 09:25:01 +0000 (11:25 +0200)
* var-tracking.c (var_debug_decl): Save DECL_DEBUG_EXPR value
in a temporary instead of invoking the macro multiple times.
(track_expr_p): Likewise.

From-SVN: r159058

gcc/ChangeLog
gcc/var-tracking.c

index 5eed15dfe67d4dbfcd424e385a96c05e4f6c31bf..6d232bb7acbd660bdb920d7aaec09e8224b33c3a 100644 (file)
@@ -1,3 +1,9 @@
+2010-05-05  Jakub Jelinek  <jakub@redhat.com>
+
+       * var-tracking.c (var_debug_decl): Save DECL_DEBUG_EXPR value
+       in a temporary instead of invoking the macro multiple times.
+       (track_expr_p): Likewise.
+
 2010-05-04  Neil Vachharajani <nvachhar@google.com>
 
        * doc/invoke.texi (-Wcoverage-mismatch): Updated documentation as
index 55de2092c089ceecf162ab04724601e9cc7b1127..040a3e7a50cd9dc8630b8bfb63d2cd35f798dd39 100644 (file)
@@ -1573,9 +1573,12 @@ static inline tree
 var_debug_decl (tree decl)
 {
   if (decl && DECL_P (decl)
-      && DECL_DEBUG_EXPR_IS_FROM (decl) && DECL_DEBUG_EXPR (decl)
-      && DECL_P (DECL_DEBUG_EXPR (decl)))
-    decl = DECL_DEBUG_EXPR (decl);
+      && DECL_DEBUG_EXPR_IS_FROM (decl))
+    {
+      tree debugdecl = DECL_DEBUG_EXPR (decl);
+      if (debugdecl && DECL_P (debugdecl))
+       decl = debugdecl;
+    }
 
   return decl;
 }
@@ -4497,12 +4500,14 @@ track_expr_p (tree expr, bool need_rtl)
      don't need to track this expression if the ultimate declaration is
      ignored.  */
   realdecl = expr;
-  if (DECL_DEBUG_EXPR_IS_FROM (realdecl) && DECL_DEBUG_EXPR (realdecl))
+  if (DECL_DEBUG_EXPR_IS_FROM (realdecl))
     {
       realdecl = DECL_DEBUG_EXPR (realdecl);
+      if (realdecl == NULL_TREE)
+       realdecl = expr;
       /* ??? We don't yet know how to emit DW_OP_piece for variable
         that has been SRA'ed.  */
-      if (!DECL_P (realdecl))
+      else if (!DECL_P (realdecl))
        return 0;
     }