On Fri, Jun 14, 2024 at 10:53 PM Hongtao Liu <crazy...@gmail.com> wrote: > > On Fri, Jun 14, 2024 at 6:31 PM Richard Biener <rguent...@suse.de> wrote: > > > > The following retires vcond{,u,eq} optabs by stopping to use them > > from the middle-end. Targets instead (should) implement vcond_mask > > and vec_cmp{,u,eq} optabs. The PR this change refers to lists > > possibly affected targets - those implementing these patterns, > > and in particular it lists mips, sparc and ia64 as targets that > > most definitely will regress while others might simply remove > > their vcond{,u,eq} patterns. > > > > 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 > > -- > BR, > Hongtao -- BR, Hongtao