From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk1-x729.google.com (mail-qk1-x729.google.com [IPv6:2607:f8b0:4864:20::729]) by sourceware.org (Postfix) with ESMTPS id A4936385841B for ; Thu, 16 Sep 2021 06:27:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A4936385841B Received: by mail-qk1-x729.google.com with SMTP id 73so1227125qki.4 for ; Wed, 15 Sep 2021 23:27:50 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=OvWEnoYmwraGF9Q4jS33Qm+y5PKO1jc6j6Atfll5C08=; b=yV4ddfwDUgEIG68qdtRshl6yWrQXtxzwFXF9P17nxFiSvOVcRSVxz93st5LVIrM1Xf EOcrA2t6M/jQJhV9t8JIkoP+Uk+vgJtCad/eMyFOiRwdF8YDh/1KiuCGhvFcFeUunLUL nx4z0ufhyxyvjrbadnu8LsriR0PmjEb2SgKwcuBAoMmLN6Vt+522+D28dnGqqCEbpm+L yRAMhGok4/nF4s1/2BUPWbEHeOaPFDhjF7daf7nCmwL/HL92Qw5IQG4NHIWxFQqn540n PhFm0uLp5VPXmKFSVexGVpDj7Fxt8AeQ65///HGKd+40bfGV9qPGxOJX1psWl7EnN542 HXrA== X-Gm-Message-State: AOAM532bxR3sfK9728dITGvTag5M1uLhKM3coQaHZ/JMNlkHPDHmgwCV UVH/+oQ5Q3eEwydnXE74KmgKHvFrnZC0Kvz/6Xw= X-Google-Smtp-Source: ABdhPJx0AibKVDbS88csGRXlNIH4PCkvLPKTxTJAQ0rAoVk8v4BLtnZQM9/m/0lv5V4T1T1rsn0QLZyI7avBwepHhTQ= X-Received: by 2002:a05:620a:12e4:: with SMTP id f4mr3466400qkl.373.1631773669931; Wed, 15 Sep 2021 23:27:49 -0700 (PDT) MIME-Version: 1.0 References: <20210915080951.10362-1-lili.cui@intel.com> <20210915080951.10362-4-lili.cui@intel.com> In-Reply-To: <20210915080951.10362-4-lili.cui@intel.com> From: Uros Bizjak Date: Thu, 16 Sep 2021 08:27:38 +0200 Message-ID: Subject: Re: [PATCH 3/4] [PATCH 3/4] x86: Properly handle USE_VECTOR_FP_CONVERTS/USE_VECTOR_CONVERTS To: Lili Cui Cc: "gcc-patches@gcc.gnu.org" , Hongtao Liu , "H. J. Lu" Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-9.3 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.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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-List-Received-Date: Thu, 16 Sep 2021 06:27:52 -0000 On Wed, Sep 15, 2021 at 10:10 AM wrote: > > From: "H.J. Lu" > > Check TARGET_USE_VECTOR_FP_CONVERTS or TARGET_USE_VECTOR_CONVERTS when > handling avx_partial_xmm_update attribute. Don't convert AVX partial > XMM register update if vector packed SSE conversion should be used. > > gcc/ > > PR target/101900 > * config/i386/i386-features.c (remove_partial_avx_dependency): > Check TARGET_USE_VECTOR_FP_CONVERTS and TARGET_USE_VECTOR_CONVERTS > before generating vxorps. > > gcc/ > > PR target/101900 > * testsuite/gcc.target/i386/pr101900-1.c: New test. > * testsuite/gcc.target/i386/pr101900-2.c: Likewise. > * testsuite/gcc.target/i386/pr101900-3.c: Likewise. > --- > gcc/config/i386/i386-features.c | 21 ++++++++++++++++++--- > gcc/testsuite/gcc.target/i386/pr101900-1.c | 18 ++++++++++++++++++ > gcc/testsuite/gcc.target/i386/pr101900-2.c | 18 ++++++++++++++++++ > gcc/testsuite/gcc.target/i386/pr101900-3.c | 19 +++++++++++++++++++ > 4 files changed, 73 insertions(+), 3 deletions(-) > create mode 100644 gcc/testsuite/gcc.target/i386/pr101900-1.c > create mode 100644 gcc/testsuite/gcc.target/i386/pr101900-2.c > create mode 100644 gcc/testsuite/gcc.target/i386/pr101900-3.c > > diff --git a/gcc/config/i386/i386-features.c b/gcc/config/i386/i386-features.c > index 5a99ea7c046..ae5ea02a002 100644 > --- a/gcc/config/i386/i386-features.c > +++ b/gcc/config/i386/i386-features.c > @@ -2210,15 +2210,30 @@ remove_partial_avx_dependency (void) > != AVX_PARTIAL_XMM_UPDATE_TRUE) > continue; > > - if (!v4sf_const0) > - v4sf_const0 = gen_reg_rtx (V4SFmode); > - > /* Convert PARTIAL_XMM_UPDATE_TRUE insns, DF -> SF, SF -> DF, > SI -> SF, SI -> DF, DI -> SF, DI -> DF, to vec_dup and > vec_merge with subreg. */ > rtx src = SET_SRC (set); > rtx dest = SET_DEST (set); > machine_mode dest_mode = GET_MODE (dest); > + machine_mode src_mode; > + > + if (TARGET_USE_VECTOR_FP_CONVERTS) > + { > + src_mode = GET_MODE (XEXP (src, 0)); > + if (src_mode == E_SFmode || src_mode == E_DFmode) > + continue; > + } > + > + if (TARGET_USE_VECTOR_CONVERTS) > + { > + src_mode = GET_MODE (XEXP (src, 0)); > + if (src_mode == E_SImode || src_mode == E_DImode) > + continue; > + } > + > + if (!v4sf_const0) > + v4sf_const0 = gen_reg_rtx (V4SFmode); Please better move initialization of src_mode to the top of the new hunk, like: machine_mode src_mode = GET_MODE (XEXP (src, 0)); switch (src_mode) { case E_SFmode: case E_DFmode: if (TARGET_USE_VECTOR_FP_CONVERTS) continue; break; case E_SImode: case E_DImode: if (TARGET_USE_VECTOR_CONVERTS) continue; break; default: break; } or something like the above. Uros. > > rtx zero; > machine_mode dest_vecmode; > diff --git a/gcc/testsuite/gcc.target/i386/pr101900-1.c b/gcc/testsuite/gcc.target/i386/pr101900-1.c > new file mode 100644 > index 00000000000..0a45f8e340a > --- /dev/null > +++ b/gcc/testsuite/gcc.target/i386/pr101900-1.c > @@ -0,0 +1,18 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O2 -march=skylake -mfpmath=sse -mtune-ctrl=use_vector_fp_converts" } */ > + > +extern float f; > +extern double d; > +extern int i; > + > +void > +foo (void) > +{ > + d = f; > + f = i; > +} > + > +/* { dg-final { scan-assembler "vcvtps2pd" } } */ > +/* { dg-final { scan-assembler "vcvtsi2ssl" } } */ > +/* { dg-final { scan-assembler-not "vcvtss2sd" } } */ > +/* { dg-final { scan-assembler-times "vxorps\[^\n\r\]*xmm\[0-9\]" 1 } } */ > diff --git a/gcc/testsuite/gcc.target/i386/pr101900-2.c b/gcc/testsuite/gcc.target/i386/pr101900-2.c > new file mode 100644 > index 00000000000..c8b2d1da5ae > --- /dev/null > +++ b/gcc/testsuite/gcc.target/i386/pr101900-2.c > @@ -0,0 +1,18 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O2 -march=skylake -mfpmath=sse -mtune-ctrl=use_vector_converts" } */ > + > +extern float f; > +extern double d; > +extern int i; > + > +void > +foo (void) > +{ > + d = f; > + f = i; > +} > + > +/* { dg-final { scan-assembler "vcvtss2sd" } } */ > +/* { dg-final { scan-assembler "vcvtdq2ps" } } */ > +/* { dg-final { scan-assembler-not "vcvtsi2ssl" } } */ > +/* { dg-final { scan-assembler-times "vxorps\[^\n\r\]*xmm\[0-9\]" 1 } } */ > diff --git a/gcc/testsuite/gcc.target/i386/pr101900-3.c b/gcc/testsuite/gcc.target/i386/pr101900-3.c > new file mode 100644 > index 00000000000..6ee565b5bd4 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/i386/pr101900-3.c > @@ -0,0 +1,19 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O2 -march=skylake -mfpmath=sse -mtune-ctrl=use_vector_fp_converts,use_vector_converts" } */ > + > +extern float f; > +extern double d; > +extern int i; > + > +void > +foo (void) > +{ > + d = f; > + f = i; > +} > + > +/* { dg-final { scan-assembler "vcvtps2pd" } } */ > +/* { dg-final { scan-assembler "vcvtdq2ps" } } */ > +/* { dg-final { scan-assembler-not "vcvtss2sd" } } */ > +/* { dg-final { scan-assembler-not "vcvtsi2ssl" } } */ > +/* { dg-final { scan-assembler-not "vxorps" } } */ > -- > 2.17.1 >