Despite not defining `vec_pack_trunc_<mode>' standard named patterns the
backend provides vector pack operations via its own `@pred_trunc<mode>'
set of patterns and they do trigger in vectorization producing narrowing
VNCVT.X.X.W assembly instructions as expected.
Enable the `vect_pack_trunc' setting for RISC-V targets then, improving
GCC C test results in `-march=rv64gcv' testing as follows:
-FAIL: gcc.dg/vect/pr57705.c scan-tree-dump-times vect "vectorized 1 loop" 2
+PASS: gcc.dg/vect/pr57705.c scan-tree-dump-times vect "vectorized 1 loop" 3
+PASS: gcc.dg/vect/pr59354.c scan-tree-dump vect "vectorized 1 loop"
-UNSUPPORTED: gcc.dg/vect/pr97678.c
+PASS: gcc.dg/vect/pr97678.c (test for excess errors)
+PASS: gcc.dg/vect/pr97678.c execution test
+XFAIL: gcc.dg/vect/pr97678.c scan-tree-dump vect "vectorizing stmts using SLP"
-UNSUPPORTED: gcc.dg/vect/vect-bool-cmp.c
+PASS: gcc.dg/vect/vect-bool-cmp.c (test for excess errors)
+PASS: gcc.dg/vect/vect-bool-cmp.c execution test
+PASS: gcc.dg/vect/vect-iv-4.c scan-tree-dump-times vect "vectorized 1 loops" 1
+PASS: gcc.dg/vect/vect-multitypes-14.c scan-tree-dump-times vect "vectorized 1
loops" 1
+PASS: gcc.dg/vect/vect-multitypes-8.c scan-tree-dump-times vect "vectorized 1
loops" 1
+PASS: gcc.dg/vect/vect-reduc-dot-u16b.c scan-tree-dump-times vect "vectorized
1 loops" 1
+PASS: gcc.dg/vect/vect-strided-store-u16-i4.c scan-tree-dump-times vect
"vectorized 1 loops" 2
-PASS: gcc.dg/vect/slp-13-big-array.c scan-tree-dump-times vect "vectorizing
stmts using SLP" 2
+XFAIL: gcc.dg/vect/slp-13-big-array.c scan-tree-dump-times vect "vectorizing
stmts using SLP" 3
-PASS: gcc.dg/vect/slp-13.c scan-tree-dump-times vect "vectorizing stmts using
SLP" 2
+XFAIL: gcc.dg/vect/slp-13.c scan-tree-dump-times vect "vectorizing stmts using
SLP" 3
+PASS: gcc.dg/vect/slp-multitypes-10.c scan-tree-dump-times vect "vectorized 1
loops" 1
+PASS: gcc.dg/vect/slp-multitypes-10.c scan-tree-dump-times vect "vectorizing
stmts using SLP" 1
+PASS: gcc.dg/vect/slp-multitypes-5.c scan-tree-dump-times vect "vectorized 1
loops" 1
+PASS: gcc.dg/vect/slp-multitypes-5.c scan-tree-dump-times vect "vectorizing
stmts using SLP" 1
+PASS: gcc.dg/vect/slp-multitypes-6.c scan-tree-dump-times vect "vectorized 1
loops" 1
+PASS: gcc.dg/vect/slp-multitypes-6.c scan-tree-dump-times vect "vectorizing
stmts using SLP" 1
+PASS: gcc.dg/vect/slp-multitypes-9.c scan-tree-dump-times vect "vectorized 1
loops" 1
+PASS: gcc.dg/vect/slp-multitypes-9.c scan-tree-dump-times vect "vectorizing
stmts using SLP" 1
-UNSUPPORTED: gcc.dg/vect/slp-perm-12.c
+PASS: gcc.dg/vect/slp-perm-12.c (test for excess errors)
+PASS: gcc.dg/vect/slp-perm-12.c execution test
-UNSUPPORTED: gcc.dg/vect/bb-slp-11.c
+PASS: gcc.dg/vect/bb-slp-11.c (test for excess errors)
+PASS: gcc.dg/vect/bb-slp-11.c execution test
-FAIL: gcc.dg/vect/pr57705.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorized 1 loop" 2
+PASS: gcc.dg/vect/pr57705.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorized 1 loop" 3
+PASS: gcc.dg/vect/pr59354.c -flto -ffat-lto-objects scan-tree-dump vect
"vectorized 1 loop"
-UNSUPPORTED: gcc.dg/vect/pr97678.c -flto -ffat-lto-objects
+PASS: gcc.dg/vect/pr97678.c -flto -ffat-lto-objects (test for excess errors)
+PASS: gcc.dg/vect/pr97678.c -flto -ffat-lto-objects execution test
+XFAIL: gcc.dg/vect/pr97678.c -flto -ffat-lto-objects scan-tree-dump vect
"vectorizing stmts using SLP"
-UNSUPPORTED: gcc.dg/vect/vect-bool-cmp.c -flto -ffat-lto-objects
+PASS: gcc.dg/vect/vect-bool-cmp.c -flto -ffat-lto-objects (test for excess
errors)
+PASS: gcc.dg/vect/vect-bool-cmp.c -flto -ffat-lto-objects execution test
+PASS: gcc.dg/vect/vect-iv-4.c -flto -ffat-lto-objects scan-tree-dump-times
vect "vectorized 1 loops" 1
+PASS: gcc.dg/vect/vect-multitypes-14.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorized 1 loops" 1
+PASS: gcc.dg/vect/vect-multitypes-8.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorized 1 loops" 1
+PASS: gcc.dg/vect/vect-reduc-dot-u16b.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorized 1 loops" 1
+PASS: gcc.dg/vect/vect-strided-store-u16-i4.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorized 1 loops" 2
-PASS: gcc.dg/vect/slp-13-big-array.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorizing stmts using SLP" 2
+XFAIL: gcc.dg/vect/slp-13-big-array.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorizing stmts using SLP" 3
-PASS: gcc.dg/vect/slp-13.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorizing stmts using SLP" 2
+XFAIL: gcc.dg/vect/slp-13.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorizing stmts using SLP" 3
+PASS: gcc.dg/vect/slp-multitypes-10.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorized 1 loops" 1
+PASS: gcc.dg/vect/slp-multitypes-10.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorizing stmts using SLP" 1
+PASS: gcc.dg/vect/slp-multitypes-5.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorized 1 loops" 1
+PASS: gcc.dg/vect/slp-multitypes-5.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorizing stmts using SLP" 1
+PASS: gcc.dg/vect/slp-multitypes-6.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorized 1 loops" 1
+PASS: gcc.dg/vect/slp-multitypes-6.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorizing stmts using SLP" 1
+PASS: gcc.dg/vect/slp-multitypes-9.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorized 1 loops" 1
+PASS: gcc.dg/vect/slp-multitypes-9.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorizing stmts using SLP" 1
-UNSUPPORTED: gcc.dg/vect/slp-perm-12.c -flto -ffat-lto-objects
+PASS: gcc.dg/vect/slp-perm-12.c -flto -ffat-lto-objects (test for excess
errors)
+PASS: gcc.dg/vect/slp-perm-12.c -flto -ffat-lto-objects execution test
-UNSUPPORTED: gcc.dg/vect/bb-slp-11.c -flto -ffat-lto-objects
+PASS: gcc.dg/vect/bb-slp-11.c -flto -ffat-lto-objects (test for excess errors)
+PASS: gcc.dg/vect/bb-slp-11.c -flto -ffat-lto-objects execution test
-XPASS: gcc.dg/vect/no-scevccp-outer-21.c scan-tree-dump-times vect "OUTER LOOP
VECTORIZED." 1
+PASS: gcc.dg/vect/no-scevccp-outer-21.c scan-tree-dump-times vect "OUTER LOOP
VECTORIZED." 1
New XFAIL results are legitimate as they are currently expected for
`vect_variable_length' targets such the RISC-V one is.
The new condition for `vect_pack_trunc' does not check for `riscv_v',
because we don't support different RISC-V vector extensions that might
or might not support the vector demotion operation, so we know it is
supported as long as vector operations are in general, and individual
tests are supposed to check for overall vector operation support via
`vect_int' or suchlike.
gcc/testsuite/
* lib/target-supports.exp
(check_effective_target_vect_pack_trunc): Also succeed for
`riscv*-*-*' targets.
---
Hi,
Overall GCC C test results have improved from:
=== gcc Summary ===
# of expected passes 187616
# of unexpected failures 672
# of unexpected successes 14
# of expected failures 1436
# of unresolved testcases 615
# of unsupported tests 4731
to:
=== gcc Summary ===
# of expected passes 187659
# of unexpected failures 670
# of unexpected successes 13
# of expected failures 1442
# of unresolved testcases 615
# of unsupported tests 4723
with no changes (except for intermittent Python failures for C++) with the
remaining testsuites. There are a few of regressions in `-march=rv64gc'
testing:
+FAIL: gcc.dg/vect/pr97678.c scan-tree-dump vect "vectorizing stmts using SLP"
+FAIL: gcc.dg/vect/slp-13-big-array.c scan-tree-dump-times vect "vectorizing
stmts using SLP" 3
+FAIL: gcc.dg/vect/slp-13.c scan-tree-dump-times vect "vectorizing stmts using
SLP" 3
+FAIL: gcc.dg/vect/pr97678.c -flto -ffat-lto-objects scan-tree-dump vect
"vectorizing stmts using SLP"
+FAIL: gcc.dg/vect/slp-13-big-array.c -flto -ffat-lto-objects
scan-tree-dump-times vect "vectorizing stmts using SLP" 3
+FAIL: gcc.dg/vect/slp-13.c -flto -ffat-lto-objects scan-tree-dump-times vect
"vectorizing stmts using SLP" 3
but they are a problem presumably with `vect_int' enabling these tests for
a non-vector target rather than my change and may have been fixed since (I
haven't double-checked) as I have only run smoke-testing with a slightly
outdated tree from Sep 29th.
NB I don't know why it works despite the lack of `vec_pack_trunc_<mode>'
patterns in the backend. Perhaps something has changed in the middle end
since our documentation has been last updated in the relevant area. If it
is the case, then I think it would be good to update our documentation and
whoever knows what is going on will be best suited to do so.
Questions, comments, OK to apply?
Maciej
---
gcc/testsuite/lib/target-supports.exp | 1 +
1 file changed, 1 insertion(+)
gcc-test-riscv-vect-pack-trunc.diff
Index: gcc/gcc/testsuite/lib/target-supports.exp
===================================================================
--- gcc.orig/gcc/testsuite/lib/target-supports.exp
+++ gcc/gcc/testsuite/lib/target-supports.exp
@@ -7981,6 +7981,7 @@ proc check_effective_target_vect_pack_trunc { } {
&& [check_effective_target_arm_little_endian])
|| ([istarget mips*-*-*]
&& [et-is-effective-target mips_msa])
+ || [istarget riscv*-*-*]
|| ([istarget s390*-*-*]
&& [check_effective_target_s390_vx])
|| [istarget amdgcn*-*-*] }}]