diff mbox

Improve compare with min/max simplification for bools

Message ID alpine.LSU.2.11.1507281346260.19642@zhemvz.fhfr.qr
State New
Headers show

Commit Message

Richard Biener July 28, 2015, 11:48 a.m. UTC
For types with just two values max - 1 is equal to min and thus
we fail to optimize some cases of comparisons.  With fold-const.c
bool < 0 needed the abs(x) < 0 simplification to trigger it
(same issue with mis-ordered if / else-ifs).

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2015-07-28  Richard Biener  <rguenther@suse.de>

	* match.pd: Re-order two cases in comparison with max/min
	value simplification to make it apply for bools.
diff mbox

Patch

Index: gcc/match.pd
===================================================================
--- gcc/match.pd	(revision 226306)
+++ gcc/match.pd	(working copy)
@@ -1856,12 +1856,6 @@  (define_operator_list CBRT BUILT_IN_CBRT
 	{ constant_boolean_node (true, type); })
        (if (cmp == LT_EXPR)
 	(ne @2 @1))))
-     (if (wi::eq_p (@1, max - 1))
-      (switch
-       (if (cmp == GT_EXPR)
-        (eq @2 { wide_int_to_tree (TREE_TYPE (@1), wi::add (@1, 1)); }))
-       (if (cmp == LE_EXPR)
-        (ne @2 { wide_int_to_tree (TREE_TYPE (@1), wi::add (@1, 1)); }))))
      (if (wi::eq_p (@1, min))
       (switch
        (if (cmp == LT_EXPR)
@@ -1872,6 +1866,12 @@  (define_operator_list CBRT BUILT_IN_CBRT
         { constant_boolean_node (true, type); })
        (if (cmp == GT_EXPR)
         (ne @2 @1))))
+     (if (wi::eq_p (@1, max - 1))
+      (switch
+       (if (cmp == GT_EXPR)
+        (eq @2 { wide_int_to_tree (TREE_TYPE (@1), wi::add (@1, 1)); }))
+       (if (cmp == LE_EXPR)
+        (ne @2 { wide_int_to_tree (TREE_TYPE (@1), wi::add (@1, 1)); }))))
      (if (wi::eq_p (@1, min + 1))
       (switch
        (if (cmp == GE_EXPR)