From patchwork Wed Oct 18 14:19:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robin Dapp X-Patchwork-Id: 154904 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2908:b0:403:3b70:6f57 with SMTP id ib8csp4825407vqb; Wed, 18 Oct 2023 07:19:52 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGkgXlvwqwkFhGm3c0CP8NAWaDLXGFfd1GYrhttWUrv3u/kwDraJAYL2nPI8AyYSG2h5L+E X-Received: by 2002:a05:620a:8719:b0:773:c1a5:148f with SMTP id px25-20020a05620a871900b00773c1a5148fmr5167366qkn.65.1697638792376; Wed, 18 Oct 2023 07:19:52 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1697638792; cv=pass; d=google.com; s=arc-20160816; b=Aqj6s2Ux0OdBiotjwTWVWGLqjBCWBKT0E5xgwz7iIqCZWcNts5m3/DpdK0eKvDdGxR S45HP38qI+jQ/DWxJ60gqORDCkx+XPRrs5+hbCNkwK6q8jf9D0Lyk4n4qLyUCIntq2yR a7pnXE9S1jjwT6Ijpu+MPFOPbNy0cqUjqIunNB57WwZjDeRETlR8J5U7BliVoBpkhtP0 AgdzIxnRxZH46dxUTg4od+6EhTIP7uH9zkvPEjxIA0d9XiWK2coq9UkpL6z6Qtfpfhqx q0MfHhF7RgVvZs4Om7cF1NBM7aHtHNnIFP+ConLrPd3AZpvCwWtgsgzeqWerSh+SMQEj 43uw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :subject:from:to:content-language:cc:user-agent:mime-version:date :message-id:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=cucOr0CiTKn9hPaSrM9lsqJfpvn0jcN19xQzy7KVyvU=; fh=WQWV/Tr92R3Wo/P3+UafdpL6SU1h8bZOTy7P+R2HBcc=; b=GJYF5+iYHtZOgAdV98vZmWY9ojGwbHAxSelbhtm7jOFmP6+Kk7nHfh/bkYVYjZW/gW tWW9OQTMMoJOBMXLbpFjB5iGeFBeQknnJVnL/hCv8DMjXj+YxAZ8CmY91hW3zDxjoLXp HehQ79KnFh1q43TxuvDu6Jj1IbROyX8HYQakOv0oL1q47/rN97tNXZ7RX+BXooIIrOZ9 B3P9Vj+vCmRqx+gewfej/k4Ti3Ru37Aet8fxGDshJEZYCdQQLq6siiog/ektWrWt0fYp NMEsQOFCYz+ZDu6vLZ0F++TKhC01dKvUONicGeOTKjYkjHYQs1astv/QXDH5NiXk9hIV eVLA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=Xp1yem4D; arc=pass (i=1); 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=QUARANTINE dis=NONE) header.from=gmail.com Received: from server2.sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id q7-20020ae9e407000000b00773fe581c18si2628836qkc.463.2023.10.18.07.19.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Oct 2023 07:19:52 -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=@gmail.com header.s=20230601 header.b=Xp1yem4D; arc=pass (i=1); 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=QUARANTINE dis=NONE) header.from=gmail.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 28A03385843A for ; Wed, 18 Oct 2023 14:19:52 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by sourceware.org (Postfix) with ESMTPS id A1B123858CDB for ; Wed, 18 Oct 2023 14:19:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A1B123858CDB Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org A1B123858CDB Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::32e ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1697638768; cv=none; b=sw4kc7FpW1yIHAypPDzeTpfbTF3M2ELeDdI1FLX5gejAXplZNMMebN8QQQFEa1NqXKyE8dj9WlPZ3rTwqq2rON0t0EmXsVYLTXd2kqhmsOh7+xjQZilEvWSTeHVO8HOXI4h8PEOvk5B135rVJs6VZO2+Tb+p5K+g3hBpD6Md6cQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1697638768; c=relaxed/simple; bh=X9WysTxrmY0XDJIn5XPdjRCawFhvIlV22myUHiC/rK8=; h=DKIM-Signature:Message-ID:Date:MIME-Version:To:From:Subject; b=NycrlOl4etlTkKCSqCm1hK1ZsuHBHDSr/0WuLgEHRtdGe+ETIBPC48Rr8XWgPfnINBPkWLapIzBC/YPa6JeZZjgNq8yVwhIj7egiu5DqDFe0MNHO6/bHYbQKb7WI5qJNUcrslsEEVcBF3x61PmPdGUfVmtmup2MY6eE3+EF1qXc= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-4083cd3917eso5613635e9.3 for ; Wed, 18 Oct 2023 07:19:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1697638764; x=1698243564; darn=gcc.gnu.org; h=content-transfer-encoding:subject:from:to:content-language:cc :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=cucOr0CiTKn9hPaSrM9lsqJfpvn0jcN19xQzy7KVyvU=; b=Xp1yem4DBGxfe+ZOXVqJNVojDtiO4rh3Buhp7CEgqQfDbU+cZs48t7h5lqqiQlMKPc 3x3hM53ZuM7EAtIcRvp+BlyerZtsSyhwGM7eKP7uOgDv8ZwB4XSHthJz8CRTr1zC+6Se K6Tn3a/BnfKJ5MxWUHWWYEu+DerbPI+1ZVe5pTV0fEW1JEKb3XuQ2hNBydSZ7F9gkjgc SDIyUXWmyfYU+OHQvJaFjkX1PJK6W6W7S09I7aCdMeO3IvSaDxrN2L0z76zLJ/IQRwOx 9hSGo4376zYZHOQsE/WiLDxcU09E+m0/Ggr8fZAXrLCf1/IWgrUYPVyyUmT7qfjM4PEb UWog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1697638764; x=1698243564; h=content-transfer-encoding:subject:from:to:content-language:cc :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=cucOr0CiTKn9hPaSrM9lsqJfpvn0jcN19xQzy7KVyvU=; b=AkZjGZrfTiKZw9Bk/S8RgWEOlnFBBtjgjCgZQ8elwal5EU0mPYqNZX0erLkHXKKM8m cfDA75kW30wvd43NAj8vyc4mGouIR3ofyT5kDm/UXuum2l+W75FZ4QvCzNjnStuMyuF8 rzXJTc/HcIn7CatVX0Ask3unB5b56kDsiWAl/3s+6XbHn5qLCiPLCU+X86Y/fvRPSwqJ MGIfx46HZpo8+qDJZBc19itqMqDV4dNxQvQuhpZC3316LELMWeB9Ot4jdwhfrPLA1Zsq 6XBBynKVWAzAIg9NmK5KFokS/JvfYcTOT5UJub5nJ1MsFqvpwJtRpzBygmSNwmKhMWpG l0yA== X-Gm-Message-State: AOJu0YwlyLX6xX817KOrS2af2V8rpltTSoI2SgeyKyReH1uRh8wnWr/d Xn4tyTyTszXFTJn0q00FOeUNFQCALTQ= X-Received: by 2002:a05:600c:3555:b0:406:84b2:67f with SMTP id i21-20020a05600c355500b0040684b2067fmr4135338wmq.20.1697638763646; Wed, 18 Oct 2023 07:19:23 -0700 (PDT) Received: from [192.168.1.23] (ip-046-223-203-173.um13.pools.vodafone-ip.de. [46.223.203.173]) by smtp.gmail.com with ESMTPSA id m5-20020a056000180500b0031c6581d55esm2226307wrh.91.2023.10.18.07.19.22 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 18 Oct 2023 07:19:22 -0700 (PDT) Message-ID: Date: Wed, 18 Oct 2023 16:19:22 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Cc: rdapp.gcc@gmail.com, Richard Biener , "juzhe.zhong@rivai.ai" Content-Language: en-US To: gcc-patches From: Robin Dapp Subject: [PATCH] vect: Allow same precision for bit-precision conversions. X-Spam-Status: No, score=-9.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, 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 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: , Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1780103294354547490 X-GMAIL-MSGID: 1780103294354547490 Hi, even though there was no full conclusion yet I took the liberty of just posting this as a patch in case of further discussion. In PR/111794 we miss a vectorization because on riscv type precision and mode precision differ for mask types. We can still vectorize when allowing assignments with the same precision for dest and source which is what this patch does. Bootstrapped and regtested on x86, aarch64 and power10. No new failures on riscv. Regards Robin gcc/ChangeLog: PR/111794 * tree-vect-stmts.cc (vectorizable_assignment): Add same-precision exception for dest and source. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/slp-mask-1.c: New test. * gcc.target/riscv/rvv/autovec/slp-mask-run-1.c: New test. --- .../gcc.target/riscv/rvv/autovec/slp-mask-1.c | 18 +++++++++++ .../riscv/rvv/autovec/slp-mask-run-1.c | 31 +++++++++++++++++++ gcc/tree-vect-stmts.cc | 12 ++++--- 3 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-mask-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-mask-run-1.c diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-mask-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-mask-1.c new file mode 100644 index 00000000000..ee1baa58d63 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-mask-1.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-std=gnu99 -O3 -march=rv64gcv -mabi=lp64d --param=riscv-autovec-preference=scalable -fdump-tree-slp-details" } */ + +void +__attribute__ ((noipa)) +f (int *restrict x, short *restrict y, int *restrict res) +{ + res[0] = x[0] == 1 & y[0] == 2; + res[1] = x[1] == 1 & y[1] == 2; + res[2] = x[2] == 1 & y[2] == 2; + res[3] = x[3] == 1 & y[3] == 2; + res[4] = x[4] == 1 & y[4] == 2; + res[5] = x[5] == 1 & y[5] == 2; + res[6] = x[6] == 1 & y[6] == 2; + res[7] = x[7] == 1 & y[7] == 2; +} + +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "slp2" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-mask-run-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-mask-run-1.c new file mode 100644 index 00000000000..b3469c41c87 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-mask-run-1.c @@ -0,0 +1,31 @@ +/* { dg-do run { target { riscv_v } } } */ +/* { dg-additional-options "-std=gnu99 -O3 -march=rv64gcv -mabi=lp64d --param=riscv-autovec-preference=scalable" } */ + +#include +#include + +#include "slp-mask-1.c" + +#define SZ 8 + +__attribute__ ((optimize ("1"))) +int main () +{ + int *a = malloc (SZ * sizeof (*a)); + short *b = malloc (SZ * sizeof (*b)); + int *res = malloc (SZ * sizeof (*res)); + int *ref = malloc (SZ * sizeof (*ref)); + + for (int i = 0; i < SZ; i++) + { + a[i] = i & 1; + b[i] = 2; + ref[i] = a[i] == 1 & b[i] == 2; + } + + f (a, b, res); + + for (int i = 0; i < SZ; i++) + if (res[i] != ref[i]) + __builtin_abort (); +} diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index cd7c1090d88..e612da6c492 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -6084,14 +6084,16 @@ vectorizable_assignment (vec_info *vinfo, /* But a conversion that does not change the bit-pattern is ok. */ && !(INTEGRAL_TYPE_P (TREE_TYPE (scalar_dest)) && INTEGRAL_TYPE_P (TREE_TYPE (op)) - && (TYPE_PRECISION (TREE_TYPE (scalar_dest)) + && (((TYPE_PRECISION (TREE_TYPE (scalar_dest)) > TYPE_PRECISION (TREE_TYPE (op))) - && TYPE_UNSIGNED (TREE_TYPE (op)))) + && TYPE_UNSIGNED (TREE_TYPE (op))) + || (TYPE_PRECISION (TREE_TYPE (scalar_dest)) + == TYPE_PRECISION (TREE_TYPE (op)))))) { if (dump_enabled_p ()) - dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, - "type conversion to/from bit-precision " - "unsupported.\n"); + dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, + "type conversion to/from bit-precision " + "unsupported.\n"); return false; }