Patches to fix minor optimizer bugs
authorJim Wilson <wilson@cygnus.com>
Mon, 20 Oct 1997 23:49:48 +0000 (23:49 +0000)
committerJim Wilson <wilson@gcc.gnu.org>
Mon, 20 Oct 1997 23:49:48 +0000 (16:49 -0700)
Patches to fix minor optimizer bugs
* expmed.c (extract_bit_field): Don't make flag_force_mem disable
extzv for memory operands.
* cse.c (simplify_ternary_operation, case IF_THEN_ELSE): Collapse
redundant conditional moves to single operand.

From-SVN: r16129

gcc/ChangeLog
gcc/cse.c
gcc/expmed.c

index 238bdde5d4f78fe5e51a15638f3a201451b48a1b..e50aab8346d3a79fe4b64bad35ec5b90bb2e20f0 100644 (file)
@@ -1,3 +1,11 @@
+Mon Oct 20 16:47:08 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * expmed.c (extract_bit_field): Don't make flag_force_mem disable
+       extzv for memory operands.
+
+       * cse.c (simplify_ternary_operation, case IF_THEN_ELSE): Collapse
+       redundant conditional moves to single operand.
+
 Mon Oct 20 15:30:26 1997  Nick Clifton  <nickc@cygnus.com>
 
        * v850.h: Move define of __v850__ from CPP_PREDEFINES
index 425e1f1e51b699c2c1ada17a56fc58d5dc0c680e..39ce6f6ba90f5e7dee18ff72de0b1dce35368afa 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -4669,6 +4669,16 @@ simplify_ternary_operation (code, mode, op0_mode, op0, op1, op2)
     case IF_THEN_ELSE:
       if (GET_CODE (op0) == CONST_INT)
        return op0 != const0_rtx ? op1 : op2;
+
+      /* Convert a == b ? b : a to "a".  */
+      if (GET_CODE (op0) == NE && ! side_effects_p (op0)
+         && rtx_equal_p (XEXP (op0, 0), op1)
+         && rtx_equal_p (XEXP (op0, 1), op2))
+       return op1;
+      else if (GET_CODE (op0) == EQ && ! side_effects_p (op0)
+         && rtx_equal_p (XEXP (op0, 1), op1)
+         && rtx_equal_p (XEXP (op0, 0), op2))
+       return op2;
       break;
 
     default:
index b6f77c813d2c7d5b87f28f6ffc5314131e55c0ea..ce487054310e1e229f02eca0b3fe2c08e7f7f7db 100644 (file)
@@ -1084,9 +1084,8 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp,
              volatile_ok = 1;
 
              /* Is the memory operand acceptable?  */
-             if (flag_force_mem
-                 || ! ((*insn_operand_predicate[(int) CODE_FOR_extzv][1])
-                       (xop0, GET_MODE (xop0))))
+             if (! ((*insn_operand_predicate[(int) CODE_FOR_extzv][1])
+                    (xop0, GET_MODE (xop0))))
                {
                  /* No, load into a reg and extract from there.  */
                  enum machine_mode bestmode;