From 12f06d174c8ce495b31b4e64f399c1eeb2e83672 Mon Sep 17 00:00:00 2001 From: "Charles M. Hannum" Date: Tue, 5 Jan 1999 18:28:56 -0700 Subject: [PATCH] expr.c (store_expr): If the lhs is a memory location pointed to be a postincremented (or... MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit � * expr.c (store_expr): If the lhs is a memory location pointed to be a postincremented (or postdecremented) pointer, always force the rhs to be evaluated into a pseudo. From-SVN: r24507 --- gcc/expr.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/gcc/expr.c b/gcc/expr.c index 09a7eb1f16a..496764244ec 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -3528,21 +3528,6 @@ store_expr (exp, target, want_value) return want_value ? target : NULL_RTX; } - else if (want_value && GET_CODE (target) == MEM && ! MEM_VOLATILE_P (target) - && GET_MODE (target) != BLKmode) - /* If target is in memory and caller wants value in a register instead, - arrange that. Pass TARGET as target for expand_expr so that, - if EXP is another assignment, WANT_VALUE will be nonzero for it. - We know expand_expr will not use the target in that case. - Don't do this if TARGET is volatile because we are supposed - to write it and then read it. */ - { - temp = expand_expr (exp, cse_not_expected ? NULL_RTX : target, - GET_MODE (target), 0); - if (GET_MODE (temp) != BLKmode && GET_MODE (temp) != VOIDmode) - temp = copy_to_reg (temp); - dont_return_target = 1; - } else if (queued_subexp_p (target)) /* If target contains a postincrement, let's not risk using it as the place to generate the rhs. */ @@ -3562,6 +3547,21 @@ store_expr (exp, target, want_value) if (! MEM_VOLATILE_P (target) && want_value) dont_return_target = 1; } + else if (want_value && GET_CODE (target) == MEM && ! MEM_VOLATILE_P (target) + && GET_MODE (target) != BLKmode) + /* If target is in memory and caller wants value in a register instead, + arrange that. Pass TARGET as target for expand_expr so that, + if EXP is another assignment, WANT_VALUE will be nonzero for it. + We know expand_expr will not use the target in that case. + Don't do this if TARGET is volatile because we are supposed + to write it and then read it. */ + { + temp = expand_expr (exp, cse_not_expected ? NULL_RTX : target, + GET_MODE (target), 0); + if (GET_MODE (temp) != BLKmode && GET_MODE (temp) != VOIDmode) + temp = copy_to_reg (temp); + dont_return_target = 1; + } else if (GET_CODE (target) == SUBREG && SUBREG_PROMOTED_VAR_P (target)) /* If this is an scalar in a register that is stored in a wider mode than the declared mode, compute the result into its declared mode