[PATCH] D83473: libclc: Fix FP_ILOGBNAN definition
Boris Brezillon via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 14 23:45:27 PDT 2020
bbrezillon updated this revision to Diff 278080.
bbrezillon added a comment.
- Updated the commit message to drop the part stating that ILOGB0 and ILOGBNAN should be different (which is not required)
- Patched the 64b variant of ilogb()
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D83473/new/
https://reviews.llvm.org/D83473
Files:
libclc/generic/include/clc/float/definitions.h
libclc/generic/lib/math/ilogb.cl
Index: libclc/generic/lib/math/ilogb.cl
===================================================================
--- libclc/generic/lib/math/ilogb.cl
+++ libclc/generic/lib/math/ilogb.cl
@@ -31,7 +31,15 @@
int rs = -118 - (int) clz(ux & MANTBITS_SP32);
int r = (int) (ax >> EXPSHIFTBITS_SP32) - EXPBIAS_SP32;
r = ax < 0x00800000U ? rs : r;
- r = ax > EXPBITS_SP32 | ax == 0 ? 0x80000000 : r;
+ r = ax == 0 ? FP_ILOGB0 : r;
+
+ // We could merge those 2 tests and have:
+ //
+ // r = ax >= EXPBITS_SP32 ? 0x7fffffff : r
+ //
+ // since FP_ILOGBNAN is set to INT_MAX, but it's clearer this way and
+ // FP_ILOGBNAN can change without requiring changes to ilogb() code.
+ r = ax > EXPBITS_SP32 ? FP_ILOGBNAN : r;
r = ax == EXPBITS_SP32 ? 0x7fffffff : r;
return r;
}
@@ -47,7 +55,15 @@
int r = (int) (ax >> EXPSHIFTBITS_DP64) - EXPBIAS_DP64;
int rs = -1011 - (int) clz(ax & MANTBITS_DP64);
r = ax < 0x0010000000000000UL ? rs : r;
- r = ax > 0x7ff0000000000000UL | ax == 0UL ? 0x80000000 : r;
+ r = ax == 0UL ? FP_ILOGB0 : r;
+
+ // We could merge those 2 tests and have:
+ //
+ // r = ax >= 0x7ff0000000000000UL ? 0x7fffffff : r
+ //
+ // since FP_ILOGBNAN is set to INT_MAX, but it's clearer this way and
+ // FP_ILOGBNAN can change without requiring changes to ilogb() code.
+ r = ax > 0x7ff0000000000000UL ? FP_ILOGBNAN : r;
r = ax == 0x7ff0000000000000UL ? 0x7fffffff : r;
return r;
}
Index: libclc/generic/include/clc/float/definitions.h
===================================================================
--- libclc/generic/include/clc/float/definitions.h
+++ libclc/generic/include/clc/float/definitions.h
@@ -15,7 +15,7 @@
#define FLT_EPSILON 0x1.0p-23f
#define FP_ILOGB0 (-2147483647 - 1)
-#define FP_ILOGBNAN (-2147483647 - 1)
+#define FP_ILOGBNAN 2147483647
#define M_E_F 0x1.5bf0a8p+1f
#define M_LOG2E_F 0x1.715476p+0f
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D83473.278080.patch
Type: text/x-patch
Size: 1962 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200715/bdbafc31/attachment.bin>
More information about the llvm-commits
mailing list