diff mbox series

RISC-V/testsuite: Enable `vect_pack_trunc'

Message ID alpine.DEB.2.20.2310092151030.5892@tpp.orcam.me.uk
State New
Headers show
Series RISC-V/testsuite: Enable `vect_pack_trunc' | expand

Commit Message

Maciej W. Rozycki Oct. 9, 2023, 9:52 p.m. UTC
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
diff mbox series

Patch

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*-*-*] }}]