From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by sourceware.org (Postfix) with ESMTPS id 42B053858C60 for ; Mon, 26 Jun 2023 08:54:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 42B053858C60 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1687769661; x=1719305661; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=TqrUdfujhj7bg6fqv6nnt8TPIYN9cGF81bop8rUOi/o=; b=ObHIccpnT6rsUGlST1HWJUpo/BlgHMNLc/mfncDVlWdHWgVk/W9WPXd/ n0gkyqMWd58ES9BEhuRZPxreM7vbL9x4HQFTnZNmN8PxcMjI7aFao5+Gj RzqctRU32rUklDgJ1sE/qrB55nuLAc+AXQaoGLWoh3zr08q1hKPnkQcxP RwZjq3XlU1/Srak6qBZFvfJ6IEnXIN+6h1jqhEHYdWapAKNFQLUZBbHx3 hI4huSlSfOwERrNXmRQApiGiqWXqF34wUJbH1zdd4dMxtGSHdNsBdXVRl 0rP2d2dW1Z5gpwBnHMael6xHTonX0hFI1dRwmPtIERM4x1ESafnlcuz/S A==; X-IronPort-AV: E=McAfee;i="6600,9927,10752"; a="360080616" X-IronPort-AV: E=Sophos;i="6.01,159,1684825200"; d="scan'208";a="360080616" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2023 01:54:19 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10752"; a="962700863" X-IronPort-AV: E=Sophos;i="6.01,159,1684825200"; d="scan'208";a="962700863" Received: from shvmail03.sh.intel.com ([10.239.245.20]) by fmsmga006.fm.intel.com with ESMTP; 26 Jun 2023 01:54:18 -0700 Received: from shliclel4217.sh.intel.com (shliclel4217.sh.intel.com [10.239.240.127]) by shvmail03.sh.intel.com (Postfix) with ESMTP id 8A1B01005629; Mon, 26 Jun 2023 16:54:17 +0800 (CST) From: liuhongt To: gcc-patches@gcc.gnu.org Cc: crazylht@gmail.com, hjl.tools@gmail.com Subject: [PATCH] Issue a warning for conversion between short and __bf16 under TARGET_AVX512BF16. Date: Mon, 26 Jun 2023 16:54:17 +0800 Message-Id: <20230626085417.1357574-1-hongtao.liu@intel.com> X-Mailer: git-send-email 2.39.1.388.g2fc9e9ca3c MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE 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: __bfloat16 is redefined from typedef short to real __bf16 since GCC V13. The patch issues an warning for potential silent implicit conversion between __bf16 and short where users may only expect a data movement. To avoid too many false positive, warning is only under TARGET_AVX512BF16. Bootstrapped and regtested on x86_64-pc-linux-gnu{-m32,} Ok for trunk? gcc/ChangeLog: * config/i386/i386.cc (ix86_invalid_conversion): New function. (TARGET_INVALID_CONVERSION): Define as ix86_invalid_conversion. gcc/testsuite/ChangeLog: * gcc.target/i386/bf16_short_warn.c: New test. --- gcc/config/i386/i386.cc | 32 +++++++++++++++++++ .../gcc.target/i386/bf16_short_warn.c | 17 ++++++++++ 2 files changed, 49 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/bf16_short_warn.c diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc index 0761965344b..dc02eac6203 100644 --- a/gcc/config/i386/i386.cc +++ b/gcc/config/i386/i386.cc @@ -22718,6 +22718,35 @@ x86_emit_floatuns (rtx operands[2]) emit_label (donelab); } + +/* Return the diagnostic message string if conversion from FROMTYPE to + TOTYPE is not allowed, NULL otherwise. + Currently it's used to warn for silent implicit conversion between __bf16 + and short, since __bfloat16 is refined as real __bf16 instead of short + since GCC13. */ + +static const char * +ix86_invalid_conversion (const_tree fromtype, const_tree totype) +{ + if (element_mode (fromtype) != element_mode (totype) + && (TARGET_AVX512BF16 || TARGET_AVXNECONVERT)) + { + /* Warn for silent implicit conversion where user may expect + a bitcast. */ + if ((TYPE_MODE (fromtype) == BFmode + && TYPE_MODE (totype) == HImode) + || (TYPE_MODE (totype) == BFmode + && TYPE_MODE (fromtype) == HImode)) + warning (0, "%<__bfloat16%> is redefined from typedef % " + "to real %<__bf16%> since GCC V13, be careful of " + "implicit conversion between %<__bf16%> and %; " + "a explicit bitcast may be needed here"); + } + + /* Conversion allowed. */ + return NULL; +} + /* Target hook for scalar_mode_supported_p. */ static bool @@ -25009,6 +25038,9 @@ ix86_run_selftests (void) # define TARGET_MERGE_DECL_ATTRIBUTES merge_dllimport_decl_attributes #endif +#undef TARGET_INVALID_CONVERSION +#define TARGET_INVALID_CONVERSION ix86_invalid_conversion + #undef TARGET_COMP_TYPE_ATTRIBUTES #define TARGET_COMP_TYPE_ATTRIBUTES ix86_comp_type_attributes diff --git a/gcc/testsuite/gcc.target/i386/bf16_short_warn.c b/gcc/testsuite/gcc.target/i386/bf16_short_warn.c new file mode 100644 index 00000000000..3e47a815200 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/bf16_short_warn.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +#include +typedef struct { +short payload; +} BFloat16; + +__attribute__((target("avx512vl,avx512bf16"))) +BFloat16 tobf16_avx512(float f) +{ + BFloat16 r; + __m128bh m = _mm_cvtneps_pbh(_mm_set_ss(f)); + r.payload = m[0]; /* { dg-warning " be careful of implicit conversion between '__bf16' and 'short'" } */ + return r; +} + -- 2.39.1.388.g2fc9e9ca3c