On Fri, 15 Sep 2017, Prathamesh Kulkarni wrote:
+/* (X / Y) == 0 -> X < Y if X, Y are unsigned. */
+(simplify
+ (eq (trunc_div @0 @1) integer_zerop)
+ (if (TYPE_UNSIGNED (TREE_TYPE(@0)) && TYPE_UNSIGNED (TREE_TYPE (@1)))
+ (lt @0 @1)))
+
+/* (X / Y) != 0 -> X >= Y, if X, Y are unsigned. */
+(simplify
+ (ne (trunc_div @0 @1) integer_zerop)
+ (if (TYPE_UNSIGNED (TREE_TYPE(@0)) && TYPE_UNSIGNED (TREE_TYPE (@1)))
+ (ge @0 @1)))
+
Hello,
you can merge the 2 transforms using "for". Also, no need to test the type
of @1 since you are already testing @0.
- do we want a single_use restriction on the result of the division?
- do we also want to handle (x>>4)==0?
- do we also want a special case when X is 1 that produces Y==1, as asked
in a recent PR?
- once in a while, someone mentions that eq, on vectors, can either do
elementwise comparison and return a vector, or return a single boolean,
which would fail here. However, I don't remember ever seeing an example.
--
Marc Glisse