[Libclc-dev] [PATCH 1/2] Make image builtins r600/llvm-3.9 only

Aaron Watry via Libclc-dev libclc-dev at lists.llvm.org
Tue Oct 10 08:58:52 PDT 2017


On Tue, Oct 10, 2017 at 9:25 AM, Jan Vesely <jan.vesely at rutgers.edu> wrote:
> On Mon, 2017-10-09 at 21:28 -0500, Aaron Watry via Libclc-dev wrote:
>> On Sun, Oct 8, 2017 at 1:23 PM, Jan Vesely via Libclc-dev
>> <libclc-dev at lists.llvm.org> wrote:
>> > On Sun, 2017-10-01 at 14:15 -0400, Jan Vesely wrote:
>> > > The implementation uses r600 specific intrinsics
>> > > LLVM-4 generates calls to functions using _ro_t and _rw_t image types
>> > > Portions of the code can be moved back as more targets/llvm versions add image support
>> > >
>> > > Signed-off-by: Jan Vesely <jan.vesely at rutgers.edu>
>> > > ---
>> > > AMDGPUOpenCLImageTypeLoweringPass relies on old style of kernel metadata
>> > > passing, so I'm pretty sure this does not work in 3.9 either, but it at
>> > > least does not generate external calls.
>> > > I'd like to keep the code around as a reference when someone starts
>> > > resurrecting image builtins.
>> >
>> > ping. this is just a code cleanup. No change in functionality.
>>
>> Looks ok to me.  I agree it would be nice to resurrect image support
>> in newer llvm, so lets keep this around for now.
>
> thanks. Does it apply to 2/2 as well?

Yes, it does.  I just manually tested the check_external_calls.sh
script against both r600 and pitcairn's built libs/aliases on LLVM
6.0, and the image calls are now gone. I don't have a LLVM 3.9 install
around at the moment to test my BARTS with, unfortunately. Maybe I'll
build that release at some point and install it in its own prefix.

>
>>
>> If nothing else, it might give me some ideas on how to make an
>> implicit global buffer available for the printf implementation.
>
> I don't think images are a good model for that. It'd be nicer to use
> standard implicit parameter passing on clover side and
> __buitltin_implicitarg_ptr on libclc side, without any llvm changes.
> (It'd be even nicer if NDRange arguments were converted first, so they
> are all together in one place)
>

Yeah, I have been considering the implicit parameter passing that
clover does, and had been leaning towards attempting to do that with a
>=1MB buffer for printf output. The other thing that will probably be
needed is an atomic counter to keep track of our current location in
that buffer when printing.

I'm a fair bit of the way done with having a clean-slate pure-C
implementation of printf done that matches the CLC requirements that
I've just been testing for identical output against my system printf.
I'll probably post that as an RFC in its pure C form before converting
it to CLC code just to save myself a bit of refactoring effort later
if needed.  Once that's done, I'll take a stab at converting it to
CLC, probably have to bug-fix clang to enable varargs function calls
specifically for printf (CL 2.0 spec, section 6.9 part e specifies
that variadic functions/macros are only allowed for
printf/enqueue_kernel), which I don't believe it allows yet, and then
I'll get the implicit parameter passing set up for clover (hopefully).

--Aaron

