@0
@2)))
+/* min (a, b) op max (a, b) -> a op b */
+(for op (plus mult bit_and bit_xor bit_ior eq ne min max)
+ (simplify
+ (op:c (min:c @0 @1) (max @0 @1))
+ (if (!HONOR_NANS (@0))
+ (op @0 @1))))
+
/* Simplify min (&var[off0], &var[off1]) etc. depending on whether
the addresses are known to be less, equal or greater. */
(for minmax (min max)
--- /dev/null
+/* PR tree-optimization/109878 */
+/* { dg-do compile } */
+/* { dg-options "-O1 -fdump-tree-optimized" } */
+
+/* Returns max (a, b) */
+int max(int a, int b) {
+ if (b > a)
+ return b;
+ else
+ return a;
+}
+
+/* Returns min (a, b) */
+int min(int a, int b) {
+ if (b < a)
+ return b;
+ else
+ return a;
+}
+
+/* These functions should return a op b */
+int f8(int a, int b)
+{
+ return min (max (a, b), min (a, b));
+}
+
+int f9(int a, int b)
+{
+ return max (min (a, b), max (a, b));
+}
+
+/* Function min and f8 should have MIN_EXPR */
+/* Function max and f9 should have MAX_EXPR */
+/* { dg-final { scan-tree-dump-times "MIN_EXPR" 2 "optimized" } } */
+/* { dg-final { scan-tree-dump-times "MAX_EXPR" 2 "optimized" } } */
--- /dev/null
+/* PR tree-optimization/109878 */
+/* { dg-do compile } */
+/* { dg-options "-O1 -fdump-tree-optimized" } */
+
+/* Returns max (a, b) */
+int max(int a, int b) {
+ if (b > a)
+ return b;
+ else
+ return a;
+}
+
+/* Returns min (a, b) */
+int min(int a, int b) {
+ if (b < a)
+ return b;
+ else
+ return a;
+}
+
+/* All the functions here shouldn't evalute min or max of a and b
+ * These functions should return a op b */
+int f(int a, int b)
+{
+ return max (a, b) + min (a, b);
+}
+
+int f1(int a, int b)
+{
+ return max (a, b) * min (a, b);
+}
+
+int f2(int a, int b)
+{
+ return max (a, b) | min (a, b);
+}
+
+int f3(int a, int b)
+{
+ return max (a, b) & min (a, b);
+}
+
+int f5(int a, int b)
+{
+ return min (a, b) ^ max (a, b);
+}
+
+int f6(int a, int b)
+{
+ return min (a, b) == max (a, b);
+}
+
+int f7(int a, int b)
+{
+ return min (a, b) != max (a, b);
+}
+
+/* Function min should have MIN_EXPR */
+/* Function max should have MAX_EXPR */
+/* { dg-final { scan-tree-dump-times "MIN_EXPR" 1 "optimized" } } */
+/* { dg-final { scan-tree-dump-times "MAX_EXPR" 1 "optimized" } } */