(subst, case AND): Only make IF_THEN_ELSE if conditional moves exist.
authorRichard Kenner <kenner@gcc.gnu.org>
Thu, 20 Aug 1992 01:33:19 +0000 (21:33 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Thu, 20 Aug 1992 01:33:19 +0000 (21:33 -0400)
From-SVN: r1903

gcc/combine.c

index 7372e16..6729a3f 100644 (file)
@@ -3638,6 +3638,8 @@ subst (x, from, to, in_dest, unique_copy)
          goto restart;
        }
 
+#ifdef HAVE_conditional_move
+
       /* If we have (and A B) with A not an object but that is known to
         be -1 or 0, this is equivalent to the expression
         (if_then_else (ne A (const_int 0)) B (const_int 0))
@@ -3660,6 +3662,7 @@ subst (x, from, to, in_dest, unique_copy)
                                XEXP (x, 1), const0_rtx);
          goto restart;
        }
+#endif
 
       /* In the following group of tests (and those in case IOR below),
         we start with some combination of logical operations and apply
@@ -4799,6 +4802,8 @@ force_to_mode (x, mode, bits, reg)
              && sub_optab->handlers[(int) mode].insn_code == CODE_FOR_nothing)
          || (code == MULT && (smul_optab->handlers[(int) mode].insn_code
                               == CODE_FOR_nothing))
+         || (code == AND
+             && and_optab->handlers[(int) mode].insn_code == CODE_FOR_nothing)
          || (code == IOR
              && ior_optab->handlers[(int) mode].insn_code == CODE_FOR_nothing)
          || (code == XOR && (xor_optab->handlers[(int) mode].insn_code