aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <bonzini@gnu.org>2004-08-10 08:38:29 +0000
committerPaolo Bonzini <bonzini@gcc.gnu.org>2004-08-10 08:38:29 +0000
commit25f3e06c7c272acfe17d2502a03330dcf5447b97 (patch)
tree186eb1816065a4f6b4cffad79c1dd08dff6c1d84
parent6a3203c8e3ffcc1ff0b409bfdbf44e41abff353f (diff)
downloadgcc-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
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/expr.c26
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
diff --git a/gcc/expr.c b/gcc/expr.c
index 7334c59..607115b 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -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;