public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/omp/gcc-12] amdgcn: Fixed intermittent failure in vectorized version of rint
@ 2022-11-07 15:15 Kwok Yeung
0 siblings, 0 replies; only message in thread
From: Kwok Yeung @ 2022-11-07 15:15 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:8e6c5b18e10adb63811ee5e3423e20146077c439
commit 8e6c5b18e10adb63811ee5e3423e20146077c439
Author: Kwok Cheung Yeung <kcy@codesourcery.com>
Date: Mon Nov 7 12:17:08 2022 +0000
amdgcn: Fixed intermittent failure in vectorized version of rint
The lane mask was not being updated properly in nested conditionals.
Also fixed an issue causing inaccuracy in double-precision rint.
2022-11-07 Kwok Cheung Yeung <kcy@codesourcery.com>
libgcc/
* config/gcn/simd-math/v64df_rint.c (rint): Simplified. Fixed bug in
nested VECTOR_IF. Fixed issue with signed right-shift.
* config/gcn/simd-math/v64sf_rint.c (rintf): Simplified. Fixed bug in
nested VECTOR_IF.
Diff:
---
libgcc/ChangeLog.omp | 7 +++++++
libgcc/config/gcn/simd-math/v64df_rint.c | 4 ++--
libgcc/config/gcn/simd-math/v64sf_rint.c | 22 +++++++---------------
3 files changed, 16 insertions(+), 17 deletions(-)
diff --git a/libgcc/ChangeLog.omp b/libgcc/ChangeLog.omp
index 37ab8fcbf69..af9abdb220e 100644
--- a/libgcc/ChangeLog.omp
+++ b/libgcc/ChangeLog.omp
@@ -1,3 +1,10 @@
+2022-11-07 Kwok Cheung Yeung <kcy@codesourcery.com>
+
+ * config/gcn/simd-math/v64df_rint.c (rint): Simplified. Fixed bug in
+ nested VECTOR_IF. Fixed issue with signed right-shift.
+ * config/gcn/simd-math/v64sf_rint.c (rintf): Simplified. Fixed bug in
+ nested VECTOR_IF.
+
2022-11-01 Kwok Cheung Yeung <kcy@codesourcery.com>
Paul-Antoine Arras <pa@codesourcery.com>
Andrew Jenner <andrew@codesourcery.com>
diff --git a/libgcc/config/gcn/simd-math/v64df_rint.c b/libgcc/config/gcn/simd-math/v64df_rint.c
index ec36cce8c86..561c9a2ac9d 100644
--- a/libgcc/config/gcn/simd-math/v64df_rint.c
+++ b/libgcc/config/gcn/simd-math/v64df_rint.c
@@ -40,7 +40,7 @@ DEF_VD_MATH_FUNC (v64df, rint, v64df x)
GET_HIGH_WORD (i0, t, cond2);
SET_HIGH_WORD (t, (i0&0x7fffffff)|(sx<<31), cond2);
VECTOR_RETURN (t, cond2);
- VECTOR_ELSE (cond2)
+ VECTOR_ELSE2 (cond2, cond)
i = (0x000fffff) >> j0;
VECTOR_RETURN (x, cond2 & (((i0 & i) | i1) == 0)); /* x is integral */
i >>= 1;
@@ -54,7 +54,7 @@ DEF_VD_MATH_FUNC (v64df, rint, v64df x)
VECTOR_RETURN (x + x, cond & (j0 == 0x400));
VECTOR_RETURN (x, cond);
VECTOR_ELSE (cond)
- i = (0xffffffff) >> (j0 - 20);
+ i = CAST_VECTOR (v64si, VECTOR_INIT (0xffffffff) >> (j0 - 20));
VECTOR_RETURN (x, cond & ((i1 & i) == 0));
i >>= 1;
VECTOR_COND_MOVE (i1, (i1 & (~i)) | (0x40000000 >> (j0 - 20)), cond & ((i1 & i) != 0));
diff --git a/libgcc/config/gcn/simd-math/v64sf_rint.c b/libgcc/config/gcn/simd-math/v64sf_rint.c
index 60c348a9d67..8ebad4beae9 100644
--- a/libgcc/config/gcn/simd-math/v64sf_rint.c
+++ b/libgcc/config/gcn/simd-math/v64sf_rint.c
@@ -29,9 +29,7 @@ DEF_VS_MATH_FUNC (v64sf, rintf, v64sf x)
v64si ix = (i0 & 0x7fffffff);
v64si j0 = (ix >> 23) - 0x7f;
VECTOR_IF (j0 < 23, cond)
- VECTOR_IF2 (FLT_UWORD_IS_ZERO (ix), cond2, cond)
- VECTOR_RETURN (x, cond2);
- VECTOR_ENDIF
+ VECTOR_RETURN (x, cond & FLT_UWORD_IS_ZERO (ix));
VECTOR_IF2 (j0 < 0, cond2, cond)
v64si i1 = (i0 & 0x07fffff);
VECTOR_COND_MOVE (i0, i0 & 0xfff00000, cond2);
@@ -42,22 +40,16 @@ DEF_VS_MATH_FUNC (v64sf, rintf, v64sf x)
GET_FLOAT_WORD (i0, t, cond2);
SET_FLOAT_WORD (t, (i0&0x7fffffff)|(sx<<31), cond2);
VECTOR_RETURN (t, cond2);
- VECTOR_ELSE (cond2)
+ VECTOR_ELSE2 (cond2, cond)
v64si i = (0x007fffff) >> j0;
- VECTOR_IF2 ((i0 & i) == 0, cond3, cond2) /* x is integral */
- VECTOR_RETURN (x, cond3);
- VECTOR_ENDIF
+ VECTOR_RETURN (x, cond2 & ((i0 & i) == 0)); /* x is integral */
i >>= 1;
- VECTOR_IF2 ((i0 & i) != 0, cond3, cond2)
- VECTOR_COND_MOVE (i0, (i0 & (~i)) | ((0x200000) >> j0), cond3);
- VECTOR_ENDIF
+ VECTOR_COND_MOVE (i0, (i0 & (~i)) | (0x200000 >> j0),
+ cond2 & ((i0 & i) != 0));
VECTOR_ENDIF
VECTOR_ELSE (cond)
- VECTOR_IF2 (~FLT_UWORD_IS_FINITE (ix), cond2, cond) /* inf or NaN */
- VECTOR_RETURN (x + x, cond2);
- VECTOR_ELSE (cond2) /* x is integral */
- VECTOR_RETURN (x, cond2);
- VECTOR_ENDIF
+ VECTOR_RETURN (x + x, cond & ~FLT_UWORD_IS_FINITE (ix)); /* inf or NaN */
+ VECTOR_RETURN (x, cond); /* x is integral */
VECTOR_ENDIF
SET_FLOAT_WORD (x, i0, NO_COND);
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-11-07 15:15 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-07 15:15 [gcc/devel/omp/gcc-12] amdgcn: Fixed intermittent failure in vectorized version of rint Kwok Yeung
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).