diff options
Diffstat (limited to 'gcc/gimple-fold.c')
-rw-r--r-- | gcc/gimple-fold.c | 15 |
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); |