From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from eggs.gnu.org (eggs.gnu.org [IPv6:2001:470:142:3::10]) by sourceware.org (Postfix) with ESMTPS id 26A5F385AE75 for ; Fri, 17 Nov 2023 13:26:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 26A5F385AE75 Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 26A5F385AE75 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2001:470:142:3::10 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700227589; cv=none; b=ea6HkObHS/OxK4Bqn88QcuqbtUV9eJdcwbTDRtxwYpF6ZRWo5p5fX+CvqcVCktyD5sKxego6xO2dJS9UkZQZlVrpHDqnRQbvhnDocKJ4UKXw8R8beVSPcVrQzMNuAUfgXQJ/vnyMusY/0o03EQ6YIkZP0faYjNF+yGjq/Xy6mCI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700227589; c=relaxed/simple; bh=ml9b5uZRYptO5gaau6Lm0a1oaLMtXqRPBinKgKJ13Vk=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=EqqVwI7uD1nRQA58qogSEMm7Gz6DYceMWItpq9LtwbZOUWF8gjAiHVRxfaq2r3/7nTvFYLLzvVRU/X6oklT09HCTTS3U6nhxe8qVdDsTgiL6HdGQG4asuBOY0vtHN3tt2DC/RCaQvfpB1eTs+9wqoitEHamGDGHjS0xBjxixaVs= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from mail-ej1-x636.google.com ([2a00:1450:4864:20::636]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1r3yXt-000344-Fd for gcc-patches@gcc.gnu.org; Fri, 17 Nov 2023 08:06:07 -0500 Received: by mail-ej1-x636.google.com with SMTP id a640c23a62f3a-9dd6dc9c00cso280625566b.3 for ; Fri, 17 Nov 2023 05:06:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1700226242; x=1700831042; darn=gcc.gnu.org; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:cc:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=vO8OkDdA3qPTCiYmYi5z5XU9Uhq3yxdmgk6b3tbi03U=; b=RHTCqi7SYyrVScXR79T8Xq59+ZyddlkgX098sk2y39r5h4XztuTc1qb1pmqKijzDv/ KqVSHyNQ/ANZeDiX7lmPPDSBkUkkLLWYaDod9X95BGeBZLh3ycOEb7jYrm2xgmgMGRxp qZfHYBoohqncE5mcXYCkyS8yKFqfGFMv/869iUHN3sNlrxYZzk0sC2a0wY6Njfc/8AGC Jea+l5J1nh3q7EdDWRCEo+nVj+9ib5qqVEpp7VBQ13fjP7jeqoNdh0wOPCv08MnS+YXz 8zywTXmRZFi2iYVMZ1++i2w7pMcl5L2SB19+R0eUeNmuuCNzgu63b7Q3PnQ1scGcFwOF ZvUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700226242; x=1700831042; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:cc:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=vO8OkDdA3qPTCiYmYi5z5XU9Uhq3yxdmgk6b3tbi03U=; b=h+Yi3iQG7/DZZa3MAgAhsctBP3EYA3xQ+g3uBg64HM5yUo5emt/c2wO2aEyF73EfZa TgTrhuh53PlEkrYUfq0FxHsWUvO4r140v711aLRfkgqtPsPt9PBPGeDPDD5wPu+EJxYE mjc5/31ncqKsqzRIpUJz6xo5JA6EEwll9WcMKyrcfl5GtReQutlOgV8MM8GK15q1aA4X iksO0Ymy3midvvzL8Xp72IQ1WoUO9otUF7QhPoz+FTWOWVgwpGg5B83by/yhqlN71L0B agBZD7FgW8bI4BpZgHDYOABSlIX5TdDEVEx8Ih6/XgK5CMnNYl+ZYngo7PmC7weepNXM 5zgw== X-Gm-Message-State: AOJu0Yx2Ic0VC7Y8MJuoS9gL1rKWBi5nxBRsilg940I7k4tsfMzSBQEI e9g2qcVzn5Vw4MjrrpWC1Vc= X-Google-Smtp-Source: AGHT+IESNCXka3AwNvUQDfnj48dNljKGjKpk4G0rYBrl86PLggQ70XCTG0Pi8DcD3w/YwHBF0sQEwg== X-Received: by 2002:a17:906:a28d:b0:9f5:9c7c:cbbc with SMTP id i13-20020a170906a28d00b009f59c7ccbbcmr3178200ejz.32.1700226242363; Fri, 17 Nov 2023 05:04:02 -0800 (PST) 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 j22-20020a170906475600b009e68d789f98sm761687ejs.153.2023.11.17.05.04.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 17 Nov 2023 05:04:01 -0800 (PST) Message-ID: <5208e31f-f721-4df9-81b9-508a2e76accd@gmail.com> Date: Fri, 17 Nov 2023 14:04:01 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Cc: rdapp.gcc@gmail.com, Richard Sandiford , gcc-patches , Tamar Christina Subject: Re: [PATCH] vect: Use statement vectype for conditional mask. Content-Language: en-US To: Richard Biener References: <0424a09b-6867-4be9-8207-9d92a6187191@gmail.com> From: Robin Dapp In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Received-SPF: pass client-ip=2a00:1450:4864:20::636; envelope-from=rdapp.gcc@gmail.com; helo=mail-ej1-x636.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9,DKIM_SIGNED=0.1,DKIM_VALID=-0.1,DKIM_VALID_AU=-0.1,DKIM_VALID_EF=-0.1,FREEMAIL_FROM=0.001,RCVD_IN_DNSWL_NONE=-0.0001,SPF_HELO_NONE=0.001,SPF_PASS=-0.001,T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Status: No, score=-9.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_SHORT,SPF_HELO_PASS,SPF_SOFTFAIL,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 List-Id: > Yes, your version is also OK. The attached was bootstrapped and regtested on aarch64, x86 and regtested on riscv. Going to commit it later unless somebody objects. Regards Robin Subject: [PATCH] vect: Pass truth type to vect_get_vec_defs. For conditional operations the mask is loop invariant and cannot be stored explicitly. By default, for reductions, we deduce the vectype from the statement or the loop but this does not work for conditional operations. Therefore this patch passes the truth type of the reduction input vectype for the mask operand instead. This will override the other choices and make sure we have the proper mask vectype. gcc/ChangeLog: * tree-vect-loop.cc (vect_transform_reduction): Pass truth vectype for mask operand. --- gcc/testsuite/gcc.target/aarch64/pr112406.c | 37 +++++++++++++++++++ .../gcc.target/riscv/rvv/autovec/pr112552.c | 16 ++++++++ gcc/tree-vect-loop.cc | 31 +++++++++++----- 3 files changed, 75 insertions(+), 9 deletions(-) create mode 100644 gcc/testsuite/gcc.target/aarch64/pr112406.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112552.c diff --git a/gcc/testsuite/gcc.target/aarch64/pr112406.c b/gcc/testsuite/gcc.target/aarch64/pr112406.c new file mode 100644 index 00000000000..46459c68c4a --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/pr112406.c @@ -0,0 +1,37 @@ +/* { dg-do compile { target { aarch64*-*-* } } } */ +/* { dg-options "-march=armv8-a+sve -w -Ofast" } */ + +typedef struct { + int red +} MagickPixelPacket; + +GetImageChannelMoments_image, GetImageChannelMoments_image_0, + GetImageChannelMoments___trans_tmp_1, GetImageChannelMoments_M11_0, + GetImageChannelMoments_pixel_3, GetImageChannelMoments_y, + GetImageChannelMoments_p; + +double GetImageChannelMoments_M00_0, GetImageChannelMoments_M00_1, + GetImageChannelMoments_M01_1; + +MagickPixelPacket GetImageChannelMoments_pixel; + +SetMagickPixelPacket(int color, MagickPixelPacket *pixel) { + pixel->red = color; +} + +GetImageChannelMoments() { + for (; GetImageChannelMoments_y; GetImageChannelMoments_y++) { + SetMagickPixelPacket(GetImageChannelMoments_p, + &GetImageChannelMoments_pixel); + GetImageChannelMoments_M00_1 += GetImageChannelMoments_pixel.red; + if (GetImageChannelMoments_image) + GetImageChannelMoments_M00_1++; + GetImageChannelMoments_M01_1 += + GetImageChannelMoments_y * GetImageChannelMoments_pixel_3; + if (GetImageChannelMoments_image_0) + GetImageChannelMoments_M00_0++; + GetImageChannelMoments_M01_1 += + GetImageChannelMoments_y * GetImageChannelMoments_p++; + } + GetImageChannelMoments___trans_tmp_1 = atan(GetImageChannelMoments_M11_0); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112552.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112552.c new file mode 100644 index 00000000000..32d221ccede --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112552.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -march=rv64gcv -mabi=lp64d --param=riscv-autovec-preference=fixed-vlmax -w" } */ + +int a, c, d; +void (*b)(); +void (*e)(); +void g(); + +void h() { + for (; a; --a) { + char *f = h; + e = b || g > 1 ? g : b; + d |= !e; + *f ^= c; + } +} diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index fb8d999ee6b..e67ba6ac0b5 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -8470,15 +8470,28 @@ vect_transform_reduction (loop_vec_info loop_vinfo, /* Get NCOPIES vector definitions for all operands except the reduction definition. */ - vect_get_vec_defs (loop_vinfo, stmt_info, slp_node, ncopies, - single_defuse_cycle && reduc_index == 0 - ? NULL_TREE : op.ops[0], &vec_oprnds0, - single_defuse_cycle && reduc_index == 1 - ? NULL_TREE : op.ops[1], &vec_oprnds1, - op.num_ops == 4 - || (op.num_ops == 3 - && !(single_defuse_cycle && reduc_index == 2)) - ? op.ops[2] : NULL_TREE, &vec_oprnds2); + if (!cond_fn_p) + { + vect_get_vec_defs (loop_vinfo, stmt_info, slp_node, ncopies, + single_defuse_cycle && reduc_index == 0 + ? NULL_TREE : op.ops[0], &vec_oprnds0, + single_defuse_cycle && reduc_index == 1 + ? NULL_TREE : op.ops[1], &vec_oprnds1, + op.num_ops == 3 + && !(single_defuse_cycle && reduc_index == 2) + ? op.ops[2] : NULL_TREE, &vec_oprnds2); + } + else + { + /* For a conditional operation pass the truth type as mask + vectype. */ + gcc_assert (single_defuse_cycle && reduc_index == 1); + vect_get_vec_defs (loop_vinfo, stmt_info, slp_node, ncopies, + op.ops[0], &vec_oprnds0, + truth_type_for (vectype_in), + NULL_TREE, &vec_oprnds1, NULL_TREE, + op.ops[2], &vec_oprnds2, NULL_TREE); + } /* For single def-use cycles get one copy of the vectorized reduction definition. */ -- 2.41.0