From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-yb1-xb34.google.com (mail-yb1-xb34.google.com [IPv6:2607:f8b0:4864:20::b34]) by sourceware.org (Postfix) with ESMTPS id 8A7EF3858D39 for ; Tue, 18 Oct 2022 23:51:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 8A7EF3858D39 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-xb34.google.com with SMTP id n197so647093yba.0 for ; Tue, 18 Oct 2022 16:51:25 -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=do7SDJ9cGvIsbF5fmbAJRqRq6stHdPGwMklQ6Y7DwBk=; b=GOZc2yogWotzQCjg9xN8rm6zSwiTugbj9kaEeLWmpdxRE2UoTDlPSm/a+j/4vORbj8 yG2oy9cs03MRnB8sy7PY34jr6BIHG1Y+LPdfWcvQfMN22tHtxdlGFqb3uZR3Vs2btRh3 sYFm/nIQvKcIlY1x5ud8KlEywWTE65N/YyeIfNi2YijgQEKVh6aoTUnMygir4tmMtDR7 BtDwIeZWAluvUHRrkNWX2S1L5zHBHRsDuoliFgL7oSBG/uUuMTyYGeKyHVilALyG6xH9 ZKsOvubXQEqbqFc8yrT79/DkUjg0QyNCDNYz8gCTLR8WM2GLE1YxSYaIeOrcjq+N7ZsV Ce5Q== 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=do7SDJ9cGvIsbF5fmbAJRqRq6stHdPGwMklQ6Y7DwBk=; b=EYtjtZjxPaj+dFf19TJGgkcQVU8J1910V+/RYTN3nAqZTULFjIpwNuFDcWjNVpr8eB J/I5umf6XKCv+CXCs0CdVVYG6LRWrNNdPjRDzxxHjWcswtX88mPTXAPNkwv6r3x2bS96 67F6b+tWbAE6BoIc6cK6OyrO7Lb5PKD+b1yH3DHZ2j70U9Qx8N9lwTpFYORdQofrkLjM oJTTp8i0LxJGqjTOtQck5EGCBgiIMI1TrYGuA3j4KcKjNbLgcXRpgMG8UulGR3kWeE4N 62ui14nVxakMQgKMOVDzLbwtIwj50As9g1kNpCHqYIR0k9IdBJ1QlQJVp4AKPsIuYcYJ Dz5g== X-Gm-Message-State: ACrzQf35qrUcr6Ooy1pyQRmGJPl36IVT/hXRFdweDvrtjLoOx7hfmaiH bu3VwAgje1ps3wYQIpP1CX9QZbf5xqHSujrCp/A= X-Google-Smtp-Source: AMsMyM5xvn9gHcyyIgOH2ebMsRwQPpznyu5moC0v1BFTAlMh7P5od9fwZ6vU+OsCad+2Kmtjj8cUVwYroE6SNNor7mY= X-Received: by 2002:a25:af49:0:b0:6af:fbf5:92d5 with SMTP id c9-20020a25af49000000b006affbf592d5mr4562104ybj.624.1666137084846; Tue, 18 Oct 2022 16:51:24 -0700 (PDT) MIME-Version: 1.0 References: <20221018232301.264776-1-hongtao.liu@intel.com> In-Reply-To: From: Hongtao Liu Date: Wed, 19 Oct 2022 07:51:13 +0800 Message-ID: Subject: Re: [PATCH] Canonicalize vec_perm index to make the first index come from the first vector. To: "H.J. Lu" Cc: liuhongt , gcc-patches@gcc.gnu.org, ubizjak@gmail.com Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-7.9 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 7:49 AM H.J. Lu wrote: > > On Tue, Oct 18, 2022 at 4:25 PM 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. > > --- > > 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. */ > vector? Yes. > > +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 > > > > > -- > H.J. -- BR, Hongtao