aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2023-07-18 10:02:52 +0200
committerRichard Biener <rguenther@suse.de>2023-07-18 15:42:52 +0200
commitcbe5f6859a73b2acf203bd7d13f9fb245d63cbd4 (patch)
treefe74bd9d19e12048768f260968240d7bd1ad190c /libgcc
parentcde17323f950ac372691efd0a740fe0b4d7914a4 (diff)
downloadgcc-cbe5f6859a73b2acf203bd7d13f9fb245d63cbd4.zip
gcc-cbe5f6859a73b2acf203bd7d13f9fb245d63cbd4.tar.gz
gcc-cbe5f6859a73b2acf203bd7d13f9fb245d63cbd4.tar.bz2
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.
Diffstat (limited to 'libgcc')
0 files changed, 0 insertions, 0 deletions