/* Simplifications of MIN_EXPR, MAX_EXPR, fmin() and fmax(). */
(for minmax (min max)
+ maxmin (max min)
(simplify
(minmax @0 @0)
@0)
/* max(max(x,y),x) -> max(x,y) */
(simplify
(minmax:c (minmax:c@2 @0 @1) @0)
- @2))
+ @2)
+
+/* min(max(x,y),y) -> y.
+ max(min(x,y),y) -> y. */
+ (simplify
+ (minmax:c (maxmin:c @0 @1) @1)
+ @1))
+
/* For fmin() and fmax(), skip folding when both are sNaN. */
(for minmax (FMIN_ALL FMAX_ALL)
(simplify
(minmax @0 @0)
(if (!tree_expr_maybe_signaling_nan_p (@0))
@0)))
-/* min(max(x,y),y) -> y. */
-(simplify
- (min:c (max:c @0 @1) @1)
- @1)
-/* max(min(x,y),y) -> y. */
-(simplify
- (max:c (min:c @0 @1) @1)
- @1)
/* max(a,-a) -> abs(a). */
(simplify
(max:c @0 (negate @0))