[Libclc-dev] [PATCH 1/2] amdgcn/fmin: Explicitly check for NaNs

Jan Vesely via Libclc-dev libclc-dev at lists.llvm.org
Wed Nov 15 11:23:29 PST 2017


On Wed, 2017-11-15 at 19:08 +0100, Jeroen Ketema wrote:
> This seems an incorrect fix. The llvm.minnum intrinsic requires the
> NaN behaviour you’re now trying to enforce through the library code.
> I think the proper way to fix this, is to adapt GCN codegen.

I agree. This will be relegated to llvm-3.9/4/5 as soon as llvm-6
codegen is fixed.

Jan

> 
> Jeroen
> 
> > On 15 Nov 2017, at 18:21, Jan Vesely via Libclc-dev <libclc-dev at lists.llvm.org> wrote:
> > 
> > v_min instruction fails to handle certain NaNs correctly.
> > 
> > Signed-off-by: Jan Vesely <jan.vesely at rutgers.edu>
> > ---
> > Fixes most of fmin CTS on carrizo. It still fails on denormals, but IMO
> > that's CTS bug.
> > EG/NI does not seem to suffer the same problem.
> > 
> > amdgcn/lib/SOURCES      |  1 +
> > amdgcn/lib/math/fmin.cl | 32 ++++++++++++++++++++++++++++++++
> > 2 files changed, 33 insertions(+)
> > create mode 100644 amdgcn/lib/math/fmin.cl
> > 
> > diff --git a/amdgcn/lib/SOURCES b/amdgcn/lib/SOURCES
> > index 8c177bd..5149f85 100644
> > --- a/amdgcn/lib/SOURCES
> > +++ b/amdgcn/lib/SOURCES
> > @@ -1,4 +1,5 @@
> > cl_khr_int64_extended_atomics/minmax_helpers.ll
> > +math/fmin.cl
> > math/ldexp.cl
> > mem_fence/fence.cl
> > mem_fence/waitcnt.ll
> > diff --git a/amdgcn/lib/math/fmin.cl b/amdgcn/lib/math/fmin.cl
> > new file mode 100644
> > index 0000000..556d758
> > --- /dev/null
> > +++ b/amdgcn/lib/math/fmin.cl
> > @@ -0,0 +1,32 @@
> > +#include <clc/clc.h>
> > +
> > +#include "../../../generic/lib/clcmacro.h"
> > +
> > +_CLC_DEF _CLC_OVERLOAD float fmin(float x, float y)
> > +{
> > +   if (isnan(x))
> > +      return y;
> > +   if (isnan(y))
> > +      return x;
> > +   return (y < x) ? y : x;
> > +}
> > +_CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, float, fmin, float, float)
> > +
> > +#ifdef cl_khr_fp64
> > +
> > +#pragma OPENCL EXTENSION cl_khr_fp64 : enable
> > +
> > +_CLC_DEF _CLC_OVERLOAD double fmin(double x, double y)
> > +{
> > +   if (isnan(x))
> > +      return y;
> > +   if (isnan(y))
> > +      return x;
> > +   return (y < x) ? y : x;
> > +}
> > +_CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, fmin, double, double)
> > +
> > +#endif
> > +
> > +#define __CLC_BODY <../../../generic/lib/math/fmin.inc>
> > +#include <clc/math/gentype.inc>
> > -- 
> > 2.13.6
> > 
> > _______________________________________________
> > Libclc-dev mailing list
> > Libclc-dev at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/libclc-dev
> 
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part
URL: <http://lists.llvm.org/pipermail/libclc-dev/attachments/20171115/2dfcf8cf/attachment-0001.sig>


More information about the Libclc-dev mailing list