From patchwork Thu Apr 27 08:52:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kito Cheng X-Patchwork-Id: 88151 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp126193vqo; Thu, 27 Apr 2023 01:53:37 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5IDbdCP/ZXVMeToiOmq6RUYgHm+CxuTBC0vN702WEoJYfp5AIyxYh48DTuxqTkRAfPewPT X-Received: by 2002:a17:907:1c95:b0:948:eed:b4e0 with SMTP id nb21-20020a1709071c9500b009480eedb4e0mr1116044ejc.61.1682585617676; Thu, 27 Apr 2023 01:53:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1682585617; cv=none; d=google.com; s=arc-20160816; b=csNFR/RolxkmHSOiKMnRJFdqHSz7PiyJYKi3I5H4ktABVFqFOtjPrmSgyvNAq0GlNL k9MmPANWs8l5LpoluS0SHbOa/xGIrzGYTNYcYqbdu1Wh2leBqrPeKAINYWuAWGs51bsv xGQME/lt6RIcVV3ECFaw5TkyKqb5zUJltssdEAPlUZx8O633RXzDfZzqkKQa3AgA6O0j eJMdZ1ylPbGdiitbR73NiGAGJorOF68BLMfQpQLaqoWovxEQh5JD4hL8qyhvop+79caE tL+cBQZ1LFpSqOM8qD1WdF1TBeUwTZM8tVdf2SM6urWJgQKJE/XJQGk5biwHJhaI2wpo YreQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:message-id:date:subject:cc :to:dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=gGvaAw6IiwOWGmbeoisQaGlu+JioDoeu0Lhfs/7ZNsc=; b=cXW1qT3nZ1cr2iCkcLcUQJwfR2gBde6r5xAY1IsidLsIFxhsHH1yIrpGL+y3MqFT1Q SaypQ6YjAVgesxK5Bx+zVopXZKHIP0iWr4rC+k1YfGRhUXCGxKYYmfyaXzRksjsWpMSf CLyVnxruKgsclCtjwtv2yFiiyj3x06o8pER3y+ckan8aPxER5uQq6dXY6AzwIgLwqBVu WFkmMsUMGzICOJiwL+z57FlCALz6Jh7EQ4CwY9U/5X6su1dVl+EmiGYkVLCawnmRWjGM gEVjkG6qHXEBE2MYbm0s1JHL3SroETGiruK+cbuUewMcLAo2Jrs+6tWT0esrvmBNfA6Y sfNw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=th7kC7H3; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id p4-20020a170906b20400b0094a6d05fe48si13440484ejz.607.2023.04.27.01.53.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Apr 2023 01:53:37 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=th7kC7H3; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9B8EE3858C66 for ; Thu, 27 Apr 2023 08:53:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9B8EE3858C66 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1682585616; bh=gGvaAw6IiwOWGmbeoisQaGlu+JioDoeu0Lhfs/7ZNsc=; h=To:Cc:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=th7kC7H3Hbgbfyu8gP6PZ0MMu7YL4IKVYwSebKwRcszMrQ4gV5yhnJ6uG/PL4Vt5o xWxoVZjj5VHKNP4U0ihqQcwaK54IMWWXEkmiJRunBnV+fPHAr6gyjb9YJVGVawe1Uz Dl4mptTRDIrIulPfSbon+cSVE/RFWIxG1RxY6JnU= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pf1-x432.google.com (mail-pf1-x432.google.com [IPv6:2607:f8b0:4864:20::432]) by sourceware.org (Postfix) with ESMTPS id 6642C3858D32 for ; Thu, 27 Apr 2023 08:52:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6642C3858D32 Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-63b64a32fd2so10284571b3a.2 for ; Thu, 27 Apr 2023 01:52:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682585569; x=1685177569; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=gGvaAw6IiwOWGmbeoisQaGlu+JioDoeu0Lhfs/7ZNsc=; b=KnGoRG8WjdMB/EUysIB77qar48HKm3WZBP5+SdOjTCmXktDvhf9VB1Pgc1hBMi1qYI oRrS3h4Y4hs55Zl2z5ri2InE01W4mfNCoxO7TUh3nPhpdW/8N/+1/xcUKDycpxE4ofde xiwcK5P8Mloz75/oSDPKoqb369I99YxHzu6tQDQawXpxut7iyVz73mchRUMp+6jWTQui Qu81KFSf6qhfgGenN66SDfvslcxXw8dmCmeSaCRafffX4vMsGd8DfXGkMm5PAnS0P0+b 8ov7nPC8KSimlVXwySZeUO7Xahk0un9RAD0Z+QZBVjpb7YowQ9uu4iFK8HF3mMwHeXXk 10Xw== X-Gm-Message-State: AC+VfDyjlebf7uHjmOfDNpGX207LeWtkV7siA+5u0HjLMnVBKIIKU1Qi Ld15Kh6rAGhmesVLD3f1iIu6hbSRQqX4nXHA3ETw6oUs5nOAkuiGwKqjHb3QGhmwMss+xN4eMPu hCAwxWpGfwrjI3dNYSp9v8tpz/sxTqRKGlzta19DPkvVS1ISOvnLk156xO8Eiv/DHY6pxcE2NYf beW8s= X-Received: by 2002:a05:6a20:144d:b0:f6:2287:e05d with SMTP id a13-20020a056a20144d00b000f62287e05dmr1165393pzi.10.1682585568938; Thu, 27 Apr 2023 01:52:48 -0700 (PDT) Received: from hsinchu02.internal.sifive.com (59-124-168-89.hinet-ip.hinet.net. [59.124.168.89]) by smtp.gmail.com with ESMTPSA id fe5-20020a056a002f0500b0062de9ef6915sm12523209pfb.216.2023.04.27.01.52.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Apr 2023 01:52:48 -0700 (PDT) To: gcc-patches@gcc.gnu.org, kito.cheng@gmail.com, palmer@dabbelt.com, jeffreyalaw@gmail.com Cc: Kito Cheng Subject: [PATCH] Docs: Add vector register constarint for asm operands Date: Thu, 27 Apr 2023 16:52:41 +0800 Message-Id: <20230427085241.69218-1-kito.cheng@sifive.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 X-Spam-Status: No, score=-13.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE 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.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Kito Cheng via Gcc-patches From: Kito Cheng Reply-To: Kito Cheng Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1764318896733999499?= X-GMAIL-MSGID: =?utf-8?q?1764318896733999499?= `vr`, `vm` and `vd` constarint for vector register constarint, those 3 constarint has implemented on LLVM as well. gcc/ChangeLog: * doc/md.texi (RISC-V): Add vr, vm, vd constarint. --- gcc/config/riscv/riscv-modes.def | 4 ++++ gcc/config/riscv/riscv-protos.h | 2 ++ gcc/config/riscv/riscv-selftests.cc | 16 +++++++++++++--- gcc/config/riscv/riscv-v.cc | 12 ++++++++++++ gcc/config/riscv/riscv.cc | 2 ++ gcc/config/riscv/riscv.md | 1 + gcc/doc/md.texi | 9 +++++++++ 7 files changed, 43 insertions(+), 3 deletions(-) diff --git a/gcc/config/riscv/riscv-modes.def b/gcc/config/riscv/riscv-modes.def index b1669609eec4..4f9e5ed5f3e9 100644 --- a/gcc/config/riscv/riscv-modes.def +++ b/gcc/config/riscv/riscv-modes.def @@ -185,6 +185,10 @@ VECTOR_MODE_WITH_PREFIX (VNx, INT, QI, 1, 0); ADJUST_NUNITS (VNx1QI, riscv_v_adjust_nunits (VNx1QImode, 1)); ADJUST_ALIGNMENT (VNx1QI, 1); + +/* VLS modes. */ +VECTOR_MODES (INT, 16); /* V16QI V8HI V4SI V2DI */ + /* TODO: According to RISC-V 'V' ISA spec, the maximun vector length can be 65536 for a single vector register which means the vector mode in GCC can be maximum = 65536 * 8 bits (LMUL=8). diff --git a/gcc/config/riscv/riscv-protos.h b/gcc/config/riscv/riscv-protos.h index 607ff6ea697b..28d9e4f5bb82 100644 --- a/gcc/config/riscv/riscv-protos.h +++ b/gcc/config/riscv/riscv-protos.h @@ -207,6 +207,8 @@ enum vlen_enum bool slide1_sew64_helper (int, machine_mode, machine_mode, machine_mode, rtx *); rtx gen_avl_for_scalar_move (rtx); +machine_mode minimal_vls_mode (machine_mode); +machine_mode mask_mode(machine_mode); } /* We classify builtin types into two classes: diff --git a/gcc/config/riscv/riscv-selftests.cc b/gcc/config/riscv/riscv-selftests.cc index 1bf1a648fa1f..56c1260a64b1 100644 --- a/gcc/config/riscv/riscv-selftests.cc +++ b/gcc/config/riscv/riscv-selftests.cc @@ -234,6 +234,16 @@ run_poly_int_selftests (void) worklist); } +static bool +vls_mode_p (machine_mode mode) +{ + if (!riscv_v_ext_vector_mode_p(mode)) + return false; + poly_int64 sz = GET_MODE_SIZE (mode); + return sz.is_constant(); +} + + static void run_const_vector_selftests (void) { @@ -248,7 +258,7 @@ run_const_vector_selftests (void) FOR_EACH_MODE_IN_CLASS (mode, MODE_VECTOR_INT) { - if (riscv_v_ext_vector_mode_p (mode)) + if (riscv_v_ext_vector_mode_p (mode) && !vls_mode_p (mode)) { for (const HOST_WIDE_INT &val : worklist) { @@ -273,7 +283,7 @@ run_const_vector_selftests (void) FOR_EACH_MODE_IN_CLASS (mode, MODE_VECTOR_FLOAT) { - if (riscv_v_ext_vector_mode_p (mode)) + if (riscv_v_ext_vector_mode_p (mode) && !vls_mode_p (mode)) { scalar_mode inner_mode = GET_MODE_INNER (mode); REAL_VALUE_TYPE f = REAL_VALUE_ATOF ("0.2928932", inner_mode); @@ -322,7 +332,7 @@ run_broadcast_selftests (void) #define BROADCAST_TEST(MODE_CLASS) \ FOR_EACH_MODE_IN_CLASS (mode, MODE_VECTOR_INT) \ { \ - if (riscv_v_ext_vector_mode_p (mode)) \ + if (riscv_v_ext_vector_mode_p (mode) && !vls_mode_p(mode)) \ { \ rtx_insn *insn; \ rtx src; \ diff --git a/gcc/config/riscv/riscv-v.cc b/gcc/config/riscv/riscv-v.cc index 99c414cc9102..9d41da945290 100644 --- a/gcc/config/riscv/riscv-v.cc +++ b/gcc/config/riscv/riscv-v.cc @@ -742,4 +742,16 @@ gen_avl_for_scalar_move (rtx avl) } } +machine_mode +minimal_vls_mode (machine_mode) +{ + return VNx4SImode; +} + +machine_mode +mask_mode(machine_mode) +{ + return VNx4BImode; +} + } // namespace riscv_vector diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index a2d2dd0bb670..c2bebc42bff7 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -985,6 +985,8 @@ riscv_v_ext_vector_mode_p (machine_mode mode) switch (mode) { #include "riscv-vector-switch.def" + case E_V4SImode: + return true; default: return false; } diff --git a/gcc/config/riscv/riscv.md b/gcc/config/riscv/riscv.md index dd845cc1ed33..05b41559ff8e 100644 --- a/gcc/config/riscv/riscv.md +++ b/gcc/config/riscv/riscv.md @@ -3148,3 +3148,4 @@ (include "sifive-7.md") (include "thead.md") (include "vector.md") +(include "vector-vls.md") diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi index 07bf8bdebffb..cc4a93a87638 100644 --- a/gcc/doc/md.texi +++ b/gcc/doc/md.texi @@ -3535,6 +3535,15 @@ An address that is held in a general-purpose register. @item S A constraint that matches an absolute symbolic address. +@item vr +A vector register (if available).. + +@item vd +A vector register, excluding v0 (if available). + +@item vm +A vector register, only v0 (if available). + @end table @item RX---@file{config/rx/constraints.md}