From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-vs1-xe33.google.com (mail-vs1-xe33.google.com [IPv6:2607:f8b0:4864:20::e33]) by sourceware.org (Postfix) with ESMTPS id 59B263858413 for ; Tue, 7 Sep 2021 01:10:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 59B263858413 Received: by mail-vs1-xe33.google.com with SMTP id s25so6897862vsa.9 for ; Mon, 06 Sep 2021 18:10:02 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=0PbsZAi4y834H0t6ujJqTgVOpXM5bBoN9Bj1i4/133U=; b=KYjMXZBYSd94eZle/oUYCeUdvQ386iCbi/aETMuPhhGsyZ7XYsgeGSwhtwvTSAOe7M oTBibeuEDATLruCGEjHbxYPH8zknUDFWq9XJtaS3VsnfdmNDUGu+J/rJrNKUgEqnn16x hkDs/qWTma94BKJxsDCxlQm3ougGNWnM+BxFxBGePFnxqbbPNY2+ddd/8/m6xKTTurUi bEDAMYlvAa2/9YtiokqVxyoUR183+QOUH9uBjcydUq5G2yyQXTCYHk4aCllBY6sSrTdD 2Avm8w60sFmZJyTaqohSgM2oi1c1zX4sP7FXJgJxx9UOdk/bbZBilaqOclhqi4eAJ+NA kUQA== X-Gm-Message-State: AOAM530gr3ufELTa+C3F3SyMeKs9uLkjy4v/uNmgbiOHt2uULP+NaduZ 9ij8u6J1hRow4sNYKRes3xOGwYkUYDJmpOgLvl8= X-Google-Smtp-Source: ABdhPJzJ1ebNdEuKtQmxe7yVEdBNx0V03nZDmzmtDT0sSKytLH7ZFU09D/aViNBOUyupHWyW82C8cANKgTIY2QdXMxA= X-Received: by 2002:a67:441:: with SMTP id 62mr8171710vse.54.1630977001914; Mon, 06 Sep 2021 18:10:01 -0700 (PDT) MIME-Version: 1.0 References: <20210904215538.166916-1-hjl.tools@gmail.com> In-Reply-To: From: Hongtao Liu Date: Tue, 7 Sep 2021 09:15:40 +0800 Message-ID: Subject: Re: [PATCH v2] x86: Enable FMA in unsigned SI to SF expanders To: "H.J. Lu" Cc: GCC Patches , liuhongt Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-9.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.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: Tue, 07 Sep 2021 01:10:03 -0000 On Mon, Sep 6, 2021 at 8:35 PM H.J. Lu wrote: > > On Sun, Sep 5, 2021 at 10:34 PM Hongtao Liu wrote: > > > > On Sun, Sep 5, 2021 at 5:56 AM H.J. Lu via Gcc-patches > > wrote: > > > > > > Enable FMA in scalar/vector unsigned SI to SF expanders. > > > > > > gcc/ > > > > > > PR target/85819 > > > * config/i386/i386-expand.c (ix86_expand_convert_uns_sisf_sse): > > > Enable FMA. > > > (ix86_expand_vector_convert_uns_vsivsf): Likewise. > > > > > > gcc/testsuite/ > > > > > > PR target/85819 > > > * gcc.target/i386/pr85819-1.c: New test. > > > * gcc.target/i386/pr85819-2a.c: Likewise. > > > * gcc.target/i386/pr85819-2b.c: Likewise. > > > * gcc.target/i386/pr85819-2c.c: Likewise. > > > * gcc.target/i386/pr85819-3.c: Likewise. > > > --- > > > gcc/config/i386/i386-expand.c | 44 ++++++++++++++++------ > > > gcc/testsuite/gcc.target/i386/pr85819-1.c | 11 ++++++ > > > gcc/testsuite/gcc.target/i386/pr85819-2a.c | 17 +++++++++ > > > gcc/testsuite/gcc.target/i386/pr85819-2b.c | 6 +++ > > > gcc/testsuite/gcc.target/i386/pr85819-2c.c | 7 ++++ > > > gcc/testsuite/gcc.target/i386/pr85819-3.c | 18 +++++++++ > > > 6 files changed, 91 insertions(+), 12 deletions(-) > > > create mode 100644 gcc/testsuite/gcc.target/i386/pr85819-1.c > > > create mode 100644 gcc/testsuite/gcc.target/i386/pr85819-2a.c > > > create mode 100644 gcc/testsuite/gcc.target/i386/pr85819-2b.c > > > create mode 100644 gcc/testsuite/gcc.target/i386/pr85819-2c.c > > > create mode 100644 gcc/testsuite/gcc.target/i386/pr85819-3.c > > > > > > diff --git a/gcc/config/i386/i386-expand.c b/gcc/config/i386/i386-expand.c > > > index 2500dbfa7fb..26263bbe1af 100644 > > > --- a/gcc/config/i386/i386-expand.c > > > +++ b/gcc/config/i386/i386-expand.c > > > @@ -1851,12 +1851,21 @@ ix86_expand_convert_uns_sisf_sse (rtx target, rtx input) > > > fp_lo = gen_reg_rtx (SFmode); > > > emit_insn (gen_floatsisf2 (fp_hi, int_hi)); > > > emit_insn (gen_floatsisf2 (fp_lo, int_lo)); > > > - fp_hi = expand_simple_binop (SFmode, MULT, fp_hi, x, fp_hi, > > > - 0, OPTAB_DIRECT); > > > - fp_hi = expand_simple_binop (SFmode, PLUS, fp_hi, fp_lo, target, > > > - 0, OPTAB_DIRECT); > > > - if (!rtx_equal_p (target, fp_hi)) > > > - emit_move_insn (target, fp_hi); > > > + if (TARGET_FMA || TARGET_AVX512F) > > Looking at the expander floatunssi2, the || in the condition > > should never be hit since we have direct vcvtsi2s[sd] instruction > > under TARGET_AVX512F. > > Fixed. > > > > + { > > > + x = validize_mem (force_const_mem (SFmode, x)); > > > + fp_hi = gen_rtx_FMA (SFmode, fp_hi, x, fp_lo); > > > + emit_move_insn (target, fp_hi); > > > + } > > > + else > > > + { > > > + fp_hi = expand_simple_binop (SFmode, MULT, fp_hi, x, fp_hi, > > > + 0, OPTAB_DIRECT); > > > + fp_hi = expand_simple_binop (SFmode, PLUS, fp_hi, fp_lo, target, > > > + 0, OPTAB_DIRECT); > > > + if (!rtx_equal_p (target, fp_hi)) > > > + emit_move_insn (target, fp_hi); > > > + } > > > } > > > > > > /* floatunsv{4,8}siv{4,8}sf2 expander. Expand code to convert > > > @@ -1888,12 +1897,23 @@ ix86_expand_vector_convert_uns_vsivsf (rtx target, rtx val) > > > real_ldexp (&TWO16r, &dconst1, 16); > > > tmp[5] = const_double_from_real_value (TWO16r, SFmode); > > > tmp[5] = force_reg (fltmode, ix86_build_const_vector (fltmode, 1, tmp[5])); > > > - tmp[6] = expand_simple_binop (fltmode, MULT, tmp[4], tmp[5], NULL_RTX, 1, > > > - OPTAB_DIRECT); > > > - tmp[7] = expand_simple_binop (fltmode, PLUS, tmp[3], tmp[6], target, 1, > > > - OPTAB_DIRECT); > > > - if (tmp[7] != target) > > > - emit_move_insn (target, tmp[7]); > > > + unsigned vector_size = GET_MODE_SIZE (fltmode); > > > + if (TARGET_FMA > > > + || (TARGET_AVX512F && vector_size == 64) > > > + || (TARGET_AVX512VL && (vector_size == 32 || vector_size == 16))) > > Similar here for the last two || in the condition. > > Fixed. > > > > + { > > > + tmp[6] = gen_rtx_FMA (fltmode, tmp[4], tmp[5], tmp[3]); > > > + emit_move_insn (target, tmp[6]); > > > + } > > > + else > > > + { > > > + tmp[6] = expand_simple_binop (fltmode, MULT, tmp[4], tmp[5], > > > + NULL_RTX, 1, OPTAB_DIRECT); > > > + tmp[7] = expand_simple_binop (fltmode, PLUS, tmp[3], tmp[6], > > > + target, 1, OPTAB_DIRECT); > > > + if (tmp[7] != target) > > > + emit_move_insn (target, tmp[7]); > > > + } > > > } > > > > > > /* Adjust a V*SFmode/V*DFmode value VAL so that *sfix_trunc* resp. fix_trunc* > > Here is the v2 patch. LGTM. > > -- > H.J. -- BR, Hongtao