From patchwork Wed Apr 5 08:38:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Prathamesh Kulkarni X-Patchwork-Id: 1765307 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=gla7xGNY; dkim-atps=neutral Received: from sourceware.org (ip-8-43-85-97.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Pryjl2Ywsz1yYn for ; Wed, 5 Apr 2023 18:39:37 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 194DD3858C20 for ; Wed, 5 Apr 2023 08:39:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 194DD3858C20 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1680683973; bh=zznImpIIULUfd5CfOxYIKOMqJtgv5THI7tP7ydG2gKw=; h=Date:Subject:To:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=gla7xGNYgFi6yMinWQv7ITqXnPRXlnRKz6Cf4frsaISgChI3ELVCFw3PLqJsSAr+5 bRYsJnKM66nhj45VwHNiJMbph8LTOn2y250dXk5628gcEk33QoNvEZAF418pk/1Al4 vrIMvJuclxiJs9qMIujgyup3ZA0NAa9S33Am0Ucc= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x335.google.com (mail-wm1-x335.google.com [IPv6:2a00:1450:4864:20::335]) by sourceware.org (Postfix) with ESMTPS id 9D9663858CDA for ; Wed, 5 Apr 2023 08:39:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9D9663858CDA Received: by mail-wm1-x335.google.com with SMTP id j18-20020a05600c1c1200b003ee5157346cso23235665wms.1 for ; Wed, 05 Apr 2023 01:39:04 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680683942; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=zznImpIIULUfd5CfOxYIKOMqJtgv5THI7tP7ydG2gKw=; b=OwhfgXHwZdm0hrUSK/tC/BTue9foqm10tkrPVbAAdgnIWe/SDVoJvKJVKS6D3SEPpj atZMrs5YCikMTZSagJIKChP08gkjZpRfm/uSIyIt0KkUTI9uMvbOf4aTVZeZEDKujcmN LS7KZbLmDGTLsWwz4a8FMZM/QIfV8FbSE5kfzVTAsre4dzxhywzWlrXFMTMqv7wps1k5 6zBLDDBQBYg+VYC1Gs6K2rKgj7RG2A1SvU9ki9adoFG2CGcH/Io4xd/l6uLRaI8OBmNM UkQ+aw8vSh2y3Nv6Hq27hnL0KivTnkVE7of+hBQaA2KeggXf17ht9AdJ2s3BU2+PP9RU xNUQ== X-Gm-Message-State: AAQBX9cRFOfwAlOHwtHep3iY8pUmXb4h3KwUsmsM/VhZ4LLsgw0AwKpE MVw6bcQ6DatwuitfBhuNb2vqkJnNHm8Sf/vnNFMQV5Gk0VFLcl8H X-Google-Smtp-Source: AKy350b2vhqJM8NCCW7mZVJVgs3LS4a/SuXN0ZaQud99quhvnuZbaSyAV2GhWgOH3OvH+VZIFyr3hIrMTVpStYgIgYA= X-Received: by 2002:a7b:c5d5:0:b0:3f0:4428:94eb with SMTP id n21-20020a7bc5d5000000b003f0442894ebmr523028wmk.4.1680683942579; Wed, 05 Apr 2023 01:39:02 -0700 (PDT) MIME-Version: 1.0 Date: Wed, 5 Apr 2023 14:08:26 +0530 Message-ID: Subject: [match.pd] [SVE] Add pattern to transform svrev(svrev(v)) --> v To: gcc Patches , Richard Sandiford X-Spam-Status: No, score=-9.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 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: Prathamesh Kulkarni via Gcc-patches From: Prathamesh Kulkarni Reply-To: Prathamesh Kulkarni Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" Hi, For the following test: svint32_t f(svint32_t v) { return svrev_s32 (svrev_s32 (v)); } We generate 2 rev instructions instead of nop: f: rev z0.s, z0.s rev z0.s, z0.s ret The attached patch tries to fix that by trying to recognize the following pattern in match.pd: v1 = VEC_PERM_EXPR (v0, v0, mask) v2 = VEC_PERM_EXPR (v1, v1, mask) --> v2 = v0 if mask is { nelts - 1, nelts - 2, nelts - 3, ... } Code-gen with patch: f: ret Bootstrap+test passes on aarch64-linux-gnu, and SVE bootstrap in progress. Does it look OK for stage-1 ? Thanks, Prathamesh gcc/ChangeLog: * match.pd: New pattern to simplify two successive VEC_PERM_EXPRs with single operand and same mask, where mask chooses elements in reverse order. gcc/testesuite/ChangeLog: * gcc.target/aarch64/sve/acle/general/rev-1.c: New test. diff --git a/gcc/match.pd b/gcc/match.pd index b8d3538b809..19dfc8f3722 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -8456,3 +8456,27 @@ and, } (if (full_perm_p) (vec_perm (op@3 @0 @1) @3 @2)))))) + +/* Transform: + v1 = VEC_PERM_EXPR (v0, v0, mask) + v2 = VEC_PERM_EXPR (v1, v1, mask) + --> + v2 = v0 + if mask is {nelts - 1, nelts - 2, ...} */ + +(simplify + (vec_perm (vec_perm@2 @0 @0 VECTOR_CST@1) @2 @1) + (with + { + vec_perm_builder builder; + bool rev_p = false; + if (tree_to_vec_perm_builder (&builder, @1)) + { + poly_uint64 nelts = TYPE_VECTOR_SUBPARTS (type); + vec_perm_indices sel (builder, 1, nelts); + if (sel.series_p (0, 1, nelts - 1, -1)) + rev_p = true; + } + } + (if (rev_p) + @0))) diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/rev-1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/rev-1.c new file mode 100644 index 00000000000..e57ee67d716 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/rev-1.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fdump-tree-optimized" } */ + +#include + +svint32_t f(svint32_t v) +{ + return svrev_s32 (svrev_s32 (v)); +} + +/* { dg-final { scan-tree-dump "return v_1\\(D\\)" "optimized" } } */ +/* { dg-final { scan-tree-dump-not "VEC_PERM_EXPR" "optimized" } } */