diff options
author | Richard Biener <rguenther@suse.de> | 2023-07-18 10:02:52 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2023-07-18 15:42:52 +0200 |
commit | cbe5f6859a73b2acf203bd7d13f9fb245d63cbd4 (patch) | |
tree | fe74bd9d19e12048768f260968240d7bd1ad190c /libgcc | |
parent | cde17323f950ac372691efd0a740fe0b4d7914a4 (diff) | |
download | gcc-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