Commit 2d444001 by Richard Kenner

(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
parent eb11192f
...@@ -5534,7 +5534,9 @@ expand_expr (exp, target, tmode, modifier) ...@@ -5534,7 +5534,9 @@ expand_expr (exp, target, tmode, modifier)
temp = 0; temp = 0;
else if (original_target else if (original_target
&& safe_from_p (original_target, TREE_OPERAND (exp, 0)) && 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; temp = original_target;
else if (mode == BLKmode) else if (mode == BLKmode)
{ {
...@@ -5590,8 +5592,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -5590,8 +5592,7 @@ expand_expr (exp, target, tmode, modifier)
optab boptab = (TREE_CODE (binary_op) == PLUS_EXPR ? add_optab optab boptab = (TREE_CODE (binary_op) == PLUS_EXPR ? add_optab
: TREE_CODE (binary_op) == MINUS_EXPR ? sub_optab : TREE_CODE (binary_op) == MINUS_EXPR ? sub_optab
: TREE_CODE (binary_op) == BIT_IOR_EXPR ? ior_optab : TREE_CODE (binary_op) == BIT_IOR_EXPR ? ior_optab
: TREE_CODE (binary_op) == BIT_XOR_EXPR ? xor_optab : xor_optab);
: and_optab);
/* If we had X ? A : A + 1, do this as A + (X == 0). /* If we had X ? A : A + 1, do this as A + (X == 0).
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment