From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf1-x434.google.com (mail-pf1-x434.google.com [IPv6:2607:f8b0:4864:20::434]) by sourceware.org (Postfix) with ESMTPS id BE46B3858D1E for ; Tue, 7 May 2024 01:17:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BE46B3858D1E Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=sifive.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=sifive.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org BE46B3858D1E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::434 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1715044680; cv=none; b=pgnbBfOrMuHos1Fjowbru99gcG93GhKmvF39lsWbr1QCJgE7Ix+im5/Da9Tj+tcKN/ullL/jQhDw2mzLVv1EtHbkdmIeHZfJ77iucDGhveK3sb9XPhXsm7BPyx+giO53qsJXWOhommL/qwCAwVshhgin3qop0qpFgM6fZQmRJpg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1715044680; c=relaxed/simple; bh=LZN9cXNnHcfSUQp4ktlxSjetidZb9EQRwFPQ5NIWZxY=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=hETELCHUxn9RCFHyGgi2HYXkEcII72/KKQviKKGPoTxeHYFi7FTkARHOrkzIYLMfuekc56Gu9bAnYfBSpV8BDIOqGE7fKak7nRzkXmu5NmfH7RDRrfXxmKpwcIRb+hNKAG5ATYtL7NefFASuueT21rdOn6QHMDeVFzFqqHU7d0E= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pf1-x434.google.com with SMTP id d2e1a72fcca58-6f4551f2725so2519689b3a.1 for ; Mon, 06 May 2024 18:17:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1715044676; x=1715649476; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=oRp7jjsvJtQkBAJznfijq5qigmDmfq4kdv3YxprYPog=; b=HBFMHIg2ulhhoxSPr+A1UqR6QdCyY4zyfj88SbzuW9vfvkCHrWV5quUc+JkN/fT5BL 75hrHroa+BVbldHYJRgCujyp1Yk1Ej2v5/J2CcG1Y2SblZUallSHGAMChDEngbv+qPth ewh9KvGUXpAa8SpOIEN76xqm9MPVy6wj683T/DQ4h0GyuvV1zW8x+lNRicPvpCmrjA/g lzGt8GiGpET5pvsfJHYYR342yMM8u2bGjv2vFg/mSYbZ4QGZzswRzPg+4EA4OA5iP5c/ fTSVfdNcPusEEFDP/OmQ5PdHo4987+OlNEa0xicvrfJvFlz12qS8QIL8Ym3ynZsmaXiy YwKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715044676; x=1715649476; 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=oRp7jjsvJtQkBAJznfijq5qigmDmfq4kdv3YxprYPog=; b=Hl+itXpzPE7bG1LjKi1OWEVXghKNnc+7HrUtMZExEyv7ErGIFNM5DeTEDwNZ98/82J ckQHFnarsQwwlD7wIoZ+Wpd+K0wtzlsFyb7+DQuIPnsUqNe9DILnrCVkQOi7s4NxMrTp BsQhTEwN5NJf6yChgrDJ8fAqxt1y1ngxAwVel/SB8JUgkQaXzYuLowb3CCYNZ5aK1fXV DaxpV8bIrjY3ozzCfKEzQFXtJAMwEJMpta9cj4BCvXLZ/hi9/dDlbSMZyoj4rYyBxXYS OghoUDD/1zXl/0rTiPOqIkXqNDdS7MTlpkkLkh64Vt1702XoNuozVt618FOIOLJHh6NU vpaA== X-Gm-Message-State: AOJu0YxADCRQxBXISnmC6UXJK8NmQKhT0ZrC90p0lqlZRsYTOCMeIeuX dCzXuC8UkRshBl0Jg3zF2UEHXTUxUp3CdaeUBrLUTSTthFvbaeA/jlWDSUILrOQ/rMVsQ4qjTL7 0ndXyluVPuhC8jqZe2+o/9rvmTC/Z7uEzNzY1wwkESyupQskQbwirs8IcpLnljk6eh3bIZHt8iO 3taLe2E4siqKokAYUAkZTENd8K3QXknirTT8WHxlCO X-Google-Smtp-Source: AGHT+IHwUn54QPt/7oO1buu38uWsy7lluyvOW6gyXEHCL88sLfSU9UfSe0NXRsb3wvtekCPomNVJ7A== X-Received: by 2002:a05:6a00:1827:b0:6f0:c79f:cd7e with SMTP id y39-20020a056a00182700b006f0c79fcd7emr16340770pfa.0.1715044675994; Mon, 06 May 2024 18:17:55 -0700 (PDT) Received: from hsinchu18.internal.sifive.com (59-124-168-89.hinet-ip.hinet.net. [59.124.168.89]) by smtp.gmail.com with ESMTPSA id ei47-20020a056a0080ef00b006f40cdb63fesm5455770pfb.30.2024.05.06.18.17.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 May 2024 18:17:55 -0700 (PDT) From: Kito Cheng To: gcc-patches@gcc.gnu.org, kito.cheng@gmail.com, palmer@dabbelt.com, jeffreyalaw@gmail.com, rdapp@ventanamicro.com, juzhe.zhong@rivai.ai, pan2.li@intel.com Cc: Kito Cheng Subject: [PATCH][GCC 13] RISC-V: Fix vsetvli local eliminate [PR114747] Date: Tue, 7 May 2024 09:17:11 +0800 Message-Id: <20240507011710.544408-1-kito.cheng@sifive.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-12.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,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 List-Id: vsetvli local eliminate is only consider the current demand instead of full demand, and it will use that incomplete info to remove vsetvli. Give following example from PR114747: vsetvli a5,a1,e8,m4,ta,mu # 57, ratio=2, sew=8, lmul=4 vsetvli zero,a5,e16,m8,ta,ma # 58, ratio=2, sew=16, lmul=8 vle8.v v8,0(a0) # 13, demand ratio=2 vzext.vf2 v24,v8 # 14, demand sew=16 and lmul=8 Insn #58 will removed because #57 has satisfied demand of #13, but it's not consider #14. It should doing more demand analyze, but this bug only present in GCC 13 branch, and we should not change too much on this release branch, so the best way is make the check more conservative - remove only if the target vsetvl_discard_result having same SEW and LMUL as the source vsetvli. gcc/ChangeLog: PR target/114747 * config/riscv/riscv-vsetvl.cc (local_eliminate_vsetvl_insn): Check target vsetvl_discard_result and source vsetvli has same SEW and LMUL. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/vsetvl/pr114747.c: New. --- gcc/config/riscv/riscv-vsetvl.cc | 10 ++++++++++ .../gcc.target/riscv/rvv/vsetvl/pr114747.c | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr114747.c diff --git a/gcc/config/riscv/riscv-vsetvl.cc b/gcc/config/riscv/riscv-vsetvl.cc index 587c6975a70..e6606b1e4de 100644 --- a/gcc/config/riscv/riscv-vsetvl.cc +++ b/gcc/config/riscv/riscv-vsetvl.cc @@ -1106,6 +1106,16 @@ local_eliminate_vsetvl_insn (const vector_insn_info &dem) if (!new_info.skip_avl_compatible_p (dem)) return; + /* Be more conservative here since we don't really get full + demand info for following instructions, also that instruction + isn't exist in RTL-SSA yet so we need parse that by low level + API rather than vector_insn_info::parse_insn, see PR114747. */ + unsigned last_vsetvli_sew = ::get_sew (PREV_INSN (i->rtl ())); + unsigned last_vsetvli_lmul = ::get_vlmul (PREV_INSN (i->rtl ())); + if (new_info.get_sew() != last_vsetvli_sew || + new_info.get_vlmul() != last_vsetvli_lmul) + return; + new_info.set_avl_info (dem.get_avl_info ()); new_info = dem.merge (new_info, LOCAL_MERGE); change_vsetvl_insn (insn, new_info); diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr114747.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr114747.c new file mode 100644 index 00000000000..c478405e8d6 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr114747.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -fno-tree-vectorize -fno-schedule-insns -fno-schedule-insns2" } */ + +#include "riscv_vector.h" + +typedef unsigned short char16_t; + +size_t convert_latin1_to_utf16le(const char *src, size_t len, char16_t *dst) { + char16_t *beg = dst; + for (size_t vl; len > 0; len -= vl, src += vl, dst += vl) { + vl = __riscv_vsetvl_e8m4(len); + vuint8m4_t v = __riscv_vle8_v_u8m4((uint8_t*)src, vl); + __riscv_vse16_v_u16m8((uint16_t*)dst, __riscv_vzext_vf2_u16m8(v, vl), vl); + } + return dst - beg; +} + +/* { dg-final { scan-assembler {vsetvli\s+[a-z0-9]+,\s*[a-x0-9]+,\s*e16,\s*m8,\s*t[au],\s*m[au]} } } */ -- 2.34.1