From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-yw1-x112e.google.com (mail-yw1-x112e.google.com [IPv6:2607:f8b0:4864:20::112e]) by sourceware.org (Postfix) with ESMTPS id EC6193858D3C for ; Wed, 19 Oct 2022 05:58:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org EC6193858D3C 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-yw1-x112e.google.com with SMTP id 00721157ae682-358bf076f1fso157978817b3.9 for ; Tue, 18 Oct 2022 22:58:52 -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=v3igUpNBVMYzykwv+JuFjEhwm02vfov+AESj7oV+0Ag=; b=W1Fq5KkcTuWCQ+fLBJr92lubmUWj7FyzJSzmIjhB81U92GEOxQY0oIROwOqRB2bziD I+kMTbiyD5ASkmBr2AGKwYeV1Ly9ORKUDVQUinK+6hEhchJrjP9/uTUcO3UEsb6A9Bu4 CfBJkUJhi7C+8rye6ufPcthXrs+IeXHeeI2P051H3DnQD2S5NcfkppW9ayy7QV/Usbhh zfwZ3vlNDgF/SyUruPP/43tjCWHo6VGMvLt28sU3Ix09kNJ2m+PjhJEc7Bi0Dp3LW4qf wYvZQf/ep+yF1ig7lN0o1cGvetS8njvBSutAQLswnoES3FgCcx9dg8CrLaojrBIXZa48 hi2Q== 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=v3igUpNBVMYzykwv+JuFjEhwm02vfov+AESj7oV+0Ag=; b=CS/hOSEHPKVijfiXAqKag9L24cWqalQIcCSjyVpUWIgyx24GPGZqmAwtmqi60JzFY9 BmHqZUvHzOd1jHghK6JjZWSucCp9OPW4+9SXCkdrwayTJUbHXTVQvm/bfvDTz1ItB3/7 e7T777ZdUlsVBYYr59n7+Jmk0mZt6l8JWPB4fwqbHAzDoO8X7qnB+rfjfSyWw3OFlgZX V7P34dDBed+ohMOJ3h09QgROgQ+7LF1i1lXBYsOFnVOlM033YsFyad+89jc38ti6qjbi Tymq2BUIt4pUU6dAP/B62MLHVAm8/edZ4I/LbmnuBA522wKI5Vp6a0gH4VZ4ccjLbKDi 2kcA== X-Gm-Message-State: ACrzQf2NP8FMI/axxVn6+XLNG4FwKWjrJ87pW02Vreg2uXK4YZ7b8JWW IHkh+S87LOFGzqr1WRDirjdQ2ZGYJhg2j3ew+qs= X-Google-Smtp-Source: AMsMyM6CyawCKNdUV+VrTrPClYXPghmRBKVJPUHIicczuESekRB0x5ghSvPpaiHQMd7zpk4GAx0n1ksoqFH5RU/7ZEk= X-Received: by 2002:a81:1489:0:b0:360:ff02:b994 with SMTP id 131-20020a811489000000b00360ff02b994mr5441778ywu.480.1666159132260; Tue, 18 Oct 2022 22:58:52 -0700 (PDT) MIME-Version: 1.0 References: <20221018232301.264776-1-hongtao.liu@intel.com> In-Reply-To: <20221018232301.264776-1-hongtao.liu@intel.com> From: Uros Bizjak Date: Wed, 19 Oct 2022 07:58:41 +0200 Message-ID: Subject: Re: [PATCH] Canonicalize vec_perm index to make the first index come from the first vector. To: liuhongt Cc: gcc-patches@gcc.gnu.org, crazylht@gmail.com, hjl.tools@gmail.com Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-7.4 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, Oct 19, 2022 at 1:25 AM liuhongt wrote: > > Fix unexpected non-canon form from gimple vector selector. > > Bootstrapped and regtested on x86_64-pc-linux-gnu{-m32,}. > Ok for trunk? > > gcc/ChangeLog: > > PR target/107271 > * config/i386/i386-expand.cc (ix86_vec_perm_index_canon): New. > (expand_vec_perm_shufps_shufps): Call > ix86_vec_perm_index_canon > > gcc/testsuite/ChangeLog: > > * gcc.target/i386/pr107271.c: New test. OK. Thanks, Uros. > --- > gcc/config/i386/i386-expand.cc | 17 +++++++++++++++++ > gcc/testsuite/gcc.target/i386/pr107271.c | 16 ++++++++++++++++ > 2 files changed, 33 insertions(+) > create mode 100644 gcc/testsuite/gcc.target/i386/pr107271.c > > diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc > index 6baff6d0e61..4f121516091 100644 > --- a/gcc/config/i386/i386-expand.cc > +++ b/gcc/config/i386/i386-expand.cc > @@ -19604,6 +19604,22 @@ expand_vec_perm_1 (struct expand_vec_perm_d *d) > return false; > } > > +/* Canonicalize vec_perm index to make the first index > + always comes from the first index. */ > +static void > +ix86_vec_perm_index_canon (struct expand_vec_perm_d *d) > +{ > + unsigned nelt = d->nelt; > + if (d->perm[0] < nelt) > + return; > + > + for (unsigned i = 0; i != nelt; i++) > + d->perm[i] = (d->perm[i] + nelt) % (2 * nelt); > + > + std::swap (d->op0, d->op1); > + return; > +} > + > /* A subroutine of ix86_expand_vec_perm_const_1. Try to implement D > in terms of a pair of shufps+ shufps/pshufd instructions. */ > static bool > @@ -19621,6 +19637,7 @@ expand_vec_perm_shufps_shufps (struct expand_vec_perm_d *d) > if (d->testing_p) > return true; > > + ix86_vec_perm_index_canon (d); > for (i = 0; i < 4; ++i) > count += d->perm[i] > 3 ? 1 : 0; > > diff --git a/gcc/testsuite/gcc.target/i386/pr107271.c b/gcc/testsuite/gcc.target/i386/pr107271.c > new file mode 100644 > index 00000000000..fe89c9a5bef > --- /dev/null > +++ b/gcc/testsuite/gcc.target/i386/pr107271.c > @@ -0,0 +1,16 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O0" } */ > + > +typedef int __attribute__((__vector_size__ (16))) V; > + > +static inline __attribute__((__always_inline__)) V > +bar (V v128u32_0) > +{ > + return __builtin_shuffle ((V){}, v128u32_0, v128u32_0); > +} > + > +V > +foo (void) > +{ > + return bar ((V){7, 4, 4}); > +} > -- > 2.27.0 >