diff options
author | Paolo Bonzini <bonzini@gnu.org> | 2004-08-10 08:38:29 +0000 |
---|---|---|
committer | Paolo Bonzini <bonzini@gcc.gnu.org> | 2004-08-10 08:38:29 +0000 |
commit | 25f3e06c7c272acfe17d2502a03330dcf5447b97 (patch) | |
tree | 186eb1816065a4f6b4cffad79c1dd08dff6c1d84 /gcc | |
parent | 6a3203c8e3ffcc1ff0b409bfdbf44e41abff353f (diff) | |
download | gcc-25f3e06c7c272acfe17d2502a03330dcf5447b97.zip gcc-25f3e06c7c272acfe17d2502a03330dcf5447b97.tar.gz gcc-25f3e06c7c272acfe17d2502a03330dcf5447b97.tar.bz2 |
expr.c (expand_expr_real_1): Add back code that was not dead.
2004-08-09 Paolo Bonzini <bonzini@gnu.org>
* expr.c (expand_expr_real_1): Add back code that was not dead.
From-SVN: r85742
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/expr.c | 26 |
2 files changed, 30 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6eb4be8..87045e6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2004-08-09 Paolo Bonzini <bonzini@gnu.org> + + * expr.c (expand_expr_real_1): Add back code that was not dead. + 2004-08-09 Andrew Pinski <apinski@apple.com> * c-common.c (c_common_get_alias_set): Set the aliasing set of the type @@ -7778,6 +7778,32 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, return temp; } + /* If no set-flag instruction, must generate a conditional store + into a temporary variable. Drop through and handle this + like && and ||. */ + + if (! ignore + && (target == 0 + || modifier == EXPAND_STACK_PARM + || ! safe_from_p (target, exp, 1) + /* Make sure we don't have a hard reg (such as function's return + value) live across basic blocks, if not optimizing. */ + || (!optimize && REG_P (target) + && REGNO (target) < FIRST_PSEUDO_REGISTER))) + target = gen_reg_rtx (tmode != VOIDmode ? tmode : mode); + + if (target) + emit_move_insn (target, const0_rtx); + + op1 = gen_label_rtx (); + jumpifnot (exp, op1); + + if (target) + emit_move_insn (target, const1_rtx); + + emit_label (op1); + return ignore ? const0_rtx : target; + case TRUTH_NOT_EXPR: if (modifier == EXPAND_STACK_PARM) target = 0; |