From bb11bacbbd087cfdabf09fca407fcc55e591170c Mon Sep 17 00:00:00 2001 From: law Date: Wed, 6 Jan 1999 01:28:56 +0000 Subject: =?UTF-8?q?=EF=BF=BD=20=20=20=20=20=20=20=20=20*=20expr.c=20(store?= =?UTF-8?q?=5Fexpr):=20If=20the=20lhs=20is=20a=20memory=20location=20point?= =?UTF-8?q?ed=20=20=20=20=20=20=20=20=20to=20be=20a=20postincremented=20(o?= =?UTF-8?q?r=20postdecremented)=20pointer,=20always=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20force=20the=20rhs=20to=20be=20evaluated=20into=20a=20pseu?= =?UTF-8?q?do.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@24507 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/expr.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'gcc/expr.c') 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 -- cgit v1.2.1