public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/115517] New: Fix regression after dropping uses of vcond{,u,eq}_optab
@ 2024-06-17 8:05 liuhongt at gcc dot gnu.org
2024-06-18 6:20 ` [Bug target/115517] Fix x86 regressions " rguenth at gcc dot gnu.org
` (15 more replies)
0 siblings, 16 replies; 17+ messages in thread
From: liuhongt at gcc dot gnu.org @ 2024-06-17 8:05 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
Bug ID: 115517
Summary: Fix regression after dropping uses of
vcond{,u,eq}_optab
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: liuhongt at gcc dot gnu.org
Depends on: 114189
Target Milestone: ---
Target: x86_64-*-* i?86-*-*
> I'd appreciate testing, I do not expect fallout for x86 or arm/aarch64.
> > I know riscv doesn't implement any of the legacy optabs. But less
> > maintained vector targets might need adjustments.
> >
> At GCC14, I tried to remove these expanders in the x86 backend, and it
> regressed some testcases, mainly because of the optimizations we did
> in ix86_expand_{int,fp}_vcond.
> I've started testing your patch, it's possible that we still need to
> move the ix86_expand_{int,fp}_vcond optimizations to the
> middle-end(isel or match.pd)or add extra patterns to handle it at the
> rtl pas_combine.
These are new failures I got
g++: g++.target/i386/avx-pr54700-1.C scan-assembler-not vpcmpgt[bdq]
g++: g++.target/i386/avx-pr54700-1.C scan-assembler-times vblendvpd 4
g++: g++.target/i386/avx-pr54700-1.C scan-assembler-times vblendvps 4
g++: g++.target/i386/avx-pr54700-1.C scan-assembler-times vpblendvb 2
g++: g++.target/i386/avx2-pr54700-1.C scan-assembler-not vpcmpgt[bdq]
g++: g++.target/i386/avx2-pr54700-1.C scan-assembler-times vblendvpd 4
g++: g++.target/i386/avx2-pr54700-1.C scan-assembler-times vblendvps 4
g++: g++.target/i386/avx2-pr54700-1.C scan-assembler-times vpblendvb 2
g++: g++.target/i386/avx512fp16-vcondmn-minmax.C -std=gnu++14
g++scan-assembler-times vmaxph 3
g++: g++.target/i386/avx512fp16-vcondmn-minmax.C -std=gnu++14
g++scan-assembler-times vminph 3
g++: g++.target/i386/avx512fp16-vcondmn-minmax.C -std=gnu++17
g++scan-assembler-times vmaxph 3
g++: g++.target/i386/avx512fp16-vcondmn-minmax.C -std=gnu++17
g++scan-assembler-times vminph 3
g++: g++.target/i386/avx512fp16-vcondmn-minmax.C -std=gnu++20
g++scan-assembler-times vmaxph 3
g++: g++.target/i386/avx512fp16-vcondmn-minmax.C -std=gnu++20
g++scan-assembler-times vminph 3
g++: g++.target/i386/avx512fp16-vcondmn-minmax.C -std=gnu++98
g++scan-assembler-times vmaxph 3
g++: g++.target/i386/avx512fp16-vcondmn-minmax.C -std=gnu++98
g++scan-assembler-times vminph 3
g++: g++.target/i386/pr100637-1b.C -std=gnu++14 scan-assembler-times
g++pcmpeqb 2
g++: g++.target/i386/pr100637-1b.C -std=gnu++17 scan-assembler-times
g++pcmpeqb 2
g++: g++.target/i386/pr100637-1b.C -std=gnu++20 scan-assembler-times
g++pcmpeqb 2
g++: g++.target/i386/pr100637-1b.C -std=gnu++98 scan-assembler-times
g++pcmpeqb 2
g++: g++.target/i386/pr100637-1w.C -std=gnu++14 scan-assembler-times
g++pcmpeqw 2
g++: g++.target/i386/pr100637-1w.C -std=gnu++17 scan-assembler-times
g++pcmpeqw 2
g++: g++.target/i386/pr100637-1w.C -std=gnu++20 scan-assembler-times
g++pcmpeqw 2
g++: g++.target/i386/pr100637-1w.C -std=gnu++98 scan-assembler-times
g++pcmpeqw 2
g++: g++.target/i386/pr100738-1.C -std=gnu++14 scan-assembler-not
g++vpcmpeqd[ \\t]
g++: g++.target/i386/pr100738-1.C -std=gnu++14 scan-assembler-not
g++vpxor[ \\t]
g++: g++.target/i386/pr100738-1.C -std=gnu++14 scan-assembler-times
g++vblendvps[ \\t] 2
g++: g++.target/i386/pr100738-1.C -std=gnu++17 scan-assembler-not
g++vpcmpeqd[ \\t]
g++: g++.target/i386/pr100738-1.C -std=gnu++17 scan-assembler-not
g++vpxor[ \\t]
g++: g++.target/i386/pr100738-1.C -std=gnu++17 scan-assembler-times
g++vblendvps[ \\t] 2
g++: g++.target/i386/pr100738-1.C -std=gnu++20 scan-assembler-not
g++vpcmpeqd[ \\t]
g++: g++.target/i386/pr100738-1.C -std=gnu++20 scan-assembler-not
g++vpxor[ \\t]
g++: g++.target/i386/pr100738-1.C -std=gnu++20 scan-assembler-times
g++vblendvps[ \\t] 2
g++: g++.target/i386/pr100738-1.C -std=gnu++98 scan-assembler-not
g++vpcmpeqd[ \\t]
g++: g++.target/i386/pr100738-1.C -std=gnu++98 scan-assembler-not
g++vpxor[ \\t]
g++: g++.target/i386/pr100738-1.C -std=gnu++98 scan-assembler-times
g++vblendvps[ \\t] 2
g++: g++.target/i386/pr103861-1.C -std=gnu++14 scan-assembler-times
g++pcmpeqb 2
g++: g++.target/i386/pr103861-1.C -std=gnu++17 scan-assembler-times
g++pcmpeqb 2
g++: g++.target/i386/pr103861-1.C -std=gnu++20 scan-assembler-times
g++pcmpeqb 2
g++: g++.target/i386/pr103861-1.C -std=gnu++98 scan-assembler-times
g++pcmpeqb 2
g++: g++.target/i386/pr61747.C -std=gnu++14 scan-assembler-times max 4
g++: g++.target/i386/pr61747.C -std=gnu++14 scan-assembler-times min 4
g++: g++.target/i386/pr61747.C -std=gnu++17 scan-assembler-times max 4
g++: g++.target/i386/pr61747.C -std=gnu++17 scan-assembler-times min 4
g++: g++.target/i386/pr61747.C -std=gnu++20 scan-assembler-times max 4
g++: g++.target/i386/pr61747.C -std=gnu++20 scan-assembler-times min 4
g++: g++.target/i386/sse4_1-pr54700-1.C scan-assembler-not pcmpgt[bdq]
g++: g++.target/i386/sse4_1-pr54700-1.C scan-assembler-times blendvpd 4
g++: g++.target/i386/sse4_1-pr54700-1.C scan-assembler-times blendvps 4
g++: g++.target/i386/sse4_1-pr54700-1.C scan-assembler-times pblendvb 2
gcc: gcc.target/i386/avx2-pr99908.c scan-assembler-not \tvpcmpeq
gcc: gcc.target/i386/avx512bw-pr96891-1.c scan-assembler-not %k[0-7]
gcc: gcc.target/i386/avx512vl-pr88547-1.c scan-assembler-not %k[0-9]
gcc: gcc.target/i386/avx512vl-pr88547-1.c scan-assembler-times vpminsb[\t ] 2
gcc: gcc.target/i386/avx512vl-pr88547-1.c scan-assembler-times vpminsd[\t ] 2
gcc: gcc.target/i386/avx512vl-pr88547-1.c scan-assembler-times vpminsq[\t ] 2
gcc: gcc.target/i386/avx512vl-pr88547-1.c scan-assembler-times vpminsw[\t ] 2
gcc: gcc.target/i386/avx512vl-pr88547-1.c scan-assembler-times vpminub[\t ] 2
gcc: gcc.target/i386/avx512vl-pr88547-1.c scan-assembler-times vpminud[\t ] 2
gcc: gcc.target/i386/avx512vl-pr88547-1.c scan-assembler-times vpminuq[\t ] 2
gcc: gcc.target/i386/avx512vl-pr88547-1.c scan-assembler-times vpminuw[\t ] 2
gcc: gcc.target/i386/blendv-3.c scan-assembler-not vpcmp
gcc: gcc.target/i386/pr88540.c scan-assembler minpd
gcc: gcc.target/i386/sse4_1-pr99908.c scan-assembler-not \tpcmpeq
unix/-m32: g++: g++.target/i386/avx-pr54700-1.C scan-assembler-not
vpcmpgt[bdq]
unix/-m32: g++: g++.target/i386/avx-pr54700-1.C scan-assembler-times
vblendvpd 4
unix/-m32: g++: g++.target/i386/avx-pr54700-1.C scan-assembler-times
vblendvps 4
unix/-m32: g++: g++.target/i386/avx-pr54700-1.C scan-assembler-times
vpblendvb 2
unix/-m32: g++: g++.target/i386/avx2-pr54700-1.C scan-assembler-not
vpcmpgt[bdq]
unix/-m32: g++: g++.target/i386/avx2-pr54700-1.C
scan-assembler-times vblendvpd 4
unix/-m32: g++: g++.target/i386/avx2-pr54700-1.C
scan-assembler-times vblendvps 4
unix/-m32: g++: g++.target/i386/avx2-pr54700-1.C
scan-assembler-times vpblendvb 2
unix/-m32: g++: g++.target/i386/avx512fp16-vcondmn-minmax.C
-std=gnu++14 scan-assembler-times vmaxph 3
unix/-m32: g++: g++.target/i386/avx512fp16-vcondmn-minmax.C
-std=gnu++14 scan-assembler-times vminph 3
unix/-m32: g++: g++.target/i386/avx512fp16-vcondmn-minmax.C
-std=gnu++17 scan-assembler-times vmaxph 3
unix/-m32: g++: g++.target/i386/avx512fp16-vcondmn-minmax.C
-std=gnu++17 scan-assembler-times vminph 3
unix/-m32: g++: g++.target/i386/avx512fp16-vcondmn-minmax.C
-std=gnu++20 scan-assembler-times vmaxph 3
unix/-m32: g++: g++.target/i386/avx512fp16-vcondmn-minmax.C
-std=gnu++20 scan-assembler-times vminph 3
unix/-m32: g++: g++.target/i386/avx512fp16-vcondmn-minmax.C
-std=gnu++98 scan-assembler-times vmaxph 3
unix/-m32: g++: g++.target/i386/avx512fp16-vcondmn-minmax.C
-std=gnu++98 scan-assembler-times vminph 3
unix/-m32: g++: g++.target/i386/pr100637-1b.C -std=gnu++14
scan-assembler-times pcmpeqb 2
unix/-m32: g++: g++.target/i386/pr100637-1b.C -std=gnu++17
scan-assembler-times pcmpeqb 2
unix/-m32: g++: g++.target/i386/pr100637-1b.C -std=gnu++20
scan-assembler-times pcmpeqb 2
unix/-m32: g++: g++.target/i386/pr100637-1b.C -std=gnu++98
scan-assembler-times pcmpeqb 2
unix/-m32: g++: g++.target/i386/pr100637-1w.C -std=gnu++14
scan-assembler-times pcmpeqw 2
unix/-m32: g++: g++.target/i386/pr100637-1w.C -std=gnu++17
scan-assembler-times pcmpeqw 2
unix/-m32: g++: g++.target/i386/pr100637-1w.C -std=gnu++20
scan-assembler-times pcmpeqw 2
unix/-m32: g++: g++.target/i386/pr100637-1w.C -std=gnu++98
scan-assembler-times pcmpeqw 2
unix/-m32: g++: g++.target/i386/pr100738-1.C -std=gnu++14
scan-assembler-not vpcmpeqd[ \\t]
unix/-m32: g++: g++.target/i386/pr100738-1.C -std=gnu++14
scan-assembler-not vpxor[ \\t]
unix/-m32: g++: g++.target/i386/pr100738-1.C -std=gnu++14
scan-assembler-times vblendvps[ \\t] 2
unix/-m32: g++: g++.target/i386/pr100738-1.C -std=gnu++17
scan-assembler-not vpcmpeqd[ \\t]
unix/-m32: g++: g++.target/i386/pr100738-1.C -std=gnu++17
scan-assembler-not vpxor[ \\t]
unix/-m32: g++: g++.target/i386/pr100738-1.C -std=gnu++17
scan-assembler-times vblendvps[ \\t] 2
unix/-m32: g++: g++.target/i386/pr100738-1.C -std=gnu++20
scan-assembler-not vpcmpeqd[ \\t]
unix/-m32: g++: g++.target/i386/pr100738-1.C -std=gnu++20
scan-assembler-not vpxor[ \\t]
unix/-m32: g++: g++.target/i386/pr100738-1.C -std=gnu++20
scan-assembler-times vblendvps[ \\t] 2
unix/-m32: g++: g++.target/i386/pr100738-1.C -std=gnu++98
scan-assembler-not vpcmpeqd[ \\t]
unix/-m32: g++: g++.target/i386/pr100738-1.C -std=gnu++98
scan-assembler-not vpxor[ \\t]
unix/-m32: g++: g++.target/i386/pr100738-1.C -std=gnu++98
scan-assembler-times vblendvps[ \\t] 2
unix/-m32: g++: g++.target/i386/pr103861-1.C -std=gnu++14
scan-assembler-times pcmpeqb 2
unix/-m32: g++: g++.target/i386/pr103861-1.C -std=gnu++17
scan-assembler-times pcmpeqb 2
unix/-m32: g++: g++.target/i386/pr103861-1.C -std=gnu++20
scan-assembler-times pcmpeqb 2
unix/-m32: g++: g++.target/i386/pr103861-1.C -std=gnu++98
scan-assembler-times pcmpeqb 2
unix/-m32: g++: g++.target/i386/pr61747.C -std=gnu++14
scan-assembler-times max 4
unix/-m32: g++: g++.target/i386/pr61747.C -std=gnu++14
scan-assembler-times min 4
unix/-m32: g++: g++.target/i386/pr61747.C -std=gnu++17
scan-assembler-times max 4
unix/-m32: g++: g++.target/i386/pr61747.C -std=gnu++17
scan-assembler-times min 4
unix/-m32: g++: g++.target/i386/pr61747.C -std=gnu++20
scan-assembler-times max 4
unix/-m32: g++: g++.target/i386/pr61747.C -std=gnu++20
scan-assembler-times min 4
unix/-m32: g++: g++.target/i386/sse4_1-pr54700-1.C
scan-assembler-not pcmpgt[bdq]
unix/-m32: g++: g++.target/i386/sse4_1-pr54700-1.C
scan-assembler-times blendvpd 4
unix/-m32: g++: g++.target/i386/sse4_1-pr54700-1.C
scan-assembler-times blendvps 4
unix/-m32: g++: g++.target/i386/sse4_1-pr54700-1.C
scan-assembler-times pblendvb 2
unix/-m32: gcc: gcc.target/i386/avx2-pr99908.c scan-assembler-not \tvpcmpeq
unix/-m32: gcc: gcc.target/i386/avx512bw-pr96891-1.c scan-assembler-not %k[0-7]
unix/-m32: gcc: gcc.target/i386/avx512vl-pr88547-1.c scan-assembler-not %k[0-9]
unix/-m32: gcc: gcc.target/i386/avx512vl-pr88547-1.c
scan-assembler-times vpminsb[\t ] 2
unix/-m32: gcc: gcc.target/i386/avx512vl-pr88547-1.c
scan-assembler-times vpminsd[\t ] 2
unix/-m32: gcc: gcc.target/i386/avx512vl-pr88547-1.c
scan-assembler-times vpminsq[\t ] 2
unix/-m32: gcc: gcc.target/i386/avx512vl-pr88547-1.c
scan-assembler-times vpminsw[\t ] 2
unix/-m32: gcc: gcc.target/i386/avx512vl-pr88547-1.c
scan-assembler-times vpminub[\t ] 2
unix/-m32: gcc: gcc.target/i386/avx512vl-pr88547-1.c
scan-assembler-times vpminud[\t ] 2
unix/-m32: gcc: gcc.target/i386/avx512vl-pr88547-1.c
scan-assembler-times vpminuq[\t ] 2
unix/-m32: gcc: gcc.target/i386/avx512vl-pr88547-1.c
scan-assembler-times vpminuw[\t ] 2
unix/-m32: gcc: gcc.target/i386/blendv-3.c scan-assembler-not vpcmp
unix/-m32: gcc: gcc.target/i386/pr88540.c scan-assembler minpd
unix/-m32: gcc: gcc.target/i386/sse4_1-pr99908.c scan-assembler-not \tpcmpeq
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114189
[Bug 114189] Target implements obsolete vcond{,u,eq} expanders
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/115517] Fix x86 regressions after dropping uses of vcond{,u,eq}_optab
2024-06-17 8:05 [Bug target/115517] New: Fix regression after dropping uses of vcond{,u,eq}_optab liuhongt at gcc dot gnu.org
@ 2024-06-18 6:20 ` rguenth at gcc dot gnu.org
2024-06-18 8:39 ` liuhongt at gcc dot gnu.org
` (14 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: rguenth at gcc dot gnu.org @ 2024-06-18 6:20 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Btw, I had opened PR115490 with my results for this already. Some mitigation
should be from optimizing ISEL expansion to vcond_mask and I'd start with
looking at some of the fallout from that side (note that might require
the backend reject not natively implemented vec_cmp via its operand 1
predicate)
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/115517] Fix x86 regressions after dropping uses of vcond{,u,eq}_optab
2024-06-17 8:05 [Bug target/115517] New: Fix regression after dropping uses of vcond{,u,eq}_optab liuhongt at gcc dot gnu.org
2024-06-18 6:20 ` [Bug target/115517] Fix x86 regressions " rguenth at gcc dot gnu.org
@ 2024-06-18 8:39 ` liuhongt at gcc dot gnu.org
2024-06-18 10:49 ` rguenther at suse dot de
` (13 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: liuhongt at gcc dot gnu.org @ 2024-06-18 8:39 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
--- Comment #2 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #1)
> Btw, I had opened PR115490 with my results for this already. Some mitigation
> should be from optimizing ISEL expansion to vcond_mask and I'd start with
> looking at some of the fallout from that side (note that might require
> the backend reject not natively implemented vec_cmp via its operand 1
> predicate)
w/o AVX512, vector integer comparison only supports EQ/GT, others comparison
rtx_cost is transformed to that. (.i.e GTU is emulated with us_minus + eq +
negative the vector mask)
If we restrict the predicate of operand 1, would middle-end reject
vectorization (or lower it to scalar version)?
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/115517] Fix x86 regressions after dropping uses of vcond{,u,eq}_optab
2024-06-17 8:05 [Bug target/115517] New: Fix regression after dropping uses of vcond{,u,eq}_optab liuhongt at gcc dot gnu.org
2024-06-18 6:20 ` [Bug target/115517] Fix x86 regressions " rguenth at gcc dot gnu.org
2024-06-18 8:39 ` liuhongt at gcc dot gnu.org
@ 2024-06-18 10:49 ` rguenther at suse dot de
2024-06-18 11:08 ` liuhongt at gcc dot gnu.org
` (12 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: rguenther at suse dot de @ 2024-06-18 10:49 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
--- Comment #3 from rguenther at suse dot de <rguenther at suse dot de> ---
On Tue, 18 Jun 2024, liuhongt at gcc dot gnu.org wrote:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
>
> --- Comment #2 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
> (In reply to Richard Biener from comment #1)
> > Btw, I had opened PR115490 with my results for this already. Some mitigation
> > should be from optimizing ISEL expansion to vcond_mask and I'd start with
> > looking at some of the fallout from that side (note that might require
> > the backend reject not natively implemented vec_cmp via its operand 1
> > predicate)
>
> w/o AVX512, vector integer comparison only supports EQ/GT, others comparison
> rtx_cost is transformed to that. (.i.e GTU is emulated with us_minus + eq +
> negative the vector mask)
> If we restrict the predicate of operand 1, would middle-end reject
> vectorization (or lower it to scalar version)?
Richard suggests that we implement the "obvious" transforms like
inversion in the middle-end but if for example unsigned compares
are not supported the us_minus + eq + negative trick isn't on
that list.
The main reason to restrict vec_cmp would be to avoid
a <= b ? c : d going with an unsupported vec_cmp but instead
do a > b ? d : c - the alternative is trying to fix this
on the RTL side via combine. I understand the non-native
compares are already expanded to supported form and we
don't use a split after combine to make combinations to
a supported form easier?
I don't have a good feeling which approach is going to be better
maintainable here. But for example even for the unsigned compare
"lowering" the middle-end would have range info while RTL does
not (to some extent it's available at RTL expansion time).
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/115517] Fix x86 regressions after dropping uses of vcond{,u,eq}_optab
2024-06-17 8:05 [Bug target/115517] New: Fix regression after dropping uses of vcond{,u,eq}_optab liuhongt at gcc dot gnu.org
` (2 preceding siblings ...)
2024-06-18 10:49 ` rguenther at suse dot de
@ 2024-06-18 11:08 ` liuhongt at gcc dot gnu.org
2024-06-18 11:17 ` rguenther at suse dot de
` (11 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: liuhongt at gcc dot gnu.org @ 2024-06-18 11:08 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
--- Comment #4 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
(In reply to rguenther@suse.de from comment #3)
> On Tue, 18 Jun 2024, liuhongt at gcc dot gnu.org wrote:
>
> > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
> >
> > --- Comment #2 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
> > (In reply to Richard Biener from comment #1)
> > > Btw, I had opened PR115490 with my results for this already. Some mitigation
> > > should be from optimizing ISEL expansion to vcond_mask and I'd start with
> > > looking at some of the fallout from that side (note that might require
> > > the backend reject not natively implemented vec_cmp via its operand 1
> > > predicate)
> >
> > w/o AVX512, vector integer comparison only supports EQ/GT, others comparison
> > rtx_cost is transformed to that. (.i.e GTU is emulated with us_minus + eq +
> > negative the vector mask)
> > If we restrict the predicate of operand 1, would middle-end reject
> > vectorization (or lower it to scalar version)?
>
> Richard suggests that we implement the "obvious" transforms like
> inversion in the middle-end but if for example unsigned compares
> are not supported the us_minus + eq + negative trick isn't on
> that list.
>
> The main reason to restrict vec_cmp would be to avoid
> a <= b ? c : d going with an unsupported vec_cmp but instead
> do a > b ? d : c - the alternative is trying to fix this
> on the RTL side via combine. I understand the non-native
Yes, I have a patch which can fix most regressions via pattern match in
combine.
Still there is a situation that is difficult to deal with, mainly the
optimization w/o sse4.1 . Because pblendvb/blendvps/blendvpd only exists under
sse4.1, w/o sse4.1, it takes 3 instructions (pand,pandn,por) to simulate the
vcond_mask, and the combine matches up to 4 instructions, which makes it
currently impossible to use the combine to recover those optimizations in the
vcond{,u,eq}.i.e min/max.
In the case of sse 4.1 and above, there is basically no regression anymore.
the regression testcases w/o sse4.1
FAIL: g++.target/i386/pr100637-1b.C -std=gnu++14 scan-assembler-times pcmpeqb
2
FAIL: g++.target/i386/pr100637-1b.C -std=gnu++17 scan-assembler-times pcmpeqb
2
FAIL: g++.target/i386/pr100637-1b.C -std=gnu++20 scan-assembler-times pcmpeqb
2
FAIL: g++.target/i386/pr100637-1b.C -std=gnu++98 scan-assembler-times pcmpeqb
2
FAIL: g++.target/i386/pr100637-1w.C -std=gnu++14 scan-assembler-times pcmpeqw
2
FAIL: g++.target/i386/pr100637-1w.C -std=gnu++17 scan-assembler-times pcmpeqw
2
FAIL: g++.target/i386/pr100637-1w.C -std=gnu++20 scan-assembler-times pcmpeqw
2
FAIL: g++.target/i386/pr100637-1w.C -std=gnu++98 scan-assembler-times pcmpeqw
2
FAIL: g++.target/i386/pr103861-1.C -std=gnu++14 scan-assembler-times pcmpeqb
2
FAIL: g++.target/i386/pr103861-1.C -std=gnu++17 scan-assembler-times pcmpeqb
2
FAIL: g++.target/i386/pr103861-1.C -std=gnu++20 scan-assembler-times pcmpeqb
2
FAIL: g++.target/i386/pr103861-1.C -std=gnu++98 scan-assembler-times pcmpeqb
2
FAIL: gcc.target/i386/pr88540.c scan-assembler minpd
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/115517] Fix x86 regressions after dropping uses of vcond{,u,eq}_optab
2024-06-17 8:05 [Bug target/115517] New: Fix regression after dropping uses of vcond{,u,eq}_optab liuhongt at gcc dot gnu.org
` (3 preceding siblings ...)
2024-06-18 11:08 ` liuhongt at gcc dot gnu.org
@ 2024-06-18 11:17 ` rguenther at suse dot de
2024-06-18 11:29 ` liuhongt at gcc dot gnu.org
` (10 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: rguenther at suse dot de @ 2024-06-18 11:17 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
--- Comment #5 from rguenther at suse dot de <rguenther at suse dot de> ---
On Tue, 18 Jun 2024, liuhongt at gcc dot gnu.org wrote:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
>
> --- Comment #4 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
> (In reply to rguenther@suse.de from comment #3)
> > On Tue, 18 Jun 2024, liuhongt at gcc dot gnu.org wrote:
> >
> > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
> > >
> > > --- Comment #2 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
> > > (In reply to Richard Biener from comment #1)
> > > > Btw, I had opened PR115490 with my results for this already. Some mitigation
> > > > should be from optimizing ISEL expansion to vcond_mask and I'd start with
> > > > looking at some of the fallout from that side (note that might require
> > > > the backend reject not natively implemented vec_cmp via its operand 1
> > > > predicate)
> > >
> > > w/o AVX512, vector integer comparison only supports EQ/GT, others comparison
> > > rtx_cost is transformed to that. (.i.e GTU is emulated with us_minus + eq +
> > > negative the vector mask)
> > > If we restrict the predicate of operand 1, would middle-end reject
> > > vectorization (or lower it to scalar version)?
> >
> > Richard suggests that we implement the "obvious" transforms like
> > inversion in the middle-end but if for example unsigned compares
> > are not supported the us_minus + eq + negative trick isn't on
> > that list.
> >
> > The main reason to restrict vec_cmp would be to avoid
> > a <= b ? c : d going with an unsupported vec_cmp but instead
> > do a > b ? d : c - the alternative is trying to fix this
> > on the RTL side via combine. I understand the non-native
>
> Yes, I have a patch which can fix most regressions via pattern match in
> combine.
> Still there is a situation that is difficult to deal with, mainly the
> optimization w/o sse4.1 . Because pblendvb/blendvps/blendvpd only exists under
> sse4.1, w/o sse4.1, it takes 3 instructions (pand,pandn,por) to simulate the
> vcond_mask, and the combine matches up to 4 instructions, which makes it
> currently impossible to use the combine to recover those optimizations in the
> vcond{,u,eq}.i.e min/max.
> In the case of sse 4.1 and above, there is basically no regression anymore.
Maybe it's possible to use a define_insn_and_split for blends w/o SSE 4.1?
That would allow combine matching the high-level blend operation and
we'd only lower it afterwards? The question is what we lose in
combinations of/into the loweredn pand/pandn/por of course.
Maybe it's possible to catch the higher-level optimization (min/max)
on the GIMPLE level instead?
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/115517] Fix x86 regressions after dropping uses of vcond{,u,eq}_optab
2024-06-17 8:05 [Bug target/115517] New: Fix regression after dropping uses of vcond{,u,eq}_optab liuhongt at gcc dot gnu.org
` (4 preceding siblings ...)
2024-06-18 11:17 ` rguenther at suse dot de
@ 2024-06-18 11:29 ` liuhongt at gcc dot gnu.org
2024-07-01 5:20 ` cvs-commit at gcc dot gnu.org
` (9 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: liuhongt at gcc dot gnu.org @ 2024-06-18 11:29 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
--- Comment #6 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
(In reply to rguenther@suse.de from comment #5)
> On Tue, 18 Jun 2024, liuhongt at gcc dot gnu.org wrote:
>
> > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
> >
> > --- Comment #4 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
> > (In reply to rguenther@suse.de from comment #3)
> > > On Tue, 18 Jun 2024, liuhongt at gcc dot gnu.org wrote:
> > >
> > > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
> > > >
> > > > --- Comment #2 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
> > > > (In reply to Richard Biener from comment #1)
> > > > > Btw, I had opened PR115490 with my results for this already. Some mitigation
> > > > > should be from optimizing ISEL expansion to vcond_mask and I'd start with
> > > > > looking at some of the fallout from that side (note that might require
> > > > > the backend reject not natively implemented vec_cmp via its operand 1
> > > > > predicate)
> > > >
> > > > w/o AVX512, vector integer comparison only supports EQ/GT, others comparison
> > > > rtx_cost is transformed to that. (.i.e GTU is emulated with us_minus + eq +
> > > > negative the vector mask)
> > > > If we restrict the predicate of operand 1, would middle-end reject
> > > > vectorization (or lower it to scalar version)?
> > >
> > > Richard suggests that we implement the "obvious" transforms like
> > > inversion in the middle-end but if for example unsigned compares
> > > are not supported the us_minus + eq + negative trick isn't on
> > > that list.
> > >
> > > The main reason to restrict vec_cmp would be to avoid
> > > a <= b ? c : d going with an unsupported vec_cmp but instead
> > > do a > b ? d : c - the alternative is trying to fix this
> > > on the RTL side via combine. I understand the non-native
> >
> > Yes, I have a patch which can fix most regressions via pattern match in
> > combine.
> > Still there is a situation that is difficult to deal with, mainly the
> > optimization w/o sse4.1 . Because pblendvb/blendvps/blendvpd only exists under
> > sse4.1, w/o sse4.1, it takes 3 instructions (pand,pandn,por) to simulate the
> > vcond_mask, and the combine matches up to 4 instructions, which makes it
> > currently impossible to use the combine to recover those optimizations in the
> > vcond{,u,eq}.i.e min/max.
> > In the case of sse 4.1 and above, there is basically no regression anymore.
>
> Maybe it's possible to use a define_insn_and_split for blends w/o SSE 4.1?
> That would allow combine matching the high-level blend operation and
> we'd only lower it afterwards? The question is what we lose in
> combinations of/into the loweredn pand/pandn/por of course.
I'd rather live with those regressions since they're only existed below sse4.1.
>
> Maybe it's possible to catch the higher-level optimization (min/max)
> on the GIMPLE level instead?
For integral part, I believe the optimization is already there at gimple level.
For floating point part, x86 {max,min}{ps,pd} is not ieee-conformant, it's a
exact match of cond_expr a < b ? a : b (w/ consideration of -0.0 and NAN.)
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/115517] Fix x86 regressions after dropping uses of vcond{,u,eq}_optab
2024-06-17 8:05 [Bug target/115517] New: Fix regression after dropping uses of vcond{,u,eq}_optab liuhongt at gcc dot gnu.org
` (5 preceding siblings ...)
2024-06-18 11:29 ` liuhongt at gcc dot gnu.org
@ 2024-07-01 5:20 ` cvs-commit at gcc dot gnu.org
2024-07-01 5:20 ` cvs-commit at gcc dot gnu.org
` (8 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-07-01 5:20 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
--- Comment #7 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by hongtao Liu <liuhongt@gcc.gnu.org>:
https://gcc.gnu.org/g:2e2dfa0095c3326a0a5fc2ff175918b42eeb044f
commit r15-1736-g2e2dfa0095c3326a0a5fc2ff175918b42eeb044f
Author: liuhongt <hongtao.liu@intel.com>
Date: Mon Jun 17 17:16:46 2024 +0800
Add more splitters to match (unspec [op1 op2 (gt op3 constm1_operand)]
UNSPEC_BLENDV)
These define_insn_and_split are needed after vcond{,u,eq} is obsolete.
gcc/ChangeLog:
PR target/115517
* config/i386/sse.md
(*<sse4_1>_blendv<ssemodesuffix><avxsizesuffix>_gt): New
define_insn_and_split.
(*<sse4_1>_blendv<ssefltmodesuffix><avxsizesuffix>_gtint):
Ditto.
(*<sse4_1>_blendv<ssefltmodesuffix><avxsizesuffix>_not_gtint):
Ditto.
(*<sse4_1_avx2>_pblendvb_gt): Ditto.
(*<sse4_1_avx2>_pblendvb_gt_subreg_not): Ditto.
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/115517] Fix x86 regressions after dropping uses of vcond{,u,eq}_optab
2024-06-17 8:05 [Bug target/115517] New: Fix regression after dropping uses of vcond{,u,eq}_optab liuhongt at gcc dot gnu.org
` (6 preceding siblings ...)
2024-07-01 5:20 ` cvs-commit at gcc dot gnu.org
@ 2024-07-01 5:20 ` cvs-commit at gcc dot gnu.org
2024-07-01 5:20 ` cvs-commit at gcc dot gnu.org
` (7 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-07-01 5:20 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
--- Comment #8 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by hongtao Liu <liuhongt@gcc.gnu.org>:
https://gcc.gnu.org/g:b06a108f0fbffe12493b527224f6e4131a72beac
commit r15-1737-gb06a108f0fbffe12493b527224f6e4131a72beac
Author: liuhongt <hongtao.liu@intel.com>
Date: Tue Jun 18 14:03:42 2024 +0800
Lower AVX512 kmask comparison back to AVX2 comparison when op_{true,false}
is vector -1/0.
gcc/ChangeLog
PR target/115517
* config/i386/sse.md
(*<avx512>_cvtmask2<ssemodesuffix><mode>_not): New pre_reload
splitter.
(*<avx512>_cvtmask2<ssemodesuffix><mode>_not): Ditto.
(*avx2_pcmp<mode>3_6): Ditto.
(*avx2_pcmp<mode>3_7): Ditto.
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/115517] Fix x86 regressions after dropping uses of vcond{,u,eq}_optab
2024-06-17 8:05 [Bug target/115517] New: Fix regression after dropping uses of vcond{,u,eq}_optab liuhongt at gcc dot gnu.org
` (7 preceding siblings ...)
2024-07-01 5:20 ` cvs-commit at gcc dot gnu.org
@ 2024-07-01 5:20 ` cvs-commit at gcc dot gnu.org
2024-07-01 5:21 ` cvs-commit at gcc dot gnu.org
` (6 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-07-01 5:20 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
--- Comment #9 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by hongtao Liu <liuhongt@gcc.gnu.org>:
https://gcc.gnu.org/g:09737d9605521df9232d9990006c44955064f44e
commit r15-1738-g09737d9605521df9232d9990006c44955064f44e
Author: liuhongt <hongtao.liu@intel.com>
Date: Tue Jun 18 15:52:02 2024 +0800
Match IEEE min/max with UNSPEC_IEEE_{MIN,MAX}.
These versions of the min/max patterns implement exactly the operations
min = (op1 < op2 ? op1 : op2)
max = (!(op1 < op2) ? op1 : op2)
gcc/ChangeLog:
PR target/115517
* config/i386/sse.md (*minmax<mode>3_1): New pre_reload
define_insn_and_split.
(*minmax<mode>3_2): Ditto.
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/115517] Fix x86 regressions after dropping uses of vcond{,u,eq}_optab
2024-06-17 8:05 [Bug target/115517] New: Fix regression after dropping uses of vcond{,u,eq}_optab liuhongt at gcc dot gnu.org
` (8 preceding siblings ...)
2024-07-01 5:20 ` cvs-commit at gcc dot gnu.org
@ 2024-07-01 5:21 ` cvs-commit at gcc dot gnu.org
2024-07-01 5:21 ` cvs-commit at gcc dot gnu.org
` (5 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-07-01 5:21 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
--- Comment #10 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by hongtao Liu <liuhongt@gcc.gnu.org>:
https://gcc.gnu.org/g:3cb204046c0db899750aee9480af4f1953a40ac3
commit r15-1739-g3cb204046c0db899750aee9480af4f1953a40ac3
Author: liuhongt <hongtao.liu@intel.com>
Date: Wed Jun 19 13:12:00 2024 +0800
Add more splitter for mskmov with avx512 comparison.
gcc/ChangeLog:
PR target/115517
* config/i386/sse.md
(*<sse>_movmsk<ssemodesuffix><avxsizesuffix>_lt_avx512): New
define_insn_and_split.
(*<sse>_movmsk<ssemodesuffix><avxsizesuffix>_<u>ext_lt_avx512):
Ditto.
(*<sse2_avx2>_pmovmskb_lt_avx512): Ditto.
(*<sse2_avx2>_pmovmskb_zext_lt_avx512): Ditto.
(*sse2_pmovmskb_ext_lt_avx512): Ditto.
(*pmovsk_kmask_v16qi_avx512): Ditto.
(*pmovsk_mask_v32qi_avx512): Ditto.
(*pmovsk_mask_cmp_<mode>_avx512): Ditto.
(*pmovsk_ptest_<mode>_avx512): Ditto.
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/115517] Fix x86 regressions after dropping uses of vcond{,u,eq}_optab
2024-06-17 8:05 [Bug target/115517] New: Fix regression after dropping uses of vcond{,u,eq}_optab liuhongt at gcc dot gnu.org
` (9 preceding siblings ...)
2024-07-01 5:21 ` cvs-commit at gcc dot gnu.org
@ 2024-07-01 5:21 ` cvs-commit at gcc dot gnu.org
2024-07-01 5:21 ` cvs-commit at gcc dot gnu.org
` (4 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-07-01 5:21 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
--- Comment #11 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by hongtao Liu <liuhongt@gcc.gnu.org>:
https://gcc.gnu.org/g:e94e6ee495d95f29355bbc017214228a5e367638
commit r15-1740-ge94e6ee495d95f29355bbc017214228a5e367638
Author: liuhongt <hongtao.liu@intel.com>
Date: Wed Jun 19 16:05:58 2024 +0800
Adjust testcase for the regressed testcases after obsolete of vcond{,u,eq}.
> Richard suggests that we implement the "obvious" transforms like
> inversion in the middle-end but if for example unsigned compares
> are not supported the us_minus + eq + negative trick isn't on
> that list.
>
> The main reason to restrict vec_cmp would be to avoid
> a <= b ? c : d going with an unsupported vec_cmp but instead
> do a > b ? d : c - the alternative is trying to fix this
> on the RTL side via combine. I understand the non-native
Yes, I have a patch which can fix most regressions via pattern match
in combine.
Still there is a situation that is difficult to deal with, mainly the
optimization w/o sse4.1 . Because pblendvb/blendvps/blendvpd only
exists under sse4.1, w/o sse4.1, it takes 3
instructions (pand,pandn,por) to simulate the vcond_mask, and the
combine matches up to 4 instructions, which makes it currently
impossible to use the combine to recover those optimizations in the
vcond{,u,eq}.i.e min/max.
In the case of sse 4.1 and above, there is basically no regression anymore.
the regression testcases w/o sse4.1
FAIL: g++.target/i386/pr100637-1b.C -std=gnu++14 scan-assembler-times
pcmpeqb 2
FAIL: g++.target/i386/pr100637-1b.C -std=gnu++17 scan-assembler-times
pcmpeqb 2
FAIL: g++.target/i386/pr100637-1b.C -std=gnu++20 scan-assembler-times
pcmpeqb 2
FAIL: g++.target/i386/pr100637-1b.C -std=gnu++98 scan-assembler-times
pcmpeqb 2
FAIL: g++.target/i386/pr100637-1w.C -std=gnu++14 scan-assembler-times
pcmpeqw 2
FAIL: g++.target/i386/pr100637-1w.C -std=gnu++17 scan-assembler-times
pcmpeqw 2
FAIL: g++.target/i386/pr100637-1w.C -std=gnu++20 scan-assembler-times
pcmpeqw 2
FAIL: g++.target/i386/pr100637-1w.C -std=gnu++98 scan-assembler-times
pcmpeqw 2
FAIL: g++.target/i386/pr103861-1.C -std=gnu++14 scan-assembler-times
pcmpeqb 2
FAIL: g++.target/i386/pr103861-1.C -std=gnu++17 scan-assembler-times
pcmpeqb 2
FAIL: g++.target/i386/pr103861-1.C -std=gnu++20 scan-assembler-times
pcmpeqb 2
FAIL: g++.target/i386/pr103861-1.C -std=gnu++98 scan-assembler-times
pcmpeqb 2
FAIL: gcc.target/i386/pr88540.c scan-assembler minpd
gcc/testsuite/ChangeLog:
PR target/115517
* g++.target/i386/pr100637-1b.C: Add xfail and -mno-sse4.1.
* g++.target/i386/pr100637-1w.C: Ditto.
* g++.target/i386/pr103861-1.C: Ditto.
* gcc.target/i386/pr88540.c: Ditto.
* gcc.target/i386/pr103941-2.c: Add -mno-avx512f.
* g++.target/i386/sse4_1-pr100637-1b.C: New test.
* g++.target/i386/sse4_1-pr100637-1w.C: New test.
* g++.target/i386/sse4_1-pr103861-1.C: New test.
* gcc.target/i386/sse4_1-pr88540.c: New test.
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/115517] Fix x86 regressions after dropping uses of vcond{,u,eq}_optab
2024-06-17 8:05 [Bug target/115517] New: Fix regression after dropping uses of vcond{,u,eq}_optab liuhongt at gcc dot gnu.org
` (10 preceding siblings ...)
2024-07-01 5:21 ` cvs-commit at gcc dot gnu.org
@ 2024-07-01 5:21 ` cvs-commit at gcc dot gnu.org
2024-07-01 5:21 ` cvs-commit at gcc dot gnu.org
` (3 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-07-01 5:21 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
--- Comment #12 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by hongtao Liu <liuhongt@gcc.gnu.org>:
https://gcc.gnu.org/g:2ccdd0f22312a14ac64bf944fdc4f8e7532eb0eb
commit r15-1741-g2ccdd0f22312a14ac64bf944fdc4f8e7532eb0eb
Author: liuhongt <hongtao.liu@intel.com>
Date: Thu Jun 20 12:41:13 2024 +0800
Optimize a < 0 ? -1 : 0 to (signed)a >> 31.
Try to optimize x < 0 ? -1 : 0 into (signed) x >> 31
and x < 0 ? 1 : 0 into (unsigned) x >> 31.
Add define_insn_and_split for the optimization did in
ix86_expand_int_vcond.
gcc/ChangeLog:
PR target/115517
* config/i386/sse.md ("*ashr<mode>3_1"): New
define_insn_and_split.
(*avx512_ashr<mode>3_1): Ditto.
(*avx2_lshr<mode>3_1): Ditto.
(*avx2_lshr<mode>3_2): Ditto and add 2 combine splitter after
it.
* config/i386/mmx.md (mmxscalarsize): New mode attribute.
(*mmw_ashr<mode>3_1): New define_insn_and_split.
("mmx_<insn><mode>3): Add a combine spiltter after it.
(*mmx_ashrv2hi3_1): New define_insn_and_plit, also add a
combine splitter after it.
gcc/testsuite/ChangeLog:
* gcc.target/i386/pr111023-2.c: Adjust testcase.
* gcc.target/i386/vect-div-1.c: Ditto.
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/115517] Fix x86 regressions after dropping uses of vcond{,u,eq}_optab
2024-06-17 8:05 [Bug target/115517] New: Fix regression after dropping uses of vcond{,u,eq}_optab liuhongt at gcc dot gnu.org
` (11 preceding siblings ...)
2024-07-01 5:21 ` cvs-commit at gcc dot gnu.org
@ 2024-07-01 5:21 ` cvs-commit at gcc dot gnu.org
2024-07-01 5:26 ` liuhongt at gcc dot gnu.org
` (2 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-07-01 5:21 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
--- Comment #13 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by hongtao Liu <liuhongt@gcc.gnu.org>:
https://gcc.gnu.org/g:55f80c690c5fa59836646565a9dee2a3f68374a0
commit r15-1742-g55f80c690c5fa59836646565a9dee2a3f68374a0
Author: liuhongt <hongtao.liu@intel.com>
Date: Mon Jun 24 09:19:01 2024 +0800
Remove vcond{,u,eq}<mode> expanders since they will be obsolete.
gcc/ChangeLog:
PR target/115517
* config/i386/mmx.md (vcond<mode>v2sf): Removed.
(vcond<MMXMODE124:mode><MMXMODEI:mode>): Ditto.
(vcond<mode><mode>): Ditto.
(vcondu<MMXMODE124:mode><MMXMODEI:mode>): Ditto.
(vcondu<mode><mode>): Ditto.
* config/i386/sse.md (vcond<V_512:mode><VF_512:mode>): Ditto.
(vcond<V_256:mode><VF_256:mode>): Ditto.
(vcond<V_128:mode><VF_128:mode>): Ditto.
(vcond<VI2HFBF_AVX512VL:mode><VHF_AVX512VL:mode>): Ditto.
(vcond<V_512:mode><VI_AVX512BW:mode>): Ditto.
(vcond<V_256:mode><VI_256:mode>): Ditto.
(vcond<V_128:mode><VI124_128:mode>): Ditto.
(vcond<VI8F_128:mode>v2di): Ditto.
(vcondu<V_512:mode><VI_AVX512BW:mode>): Ditto.
(vcondu<V_256:mode><VI_256:mode>): Ditto.
(vcondu<V_128:mode><VI124_128:mode>): Ditto.
(vcondu<VI8F_128:mode>v2di): Ditto.
(vcondeq<VI8F_128:mode>v2di): Ditto.
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/115517] Fix x86 regressions after dropping uses of vcond{,u,eq}_optab
2024-06-17 8:05 [Bug target/115517] New: Fix regression after dropping uses of vcond{,u,eq}_optab liuhongt at gcc dot gnu.org
` (12 preceding siblings ...)
2024-07-01 5:21 ` cvs-commit at gcc dot gnu.org
@ 2024-07-01 5:26 ` liuhongt at gcc dot gnu.org
2024-07-01 5:27 ` liuhongt at gcc dot gnu.org
2024-07-01 6:45 ` rguenth at gcc dot gnu.org
15 siblings, 0 replies; 17+ messages in thread
From: liuhongt at gcc dot gnu.org @ 2024-07-01 5:26 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
--- Comment #14 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
regressions above SSE4.1 are fxed in GCC15, SSE2 regressions are tracked in
PR115683
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/115517] Fix x86 regressions after dropping uses of vcond{,u,eq}_optab
2024-06-17 8:05 [Bug target/115517] New: Fix regression after dropping uses of vcond{,u,eq}_optab liuhongt at gcc dot gnu.org
` (13 preceding siblings ...)
2024-07-01 5:26 ` liuhongt at gcc dot gnu.org
@ 2024-07-01 5:27 ` liuhongt at gcc dot gnu.org
2024-07-01 6:45 ` rguenth at gcc dot gnu.org
15 siblings, 0 replies; 17+ messages in thread
From: liuhongt at gcc dot gnu.org @ 2024-07-01 5:27 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
Hongtao Liu <liuhongt at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |FIXED
Status|UNCONFIRMED |RESOLVED
--- Comment #15 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
Fixed.
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/115517] Fix x86 regressions after dropping uses of vcond{,u,eq}_optab
2024-06-17 8:05 [Bug target/115517] New: Fix regression after dropping uses of vcond{,u,eq}_optab liuhongt at gcc dot gnu.org
` (14 preceding siblings ...)
2024-07-01 5:27 ` liuhongt at gcc dot gnu.org
@ 2024-07-01 6:45 ` rguenth at gcc dot gnu.org
15 siblings, 0 replies; 17+ messages in thread
From: rguenth at gcc dot gnu.org @ 2024-07-01 6:45 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115517
--- Comment #16 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Hongtao Liu from comment #14)
> regressions above SSE4.1 are fxed in GCC15, SSE2 regressions are tracked in
> PR115683
Thanks a lot for the effort!
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2024-07-01 6:45 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-06-17 8:05 [Bug target/115517] New: Fix regression after dropping uses of vcond{,u,eq}_optab liuhongt at gcc dot gnu.org
2024-06-18 6:20 ` [Bug target/115517] Fix x86 regressions " rguenth at gcc dot gnu.org
2024-06-18 8:39 ` liuhongt at gcc dot gnu.org
2024-06-18 10:49 ` rguenther at suse dot de
2024-06-18 11:08 ` liuhongt at gcc dot gnu.org
2024-06-18 11:17 ` rguenther at suse dot de
2024-06-18 11:29 ` liuhongt at gcc dot gnu.org
2024-07-01 5:20 ` cvs-commit at gcc dot gnu.org
2024-07-01 5:20 ` cvs-commit at gcc dot gnu.org
2024-07-01 5:20 ` cvs-commit at gcc dot gnu.org
2024-07-01 5:21 ` cvs-commit at gcc dot gnu.org
2024-07-01 5:21 ` cvs-commit at gcc dot gnu.org
2024-07-01 5:21 ` cvs-commit at gcc dot gnu.org
2024-07-01 5:21 ` cvs-commit at gcc dot gnu.org
2024-07-01 5:26 ` liuhongt at gcc dot gnu.org
2024-07-01 5:27 ` liuhongt at gcc dot gnu.org
2024-07-01 6:45 ` rguenth at gcc dot gnu.org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).