From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-yb1-xb33.google.com (mail-yb1-xb33.google.com [IPv6:2607:f8b0:4864:20::b33]) by sourceware.org (Postfix) with ESMTPS id 78EEE3857827 for ; Wed, 19 Oct 2022 09:06:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 78EEE3857827 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-xb33.google.com with SMTP id e83so730798ybh.1 for ; Wed, 19 Oct 2022 02:06:22 -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=YCqrwKwIroOO4iDfWRWdebtmIHEoSqBquic9s/surFU=; b=PoLHgp1+lAv1foAN7KTcWbAJzxWTc54Rx3uKtdiduAqJ62QEumR/eTNHwj8ZVJfmJ8 i5RqzZHm9UfWjkkI1dyaLCUoEckwszrwqyKuoLWHrXMPxejFAUxkUPsbPg52SrvcIFuc Wvy61Lg4rOPGWc16isM3p746E2NVmKPKU1OmEsDgeBk9QpxhV29DtO+BOa+GnmZMvwjO /0AfmG5WoXSlLf2Zioa5xZM4jV2DktzibhZjuhvwUOApkiTx3fz1d9Qx+NWjwoMLkRyZ quaRqYPYijlh4Jn6N/8L+kAU28DRtIpsn25uuOeB0S2DOzEpf4rJ1+geDeQKdUCVzGlw rByQ== 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=YCqrwKwIroOO4iDfWRWdebtmIHEoSqBquic9s/surFU=; b=wKeCJ9/k5wvg+NQCziW3CN0r13mcNTSlLDa61c8Om5uLSZdsmfR4ZSNq/1Pj7wEXe7 oG47K3+pCV0beRQEgvNrcAGaP3aGhAPtu5whSf/iek/RqmZm2gtxEJRsluZhQQHrlwx9 t/QZX+sv6+xM+nSFvMeAUHc+rs6g/KwhcOjFI22x5AwHDfO+9ObC8Mz6wxXF7seJUzXK F84caZ9ZdnKd0xiIErM8jZfpC8qDOjSsYOXGadhS3jKiSS8xPmAE22CvwHSrtzXbogBJ TgVJJ6WVrZAM5NM7J3C4y6Tqvg4L5F3JjueLZ1E5wkhbaW4D2pey1XNZbrTlLUg/ksHq 6ejQ== X-Gm-Message-State: ACrzQf3hq4vpHHG6j1eYKzZA67OsprELyNw3Bcg5bvBwpGldrbzcQLuc VbcoBh2+KmxmRld6iyVqznE6B+oWL/Er1Mk0H18= X-Google-Smtp-Source: AMsMyM5bManircXB/B7cbHDg0NH2f8CJuH4BsleqgP3DTmKeMSW0xwfI9yLbXeZfSQV19qUl+vNX9jRRt+O4Casza68= X-Received: by 2002:a25:2495:0:b0:6be:22d:deef with SMTP id k143-20020a252495000000b006be022ddeefmr5940004ybk.209.1666170381777; Wed, 19 Oct 2022 02:06:21 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Uros Bizjak Date: Wed, 19 Oct 2022 11:06:10 +0200 Message-ID: Subject: Re: [PATCH] i386: Fix up __bf16 handling on ia32 To: Jakub Jelinek Cc: gcc-patches@gcc.gnu.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,KAM_NUMSUBJECT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=no 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 10:50 AM Jakub Jelinek wrote: > > Hi! > > Last night's testing of the libstdc++ changes revealed a problem > in the __bf16 backend registration (while _Float16 seems ok). > The problem is that for both BFmode and HFmode we require TARGET_SSE2, > the generic code creates {,b}float16_type_node only if that is true > at the start of the TU and the builtins for the type are only > created in that case (many __builtin_*f16 for HFmode and __builtin_nansf16b > for BFmode). Now, for _Float16 I've kept what the code did previously, > if float16_type_node from generic code is NULL, create ix86_float16_type_node > and register _Float16 for it, but for __bf16 I've changed it so that > if bfloat16_type_node from generic code is NULL, > ix86_register_bf16_builtin_type makes bfloat16_type_node non-NULL. > This has an unfortunate consequence though, __STDCPP_BFLOAT16_T__ is > predefined for C++23, __BFLT16_*__ macros are predefined as well, but > the type doesn't really work (errors whenever it is used) and the builtin > isn't defined. > > The following patch fixes that by going with what we do for HFmode, > bfloat16_type_node stays as initialized by generic code and we have a local > type for backend use. On the other side, nothing used ix86_bf16_ptr_type_node > so that is now dropped. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? > > 2022-10-19 Jakub Jelinek > > * config/i386/i386-builtins.cc (ix86_bf16_ptr_type_node): Remove. > (ix86_bf16_type_node): New variable. > (ix86_register_bf16_builtin_type): If bfloat16_type_node is NULL > from generic code, set only ix86_bf16_type_node to a new REAL_TYPE > rather than bfloat16_type_node, otherwise set ix86_bf16_type_node > to bfloat16_type_node. Register __bf16 on ix86_bf16_type_node > rather than bfloat16_type_node. Don't initialize unused > ix86_bf16_ptr_type_node. > * config/i386/i386-builtin-types.def (BFLOAT16): Use > ix86_bf16_type_node rather than bfloat16_type_node. LGTM. Thanks, Uros. > --- gcc/config/i386/i386-builtins.cc.jj 2022-10-14 22:32:30.088698145 +0200 > +++ gcc/config/i386/i386-builtins.cc 2022-10-19 01:11:33.685164338 +0200 > @@ -126,7 +126,7 @@ BDESC_VERIFYS (IX86_BUILTIN_MAX, > static GTY(()) tree ix86_builtin_type_tab[(int) IX86_BT_LAST_CPTR + 1]; > > tree ix86_float16_type_node = NULL_TREE; > -tree ix86_bf16_ptr_type_node = NULL_TREE; > +tree ix86_bf16_type_node = NULL_TREE; > > /* Retrieve an element from the above table, building some of > the types lazily. */ > @@ -1373,17 +1373,16 @@ ix86_register_bf16_builtin_type (void) > { > if (bfloat16_type_node == NULL_TREE) > { > - bfloat16_type_node = make_node (REAL_TYPE); > - TYPE_PRECISION (bfloat16_type_node) = 16; > - SET_TYPE_MODE (bfloat16_type_node, BFmode); > - layout_type (bfloat16_type_node); > + ix86_bf16_type_node = make_node (REAL_TYPE); > + TYPE_PRECISION (ix86_bf16_type_node) = 16; > + SET_TYPE_MODE (ix86_bf16_type_node, BFmode); > + layout_type (ix86_bf16_type_node); > } > + else > + ix86_bf16_type_node = bfloat16_type_node; > > if (!maybe_get_identifier ("__bf16") && TARGET_SSE2) > - { > - lang_hooks.types.register_builtin_type (bfloat16_type_node, "__bf16"); > - ix86_bf16_ptr_type_node = build_pointer_type (bfloat16_type_node); > - } > + lang_hooks.types.register_builtin_type (ix86_bf16_type_node, "__bf16"); > } > > static void > --- gcc/config/i386/i386-builtin-types.def.jj 2022-10-14 22:32:30.088698145 +0200 > +++ gcc/config/i386/i386-builtin-types.def 2022-10-19 01:11:58.030845416 +0200 > @@ -69,7 +69,7 @@ DEF_PRIMITIVE_TYPE (UINT16, short_unsign > DEF_PRIMITIVE_TYPE (INT64, long_long_integer_type_node) > DEF_PRIMITIVE_TYPE (UINT64, long_long_unsigned_type_node) > DEF_PRIMITIVE_TYPE (FLOAT16, ix86_float16_type_node) > -DEF_PRIMITIVE_TYPE (BFLOAT16, bfloat16_type_node) > +DEF_PRIMITIVE_TYPE (BFLOAT16, ix86_bf16_type_node) > DEF_PRIMITIVE_TYPE (FLOAT, float_type_node) > DEF_PRIMITIVE_TYPE (DOUBLE, double_type_node) > DEF_PRIMITIVE_TYPE (FLOAT80, float80_type_node) > > > Jakub >