summaryrefslogtreecommitdiff
path: root/gcc/cse.c
diff options
context:
space:
mode:
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>1997-10-20 23:49:48 +0000
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>1997-10-20 23:49:48 +0000
commitea704d468b3e427b9bbdd5a7094067991d8f7e9d (patch)
treed03ad1ae624e997721b0f00f9bfa6a320d91490b /gcc/cse.c
parent6b96063fabde0e9641004807b968b914c3cb12b0 (diff)
downloadgcc-ea704d468b3e427b9bbdd5a7094067991d8f7e9d.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@16129 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cse.c')
-rw-r--r--gcc/cse.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/cse.c b/gcc/cse.c
index 425e1f1e51b..39ce6f6ba90 100644
--- 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: