From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-yb1-xb2d.google.com (mail-yb1-xb2d.google.com [IPv6:2607:f8b0:4864:20::b2d]) by sourceware.org (Postfix) with ESMTPS id D0AAE385841A for ; Wed, 21 Sep 2022 07:42:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D0AAE385841A 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-yb1-xb2d.google.com with SMTP id b136so6860997yba.2 for ; Wed, 21 Sep 2022 00:42:47 -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; bh=1EwgaYKDCUS4NsFG1O9n/prAfgoaQVjIp58XFFMeMUw=; b=YrmiwXGOjz03a9lQF0NPVDPCPf/EIMAIs+Hyp8ev7mPnnP9M/ND3TN5y29TOeVn0lD fo1kiu/ysNDuCSmUttSq+fBVC2WHZ9+1m/vh50/X0G8eYG+6jdfZD3kOm+hvfTuLTlJv VSAvqP9X1fhidBko0V9nEjcZk3B69FI+eYL80BsM42RAJDKH5VNBG/2wdIGzY9hH14Un l+R1sWwT2qiaDQJQeB3E/L8Hmqn3rkIhpTeckbTecoBNz66NdnBBuf5gEc3lLP+owQ7F TpSZkJ6RCHLG+YB0/cK3Xo+zob4zvj9kY1+IB9hd5kMwOBcDtyMU9IBqtz8i4X3oTrX8 0Ztg== 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; bh=1EwgaYKDCUS4NsFG1O9n/prAfgoaQVjIp58XFFMeMUw=; b=uaL9ejXHWOHKJdXSTWPg7z/rxhqJbcp5tH/flFeZmFTy8r+k773ANrUeNEss/1cQsG pzqLxqrgzCnmFbonZk35h3CoPpXk1iMjE5f7I/+4bCVIu3VSujUi6JYiLV0l8BhTryFD vxSes5uMOh5D/WWcaG+c0GLRSJUu8k3IrHBQcCoRbmnglKqNOoKzPhfX2kGBIm5KAbsr IvWnd6uvgZqICgn9RPH7y4m3+fcREnxdeP76I5LamSP4ZOpGuhSue7EaoknsZHoR9W0U Le+O14TRD/ZDe4tDouonYdhYgdtlDZMKV2AqKB5qRNQzJILnfoi3bG2dh//nkEuSrY8S 6Eow== X-Gm-Message-State: ACrzQf3eXSfDfvvfdZ0WRzmV7RjM25Ls4vdrndvasHbwF9Q4IIH8gjUa T0A+TFfVWFhzfHgmGJ24VeKcB2rlsAV8dTV+++Y= X-Google-Smtp-Source: AMsMyM64uIIW73AhG2DV1q63Dex5grhkMdqRoK2STxN/HQztDD2KhEjs5sO0Rlw65BW9JTSNX5uhi/y6tMIPe2jHUb0= X-Received: by 2002:a25:d4cf:0:b0:6a9:3a2d:66c0 with SMTP id m198-20020a25d4cf000000b006a93a2d66c0mr22786765ybf.107.1663746167321; Wed, 21 Sep 2022 00:42:47 -0700 (PDT) MIME-Version: 1.0 References: <20220920233835.45071-1-hongtao.liu@intel.com> In-Reply-To: From: Hongtao Liu Date: Wed, 21 Sep 2022 15:45:26 +0800 Message-ID: Subject: Re: [PATCH] Don't check can_vec_perm_const_p for nonlinear iv_init when it's constant. To: Richard Biener Cc: liuhongt , GCC Patches 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_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: On Wed, Sep 21, 2022 at 3:41 PM Richard Biener via Gcc-patches wrote: > > On Wed, Sep 21, 2022 at 1:41 AM liuhongt via Gcc-patches > wrote: > > > > When init_expr is INTEGER_CST or REAL_CST, can_vec_perm_const_p is not > > necessary since there's no real vec_perm needed, but > > vec_gen_perm_mask_checked will gcc_assert (can_vec_perm_const_p). So > > it's better to use vec_gen_perm_mask_any in > > vect_create_nonlinear_iv_init. > > and the VEC_PERM build will fold the permute away? Yes, it's just a const vector. [ c, -c, c, c, .. ]. > > > Bootstrapped and regtested on x86_64-pc-linux-gnu{-m32,}. > > Ok for trunk? > > OK. > > Thanks, > Richard. > > > gcc/ChangeLog: > > > > PR tree-optimization/106963 > > * tree-vect-loop.cc (vect_create_nonlinear_iv_init): Use > > vec_gen_perm_mask_any instead of vec_gen_perm_mask_check. > > > > gcc/testsuite/ChangeLog: > > > > * gcc.target/i386/pr106963.c: New test. > > --- > > gcc/testsuite/gcc.target/i386/pr106963.c | 14 ++++++++++++++ > > gcc/tree-vect-loop.cc | 5 ++++- > > 2 files changed, 18 insertions(+), 1 deletion(-) > > create mode 100644 gcc/testsuite/gcc.target/i386/pr106963.c > > > > diff --git a/gcc/testsuite/gcc.target/i386/pr106963.c b/gcc/testsuite/gcc.target/i386/pr106963.c > > new file mode 100644 > > index 00000000000..9f2d20e2523 > > --- /dev/null > > +++ b/gcc/testsuite/gcc.target/i386/pr106963.c > > @@ -0,0 +1,14 @@ > > +/* { dg-do compile } */ > > +/* { dg-options "-O2 -mavx -mno-avx2" } */ > > + > > +void > > +foo_neg_const (int *a) > > +{ > > + int i, b = 1; > > + > > + for (i = 0; i < 1000; i++) > > + { > > + a[i] = b; > > + b = -b; > > + } > > +} > > diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc > > index 9c434b66c5b..aabdc6f2d81 100644 > > --- a/gcc/tree-vect-loop.cc > > +++ b/gcc/tree-vect-loop.cc > > @@ -8356,8 +8356,11 @@ vect_create_nonlinear_iv_init (gimple_seq* stmts, tree init_expr, > > sel[2 * i + 1] = i + nunits; > > } > > vec_perm_indices indices (sel, 2, nunits); > > + /* Don't use vect_gen_perm_mask_checked since can_vec_perm_const_p may > > + fail when vec_init is const vector. In that situation vec_perm is not > > + really needed. */ > > tree perm_mask_even > > - = vect_gen_perm_mask_checked (vectype, indices); > > + = vect_gen_perm_mask_any (vectype, indices); > > vec_init = gimple_build (stmts, VEC_PERM_EXPR, > > vectype, > > vec_init, vec_neg, > > -- > > 2.18.1 > > -- BR, Hongtao