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:
parent
5fecfed878
commit
82f4f90a37
1 changed files with 15 additions and 1 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue