OSDN Git Service

Patches to fix minor optimizer bugs
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 20 Oct 1997 23:49:48 +0000 (23:49 +0000)
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 20 Oct 1997 23:49:48 +0000 (23:49 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@16129 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 238bdde..e50aab8 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 425e1f1..39ce6f6 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 b6f77c8..ce48705 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;