aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-10-31 08:11:19 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1994-10-31 08:11:19 -0500
commit2d444001636edc9408e8e847585dc6a9ef1e279b (patch)
tree12f5160b14e154cc323702337d69dd6e1d190456 /gcc
parenteb11192f9f32c53936e354837ccf4cad7e7c69b0 (diff)
downloadgcc-2d444001636edc9408e8e847585dc6a9ef1e279b.zip
gcc-2d444001636edc9408e8e847585dc6a9ef1e279b.tar.gz
gcc-2d444001636edc9408e8e847585dc6a9ef1e279b.tar.bz2
(expand_expr, COND_EXPR case): Don't use original target as a temp if it's a volatile mem ref.
(expand_expr, COND_EXPR case): Don't use original target as a temp if it's a volatile mem ref. Finish previous patch (don't expand "X ? A & 1 : A" as "A & (X != 0)"). From-SVN: r8369
Diffstat (limited to 'gcc')
-rw-r--r--gcc/expr.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 5594092..de656b6 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -5534,7 +5534,9 @@ expand_expr (exp, target, tmode, modifier)
temp = 0;
else if (original_target
&& safe_from_p (original_target, TREE_OPERAND (exp, 0))
- && GET_MODE (original_target) == mode)
+ && GET_MODE (original_target) == mode
+ && ! (GET_CODE (original_target) == MEM
+ && MEM_VOLATILE_P (original_target)))
temp = original_target;
else if (mode == BLKmode)
{
@@ -5590,8 +5592,7 @@ expand_expr (exp, target, tmode, modifier)
optab boptab = (TREE_CODE (binary_op) == PLUS_EXPR ? add_optab
: TREE_CODE (binary_op) == MINUS_EXPR ? sub_optab
: TREE_CODE (binary_op) == BIT_IOR_EXPR ? ior_optab
- : TREE_CODE (binary_op) == BIT_XOR_EXPR ? xor_optab
- : and_optab);
+ : xor_optab);
/* If we had X ? A : A + 1, do this as A + (X == 0).