summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-05 09:25:01 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-05 09:25:01 +0000
commit4e9d80c4af718debb2526e7a951447ee565bb07d (patch)
tree4557c5bcc52cc76180e0860ccd7d40985747c3f7
parent35820014157910c5bf152c8f20a48d01fcff064c (diff)
downloadppe42-gcc-4e9d80c4af718debb2526e7a951447ee565bb07d.tar.gz
ppe42-gcc-4e9d80c4af718debb2526e7a951447ee565bb07d.zip
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159058 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/var-tracking.c15
2 files changed, 16 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5eed15dfe67..6d232bb7acb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index 55de2092c08..040a3e7a50c 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -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;
}
OpenPOWER on IntegriCloud