Skip to content

Commit

Permalink
tree-optimization/117104 - add missed guards to max(a,b) != a simplif…
Browse files Browse the repository at this point in the history
…ication

For vector types we have to make sure the comparison result is a vector
type and the resulting compare operation is supported.  As the resulting
compare is never an equality compare I didn't bother to check for the
cbranch case.

	PR tree-optimization/117104
	* match.pd ((cmp:c (minmax:c @0 @1) @0) -> (out @0 @1)): Properly
	guard the vector case.

	* gcc.dg/pr117104.c: New testcase.
  • Loading branch information
rguenth authored and Richard Biener committed Oct 12, 2024
1 parent ba773a8 commit f54d42e
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 1 deletion.
6 changes: 5 additions & 1 deletion gcc/match.pd
Original file line number Diff line number Diff line change
Expand Up @@ -4688,7 +4688,11 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
out (le gt gt le ge lt lt ge )
(simplify
(cmp:c (minmax:c @0 @1) @0)
(if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0)))
(if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0))
&& (!VECTOR_TYPE_P (TREE_TYPE (@0))
|| (VECTOR_TYPE_P (type)
&& (!expand_vec_cmp_expr_p (TREE_TYPE (@0), type, cmp)
|| expand_vec_cmp_expr_p (TREE_TYPE (@0), type, out)))))
(out @0 @1))))
/* MIN (X, 5) == 0 -> X == 0
MIN (X, 5) == 7 -> false */
Expand Down
12 changes: 12 additions & 0 deletions gcc/testsuite/gcc.dg/pr117104.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/* { dg-do compile } */
/* { dg-options "-O2 -fno-vect-cost-model" } */
/* { dg-additional-options "-mavx" { target { x86_64-*-* i?86-*-* } } } */

void g();
void f(long *a)
{
long b0 = a[0] > 0 ? a[0] : 0;
long b1 = a[1] > 0 ? a[1] : 0;
if ((b0|b1) == 0)
g();
}

0 comments on commit f54d42e

Please sign in to comment.