PHIOPT: Allow MIN/MAX to have up to 2 MIN/MAX expressions for early phiopt

In the early PHIOPT mode, the original minmax_replacement, would
replace a PHI node with up to 2 min/max expressions in some cases,
this allows for that too.

OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.

gcc/ChangeLog:

	* tree-ssa-phiopt.cc (phiopt_early_allow): Allow for
	up to 2 min/max expressions in the sequence/match code.
This commit is contained in:
Andrew Pinski 2023-04-01 04:59:11 +00:00
parent 5fecfed878
commit 82f4f90a37

View file

@ -533,9 +533,23 @@ phiopt_early_allow (gimple_seq &seq, gimple_match_op &op)
return false;
tree_code code = (tree_code)op.code;
/* For non-empty sequence, only allow one statement. */
/* For non-empty sequence, only allow one statement
except for MIN/MAX, allow max 2 statements,
each with MIN/MAX. */
if (!gimple_seq_empty_p (seq))
{
if (code == MIN_EXPR || code == MAX_EXPR)
{
if (!gimple_seq_singleton_p (seq))
return false;
gimple *stmt = gimple_seq_first_stmt (seq);
/* Only allow assignments. */
if (!is_gimple_assign (stmt))
return false;
code = gimple_assign_rhs_code (stmt);
return code == MIN_EXPR || code == MAX_EXPR;
}
/* Check to make sure op was already a SSA_NAME. */
if (code != SSA_NAME)
return false;