Commit 8b656ca7 by Marc Glisse Committed by Marc Glisse

Move X==15-X to match.pd

2017-05-18  Marc Glisse  <marc.glisse@inria.fr>

	* fold-const.c (fold_binary_loc): Move transformation...
	* match.pd (C - X CMP X): ... here.

From-SVN: r248193
parent e3455240
2017-05-18 Marc Glisse <marc.glisse@inria.fr>
* fold-const.c (fold_binary_loc): Move transformation...
* match.pd (C - X CMP X): ... here.
2017-05-18 Sheldon Lobo <sheldon.lobo@oracle.com> 2017-05-18 Sheldon Lobo <sheldon.lobo@oracle.com>
* config/sparc/sparc.c (sparc_option_override): Set function * config/sparc/sparc.c (sparc_option_override): Set function
......
...@@ -10532,30 +10532,6 @@ fold_binary_loc (location_t loc, ...@@ -10532,30 +10532,6 @@ fold_binary_loc (location_t loc,
TREE_OPERAND (arg1, 0), arg0); TREE_OPERAND (arg1, 0), arg0);
} }
/* Transform comparisons of the form C - X CMP X if C % 2 == 1. */
if (TREE_CODE (arg0) == MINUS_EXPR
&& TREE_CODE (TREE_OPERAND (arg0, 0)) == INTEGER_CST
&& operand_equal_p (tree_strip_nop_conversions (TREE_OPERAND (arg0,
1)),
arg1, 0)
&& wi::extract_uhwi (TREE_OPERAND (arg0, 0), 0, 1) == 1)
return omit_two_operands_loc (loc, type,
code == NE_EXPR
? boolean_true_node : boolean_false_node,
TREE_OPERAND (arg0, 1), arg1);
/* Transform comparisons of the form X CMP C - X if C % 2 == 1. */
if (TREE_CODE (arg1) == MINUS_EXPR
&& TREE_CODE (TREE_OPERAND (arg1, 0)) == INTEGER_CST
&& operand_equal_p (tree_strip_nop_conversions (TREE_OPERAND (arg1,
1)),
arg0, 0)
&& wi::extract_uhwi (TREE_OPERAND (arg1, 0), 0, 1) == 1)
return omit_two_operands_loc (loc, type,
code == NE_EXPR
? boolean_true_node : boolean_false_node,
TREE_OPERAND (arg1, 1), arg0);
/* If this is an EQ or NE comparison with zero and ARG0 is /* If this is an EQ or NE comparison with zero and ARG0 is
(1 << foo) & bar, convert it to (bar >> foo) & 1. Both require (1 << foo) & bar, convert it to (bar >> foo) & 1. Both require
two operations, but the latter can be done in one less insn two operations, but the latter can be done in one less insn
......
...@@ -1090,6 +1090,13 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) ...@@ -1090,6 +1090,13 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
|| TYPE_OVERFLOW_WRAPS (TREE_TYPE (@0)))) || TYPE_OVERFLOW_WRAPS (TREE_TYPE (@0))))
(op @1 @0)))) (op @1 @0))))
/* X == C - X can never be true if C is odd. */
(for cmp (eq ne)
(simplify
(cmp:c (convert? @0) (convert1? (minus INTEGER_CST@1 (convert2? @0))))
(if (TREE_INT_CST_LOW (@1) & 1)
{ constant_boolean_node (cmp == NE_EXPR, type); })))
/* ((X inner_op C0) outer_op C1) /* ((X inner_op C0) outer_op C1)
With X being a tree where value_range has reasoned certain bits to always be With X being a tree where value_range has reasoned certain bits to always be
zero throughout its computed value range, zero throughout its computed value range,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment