This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tree-optimization/68894] Recognition min/max pattern with multiple arguments.


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68894

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
Doing this in a classical way in phi-opt might end up being slightly
convoluted.
So I'd propose to try to utilize match-and-simplify by adding


(cond (ge @0 @1) (max:s @0 @2) (max:s @1 @2))
-> (max (max @0 @1) @2)

kind patterns and from phiopt doing exploded queries of this simplification
by seeding the cond expr from the dominating condition plus the PHI operands.

 res = gimple_simplify (COND_EXPR, build2 /* Ick */ (cond-code, boolean_type,
cond-op0, cond-op1), true-phi-arg, false-phi-arg, &seq,
follow_single_use_edges);

of course you need more than a single pattern or consider swapped ops 2 and 3
(not yet supported).  In the end explicit pattern explosion might make a manual
implementation in phiopt easier (who knows).

/* Ick */ might not actually work so you'd need to build a SSA def for the
comparison result.  Or implement stmt matching on GIMPLE_PHIs doing that
transparently (two-operand with a common controling edge predicate).

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]