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 bug report
#69770: [PATCH] build: strengthen 16 bit float support checks
which was filed against the coreutils package, has been closed.
The explanation is attached below, along with your original report.
If you require more details, please reply to 69770 <at> debbugs.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)]
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
[Message part 3 (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
This bug report was last modified 1 year and 69 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.