From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x529.google.com (mail-ed1-x529.google.com [IPv6:2a00:1450:4864:20::529]) by sourceware.org (Postfix) with ESMTPS id 61DD43857407 for ; Thu, 13 Oct 2022 10:41:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 61DD43857407 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ed1-x529.google.com with SMTP id r14so2006463edc.7 for ; Thu, 13 Oct 2022 03:41:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=dre5EmSP6UmsAs9XJamzwTf39PtwlNVo3REvlqgvubk=; b=KrEVX26XnkCli7oS+EV1fgrWDT34X+0m1qoDeiwxjUdxzSzkaheGsd+2GKntB/iWcc 17uHAVXKEUsZ2B/CcBrZ4qqTmFGpowGpZ1bCjOXjajuSJ4SdQ46E+06IIZai20P7BDR6 fG7Bg2dfDObkfWcf5U2xdxiv8DUf0/pD4XXivEcgCJG6m5Z6uxrnVdJFeaRMo1X4YexP CIHHESq8lTAxi8ewmJIgXzJDFXj5QVWgJIawMfiNNdJ0dCA17+Ad6IY4PGxwaL+AYYwp QdnATGHr1B2KVMk8QUWK+IKkXn7kqys/RrQzayaxLe4oOGe6Zm2R77u5mvIIrn+12+a/ gmRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=dre5EmSP6UmsAs9XJamzwTf39PtwlNVo3REvlqgvubk=; b=4Xg2pt7rpfycDc6wBUo+S+9XM4tfsBwFyHO6PdMXvJYuxN8ZQ0uzlln3A7YEXZFsjA 2dNZ4dLJn/0IsaRxDvcUBoU/JPRzVtRrJ5U0PGGcbommuZqRjwQIlulr9Us0kkE8Ogpu 5NB5S3b2SdW/kK1uGU0nn7+Cg4YbCeJ6MdYvFu284wxli6xhAWIIR083DtgdkCkBZ/zN JEiLSudOyFMg3Fc6TXlysYO/e8AEcKqTtgnnEZkLvz+FWTV/epzTWSIGSpvPnF4rxwBj gtxBOgvv9skbKcSv4EP+K7tn5k0YJ+9i1QKlYnlMHHdOI76UFSwDrD4pX5SgrYvVSqjh 23MQ== X-Gm-Message-State: ACrzQf0NZ5GuYcv0mlcNDHMvL6lUUaHLUiGTGSqIPln6rggy/vsP5sSB pRhC8pQ9r2lKXEUOMu/0lCZChJat/QX7cdwanA0= X-Google-Smtp-Source: AMsMyM7FQKh5RDzwe0M/neFvHlpvTodUbgjzl4W4E9AfuTa6Wz4PJqrdYoiin7XNTpmoVmd2F2LWAqW3EcnYMjODr30= X-Received: by 2002:a05:6402:50cf:b0:45c:dfce:66ae with SMTP id h15-20020a05640250cf00b0045cdfce66aemr2623781edb.370.1665657707132; Thu, 13 Oct 2022 03:41:47 -0700 (PDT) MIME-Version: 1.0 References: <20221013031518.66289-1-liwei.xu@intel.com> In-Reply-To: <20221013031518.66289-1-liwei.xu@intel.com> From: Richard Biener Date: Thu, 13 Oct 2022 12:41:34 +0200 Message-ID: Subject: Re: [PATCH] Optimize identical permutation in my last r13-3212-gb88adba751da63 To: Liwei Xu Cc: gcc-patches@gcc.gnu.org, wilson@tuliptree.org, admin@levyhsu.com, hongtao.liu@intel.com Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-7.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_NUMSUBJECT,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: On Thu, Oct 13, 2022 at 5:15 AM Liwei Xu wrote: > > Add extra index check when merging VEC_CST, this handles the case when exactly op1 needs to be return. > > This fixes: > FAIL: gcc.dg/tree-ssa/forwprop-19.c scan-tree-dump-not forwprop1 "VEC_PERM_EXPR" > > gcc/ChangeLog: > > PR target/107220 > * match.pd: Check the index of VEC_CST and return the op1 if needed. > --- > gcc/match.pd | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/gcc/match.pd b/gcc/match.pd > index 3550c16aaa6..1efdc3abb5d 100644 > --- a/gcc/match.pd > +++ b/gcc/match.pd > @@ -8106,6 +8106,7 @@ and, > vec_perm_builder builder0; > vec_perm_builder builder1; > vec_perm_builder builder2 (nelts, nelts, 1); > + bool ident_to_1 = true; > > if (!tree_to_vec_perm_builder (&builder0, @3) > || !tree_to_vec_perm_builder (&builder1, @4)) > @@ -8115,7 +8116,15 @@ and, > vec_perm_indices sel1 (builder1, 1, nelts); > > for (int i = 0; i < nelts; i++) > - builder2.quick_push (sel0[sel1[i].to_constant ()]); > + { > + int tmp_index = sel0[sel1[i].to_constant ()].to_constant (); > + builder2.quick_push (sel0[sel1[i].to_constant ()]); > + if ( i != tmp_index) > + ident_to_1 = false; > + } > + > + if (ident_to_1) > + return @1; You can't "return" in match.pd code. I think the code was fine and the testcase can be adjusted to scan the subsequent DSE or DCE pass instead. The "correct" match.pd approach would be to do the if (ident_to_1) check here: @@ -8124,7 +8124,9 @@ and, op0 = vec_perm_indices_to_tree (TREE_TYPE (@4), sel2); } - (vec_perm @1 @2 { op0; }))) + (if (ident_to_1) + @1 + (vec_perm @1 @2 { op0; })))) I'll see to reject 'return' in c-exprs ;) Richard. > > vec_perm_indices sel2 (builder2, 2, nelts); > > -- > 2.18.2 >