[Libclc-dev] [PATCH 2/2] Implement isinf builtin

Tom Stellard tom at stellard.net
Wed Sep 3 05:17:52 PDT 2014


On Tue, Sep 02, 2014 at 04:36:48PM -0500, Aaron Watry wrote:
> The good news:  It's almost identical to a WIP patch that I hadn't
> sent into the list yet (besides the usage of
> <clc/relational/floatn.inc> in my version).
> 
> The bad news:  It results in the following for both EG and SI for me:
> 
> LLVM triggered Diagnostic Handler: unsupported call to function fabsf
> in test_1_isinf_float
> Segmentation fault (core dumped)
> 

This should be fixed with this clang patch:

http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20140901/114007.html

-Tom

> Curiously, the fabs() tests that I just wrote seem to be ok (which
> uses the llvm.fabs intrinsic)
> 
> kernel and bitcode of builtin-float-isinf-1.0.generated.cl (just the
> scalar float test) is attached just in case it helps.
> 
> --Aaron
> 
> 
> On Tue, Sep 2, 2014 at 2:12 PM, Tom Stellard <thomas.stellard at amd.com> wrote:
> > ---
> >  generic/include/clc/clc.h              |  1 +
> >  generic/include/clc/relational/isinf.h | 21 +++++++++++++++++++++
> >  generic/lib/SOURCES                    |  1 +
> >  generic/lib/relational/isinf.cl        | 18 ++++++++++++++++++
> >  4 files changed, 41 insertions(+)
> >  create mode 100644 generic/include/clc/relational/isinf.h
> >  create mode 100644 generic/lib/relational/isinf.cl
> >
> > diff --git a/generic/include/clc/clc.h b/generic/include/clc/clc.h
> > index 12114fe..490893b 100644
> > --- a/generic/include/clc/clc.h
> > +++ b/generic/include/clc/clc.h
> > @@ -117,6 +117,7 @@
> >  #include <clc/relational/isequal.h>
> >  #include <clc/relational/isgreater.h>
> >  #include <clc/relational/isgreaterequal.h>
> > +#include <clc/relational/isinf.h>
> >  #include <clc/relational/isless.h>
> >  #include <clc/relational/islessequal.h>
> >  #include <clc/relational/isnan.h>
> > diff --git a/generic/include/clc/relational/isinf.h b/generic/include/clc/relational/isinf.h
> > new file mode 100644
> > index 0000000..869f0c8
> > --- /dev/null
> > +++ b/generic/include/clc/relational/isinf.h
> > @@ -0,0 +1,21 @@
> > +
> > +#define _CLC_ISINF_DECL(RET_TYPE, ARG_TYPE) \
> > +  _CLC_OVERLOAD _CLC_DECL RET_TYPE isinf(ARG_TYPE);
> > +
> > +#define _CLC_VECTOR_ISINF_DECL(RET_TYPE, ARG_TYPE) \
> > +  _CLC_ISINF_DECL(RET_TYPE##2, ARG_TYPE##2) \
> > +  _CLC_ISINF_DECL(RET_TYPE##3, ARG_TYPE##3) \
> > +  _CLC_ISINF_DECL(RET_TYPE##4, ARG_TYPE##4) \
> > +  _CLC_ISINF_DECL(RET_TYPE##8, ARG_TYPE##8) \
> > +  _CLC_ISINF_DECL(RET_TYPE##16, ARG_TYPE##16)
> > +
> > +_CLC_ISINF_DECL(int, float)
> > +_CLC_VECTOR_ISINF_DECL(int, float)
> > +
> > +#ifdef cl_khr_fp64
> > +_CLC_ISINF_DECL(int, double)
> > +_CLC_VECTOR_ISINF_DECL(long, double)
> > +#endif
> > +
> > +#undef _CLC_ISINF_DECL
> > +#undef _CLC_VECTOR_ISINF_DECL
> > diff --git a/generic/lib/SOURCES b/generic/lib/SOURCES
> > index ced53f3..8eaaa61 100644
> > --- a/generic/lib/SOURCES
> > +++ b/generic/lib/SOURCES
> > @@ -52,6 +52,7 @@ relational/any.cl
> >  relational/isequal.cl
> >  relational/isgreater.cl
> >  relational/isgreaterequal.cl
> > +relational/isinf.cl
> >  relational/isless.cl
> >  relational/islessequal.cl
> >  relational/isnan.cl
> > diff --git a/generic/lib/relational/isinf.cl b/generic/lib/relational/isinf.cl
> > new file mode 100644
> > index 0000000..1452d91
> > --- /dev/null
> > +++ b/generic/lib/relational/isinf.cl
> > @@ -0,0 +1,18 @@
> > +#include <clc/clc.h>
> > +#include "relational.h"
> > +
> > +_CLC_DEFINE_RELATIONAL_UNARY(int, isinf, __builtin_isinf, float)
> > +
> > +#ifdef cl_khr_fp64
> > +
> > +#pragma OPENCL EXTENSION cl_khr_fp64 : enable
> > +
> > +// The scalar version of isinf(double) returns an int, but the vector versions
> > +// return long.
> > +_CLC_DEF _CLC_OVERLOAD int isinf(double x) {
> > +  return __builtin_isinf(x);
> > +}
> > +
> > +_CLC_DEFINE_RELATIONAL_UNARY_VEC_ALL(long, isinf, double)
> > +
> > +#endif
> > --
> > 1.8.5.5
> >
> >
> > _______________________________________________
> > Libclc-dev mailing list
> > Libclc-dev at pcc.me.uk
> > http://www.pcc.me.uk/cgi-bin/mailman/listinfo/libclc-dev



> _______________________________________________
> Libclc-dev mailing list
> Libclc-dev at pcc.me.uk
> http://www.pcc.me.uk/cgi-bin/mailman/listinfo/libclc-dev





More information about the Libclc-dev mailing list