From patchwork Wed Aug 30 12:05:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "juzhe.zhong@rivai.ai" X-Patchwork-Id: 137172 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a7d1:0:b0:3f2:4152:657d with SMTP id p17csp4490515vqm; Wed, 30 Aug 2023 05:06:31 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEJkCQoOHV3QjSZ77e0zP+IE2M0UYboaklP5IHIIWTfn08Q6BgmeKycaiiLVM4FtEro0NSY X-Received: by 2002:a05:6402:34b:b0:525:69ec:e1c8 with SMTP id r11-20020a056402034b00b0052569ece1c8mr1402145edw.40.1693397191463; Wed, 30 Aug 2023 05:06:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693397191; cv=none; d=google.com; s=arc-20160816; b=a06mjSSX4yXIXqSrxNZYuu+ns2OKsj7YkdzZHnGI8xBcH6114m7FPmCqqqESa3J5d5 1xRPeNdQcQykFBLrgnXqZtxFeOfFBWaow5FpD/oszvzCLeJcbq1aZ2AMTKVcLAHeQivE rLpFiFsrXNn6YP4M//Axg8fr+mylwF8iiaS4fUUxBPVKx1XXEc8+HK6tOEqqz2QuXpTO J3UIA3lGRdfSj7FvEbFATfwqiscash0nA5jwz/AbovffiWoCmoNQEV3kTDdrxFxkBIi+ Bs9BpmwB4AHbs5//IJwJSxID8fqpzB6rIWOCgGQnAuCKLiLO8d+5V7HomnXiqPbAQJNL c7FA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:feedback-id :content-transfer-encoding:mime-version:message-id:date:subject:to :from:dmarc-filter:delivered-to; bh=Hya6M7xIJd6FzKIABtpeAZYvhiFSU9L6wb5M4d7zpBE=; fh=arl273cIQBNH1P6XLxHQvF0scgitfd773vOV+bwQx3o=; b=uAMrHZ6tGw7uhmT96aaM5t3KQ+rt8Z2xuqqmR62G7tSEEzilz2EjVgrBQtJkk2X1uU c3NQ8O7DVGVBoXXG2JBXbPBFyoF6U4h3dZ9+QtjP7pyguK0WYUW8WiSS7pD7o3lekBJC m+0qgxMbmxmcx/P5bbQ37mT8xaOmt1wK38f++lrMTZIanDxIKAJ3OtoNt7BS2iTZ5cs5 nTuxyoA1YtLYT4JIJ5AJYSYThB9+heTHBmO8DDaBIOKSQHs5+Lw1DC/F5RZoXv1p66kR bekXLqFs4B6wydfGWYvNQA5HXo7uURFYvaOoDPxHMbiVXX3LJ3dSjOAKThtf9Yyecvf5 wQLg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org" Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id d14-20020aa7c1ce000000b005233f7e72e2si5660754edp.391.2023.08.30.05.06.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Aug 2023 05:06:31 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org" Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id AEC223857718 for ; Wed, 30 Aug 2023 12:06:22 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtpbguseast1.qq.com (smtpbguseast1.qq.com [54.204.34.129]) by sourceware.org (Postfix) with ESMTPS id 890CB3858D28 for ; Wed, 30 Aug 2023 12:05:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 890CB3858D28 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=rivai.ai Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=rivai.ai X-QQ-mid: bizesmtp71t1693397151tbvjukmz Received: from rios-cad122.hadoop.rioslab.org ( [58.60.1.26]) by bizesmtp.qq.com (ESMTP) with id ; Wed, 30 Aug 2023 20:05:50 +0800 (CST) X-QQ-SSF: 01400000000000G0V000000A0000000 X-QQ-FEAT: ILHsT53NKPh9BXpmIEaGSLaf7hkEG2GdXMrpQzeFr77uTK90nrYIPzxkL06jS WbOnjmW9CRn0cKOAzDPYTH7Hws79IJoBacYqkeHT0fvm99ttyQkMrIxHdyqhhISklBeYDRX Lg2w+xaIpcF5XgmUZuEAwPLmHiWcu1INgKLNp4IR8s70ZSEt9MajT4blsiR3ca4dMNScO0n PcBd0O/dYWj8lrKXfdnUb7xn8/leLtjh+jKV3Vdeb8PN/C/XtuGIw3WwafwYfP0TaUSoOCb 99SVDhuo2FqUWbqLazcALiBnXLWfG/QAGVNQDA3wwW+22GRnKZFS0c83J1TJcROMMFsRPDM pkbQPj/FNIEdNcf1ddAZaaWLYumIDh4e8ogsmeBQ+UAlc0EdDzzbe1okBfa++UC+0/7Dcbu CjGKVwUgsIo= X-QQ-GoodBg: 2 X-BIZMAIL-ID: 7421812269076338473 From: Juzhe-Zhong To: gcc-patches@gcc.gnu.org Subject: [PATCH V6] RISC-V: Enable vec_int testsuite for RVV VLA vectorization Date: Wed, 30 Aug 2023 20:05:49 +0800 Message-Id: <20230830120549.1628109-1-juzhe.zhong@rivai.ai> X-Mailer: git-send-email 2.36.3 MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:rivai.ai:qybglogicsvrgz:qybglogicsvrgz7a-one-0 X-Spam-Status: No, score=-10.2 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kito.cheng@sifive.com, kito.cheng@gmail.com, Juzhe-Zhong Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1775640019727139699 X-GMAIL-MSGID: 1775655653151260718 This patch is the final version of enabling vect_int test for RVV. There are still 80+ FAILs and they can't be fixed by adjusting testcases or target-supports.exp Here is the analysis of **ALL** FAILs: 1. REAL highest priority FAILs: ICE: FAIL: gcc.dg/vect/vect-live-6.c (internal compiler error: in force_align_down_and_div, at poly-int.h:1903) FAIL: gcc.dg/vect/vect-live-6.c (test for excess errors) FAIL: gcc.dg/vect/vect-live-6.c -flto -ffat-lto-objects (internal compiler error: in force_align_down_and_div, at poly-int.h:1903) FAIL: gcc.dg/vect/vect-live-6.c -flto -ffat-lto-objects (test for excess errors) Execution fails: FAIL: gcc.dg/vect/slp-reduc-7.c -flto -ffat-lto-objects execution test FAIL: gcc.dg/vect/slp-reduc-7.c execution test FAIL: gcc.dg/vect/vect-alias-check-10.c -flto -ffat-lto-objects execution test FAIL: gcc.dg/vect/vect-alias-check-10.c execution test FAIL: gcc.dg/vect/vect-alias-check-11.c -flto -ffat-lto-objects execution test FAIL: gcc.dg/vect/vect-alias-check-11.c execution test FAIL: gcc.dg/vect/vect-alias-check-12.c -flto -ffat-lto-objects execution test FAIL: gcc.dg/vect/vect-alias-check-12.c execution test FAIL: gcc.dg/vect/vect-alias-check-14.c -flto -ffat-lto-objects execution test FAIL: gcc.dg/vect/vect-alias-check-14.c execution test FAIL: gcc.dg/vect/vect-double-reduc-5.c -flto -ffat-lto-objects execution test FAIL: gcc.dg/vect/vect-double-reduc-5.c execution test These FAILs are REAL problem that we need to address first. 2. Missed optimizations due to lacking VLS modes patterns: FAIL: gcc.dg/vect/pr57705.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorized 1 loop" 2 FAIL: gcc.dg/vect/pr57705.c scan-tree-dump-times vect "vectorized 1 loop" 2 FAIL: gcc.dg/vect/pr65518.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorized 0 loops in function" 2 FAIL: gcc.dg/vect/pr65518.c scan-tree-dump-times vect "vectorized 0 loops in function" 2 FAIL: gcc.dg/vect/slp-1.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorizing stmts using SLP" 4 FAIL: gcc.dg/vect/slp-1.c scan-tree-dump-times vect "vectorizing stmts using SLP" 4 FAIL: gcc.dg/vect/slp-12a.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorizing stmts using SLP" 1 FAIL: gcc.dg/vect/slp-12a.c scan-tree-dump-times vect "vectorizing stmts using SLP" 1 FAIL: gcc.dg/vect/slp-16.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorizing stmts using SLP" 2 FAIL: gcc.dg/vect/slp-16.c scan-tree-dump-times vect "vectorizing stmts using SLP" 2 FAIL: gcc.dg/vect/slp-34-big-array.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorizing stmts using SLP" 2 FAIL: gcc.dg/vect/slp-34-big-array.c scan-tree-dump-times vect "vectorizing stmts using SLP" 2 FAIL: gcc.dg/vect/slp-34.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorizing stmts using SLP" 2 FAIL: gcc.dg/vect/slp-34.c scan-tree-dump-times vect "vectorizing stmts using SLP" 2 FAIL: gcc.dg/vect/slp-35.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorizing stmts using SLP" 1 FAIL: gcc.dg/vect/slp-35.c scan-tree-dump-times vect "vectorizing stmts using SLP" 1 FAIL: gcc.dg/vect/slp-43.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorized 1 loops" 13 FAIL: gcc.dg/vect/slp-43.c scan-tree-dump-times vect "vectorized 1 loops" 13 FAIL: gcc.dg/vect/slp-45.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorized 1 loops" 13 FAIL: gcc.dg/vect/slp-45.c scan-tree-dump-times vect "vectorized 1 loops" 13 FAIL: gcc.dg/vect/slp-47.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorizing stmts using SLP" 2 FAIL: gcc.dg/vect/slp-47.c scan-tree-dump-times vect "vectorizing stmts using SLP" 2 FAIL: gcc.dg/vect/slp-48.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorizing stmts using SLP" 2 FAIL: gcc.dg/vect/slp-48.c scan-tree-dump-times vect "vectorizing stmts using SLP" 2 These testcases need VLS modes vec_init patterns. FAIL: gcc.dg/vect/vect-bic-bitmask-12.c -flto -ffat-lto-objects scan-tree-dump dce7 "<=\\s*.+{ 255,.+}" FAIL: gcc.dg/vect/vect-bic-bitmask-12.c scan-tree-dump dce7 "<=\\s*.+{ 255,.+}" FAIL: gcc.dg/vect/vect-bic-bitmask-23.c -flto -ffat-lto-objects scan-tree-dump dce7 "<=\\s*.+{ 255, 15, 1, 65535 }" FAIL: gcc.dg/vect/vect-bic-bitmask-23.c scan-tree-dump dce7 "<=\\s*.+{ 255, 15, 1, 65535 }" These testcases need VLS modes VCOND_MASK and vec_cmp patterns. 3. Maybe bogus dump check FAILs: FAIL: gcc.dg/vect/vect-multitypes-11.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorized 1 loops" 1 FAIL: gcc.dg/vect/vect-multitypes-11.c scan-tree-dump-times vect "vectorized 1 loops" 1 FAIL: gcc.dg/vect/vect-outer-4c-big-array.c -flto -ffat-lto-objects scan-tree-dump-times vect "zero step in outer loop." 1 FAIL: gcc.dg/vect/vect-outer-4c-big-array.c scan-tree-dump-times vect "zero step in outer loop." 1 FAIL: gcc.dg/vect/vect-reduc-dot-s16a.c -flto -ffat-lto-objects scan-tree-dump-times vect "vect_recog_dot_prod_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-dot-s16a.c scan-tree-dump-times vect "vect_recog_dot_prod_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-dot-s8a.c -flto -ffat-lto-objects scan-tree-dump-times vect "vect_recog_dot_prod_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-dot-s8a.c -flto -ffat-lto-objects scan-tree-dump-times vect "vect_recog_widen_mult_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-dot-s8a.c scan-tree-dump-times vect "vect_recog_dot_prod_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-dot-s8a.c scan-tree-dump-times vect "vect_recog_widen_mult_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-dot-s8b.c -flto -ffat-lto-objects scan-tree-dump-times vect "vect_recog_widen_mult_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-dot-s8b.c scan-tree-dump-times vect "vect_recog_widen_mult_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-dot-u16b.c -flto -ffat-lto-objects scan-tree-dump-times vect "vect_recog_dot_prod_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-dot-u16b.c scan-tree-dump-times vect "vect_recog_dot_prod_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-dot-u8a.c -flto -ffat-lto-objects scan-tree-dump-times vect "vect_recog_dot_prod_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-dot-u8a.c scan-tree-dump-times vect "vect_recog_dot_prod_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-dot-u8b.c -flto -ffat-lto-objects scan-tree-dump-times vect "vect_recog_dot_prod_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-dot-u8b.c scan-tree-dump-times vect "vect_recog_dot_prod_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-pattern-1a.c -flto -ffat-lto-objects scan-tree-dump-times vect "vect_recog_widen_sum_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-pattern-1a.c scan-tree-dump-times vect "vect_recog_widen_sum_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-pattern-1b-big-array.c -flto -ffat-lto-objects scan-tree-dump-times vect "vect_recog_widen_sum_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-pattern-1b-big-array.c scan-tree-dump-times vect "vect_recog_widen_sum_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-pattern-1c-big-array.c -flto -ffat-lto-objects scan-tree-dump-times vect "vect_recog_widen_sum_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-pattern-1c-big-array.c scan-tree-dump-times vect "vect_recog_widen_sum_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-pattern-2a.c -flto -ffat-lto-objects scan-tree-dump-times vect "vect_recog_widen_sum_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-pattern-2a.c scan-tree-dump-times vect "vect_recog_widen_sum_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-pattern-2b-big-array.c -flto -ffat-lto-objects scan-tree-dump-times vect "vect_recog_widen_sum_pattern: detected" 1 FAIL: gcc.dg/vect/vect-reduc-pattern-2b-big-array.c scan-tree-dump-times vect "vect_recog_widen_sum_pattern: detected" 1 FAIL: gcc.dg/vect/wrapv-vect-reduc-dot-s8b.c scan-tree-dump-times vect "vect_recog_dot_prod_pattern: detected" 1 FAIL: gcc.dg/vect/wrapv-vect-reduc-dot-s8b.c scan-tree-dump-times vect "vect_recog_widen_mult_pattern: detected" 1 These testcases because we don't support widen_sum/vec_unpack....etc patterns. Currently, we don't support them since we don't see the benefits. May support those patterns if they are beneficial ? Or Fix testcases ? Conclusion: IMHO, I think we can merge this patch after we addressed all REAL highest priority issues (1). The rest FAILs are not big issues then we can reduce them by supporting more features (For example VLS modes). Feel free to give any comments. gcc/testsuite/ChangeLog: * lib/target-supports.exp: Enable vect_int for RVV. --- gcc/testsuite/lib/target-supports.exp | 59 ++++++++++++++++++++------- 1 file changed, 45 insertions(+), 14 deletions(-) diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index d353cc0aaf0..9fbe5136a8c 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -1820,14 +1820,14 @@ proc check_effective_target_riscv_vector_hw { } { asm ("vadd.vv v8,v8,v16" : : : "v8"); return 0; } - } "-march=rv32gcv -mabi=ilp32d"] || [check_runtime riscv_vector_hw64 { + } ""] || [check_runtime riscv_vector_hw64 { int main (void) { asm ("vsetivli zero,8,e16,m1,ta,ma"); asm ("vadd.vv v8,v8,v16" : : : "v8"); return 0; } - } "-march=rv64gcv -mabi=lp64d"] + } ""] } # Return 1 if the we can build a Zvfh vector example with proper -march flags @@ -3778,6 +3778,7 @@ proc check_effective_target_vect_int { } { || [et-is-effective-target mips_msa])) || ([istarget s390*-*-*] && [check_effective_target_s390_vx]) + || [istarget riscv*-*-*] }}] } @@ -7492,7 +7493,8 @@ proc check_effective_target_vect_widen_sum_hi_to_si { } { return [check_cached_effective_target_indexed vect_widen_sum_hi_to_si { expr { [check_effective_target_vect_unpack] || [istarget powerpc*-*-*] - || [istarget ia64-*-*] }}] + || [istarget ia64-*-*] + || [istarget riscv*-*-*] }}] } # Return 1 if the target plus current options supports a vector @@ -7506,7 +7508,8 @@ proc check_effective_target_vect_widen_sum_qi_to_hi { } { return [check_cached_effective_target_indexed vect_widen_sum_qi_to_hi { expr { [check_effective_target_vect_unpack] || [is-effective-target arm_neon] - || [istarget ia64-*-*] }}] + || [istarget ia64-*-*] + || [istarget riscv*-*-*] }}] } # Return 1 if the target plus current options supports a vector @@ -7516,7 +7519,8 @@ proc check_effective_target_vect_widen_sum_qi_to_hi { } { proc check_effective_target_vect_widen_sum_qi_to_si { } { return [check_cached_effective_target_indexed vect_widen_sum_qi_to_si { - expr { [istarget powerpc*-*-*] }}] + expr { [istarget powerpc*-*-*] + || [istarget riscv*-*-*] }}] } # Return 1 if the target plus current options supports a vector @@ -7805,7 +7809,8 @@ proc check_effective_target_vect_hw_misalign { } { || [istarget aarch64*-*-*] || ([istarget mips*-*-*] && [et-is-effective-target mips_msa]) || ([istarget s390*-*-*] - && [check_effective_target_s390_vx]) } { + && [check_effective_target_s390_vx]) + || ([istarget riscv*-*-*]) } { return 1 } if { [istarget arm*-*-*] @@ -7911,7 +7916,8 @@ proc check_effective_target_vect_check_ptrs { } { proc check_effective_target_vect_fully_masked { } { return [expr { [check_effective_target_aarch64_sve] - || [istarget amdgcn*-*-*] }] + || [istarget amdgcn*-*-*] + || [check_effective_target_riscv_vector] }] } # Return true if the target supports the @code{len_load} and @@ -7919,7 +7925,8 @@ 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_s390_vx] + || [check_effective_target_riscv_vector] }] } # Return the value of parameter vect-partial-vector-usage specified for @@ -7980,8 +7987,9 @@ proc check_effective_target_vect_partial_vectors { } { # alignment during vectorization. proc check_effective_target_vect_element_align_preferred { } { - return [expr { [check_effective_target_aarch64_sve] - && [check_effective_target_vect_variable_length] }] + return [expr { ([check_effective_target_aarch64_sve] + && [check_effective_target_vect_variable_length]) + || [check_effective_target_riscv_vector] }] } # Return true if vectorization of v2qi/v4qi/v8qi/v16qi/v2hi store is enabed. @@ -8386,7 +8394,8 @@ proc check_effective_target_vect_load_lanes { } { return [check_cached_effective_target vect_load_lanes { expr { ([check_effective_target_arm_little_endian] && [check_effective_target_arm_neon_ok]) - || [istarget aarch64*-*-*] }}] + || [istarget aarch64*-*-*] + || [istarget riscv*-*-*] }}] } # Return 1 if the target supports vector masked loads. @@ -8402,7 +8411,8 @@ proc check_effective_target_vect_masked_load { } { proc check_effective_target_vect_masked_store { } { return [expr { [check_avx_available] || [check_effective_target_aarch64_sve] - || [istarget amdgcn*-*-*] }] + || [istarget amdgcn*-*-*] + || [check_effective_target_riscv_vector] }] } # Return 1 if the target supports vector gather loads via internal functions. @@ -8482,7 +8492,8 @@ proc check_effective_target_vect_short_mult { } { || [et-is-effective-target mips_loongson_mmi])) || ([istarget s390*-*-*] && [check_effective_target_s390_vx]) - || [istarget amdgcn-*-*] }}] + || [istarget amdgcn-*-*] + || [istarget riscv*-*-*] }}] } # Return 1 if the target supports vector int multiplication, 0 otherwise. @@ -8498,7 +8509,8 @@ proc check_effective_target_vect_int_mult { } { || [check_effective_target_arm32] || ([istarget s390*-*-*] && [check_effective_target_s390_vx]) - || [istarget amdgcn-*-*] }}] + || [istarget amdgcn-*-*] + || [istarget riscv*-*-*] }}] } # Return 1 if the target supports 64 bit hardware vector @@ -8580,6 +8592,9 @@ foreach N {2 3 4 8} { || [istarget aarch64*-*-*]) && N >= 2 && N <= 4 } { return 1 } + if { ([istarget riscv*-*-*]) && N >= 2 && N <= 8 } { + return 1 + } if [check_effective_target_vect_fully_masked] { return 1 } @@ -8616,6 +8631,11 @@ proc available_vector_sizes { } { } elseif { [istarget amdgcn*-*-*] } { # 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_vector] } { + lappend result 0 32 + } + lappend result 128 } else { # The traditional default asumption. lappend result 128 @@ -11100,6 +11120,17 @@ proc check_vect_support_and_set_flags { } { } } elseif [istarget amdgcn-*-*] { set dg-do-what-default run + } elseif [istarget riscv64-*-*] { + if [check_effective_target_riscv_vector_hw] { + lappend DEFAULT_VECTCFLAGS "--param" "riscv-autovec-preference=scalable" + lappend DEFAULT_VECTCFLAGS "-Wno-psabi" + set dg-do-what-default run + } else { + lappend DEFAULT_VECTCFLAGS "-march=rv64gcv_zvfh" "-mabi=lp64d" + lappend DEFAULT_VECTCFLAGS "--param" "riscv-autovec-preference=scalable" + lappend DEFAULT_VECTCFLAGS "-Wno-psabi" + set dg-do-what-default compile + } } else { return 0 }