On Mon, Jul 1, 2019 at 1:22 PM Joern Wolfgang Rennecke <joern.renne...@riscy-ip.com> wrote: > > The heuristic introduced for PR71016 prevents recognizing a max / min > combo like it is used for > saturation when followed by a conversion. > The attached patch refines the heuristic to allow this case. Regression > tested on x86_64-pc-linux-gnu .
Few style nits: if (!gsi_end_p (gsi)) - return NULL; + { + gimple *assign = gsi_stmt (gsi); + if (gimple_code (assign) != GIMPLE_ASSIGN) + return NULL; if (gassign *assign = dyn_cast <gassign *> (gsi_stmt (gsi))) { + tree lhs = gimple_assign_lhs (assign); + enum tree_code ass_code = gimple_assign_rhs_code (assign); + if (ass_code != MAX_EXPR && ass_code != MIN_EXPR) + return NULL; + gsi_prev_nondebug (&gsi); + if (!gsi_end_p (gsi)) + return NULL; } else return NULL; + } also please check that 'lhs' is equal to gimple_assing_rhs1 (arg0_def_stmt) otherwise you'd also allow MIN/MAX unrelated to the conversion detected. On x86 I see the MIN_EXPR is already detected by GENERIC folding, I wonder if that is required or if we can handle the case without in one phiopt pass invocation as well. Otherwise looks good to me. Thanks, Richard.