From patchwork Fri Nov 5 05:38:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: liuhongt X-Patchwork-Id: 1551253 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=uMvAxWeF; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4Hlq7t4XBrz9sXS for ; Fri, 5 Nov 2021 16:39:21 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D66C83857C5F for ; Fri, 5 Nov 2021 05:39:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D66C83857C5F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1636090756; bh=WoGvoJ7Ne8Cukh+9o6yXpdh3M5cR8v47OJ21zv+SDaM=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=uMvAxWeFPKFiJDhdcyqyLImoZsmc7JMl9wV/8ldwPI+YzKO8yrRdMg/ZlppQxY7EH U7W5RvQs9QpHL6s0vx0cY6HcbHgZyybnutij3NjD+/revW710SWgH/tHWhnw3EQ5Te goanO+gTclZbjcEhFFsMqG4ilH7VqTcLch5hsxys= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by sourceware.org (Postfix) with ESMTPS id BFCF03858406 for ; Fri, 5 Nov 2021 05:38:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org BFCF03858406 X-IronPort-AV: E=McAfee;i="6200,9189,10158"; a="212594352" X-IronPort-AV: E=Sophos;i="5.87,210,1631602800"; d="scan'208";a="212594352" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Nov 2021 22:38:53 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,210,1631602800"; d="scan'208";a="498227069" Received: from scymds01.sc.intel.com ([10.148.94.138]) by fmsmga007.fm.intel.com with ESMTP; 04 Nov 2021 22:38:53 -0700 Received: from shliclel051.sh.intel.com (shliclel051.sh.intel.com [10.239.236.51]) by scymds01.sc.intel.com with ESMTP id 1A55cpEG029081; Thu, 4 Nov 2021 22:38:52 -0700 To: gcc-patches@gcc.gnu.org Subject: [PATCH 1/2] [Gimple] Simplify (trunc)fmax/fmin((extend)a, (extend)b) to MAX/MIN(a, b) Date: Fri, 5 Nov 2021 13:38:50 +0800 Message-Id: <20211105053851.24542-1-hongtao.liu@intel.com> X-Mailer: git-send-email 2.18.1 X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, KAM_SHORT, SPF_HELO_NONE, SPF_NONE, 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-Patchwork-Original-From: liuhongt via Gcc-patches From: liuhongt Reply-To: liuhongt Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" a and b are same type as trunc type and has less precision than extend type, the transformation is guarded by flag_finite_math_only. Bootstrapped and regtested under x86_64-pc-linux-gnu{-m32,} Ok for trunk? gcc/ChangeLog: PR target/102464 * match.pd: Simplify (trunc)fmax/fmin((extend)a, (extend)b) to MAX/MIN(a,b) gcc/testsuite/ChangeLog: * gcc.target/i386/pr102464-maxmin.c: New test. --- gcc/match.pd | 14 ++++++ .../gcc.target/i386/pr102464-maxmin.c | 44 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/pr102464-maxmin.c diff --git a/gcc/match.pd b/gcc/match.pd index f63079023d0..857ce7f712a 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -6182,6 +6182,20 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) && direct_internal_fn_supported_p (IFN_COPYSIGN, type, OPTIMIZE_FOR_BOTH)) (IFN_COPYSIGN @0 @1)))) + +(for maxmin (max min) + (simplify + (convert (maxmin (convert@2 @0) (convert @1))) + (if (flag_finite_math_only + && optimize + && FLOAT_TYPE_P (type) + && FLOAT_TYPE_P (TREE_TYPE (@2)) + && types_match (type, TREE_TYPE (@0)) + && types_match (type, TREE_TYPE (@1)) + && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (@2)) + && optab_handler (maxmin == MAX_EXPR ? smax_optab : smin_optab, + TYPE_MODE (type)) != CODE_FOR_nothing) + (maxmin @0 @1)))) #endif (for froms (XFLOORL XCEILL XROUNDL XRINTL) diff --git a/gcc/testsuite/gcc.target/i386/pr102464-maxmin.c b/gcc/testsuite/gcc.target/i386/pr102464-maxmin.c new file mode 100644 index 00000000000..37867235a6c --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr102464-maxmin.c @@ -0,0 +1,44 @@ +/* PR target/102464. */ +/* { dg-do compile } */ +/* { dg-options "-O2 -mavx512fp16 -mavx512vl -ffast-math -ftree-vectorize -mtune=generic -mfpmath=sse" } */ +/* { dg-final { scan-assembler-times "vmaxph" 3 } } */ +/* { dg-final { scan-assembler-times "vminph" 3 } } */ +/* { dg-final { scan-assembler-times "vmaxsh" 3 } } */ +/* { dg-final { scan-assembler-times "vminsh" 3 } } */ +/* { dg-final { scan-assembler-times "vmaxps" 2 } } */ +/* { dg-final { scan-assembler-times "vminps" 2 } } */ +/* { dg-final { scan-assembler-times "vmaxss" 2 } } */ +/* { dg-final { scan-assembler-times "vminss" 2 } } */ +/* { dg-final { scan-assembler-times "vmaxpd" 1 } } */ +/* { dg-final { scan-assembler-times "vminpd" 1 } } */ +/* { dg-final { scan-assembler-times "vmaxsd" 1 } } */ +/* { dg-final { scan-assembler-times "vminsd" 1 } } */ + +#include +#define FOO(CODE,TYPE,SUFFIX) \ + void \ + foo_vect_##CODE##TYPE##SUFFIX (TYPE* __restrict a, TYPE* b, TYPE* c) \ + { \ + for (int i = 0; i != 8; i++) \ + a[i] = CODE##SUFFIX (b[i], c[i]); \ + } \ + TYPE \ + foo_##CODE##TYPE##SUFFIX (TYPE b, TYPE c) \ + { \ + return CODE##l (b, c); \ + } + +FOO (fmax, _Float16, f); +FOO (fmax, _Float16,); +FOO (fmax, _Float16, l); +FOO (fmin, _Float16, f); +FOO (fmin, _Float16,); +FOO (fmin, _Float16, l); + +FOO (fmax, float,); +FOO (fmax, float, l); +FOO (fmin, float,); +FOO (fmin, float, l); + +FOO (fmax, double, l); +FOO (fmin, double, l); From patchwork Fri Nov 5 05:38:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: liuhongt X-Patchwork-Id: 1551254 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=GBHvtFoa; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4Hlq9J18kSz9sXS for ; Fri, 5 Nov 2021 16:40:36 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 03D9E3858D35 for ; Fri, 5 Nov 2021 05:40:34 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 03D9E3858D35 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1636090834; bh=2j8WrTGAfwQbWpAY1Fv2Lh5EBItrkcI92+WeO46my54=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=GBHvtFoaCfRQMM9DRHoqqZSEdX79hs054ttAhwT2nK9f3kVELC4zTRJoK2DjpCUKz NdS+8sfDfUN8ChIkMy1CgLIztpeFYTiE6S+jkEx6M+JWLqbEVwOS7WOGziKNTLxYAK 59LkPsoJl3b/2qV4VTjq0tns+gi06lw5GBV3LRiI= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by sourceware.org (Postfix) with ESMTPS id 221B03858D35 for ; Fri, 5 Nov 2021 05:38:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 221B03858D35 X-IronPort-AV: E=McAfee;i="6200,9189,10158"; a="230572157" X-IronPort-AV: E=Sophos;i="5.87,210,1631602800"; d="scan'208";a="230572157" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Nov 2021 22:38:55 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,210,1631602800"; d="scan'208";a="730419329" Received: from scymds01.sc.intel.com ([10.148.94.138]) by fmsmga005.fm.intel.com with ESMTP; 04 Nov 2021 22:38:55 -0700 Received: from shliclel051.sh.intel.com (shliclel051.sh.intel.com [10.239.236.51]) by scymds01.sc.intel.com with ESMTP id 1A55cpEH029081; Thu, 4 Nov 2021 22:38:53 -0700 To: gcc-patches@gcc.gnu.org Subject: [PATCH 2/2] [Gimple] Simplify (trunc)fma ((extend)a, (extend)b, (extend)c) to IFN_FMA (a, b, c). Date: Fri, 5 Nov 2021 13:38:51 +0800 Message-Id: <20211105053851.24542-2-hongtao.liu@intel.com> X-Mailer: git-send-email 2.18.1 In-Reply-To: <20211105053851.24542-1-hongtao.liu@intel.com> References: <20211105053851.24542-1-hongtao.liu@intel.com> X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, KAM_SHORT, SPF_HELO_NONE, SPF_NONE, 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-Patchwork-Original-From: liuhongt via Gcc-patches From: liuhongt Reply-To: liuhongt Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" a, b, c are same type as truncation type and has less precision than extend type, the optimization is guarded under flag_unsafe_math_optimizations. Bootstrapped and regtested under x86_64-pc-linux-gnu{-m32,} Ok for trunk? gcc/ChangeLog: PR target/102464 * match.pd: Simplify (trunc)fma ((extend)a, (extend)b, (extend)c) to IFN_FMA (a, b, c) under flag_unsafe_math_optimizations. gcc/testsuite/ChangeLog: * gcc.target/i386/pr102464-fma.c: New test. --- gcc/match.pd | 16 ++++++++++ gcc/testsuite/gcc.target/i386/pr102464-fma.c | 32 ++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/pr102464-fma.c diff --git a/gcc/match.pd b/gcc/match.pd index 857ce7f712a..fb1065dc0e6 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -6196,6 +6196,22 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) && optab_handler (maxmin == MAX_EXPR ? smax_optab : smin_optab, TYPE_MODE (type)) != CODE_FOR_nothing) (maxmin @0 @1)))) + +(for froms (BUILT_IN_FMAF BUILT_IN_FMA BUILT_IN_FMAL) + tos (IFN_FMA IFN_FMA IFN_FMA) + (simplify + (convert (froms (convert@3 @0) (convert @1) (convert @2))) + (if (flag_unsafe_math_optimizations + && optimize + && FLOAT_TYPE_P (type) + && FLOAT_TYPE_P (TREE_TYPE (@3)) + && types_match (type, TREE_TYPE (@0)) + && types_match (type, TREE_TYPE (@1)) + && types_match (type, TREE_TYPE (@2)) + && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (@3)) + && direct_internal_fn_supported_p (as_internal_fn (tos), + type, OPTIMIZE_FOR_BOTH)) + (tos @0 @1 @2)))) #endif (for froms (XFLOORL XCEILL XROUNDL XRINTL) diff --git a/gcc/testsuite/gcc.target/i386/pr102464-fma.c b/gcc/testsuite/gcc.target/i386/pr102464-fma.c new file mode 100644 index 00000000000..9c70d93d980 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr102464-fma.c @@ -0,0 +1,32 @@ +/* PR target/102464. */ +/* { dg-do compile } */ +/* { dg-options "-O2 -mavx512fp16 -mavx512vl -ffast-math -ftree-vectorize -mtune=generic -mfpmath=sse" } */ +/* { dg-final { scan-assembler-times "vfmadd...ph" 3 } } */ +/* { dg-final { scan-assembler-times "vfmadd...sh" 3 } } */ +/* { dg-final { scan-assembler-times "vfmadd...ps" 2 } } */ +/* { dg-final { scan-assembler-times "vfmadd...ss" 2 } } */ +/* { dg-final { scan-assembler-times "vfmadd...pd" 1 } } */ +/* { dg-final { scan-assembler-times "vfmadd...sd" 1 } } */ + +#include +#define FOO(TYPE,SUFFIX) \ + void \ + foo_vect_##TYPE##SUFFIX (TYPE* __restrict a, TYPE* b, TYPE* c, TYPE* d) \ + { \ + for (int i = 0; i != 8; i++) \ + a[i] = fma##SUFFIX (b[i], c[i], d[i]); \ + } \ + TYPE \ + foo_##TYPE##SUFFIX (TYPE b, TYPE c, TYPE d) \ + { \ + return fma##l (b, c, d); \ + } + +FOO (_Float16, f); +FOO (_Float16,); +FOO (_Float16, l); + +FOO (float,); +FOO (float, l); + +FOO (double, l);