diff options
author | liuhongt <hongtao.liu@intel.com> | 2024-06-11 21:22:42 +0800 |
---|---|---|
committer | liuhongt <hongtao.liu@intel.com> | 2024-06-14 15:02:42 +0800 |
commit | d3fae2bea034edb001cd45d1d86c5ceef146899b (patch) | |
tree | 7b4042dc72dac54f49ed8c397f1d39f412688d10 /gcc/testsuite | |
parent | 8b69efd9819f86b973d7a550e987ce455fce6d62 (diff) |
Adjust ix86_rtx_costs for pternlog_operand_p.
r15-1100-gec985bc97a0157 improves handling of ternlog instructions,
now GCC can recognize lots of pternlog_operand with different
variants.
The patch adjust rtx_costs for that, so pass_combine can
reasonably generate more optimal vpternlog instructions.
.i.e
for avx512f-vpternlog-3.c, with the patch, 2 vpternlog are combined into one.
1532,1533c1526
< vpternlogd $168, %zmm1, %zmm0, %zmm2
< vpternlogd $0x55, %zmm2, %zmm2, %zmm2
> vpternlogd $87, %zmm1, %zmm0, %zmm2
1732,1733c1725,1726
< vpand %xmm0, %xmm1, %xmm0
< vpternlogd $0x55, %zmm0, %zmm0, %zmm0
> vpternlogd $63, %zmm1, %zmm0, %zmm1
> vmovdqa %xmm1, %xmm0
1804,1805c1797
< vpternlogd $188, %zmm2, %zmm0, %zmm1
< vpternlogd $0x55, %zmm1, %zmm1, %zmm1
> vpternlogd $37, %zmm0, %zmm2, %zmm1
gcc/ChangeLog:
* config/i386/i386.cc (ix86_rtx_costs): Adjust rtx_cost for
pternlog_operand under AVX512, also adjust VEC_DUPLICATE
according since vec_dup:mem can't be that cheap.
gcc/testsuite/ChangeLog:
* gcc.target/i386/avx2-pr98461.c: Scan either notl or
vpternlog.
* gcc.target/i386/avx512f-pr96891-3.c: Also scan for inversed
condition.
* gcc.target/i386/avx512f-vpternlogd-3.c: Adjust vpternlog
number to 673.
* gcc.target/i386/avx512f-vpternlogd-4.c: Ditto.
* gcc.target/i386/avx512f-vpternlogd-5.c: Ditto.
* gcc.target/i386/sse2-v1ti-vne.c: Add -mno-avx512f.
Diffstat (limited to 'gcc/testsuite')
6 files changed, 6 insertions, 6 deletions
diff --git a/gcc/testsuite/gcc.target/i386/avx2-pr98461.c b/gcc/testsuite/gcc.target/i386/avx2-pr98461.c index 15f49b864da..225f2ab00e5 100644 --- a/gcc/testsuite/gcc.target/i386/avx2-pr98461.c +++ b/gcc/testsuite/gcc.target/i386/avx2-pr98461.c @@ -2,7 +2,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -mavx2 -masm=att" } */ /* { dg-final { scan-assembler-times "\tvpmovmskb\t" 6 } } */ -/* { dg-final { scan-assembler-times "\tnotl\t" 6 } } */ +/* { dg-final { scan-assembler-times "\t(?:notl|vpternlog\[dq\])\t" 6 } } */ /* { dg-final { scan-assembler-not "\tvpcmpeq" } } */ /* { dg-final { scan-assembler-not "\tvpxor" } } */ /* { dg-final { scan-assembler-not "\tvpandn" } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512f-pr96891-3.c b/gcc/testsuite/gcc.target/i386/avx512f-pr96891-3.c index 06db7521305..5b260818cb3 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-pr96891-3.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-pr96891-3.c @@ -3,7 +3,7 @@ /* { dg-final { scan-assembler-not {not[bwlqd]\]} } } */ /* { dg-final { scan-assembler-times {(?n)vpcmp[bwdq][ \t]*\$5} 4} } */ /* { dg-final { scan-assembler-times {(?n)vpcmp[bwdq][ \t]*\$6} 4} } */ -/* { dg-final { scan-assembler-times {(?n)vpcmp[bwdq][ \t]*\$7} 4} } */ +/* { dg-final { scan-assembler-times {(?n)vpcmp[bwdq][ \t]*\$[37]} 4} } */ /* { dg-final { scan-assembler-times {(?n)vcmpp[sd][ \t]*\$5} 2} } */ /* { dg-final { scan-assembler-times {(?n)vcmpp[sd][ \t]*\$6} 2} } */ /* { dg-final { scan-assembler-times {(?n)vcmpp[sd][ \t]*\$7} 2} } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-3.c b/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-3.c index fc66a9f5572..9ed4680346b 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-3.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-3.c @@ -952,4 +952,4 @@ V foo_254_3(V a, V b, V c) { return (c|b)|a; } V foo_255_1(V a, V b, V c) { return (V){~0,~0,~0,~0}; } -/* { dg-final { scan-assembler-times "vpternlogd\[ \\t\]" 694 } } */ +/* { dg-final { scan-assembler-times "vpternlogd\[ \\t\]" 673 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-4.c b/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-4.c index 14296508cac..eb39ffc2564 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-4.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-4.c @@ -952,4 +952,4 @@ V foo_254_3(V a, V b, V c) { return (c|b)|a; } V foo_255_1(V a, V b, V c) { return (V){~0,~0,~0,~0}; } -/* { dg-final { scan-assembler-times "vpternlogd\[ \\t\]" 694 } } */ +/* { dg-final { scan-assembler-times "vpternlogd\[ \\t\]" 673 } } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-5.c b/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-5.c index 3dbd9545283..85de5b02ce6 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-5.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-vpternlogd-5.c @@ -952,4 +952,4 @@ V foo_254_3(V a, V b, V c) { return (c|b)|a; } V foo_255_1(V a, V b, V c) { return (V){~0,~0,~0,~0}; } -/* { dg-final { scan-assembler-times "vpternlogd\[ \\t\]" 679 } } */ +/* { dg-final { scan-assembler-times "vpternlogd\[ \\t\]" 673 } } */ diff --git a/gcc/testsuite/gcc.target/i386/sse2-v1ti-vne.c b/gcc/testsuite/gcc.target/i386/sse2-v1ti-vne.c index 767b0e4b3ac..2394cff39f2 100644 --- a/gcc/testsuite/gcc.target/i386/sse2-v1ti-vne.c +++ b/gcc/testsuite/gcc.target/i386/sse2-v1ti-vne.c @@ -1,5 +1,5 @@ /* { dg-do compile { target int128 } } */ -/* { dg-options "-O2 -msse2" } */ +/* { dg-options "-O2 -msse2 -mno-avx512f" } */ typedef unsigned __int128 uv1ti __attribute__ ((__vector_size__ (16))); typedef unsigned long long uv2di __attribute__ ((__vector_size__ (16))); typedef unsigned int uv4si __attribute__ ((__vector_size__ (16))); |