> Jan
>
>>
>> --Aaron
>>
>> >
>> > Jan
>> >
>> > >
>> > > Jan
>> > >
>> > >  amdgpu/lib/SOURCES                                        | 14 --------------
>> > >  generic/lib/SOURCES                                       |  1 -
>> > >  r600/lib/SOURCES_3.9                                      | 15 +++++++++++++++
>> > >  {amdgpu => r600}/lib/image/get_image_attributes_impl.ll   |  0
>> > >  {amdgpu => r600}/lib/image/get_image_channel_data_type.cl |  0
>> > >  {amdgpu => r600}/lib/image/get_image_channel_order.cl     |  0
>> > >  {amdgpu => r600}/lib/image/get_image_depth.cl             |  0
>> > >  {generic => r600}/lib/image/get_image_dim.cl              |  0
>> > >  {amdgpu => r600}/lib/image/get_image_height.cl            |  0
>> > >  {amdgpu => r600}/lib/image/get_image_width.cl             |  0
>> > >  {amdgpu => r600}/lib/image/read_image_impl.ll             |  0
>> > >  {amdgpu => r600}/lib/image/read_imagef.cl                 |  0
>> > >  {amdgpu => r600}/lib/image/read_imagei.cl                 |  0
>> > >  {amdgpu => r600}/lib/image/read_imageui.cl                |  0
>> > >  {amdgpu => r600}/lib/image/write_image_impl.ll            |  0
>> > >  {amdgpu => r600}/lib/image/write_imagef.cl                |  0
>> > >  {amdgpu => r600}/lib/image/write_imagei.cl                |  0
>> > >  {amdgpu => r600}/lib/image/write_imageui.cl               |  0
>> > >  18 files changed, 15 insertions(+), 15 deletions(-)
>> > >  create mode 100644 r600/lib/SOURCES_3.9
>> > >  rename {amdgpu => r600}/lib/image/get_image_attributes_impl.ll (100%)
>> > >  rename {amdgpu => r600}/lib/image/get_image_channel_data_type.cl (100%)
>> > >  rename {amdgpu => r600}/lib/image/get_image_channel_order.cl (100%)
>> > >  rename {amdgpu => r600}/lib/image/get_image_depth.cl (100%)
>> > >  rename {generic => r600}/lib/image/get_image_dim.cl (100%)
>> > >  rename {amdgpu => r600}/lib/image/get_image_height.cl (100%)
>> > >  rename {amdgpu => r600}/lib/image/get_image_width.cl (100%)
>> > >  rename {amdgpu => r600}/lib/image/read_image_impl.ll (100%)
>> > >  rename {amdgpu => r600}/lib/image/read_imagef.cl (100%)
>> > >  rename {amdgpu => r600}/lib/image/read_imagei.cl (100%)
>> > >  rename {amdgpu => r600}/lib/image/read_imageui.cl (100%)
>> > >  rename {amdgpu => r600}/lib/image/write_image_impl.ll (100%)
>> > >  rename {amdgpu => r600}/lib/image/write_imagef.cl (100%)
>> > >  rename {amdgpu => r600}/lib/image/write_imagei.cl (100%)
>> > >  rename {amdgpu => r600}/lib/image/write_imageui.cl (100%)
>> > >
>> > > diff --git a/amdgpu/lib/SOURCES b/amdgpu/lib/SOURCES
>> > > index 4414621..ce5fe66 100644
>> > > --- a/amdgpu/lib/SOURCES
>> > > +++ b/amdgpu/lib/SOURCES
>> > > @@ -1,16 +1,2 @@
>> > >  math/nextafter.cl
>> > >  math/sqrt.cl
>> > > -image/get_image_width.cl
>> > > -image/get_image_height.cl
>> > > -image/get_image_depth.cl
>> > > -image/get_image_channel_data_type.cl
>> > > -image/get_image_channel_order.cl
>> > > -image/get_image_attributes_impl.ll
>> > > -image/read_imagef.cl
>> > > -image/read_imagei.cl
>> > > -image/read_imageui.cl
>> > > -image/read_image_impl.ll
>> > > -image/write_imagef.cl
>> > > -image/write_imagei.cl
>> > > -image/write_imageui.cl
>> > > -image/write_image_impl.ll
>> > > diff --git a/generic/lib/SOURCES b/generic/lib/SOURCES
>> > > index f919bc7..12f1271 100644
>> > > --- a/generic/lib/SOURCES
>> > > +++ b/generic/lib/SOURCES
>> > > @@ -167,4 +167,3 @@ shared/vload.cl
>> > >  shared/vstore.cl
>> > >  workitem/get_global_id.cl
>> > >  workitem/get_global_size.cl
>> > > -image/get_image_dim.cl
>> > > diff --git a/r600/lib/SOURCES_3.9 b/r600/lib/SOURCES_3.9
>> > > new file mode 100644
>> > > index 0000000..a44a9ce
>> > > --- /dev/null
>> > > +++ b/r600/lib/SOURCES_3.9
>> > > @@ -0,0 +1,15 @@
>> > > +image/get_image_dim.cl
>> > > +image/get_image_width.cl
>> > > +image/get_image_height.cl
>> > > +image/get_image_depth.cl
>> > > +image/get_image_channel_data_type.cl
>> > > +image/get_image_channel_order.cl
>> > > +image/get_image_attributes_impl.ll
>> > > +image/read_imagef.cl
>> > > +image/read_imagei.cl
>> > > +image/read_imageui.cl
>> > > +image/read_image_impl.ll
>> > > +image/write_imagef.cl
>> > > +image/write_imagei.cl
>> > > +image/write_imageui.cl
>> > > +image/write_image_impl.ll
>> > > diff --git a/amdgpu/lib/image/get_image_attributes_impl.ll b/r600/lib/image/get_image_attributes_impl.ll
>> > > similarity index 100%
>> > > rename from amdgpu/lib/image/get_image_attributes_impl.ll
>> > > rename to r600/lib/image/get_image_attributes_impl.ll
>> > > diff --git a/amdgpu/lib/image/get_image_channel_data_type.cl b/r600/lib/image/get_image_channel_data_type.cl
>> > > similarity index 100%
>> > > rename from amdgpu/lib/image/get_image_channel_data_type.cl
>> > > rename to r600/lib/image/get_image_channel_data_type.cl
>> > > diff --git a/amdgpu/lib/image/get_image_channel_order.cl b/r600/lib/image/get_image_channel_order.cl
>> > > similarity index 100%
>> > > rename from amdgpu/lib/image/get_image_channel_order.cl
>> > > rename to r600/lib/image/get_image_channel_order.cl
>> > > diff --git a/amdgpu/lib/image/get_image_depth.cl b/r600/lib/image/get_image_depth.cl
>> > > similarity index 100%
>> > > rename from amdgpu/lib/image/get_image_depth.cl
>> > > rename to r600/lib/image/get_image_depth.cl
>> > > diff --git a/generic/lib/image/get_image_dim.cl b/r600/lib/image/get_image_dim.cl
>> > > similarity index 100%
>> > > rename from generic/lib/image/get_image_dim.cl
>> > > rename to r600/lib/image/get_image_dim.cl
>> > > diff --git a/amdgpu/lib/image/get_image_height.cl b/r600/lib/image/get_image_height.cl
>> > > similarity index 100%
>> > > rename from amdgpu/lib/image/get_image_height.cl
>> > > rename to r600/lib/image/get_image_height.cl
>> > > diff --git a/amdgpu/lib/image/get_image_width.cl b/r600/lib/image/get_image_width.cl
>> > > similarity index 100%
>> > > rename from amdgpu/lib/image/get_image_width.cl
>> > > rename to r600/lib/image/get_image_width.cl
>> > > diff --git a/amdgpu/lib/image/read_image_impl.ll b/r600/lib/image/read_image_impl.ll
>> > > similarity index 100%
>> > > rename from amdgpu/lib/image/read_image_impl.ll
>> > > rename to r600/lib/image/read_image_impl.ll
>> > > diff --git a/amdgpu/lib/image/read_imagef.cl b/r600/lib/image/read_imagef.cl
>> > > similarity index 100%
>> > > rename from amdgpu/lib/image/read_imagef.cl
>> > > rename to r600/lib/image/read_imagef.cl
>> > > diff --git a/amdgpu/lib/image/read_imagei.cl b/r600/lib/image/read_imagei.cl
>> > > similarity index 100%
>> > > rename from amdgpu/lib/image/read_imagei.cl
>> > > rename to r600/lib/image/read_imagei.cl
>> > > diff --git a/amdgpu/lib/image/read_imageui.cl b/r600/lib/image/read_imageui.cl
>> > > similarity index 100%
>> > > rename from amdgpu/lib/image/read_imageui.cl
>> > > rename to r600/lib/image/read_imageui.cl
>> > > diff --git a/amdgpu/lib/image/write_image_impl.ll b/r600/lib/image/write_image_impl.ll
>> > > similarity index 100%
>> > > rename from amdgpu/lib/image/write_image_impl.ll
>> > > rename to r600/lib/image/write_image_impl.ll
>> > > diff --git a/amdgpu/lib/image/write_imagef.cl b/r600/lib/image/write_imagef.cl
>> > > similarity index 100%
>> > > rename from amdgpu/lib/image/write_imagef.cl
>> > > rename to r600/lib/image/write_imagef.cl
>> > > diff --git a/amdgpu/lib/image/write_imagei.cl b/r600/lib/image/write_imagei.cl
>> > > similarity index 100%
>> > > rename from amdgpu/lib/image/write_imagei.cl
>> > > rename to r600/lib/image/write_imagei.cl
>> > > diff --git a/amdgpu/lib/image/write_imageui.cl b/r600/lib/image/write_imageui.cl
>> > > similarity index 100%
>> > > rename from amdgpu/lib/image/write_imageui.cl
>> > > rename to r600/lib/image/write_imageui.cl
>> >
>> > --
>> > Jan Vesely <jan.vesely at rutgers.edu>
>> > _______________________________________________
>> > Libclc-dev mailing list
>> > Libclc-dev at lists.llvm.org
>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/libclc-dev
>> >
>>
>> _______________________________________________
>> Libclc-dev mailing list
>> Libclc-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/libclc-dev


More information about the Libclc-dev mailing list