summaryrefslogtreecommitdiff
path: root/gcc/gimple-fold.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/gimple-fold.c')
-rw-r--r--gcc/gimple-fold.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index 59aa946a883..8a48316f00d 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -528,6 +528,18 @@ maybe_fold_reference (tree expr, bool is_lhs)
return expr;
}
}
+ else if (TREE_CODE (*t) == TARGET_MEM_REF)
+ {
+ tree tem = maybe_fold_tmr (*t);
+ if (tem)
+ {
+ *t = tem;
+ tem = maybe_fold_reference (expr, is_lhs);
+ if (tem)
+ return tem;
+ return expr;
+ }
+ }
else if (!is_lhs
&& DECL_P (*t))
{
@@ -602,9 +614,6 @@ fold_gimple_assign (gimple_stmt_iterator *si)
COND_EXPR_THEN (rhs), COND_EXPR_ELSE (rhs));
}
- else if (TREE_CODE (rhs) == TARGET_MEM_REF)
- return maybe_fold_tmr (rhs);
-
else if (REFERENCE_CLASS_P (rhs))
return maybe_fold_reference (rhs, false);