expr.c (expand_expr, [...]): If have conditional move, don't use ORIGINAL_TARGET...
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>
Wed, 18 Mar 1998 13:41:50 +0000 (13:41 +0000)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 18 Mar 1998 13:41:50 +0000 (05:41 -0800)
Wed Mar 18 13:42:01 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
        * expr.c (expand_expr, case COND_EXPR): If have conditional move,
        don't use ORIGINAL_TARGET unless REG.

From-SVN: r18671

gcc/ChangeLog
gcc/expr.c

index d90f217..dd4f83c 100644 (file)
@@ -1,3 +1,8 @@
+Wed Mar 18 13:42:01 1998  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * expr.c (expand_expr, case COND_EXPR): If have conditional move,
+       don't use ORIGINAL_TARGET unless REG.
+
 Wed Mar 18 16:53:19 1998  J"orn Rennecke <amylaar@cygnus.co.uk>
 
        * netbsd.h (ASM_OUTPUT_ALIGN): Redefine.
index 8edc49e..178f4f1 100644 (file)
@@ -6765,6 +6765,11 @@ expand_expr (exp, target, tmode, modifier)
                         && REGNO (original_target) >= FIRST_PSEUDO_REGISTER
                         && original_target == var_rtx (singleton)))
                 && GET_MODE (original_target) == mode
+#ifdef HAVE_conditional_move
+                && (! can_conditionally_move_p (mode)
+                    || GET_CODE (original_target) == REG
+                    || TREE_ADDRESSABLE (type))
+#endif
                 && ! (GET_CODE (original_target) == MEM
                       && MEM_VOLATILE_P (original_target)))
          temp = original_target;