GNU bug report logs -
#69770
[PATCH] build: strengthen 16 bit float support checks
Previous Next
Reported by: Grisha Levit <grishalevit <at> gmail.com>
Date: Wed, 13 Mar 2024 02:27:02 UTC
Severity: normal
Tags: patch
Done: Pádraig Brady <P <at> draigBrady.com>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your message dated Wed, 13 Mar 2024 12:36:51 +0000
with message-id <40cecf61-b314-8648-ede4-a86ffdeda226 <at> draigBrady.com>
and subject line Re: bug#69770: [PATCH] build: strengthen 16 bit float support checks
has caused the debbugs.gnu.org bug report #69770,
regarding [PATCH] build: strengthen 16 bit float support checks
to be marked as done.
(If you believe you have received this mail in error, please contact
help-debbugs <at> gnu.org.)
--
69770: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=69770
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
Recent clang provides __bf16 on aarch64 but it is broken.
If built with -O0, the conversion is wrong:
$ printf '\x3F\x80' | od --end=big -An -tfB | tr -d ' '
1.875
If built with -O1 or higher, compilation fails:
fatal error: error in backend: Cannot select: 0xb400007a58d29780: f32 = fp_extend 0xb400007a58d31720
0xb400007a58d31720: bf16,ch = CopyFromReg 0xb400007b78c53720, Register:bf16 %13
0xb400007a58d29470: bf16 = Register %13
In function: print_bfloat
The latter issue does not cause the existing configure test to fail
because the promotion is optimized out.
* configure.ac: Ensure 16 bit float promotion code does not get
optimized out, and produces an expected result.
---
configure.ac | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/configure.ac b/configure.ac
index 248e30ca2..21bee28d1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -569,13 +569,14 @@ ac_c_werror_flag=$cu_save_c_werror_flag
# Test compiler support for half precision floating point types (for od)
AC_MSG_CHECKING([IEEE 16 bit floating point])
- AC_COMPILE_IFELSE(
+ AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
int
main (void)
{
- _Float16 hf;
+ volatile _Float16 hf = 1;
float f = hf; /* Ensure compiler can promote to float. */
+ return !(f == 1.0f);
}
]])
],[
@@ -589,13 +590,14 @@ if test $ieee_16_bit_supported = yes; then
fi
AC_MSG_CHECKING([Brain 16 bit floating point])
- AC_COMPILE_IFELSE(
+ AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
int
main (void)
{
- __bf16 hf;
+ volatile __bf16 hf = 1;
float f = hf; /* Ensure compiler can promote to float. */
+ return !(f == 1.0f);
}
]])
],[
--
2.44.0
[Message part 3 (message/rfc822, inline)]
On 13/03/2024 02:24, Grisha Levit wrote:
> Recent clang provides __bf16 on aarch64 but it is broken.
>
> If built with -O0, the conversion is wrong:
>
> $ printf '\x3F\x80' | od --end=big -An -tfB | tr -d ' '
> 1.875
>
> If built with -O1 or higher, compilation fails:
>
> fatal error: error in backend: Cannot select: 0xb400007a58d29780: f32 = fp_extend 0xb400007a58d31720
> 0xb400007a58d31720: bf16,ch = CopyFromReg 0xb400007b78c53720, Register:bf16 %13
> 0xb400007a58d29470: bf16 = Register %13
> In function: print_bfloat
>
> The latter issue does not cause the existing configure test to fail
> because the promotion is optimized out.
>
> * configure.ac: Ensure 16 bit float promotion code does not get
> optimized out, and produces an expected result.
Looks good!
I'll follow up with another patch to all these involved checks to be cached / bypassed,
by wrapping them in AC_CACHE_VAL().
Marking this as done.
thanks!
Pádraig
This bug report was last modified 1 year and 70 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.