https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105715
--- Comment #6 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Richard Biener <rgue...@gcc.gnu.org>: https://gcc.gnu.org/g:cbe5f6859a73b2acf203bd7d13f9fb245d63cbd4 commit r14-2620-gcbe5f6859a73b2acf203bd7d13f9fb245d63cbd4 Author: Richard Biener <rguent...@suse.de> Date: Tue Jul 18 10:02:52 2023 +0200 middle-end/105715 - missed RTL if-conversion with COND_EXPR expansion When the COND_EXPR condition operand was split out to a separate stmt it became subject to CSE with other condition evaluations. This unfortunately leads to TER no longer applying and in turn RTL expansion of COND_EXPRs no longer seeing the condition and thus failing to try conditional move expansion. This can be seen with gcc.target/i386/pr45685.c when built with -march=cascadelake which then FAILs to produce the expected number of cmovs. It can also be seen when we create more COND_EXPRs early like for instruction selection of MIN/MAX operations that map to IEEE a > b ? a : b expression semantics. PR middle-end/105715 * gimple-isel.cc (gimple_expand_vec_exprs): Merge into... (pass_gimple_isel::execute): ... this. Duplicate comparison defs of COND_EXPRs.