diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1994-10-31 08:11:19 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1994-10-31 08:11:19 -0500 |
commit | 2d444001636edc9408e8e847585dc6a9ef1e279b (patch) | |
tree | 12f5160b14e154cc323702337d69dd6e1d190456 /gcc | |
parent | eb11192f9f32c53936e354837ccf4cad7e7c69b0 (diff) | |
download | gcc-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.c | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -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). |