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