https://gcc.gnu.org/g:2029a44a31666787f244a803037aa3a63b5cb1db
commit 2029a44a31666787f244a803037aa3a63b5cb1db Author: Alexandre Oliva <[email protected]> Date: Wed Jun 24 10:47:27 2026 -0300 testsuite: riscv: add riscv_v_okc Diff: --- gcc/testsuite/gcc.dg/tree-ssa/gen-vect-34.c | 2 +- gcc/testsuite/gcc.dg/vect/bb-slp-pr69907.c | 2 +- gcc/testsuite/gcc.dg/vect/pr88598-1.c | 2 +- gcc/testsuite/gcc.dg/vect/pr88598-2.c | 2 +- gcc/testsuite/gcc.dg/vect/pr88598-3.c | 2 +- gcc/testsuite/gcc.dg/vect/slp-26.c | 8 +- gcc/testsuite/gcc.dg/vect/slp-reduc-4.c | 2 +- gcc/testsuite/gcc.dg/vect/slp-reduc-7.c | 4 +- gcc/testsuite/gcc.dg/vect/slp-reduc-sad-2.c | 2 +- gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1115.c | 4 +- gcc/testsuite/gcc.dg/vect/vect-93.c | 4 +- .../gcc.dg/vect/vect-early-break_133_pfa3.c | 2 +- .../gcc.dg/vect/vect-early-break_133_pfa4.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-early-break_39.c | 4 +- gcc/testsuite/gcc.dg/vect/vect-early-break_56.c | 2 + gcc/testsuite/gcc.dg/vect/vect-early-break_57.c | 4 +- gcc/testsuite/gcc.dg/vect/vect-early-break_63.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-early-break_81.c | 4 +- gcc/testsuite/gcc.dg/vect/vect-reduc-chain-1.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-reduc-chain-2.c | 6 +- gcc/testsuite/gcc.dg/vect/vect-reduc-chain-3.c | 4 +- .../gcc.dg/vect/vect-reduc-chain-dot-slp-1.c | 2 +- .../gcc.dg/vect/vect-reduc-chain-dot-slp-2.c | 2 +- .../gcc.dg/vect/vect-reduc-chain-dot-slp-3.c | 2 +- .../gcc.dg/vect/vect-reduc-chain-dot-slp-4.c | 2 +- .../rvv/autovec/vls-vlmax/shuffle-interleave-run.c | 2 +- gcc/testsuite/lib/target-supports.exp | 135 ++++++++++++--------- 27 files changed, 120 insertions(+), 91 deletions(-) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-34.c b/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-34.c index c2e5dfea35fb..ab88feed3d91 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-34.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-34.c @@ -13,4 +13,4 @@ float summul(int n, float *arg1, float *arg2) return res1; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_masked_load } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_masked_load xfail riscv*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-pr69907.c b/gcc/testsuite/gcc.dg/vect/bb-slp-pr69907.c index f63b42a271af..20e5baa19272 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-pr69907.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-pr69907.c @@ -23,4 +23,4 @@ void foo(unsigned *p1, unsigned short *p2) get an unrolled epilogue loop. Also disable for AArch64 Advanced SIMD, because there we can vectorize the epilogue using mixed vector sizes. Likewise for AMD GCN and RVV. */ -/* { dg-final { scan-tree-dump "BB vectorization with gaps at the end of a load is not supported" "slp1" { target { { ! aarch64*-*-* } && { { ! amdgcn*-*-* } && { ! riscv_v } } } } } } */ +/* { dg-final { scan-tree-dump "BB vectorization with gaps at the end of a load is not supported" "slp1" { target { { ! aarch64*-*-* } && { { ! amdgcn*-*-* } && { ! riscv_v_okc } } } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr88598-1.c b/gcc/testsuite/gcc.dg/vect/pr88598-1.c index d4a0014f543d..7320a12a0ef0 100644 --- a/gcc/testsuite/gcc.dg/vect/pr88598-1.c +++ b/gcc/testsuite/gcc.dg/vect/pr88598-1.c @@ -51,4 +51,4 @@ main () /* ??? We need more constant folding for this to work with fully-masked loops. */ -/* { dg-final { scan-tree-dump-not {REDUC_PLUS} "optimized" { xfail { aarch64_sve || riscv_v } } } } */ +/* { dg-final { scan-tree-dump-not {REDUC_PLUS} "optimized" { xfail { aarch64_sve || riscv_v_okc } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr88598-2.c b/gcc/testsuite/gcc.dg/vect/pr88598-2.c index 57d0c885bec3..22a7fd2d5c9c 100644 --- a/gcc/testsuite/gcc.dg/vect/pr88598-2.c +++ b/gcc/testsuite/gcc.dg/vect/pr88598-2.c @@ -51,4 +51,4 @@ main () /* ??? We need more constant folding for this to work with fully-masked loops. */ -/* { dg-final { scan-tree-dump-not {REDUC_PLUS} "optimized" { xfail { aarch64_sve || riscv_v } } } } */ +/* { dg-final { scan-tree-dump-not {REDUC_PLUS} "optimized" { xfail { aarch64_sve || riscv_v_okc } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr88598-3.c b/gcc/testsuite/gcc.dg/vect/pr88598-3.c index ee3a9effd8de..556daa5b1ace 100644 --- a/gcc/testsuite/gcc.dg/vect/pr88598-3.c +++ b/gcc/testsuite/gcc.dg/vect/pr88598-3.c @@ -51,4 +51,4 @@ main () /* ??? We need more constant folding for this to work with fully-masked loops. */ -/* { dg-final { scan-tree-dump-not {REDUC_PLUS} "optimized" { xfail { aarch64_sve || riscv_v } } } } */ +/* { dg-final { scan-tree-dump-not {REDUC_PLUS} "optimized" { xfail { aarch64_sve || riscv_v_okc } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/slp-26.c b/gcc/testsuite/gcc.dg/vect/slp-26.c index b916bb3ff9ce..f7fb1b650596 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-26.c +++ b/gcc/testsuite/gcc.dg/vect/slp-26.c @@ -47,8 +47,8 @@ int main (void) return 0; } -/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! { mips_msa || { amdgcn-*-* || { riscv_v || loongarch_sx } } } } } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { mips_msa || { amdgcn-*-* || { riscv_v || loongarch_sx } } } } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! { mips_msa || { amdgcn-*-* || { riscv_v || loongarch_sx } } } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! { mips_msa || { amdgcn-*-* || { riscv_v_okc || loongarch_sx } } } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { mips_msa || { amdgcn-*-* || { riscv_v_okc || loongarch_sx } } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! { mips_msa || { amdgcn-*-* || { riscv_v_okc || loongarch_sx } } } } } } } */ /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { mips_msa } } } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" { target { loongarch_sx || { riscv_v || amdgcn-*-* } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" { target { loongarch_sx || { riscv_v_okc || amdgcn-*-* } } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/slp-reduc-4.c b/gcc/testsuite/gcc.dg/vect/slp-reduc-4.c index 23c1a7373d77..c02f27f79e87 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-reduc-4.c +++ b/gcc/testsuite/gcc.dg/vect/slp-reduc-4.c @@ -61,5 +61,5 @@ int main (void) reduction exceeds the number of elements in a 128-bit granule. */ /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { ! vect_multiple_sizes } xfail { vect_no_int_min_max || { aarch64_sve && vect_variable_length } } } } } */ /* { dg-final { scan-tree-dump "vectorizing stmts using SLP" "vect" { target { vect_multiple_sizes && { ! { vect_load_lanes && vect_strided8 } } } } } } */ -/* { dg-final { scan-tree-dump-times "VEC_PERM_EXPR" 0 "vect" { xfail { { aarch64_sve && vect_variable_length } || vect_no_int_min_max } } } } */ +/* { dg-final { scan-tree-dump-times "VEC_PERM_EXPR" 0 "vect" { xfail { { { aarch64_sve || riscv_v_okc } && vect_variable_length } || vect_no_int_min_max } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/slp-reduc-7.c b/gcc/testsuite/gcc.dg/vect/slp-reduc-7.c index 1e0de894cecd..da8e205ae6fb 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-reduc-7.c +++ b/gcc/testsuite/gcc.dg/vect/slp-reduc-7.c @@ -58,5 +58,5 @@ int main (void) /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail vect_no_int_add } } } */ /* For variable-length SVE, the number of scalar statements in the reduction exceeds the number of elements in a 128-bit granule. */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { xfail { vect_no_int_add || { { aarch64_sve && vect_variable_length } || { riscv_v && vect_variable_length } } } } } } */ -/* { dg-final { scan-tree-dump-times "VEC_PERM_EXPR" 0 "vect" { xfail { aarch64_sve && vect_variable_length } } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { xfail { vect_no_int_add || { { aarch64_sve && vect_variable_length } || { riscv_v_okc && vect_variable_length } } } } } } */ +/* { dg-final { scan-tree-dump-times "VEC_PERM_EXPR" 0 "vect" { xfail { { aarch64_sve || riscv_v_okc } && vect_variable_length } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/slp-reduc-sad-2.c b/gcc/testsuite/gcc.dg/vect/slp-reduc-sad-2.c index 7d9255e48f21..6d6753000a95 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-reduc-sad-2.c +++ b/gcc/testsuite/gcc.dg/vect/slp-reduc-sad-2.c @@ -27,5 +27,5 @@ int x264_pixel_sad_8x8( uint8_t *pix1, uint8_t *pix2, int i_stride_pix2 ) /* { dg-final { scan-tree-dump "vect_recog_sad_pattern: detected" "vect" } } */ /* { dg-final { scan-tree-dump "vectorizing stmts using SLP" "vect" } } */ -/* { dg-final { scan-tree-dump-not "access with gaps requires scalar epilogue loop" "vect" } } */ +/* { dg-final { scan-tree-dump-not "access with gaps requires scalar epilogue loop" "vect" { xfail riscv_v_okc } } } */ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1115.c b/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1115.c index 3eda9940e68a..eb55467a62c6 100644 --- a/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1115.c +++ b/gcc/testsuite/gcc.dg/vect/tsvc/vect-tsvc-s1115.c @@ -13,7 +13,7 @@ real_t s1115(struct args_t * func_args) initialise_arrays(__func__); - for (int nl = 0; nl < 100*(iterations/LEN_2D); nl++) { + for (int nl = 0; nl < 100*iterations/LEN_2D; nl++) { for (int i = 0; i < LEN_2D; i++) { for (int j = 0; j < LEN_2D; j++) { aa[i][j] = aa[i][j]*cc[j][i] + bb[i][j]; @@ -38,4 +38,4 @@ int main (int argc, char **argv) return 0; } -/* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" { xfail { { ! aarch64_sve } && { ! riscv_v } } } } } */ +/* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" { xfail { { ! aarch64_sve } && { ! riscv_v_okc } } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-93.c b/gcc/testsuite/gcc.dg/vect/vect-93.c index 75af52d64349..7cd8f462cbac 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-93.c +++ b/gcc/testsuite/gcc.dg/vect/vect-93.c @@ -81,10 +81,10 @@ int main (void) the second loop in main requires vectorization of misaligned load. */ /* main && main1 together: */ -/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 2 "vect" { target powerpc*-*-* i?86-*-* x86_64-*-* } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 2 "vect" { target powerpc*-*-* riscv*-*-* i?86-*-* x86_64-*-* } } } */ /* in main1: */ -/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target !powerpc*-*-* !i?86-*-* !x86_64-*-* } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target { ! { powerpc*-*-* riscv*-*-* i?86-*-* x86_64-*-* } } } } } */ /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { target { vect_no_align && { ! vect_hw_misalign } } } } } */ /* in main: */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_133_pfa3.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_133_pfa3.c index 374a051b945e..9e93ac9445dd 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-early-break_133_pfa3.c +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_133_pfa3.c @@ -17,4 +17,4 @@ char * find(int n, char c) /* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */ /* { dg-final { scan-tree-dump "Alignment of access forced using peeling" "vect" } } */ -/* { dg-final { scan-tree-dump "force alignment of string" "vect" } } */ +/* { dg-final { scan-tree-dump "force alignment of string" "vect" { xfail { riscv*-*-* } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_133_pfa4.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_133_pfa4.c index 297fb7e9b9be..02ade8514277 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-early-break_133_pfa4.c +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_133_pfa4.c @@ -17,4 +17,4 @@ char * find(int n, char c) /* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */ /* { dg-final { scan-tree-dump-not "Alignment of access forced using peeling" "vect" } } */ -/* { dg-final { scan-tree-dump "force alignment of string" "vect" } } */ +/* { dg-final { scan-tree-dump "force alignment of string" "vect" { xfail { riscv*-*-* } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_39.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_39.c index bc862ad20e68..cac6d3ddca7e 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-early-break_39.c +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_39.c @@ -24,5 +24,5 @@ unsigned test4(unsigned x, unsigned n) } /* AArch64 will scalarize the load and is able to vectorize it. */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 1 "vect" { target aarch64*-*-* } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 0 "vect" { target { ! aarch64*-*-* } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 1 "vect" { target aarch64*-*-* riscv*-*-* } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops in function" 0 "vect" { target { ! { aarch64*-*-* riscv*-*-* } } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_56.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_56.c index 76a1f9b3f55c..1bd2a61e6d97 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-early-break_56.c +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_56.c @@ -45,6 +45,7 @@ int main1 () } /* check results: */ + #pragma GCC novector for (i = 0; i < n; i++) { if (sa[i+7] != sb[i] + sc[i] || ia[i+3] != ib[i] + ic[i]) @@ -80,6 +81,7 @@ int main2 () } /* check results: */ + #pragma GCC novector for (i = 0; i < n; i++) { if (sa[i+3] != sb[i] + sc[i] || ia[i+3] != ib[i] + ic[i]) diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_57.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_57.c index a4886654f152..31ed09da5c51 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-early-break_57.c +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_57.c @@ -6,8 +6,8 @@ /* { dg-additional-options "-Ofast" } */ /* Multiple loads of different alignments, we can't peel this. */ -/* { dg-final { scan-tree-dump-not "LOOP VECTORIZED" "vect" } } */ -/* { dg-final { scan-tree-dump-not "epilog loop required" "vect" } } */ +/* { dg-final { scan-tree-dump-not "LOOP VECTORIZED" "vect" { xfail { riscv*-*-* } } } } */ +/* { dg-final { scan-tree-dump-not "epilog loop required" "vect" { xfail { riscv*-*-* } } } } */ void abort (); diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_63.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_63.c index 1d9ff4ad6bac..3a8b5a053c8b 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-early-break_63.c +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_63.c @@ -26,4 +26,4 @@ liveloop (int start, int n, int *x, int *y) } /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ -/* { dg-final { scan-tree-dump-times "vec_stmt_relevant_p: stmt live but not relevant" 1 "vect" } } */ +/* { dg-final { scan-tree-dump "vec_stmt_relevant_p: stmt live but not relevant" "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_81.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_81.c index b58a4611d6b8..458910f69203 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-early-break_81.c +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_81.c @@ -6,8 +6,8 @@ /* { dg-additional-options "-Ofast" } */ /* Multiple loads with different misalignments. Can't peel need partial loop support. */ -/* { dg-final { scan-tree-dump-not "LOOP VECTORIZED" "vect" } } */ -/* { dg-final { scan-tree-dump-not "epilog loop required" "vect" } } */ +/* { dg-final { scan-tree-dump-not "LOOP VECTORIZED" "vect" { xfail { riscv*-*-* } } } } */ +/* { dg-final { scan-tree-dump-not "epilog loop required" "vect" { xfail { riscv*-*-* } } } } */ void abort (); unsigned short sa[32]; diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-1.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-1.c index 690307f6d554..92da53191b43 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-1.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-1.c @@ -61,4 +61,4 @@ main (void) } /* { dg-final { scan-tree-dump "vect_recog_dot_prod_pattern: detected" "vect" } } */ -/* { dg-final { scan-tree-dump-times "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" 2 "vect" { target vect_sdot_qi } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" 2 "vect" { target vect_sdot_qi xfail riscv*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-2.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-2.c index 0d8d012ec2ea..a7cc8bfc4f74 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-2.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-2.c @@ -74,6 +74,6 @@ main (void) } /* { dg-final { scan-tree-dump "vect_recog_dot_prod_pattern: detected" "vect" } } */ -/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target { vect_sdot_qi } } } } */ -/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target { vect_udot_qi } } } } */ -/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target { vect_sdot_hi } } } } */ +/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target { vect_sdot_qi } xfail riscv*-*-* } } } */ +/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target { vect_udot_qi } xfail riscv*-*-* } } } */ +/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target { vect_sdot_hi } xfail riscv*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-3.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-3.c index 1cefbe0b959f..cd39d35dc7a4 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-3.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-3.c @@ -64,5 +64,5 @@ main (void) __builtin_abort (); } -/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = SAD_EXPR" "vect" { target vect_udot_qi } } } */ -/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target vect_sdot_hi } } } */ +/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = SAD_EXPR" "vect" { target vect_udot_qi xfail riscv*-*-* } } } */ +/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target vect_sdot_hi xfail riscv*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-dot-slp-1.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-dot-slp-1.c index 0901357ea6ad..d3e389b575e3 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-dot-slp-1.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-dot-slp-1.c @@ -91,4 +91,4 @@ main (void) } /* { dg-final { scan-tree-dump "vect_recog_dot_prod_pattern: detected" "vect" } } */ -/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target vect_sdot_qi } } } */ +/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target vect_sdot_qi xfail riscv*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-dot-slp-2.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-dot-slp-2.c index 818eeddcece1..354892c51f8e 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-dot-slp-2.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-dot-slp-2.c @@ -63,4 +63,4 @@ main (void) } /* { dg-final { scan-tree-dump "vect_recog_dot_prod_pattern: detected" "vect" } } */ -/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target vect_sdot_qi } } } */ +/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target vect_sdot_qi xfail riscv*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-dot-slp-3.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-dot-slp-3.c index 87541cd83423..3a6a71757c78 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-dot-slp-3.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-dot-slp-3.c @@ -75,4 +75,4 @@ main (void) } /* { dg-final { scan-tree-dump "vect_recog_dot_prod_pattern: detected" "vect" } } */ -/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target vect_sdot_hi } } } */ +/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target vect_sdot_hi xfail riscv*-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-dot-slp-4.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-dot-slp-4.c index 11719430e582..1aca560d07a7 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-dot-slp-4.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-chain-dot-slp-4.c @@ -59,4 +59,4 @@ main (void) } /* { dg-final { scan-tree-dump "vect_recog_dot_prod_pattern: detected" "vect" } } */ -/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target vect_sdot_hi } } } */ +/* { dg-final { scan-tree-dump "vectorizing SLP node starting from: \\S+ = DOT_PROD_EXPR" "vect" { target vect_sdot_hi xfail riscv*-*-* } } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-interleave-run.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-interleave-run.c index 57748d95362f..a057dde8fb86 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-interleave-run.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/shuffle-interleave-run.c @@ -1,4 +1,4 @@ -/* { dg-do compile } */ +/* { dg-do run } */ /* { dg-require-effective-target riscv_v_ok } */ /* { dg-add-options riscv_v } */ /* { dg-additional-options "-O3 -mrvv-max-lmul=m8 -std=gnu99" } */ diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index c6ebbed4f4b5..109c24ced6b6 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -2348,6 +2348,25 @@ proc check_effective_target_riscv_b_ok { } { return 0 } +# Return 1 if we can compile code when using dg-add-options riscv_v + +proc check_effective_target_riscv_v_okc { } { + # If the target already supports v without any added options, + # we may assume we can compile just fine. + if { [check_effective_target_riscv_v] } { + return 1 + } + + # check if we can compile a testcase by adding 'v' to the arch + set gcc_march [regsub {[[:alnum:]]*} [riscv_get_arch] &v] + if { [check_no_compiler_messages ${gcc_march}_compile assembly { + int main() { return 0; } } "-march=${gcc_march}"] } { + return 1 + } + + return 0 +} + # Return 1 if we can execute code when using dg-add-options riscv_v proc check_effective_target_riscv_v_ok { } { @@ -2527,7 +2546,7 @@ proc check_effective_target_riscv_v_misalign_ok { } { return 0 } - set gcc_march [riscv_get_arch] + set gcc_march [regsub {[[:alnum:]]*} [riscv_get_arch] &v] if { [check_runtime ${gcc_march}_misalign_exec { int main() { unsigned char a[16] @@ -4679,7 +4698,7 @@ proc check_effective_target_vect_int { } { || ([istarget s390*-*-*] && [check_effective_target_s390_vx]) || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] @@ -4711,7 +4730,7 @@ proc check_effective_target_vect_early_break { } { || [check_effective_target_arm_v8_neon_ok] || [check_effective_target_sse4] || [istarget amdgcn-*-*] - || [check_effective_target_riscv_v] + || [check_effective_target_riscv_v_okc] || [check_effective_target_loongarch_sx] }}] } @@ -4875,7 +4894,7 @@ proc check_effective_target_vect_intfloat_cvt { } { || ([istarget s390*-*-*] && [check_effective_target_s390_vxe2]) || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -4898,7 +4917,7 @@ proc check_effective_target_vect_doubleint_cvt { } { || ([istarget s390*-*-*] && [check_effective_target_s390_vx]) || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -4921,7 +4940,7 @@ proc check_effective_target_vect_intdouble_cvt { } { || ([istarget s390*-*-*] && [check_effective_target_s390_vx]) || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -4955,7 +4974,7 @@ proc check_effective_target_vect_uintfloat_cvt { } { || ([istarget s390*-*-*] && [check_effective_target_s390_vxe2]) || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -4975,7 +4994,7 @@ proc check_effective_target_vect_floatint_cvt { } { || ([istarget s390*-*-*] && [check_effective_target_s390_vxe2]) || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -4993,7 +5012,7 @@ proc check_effective_target_vect_floatuint_cvt { } { || ([istarget s390*-*-*] && [check_effective_target_s390_vxe2]) || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -5004,7 +5023,7 @@ proc check_effective_target_vect_floatuint_cvt { } { proc check_effective_target_vect_ext_char_longlong { } { return [check_cached_effective_target vect_ext_char_longlong { expr { ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -8410,7 +8429,7 @@ proc check_effective_target_vect_shift { } { && [check_effective_target_s390_vx]) || [istarget amdgcn-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -8423,7 +8442,7 @@ proc check_effective_target_vect_var_shift { } { && [check_avx2_available]) || [istarget aarch64*-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] @@ -8442,7 +8461,7 @@ proc check_effective_target_whole_vector_shift { } { && [check_effective_target_s390_vx]) || [istarget amdgcn-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) } { set answer 1 @@ -8475,7 +8494,7 @@ proc check_effective_target_vect_bool_cmp { } { || [istarget aarch64*-*-*] || [is-effective-target arm_neon] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -8498,7 +8517,7 @@ proc check_effective_target_vect_char_add { } { || ([istarget s390*-*-*] && [check_effective_target_s390_vx]) || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] @@ -8516,7 +8535,7 @@ proc check_effective_target_vect_shift_char { } { && [check_effective_target_s390_vx]) || [istarget amdgcn-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -8538,7 +8557,7 @@ proc check_effective_target_vect_long { } { && [check_effective_target_s390_vx]) || [istarget amdgcn-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) } { set answer 1 @@ -8570,7 +8589,7 @@ proc check_effective_target_vect_float { } { && [check_effective_target_s390_vxe]) || [istarget amdgcn-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -8603,7 +8622,7 @@ proc check_effective_target_vect_double { } { && [check_effective_target_s390_vx]) || [istarget amdgcn-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -8614,7 +8633,7 @@ proc check_effective_target_vect_double { } { proc check_effective_target_vect_double_cond_arith { } { return [expr { [check_effective_target_aarch64_sve] - || [check_effective_target_riscv_v] }] + || [check_effective_target_riscv_v_okc] }] } # Return 1 if the target supports hardware vectors of long long, 0 otherwise. @@ -8632,7 +8651,7 @@ proc check_effective_target_vect_long_long { } { && [check_effective_target_has_arch_pwr8]) || [istarget aarch64*-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) || [istarget amdgcn-*-*] }}] @@ -8690,7 +8709,7 @@ proc check_effective_target_vect_perm { } { && [check_effective_target_s390_vx]) || [istarget amdgcn-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -8787,7 +8806,7 @@ proc check_effective_target_vect_perm_byte { } { && [check_effective_target_s390_vx]) || [istarget amdgcn-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -8820,7 +8839,7 @@ proc check_effective_target_vect_perm_short { } { && [check_effective_target_s390_vx]) || [istarget amdgcn-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -9042,7 +9061,7 @@ proc check_effective_target_vect_sdot_qi { } { || ([istarget mips*-*-*] && [et-is-effective-target mips_msa]) || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -9061,7 +9080,7 @@ proc check_effective_target_vect_udot_qi { } { || ([istarget mips*-*-*] && [et-is-effective-target mips_msa]) || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -9092,7 +9111,7 @@ proc check_effective_target_vect_sdot_hi { } { || ([istarget mips*-*-*] && [et-is-effective-target mips_msa]) || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -9108,7 +9127,7 @@ proc check_effective_target_vect_udot_hi { } { || ([istarget mips*-*-*] && [et-is-effective-target mips_msa]) || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -9126,7 +9145,7 @@ proc check_effective_target_vect_usad_char { } { || ([istarget powerpc*-*-*] && [check_p9vector_hw_available]) || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -9138,7 +9157,7 @@ proc check_effective_target_vect_avg_qi {} { return [expr { ([istarget aarch64*-*-*] && ![check_effective_target_aarch64_sve1_only]) || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }] } @@ -9179,7 +9198,7 @@ proc check_effective_target_vect_pack_trunc { } { && [check_effective_target_s390_vx]) || [istarget amdgcn*-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -9203,7 +9222,7 @@ proc check_effective_target_vect_unpack { } { && [check_effective_target_s390_vx]) || [istarget amdgcn*-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -9358,7 +9377,7 @@ proc check_effective_target_vect_check_ptrs { } { proc check_effective_target_vect_fully_masked { } { return [expr { [check_effective_target_aarch64_sve] || [istarget amdgcn*-*-*] - || [check_effective_target_riscv_v] }] + || [check_effective_target_riscv_v_okc] }] } # Return true if the target supports the @code{len_load} and @@ -9367,7 +9386,7 @@ proc check_effective_target_vect_fully_masked { } { proc check_effective_target_vect_len_load_store { } { return [expr { [check_effective_target_has_arch_pwr9] || [check_effective_target_s390_vx] - || [check_effective_target_riscv_v] }] + || [check_effective_target_riscv_v_okc] }] } # Return the value of parameter vect-partial-vector-usage specified for @@ -9430,7 +9449,7 @@ proc check_effective_target_vect_partial_vectors { } { proc check_effective_target_vect_element_align_preferred { } { return [expr { ([check_effective_target_aarch64_sve] && [check_effective_target_vect_variable_length]) - || [check_effective_target_riscv_v] }] + || [check_effective_target_riscv_v_okc] }] } # Return true if vectorization of v2qi/v4qi/v8qi/v16qi/v2hi store is enabed. @@ -9844,7 +9863,7 @@ proc check_effective_target_vect_masked_load { } { return [expr { [check_avx_available] || [check_effective_target_aarch64_sve] || [istarget amdgcn*-*-*] - || [check_effective_target_riscv_v] } ] + || [check_effective_target_riscv_v_okc] } ] } # Return 1 if the target supports vector masked stores. @@ -9853,7 +9872,7 @@ proc check_effective_target_vect_masked_store { } { return [expr { [check_avx_available] || [check_effective_target_aarch64_sve] || [istarget amdgcn*-*-*] - || [check_effective_target_riscv_v] }] + || [check_effective_target_riscv_v_okc] }] } # Return 1 if the target supports vector gather loads via internal functions. @@ -9861,7 +9880,7 @@ proc check_effective_target_vect_masked_store { } { proc check_effective_target_vect_gather_load_ifn { } { return [expr { [check_effective_target_aarch64_sve] || [istarget amdgcn*-*-*] - || [check_effective_target_riscv_v] }] + || [check_effective_target_riscv_v_okc] }] } # Return 1 if the target supports vector scatter stores. @@ -9869,7 +9888,7 @@ proc check_effective_target_vect_gather_load_ifn { } { proc check_effective_target_vect_scatter_store { } { return [expr { [check_effective_target_aarch64_sve] || [istarget amdgcn*-*-*] - || [check_effective_target_riscv_v] + || [check_effective_target_riscv_v_okc] || [check_effective_target_loongarch_sx] }] } @@ -9888,7 +9907,7 @@ proc check_effective_target_vect_condition { } { && [check_effective_target_s390_vx]) || [istarget amdgcn-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -9908,7 +9927,7 @@ proc check_effective_target_vect_cond_mixed { } { && [check_effective_target_s390_vx]) || [istarget amdgcn-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -9928,7 +9947,7 @@ proc check_effective_target_vect_char_mult { } { && [check_effective_target_s390_vx]) || [istarget amdgcn-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -9949,7 +9968,7 @@ proc check_effective_target_vect_short_mult { } { && [check_effective_target_s390_vx]) || [istarget amdgcn-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -9969,7 +9988,7 @@ proc check_effective_target_vect_int_mult { } { && [check_effective_target_s390_vx]) || [istarget amdgcn-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -9993,7 +10012,7 @@ proc check_effective_target_vect_long_mult { } { || ([istarget mips*-*-*] && [et-is-effective-target mips_msa]) || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) || [istarget amdgcn-*-*] } { @@ -10021,7 +10040,7 @@ proc check_effective_target_vect_extract_even_odd { } { || ([istarget s390*-*-*] && [check_effective_target_s390_vx]) || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -10041,7 +10060,7 @@ proc check_effective_target_vect_interleave { } { || ([istarget s390*-*-*] && [check_effective_target_s390_vx]) || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -10099,7 +10118,7 @@ proc available_vector_sizes { } { # 6 different lane counts, and 4 element sizes lappend result 4096 2048 1024 512 256 128 64 32 16 8 4 2 } elseif { [istarget riscv*-*-*] } { - if { [check_effective_target_riscv_v] } { + if { [check_effective_target_riscv_v_okc] } { lappend result 0 32 64 128 } lappend result 128 @@ -10167,7 +10186,7 @@ proc check_effective_target_vect_call_copysignf { } { || [istarget aarch64*-*-*] || [istarget amdgcn-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -10208,7 +10227,7 @@ proc check_effective_target_vect_call_sqrtf { } { && [check_effective_target_s390_vx]) || [istarget amdgcn-*-*] || ([istarget riscv*-*-*] - && [check_effective_target_riscv_v]) + && [check_effective_target_riscv_v_okc]) || ([istarget loongarch*-*-*] && [check_effective_target_loongarch_sx]) }}] } @@ -10323,7 +10342,7 @@ proc check_effective_target_vect_call_roundf { } { proc check_effective_target_vect_logical_reduc { } { return [expr { [check_effective_target_aarch64_sve] || [istarget amdgcn-*-*] - || [check_effective_target_riscv_v] + || [check_effective_target_riscv_v_okc] || [check_effective_target_loongarch_sx] || [check_effective_target_x86] || [check_effective_target_s390_vx]}] @@ -10334,7 +10353,7 @@ proc check_effective_target_vect_logical_reduc { } { proc check_effective_target_vect_fold_extract_last { } { return [expr { [check_effective_target_aarch64_sve] || [istarget amdgcn*-*-*] - || [check_effective_target_riscv_v] }] + || [check_effective_target_riscv_v_okc] }] } # Return 1 if the target supports section-anchors @@ -11267,7 +11286,7 @@ proc check_effective_target_vect_sizes_16B_8B { } { if { [check_avx_available] || [is-effective-target arm_neon] || [istarget aarch64*-*-*] - || [check_effective_target_riscv_v] } { + || [check_effective_target_riscv_v_okc] } { return 1; } else { return 0; @@ -12787,10 +12806,18 @@ proc check_vect_support_and_set_flags { } { lappend DEFAULT_VECTCFLAGS "-mno-vector-strict-align" } } elseif [check_effective_target_riscv_v_ok] { + set dg-do-what-default run foreach item [add_options_for_riscv_v ""] { lappend DEFAULT_VECTCFLAGS $item } + if [check_effective_target_riscv_v_misalign_ok] { + lappend DEFAULT_VECTCFLAGS "-mno-vector-strict-align" + } + } elseif [check_effective_target_riscv_v_okc] { set dg-do-what-default compile + foreach item [add_options_for_riscv_v ""] { + lappend DEFAULT_VECTCFLAGS $item + } } else { # Current architecture cannot support vectors (e.g. the # dependent D extension is missing). @@ -13484,7 +13511,7 @@ proc check_effective_target_builtin_eh_return { } { proc check_effective_target_vect_max_reduc { } { if { [istarget aarch64*-*-*] || [is-effective-target arm_neon] - || [check_effective_target_riscv_v] + || [check_effective_target_riscv_v_okc] || [check_effective_target_loongarch_sx] } { return 1 }
