[llvm-dev] [RfC] A proposal of adding SPIR-V Toolchain in Clang

Richard Smith via llvm-dev llvm-dev at lists.llvm.org
Wed Sep 12 14:54:12 PDT 2018


On Tue, 11 Sep 2018 at 19:40, Tom Stellard via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> On 09/11/2018 12:50 PM, Richard Smith via llvm-dev wrote:
> > On Mon, 10 Sep 2018 at 18:47, Nicholas Wilson via llvm-dev <
> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
> >
> >     I was going to wait until Neil Trevett got back to me about becoming
> a SPIR-V TSG advisor but this seems like just as good an opportunity.
> Please see the previous discussion [1] if you have not already, there were
> many relevant points made.
> >
> >     First, I’d like to note that while clang may be the primary
> motivator for many of the readers here it is not the only frontend that
> would like to make use of proper SPIR-V support in LLVM. In particular, the
> current implementation of builtins as Itanium with extensions mangled C++
> is much more difficult to use (even if those frontends have a C++ mangler,
> the extensions make it unusable), compared to intrinsics which is _the_ way
> backends for LLVM expose builtins. This is an absolute requirement for me
> for SPIR-V support in upstream LLVM.
> >
> >     I’d much rather have this as a target than as an external library,
> but if it means I get intrinsics faster then I’m all for it.
> >
> >
> > +1. What would be the justification for using an external binary for
> this rather than treating it like any other LLVM backend?
> >
>
> This has been discussed in the past, but I don't think SPIR-V
> is a good fit for an LLVM backend.  It is very similar to LLVM
> IR and it seems like overkill to write a whole backend just to
> do a simple translation.


I don't see how SPIR-V is any different from WebAssembly or PTXAS in this
regard. I also don't see why a "whole backend" is a different amount of
work from a separate program that implements a whole backend.


> Not to mention the fact that I don't
> see how it's possible with the current backend infrastructure
> to preserve type information for complex types like structs all
> the way through the codegen pipeline.
>

The nice thing about code is that it's malleable. If there's a limitation
that prevents SPIR-V being written as an LLVM target, we should just fix
that.

-Tom
>
>
> >
> >     Could you please link the thread mentioned?
> >
> >     Thanks,
> >     Nic
> >
> >     P.S. Feel free to use the tablegen descriptions of the SPIR-V format
> from [2]
> >
> >     [1]: http://lists.llvm.org/pipermail/llvm-dev/2017-May/112538.html
> >     [2]: https://github.com/thewilsonator/llvm-target-spirv
> >
> >>     On 10 Sep 2018, at 11:10 pm, Anastasia Stulova via llvm-dev <
> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
> >>
> >>     Hello,
> >>
> >>     Since 2015 Khronos has switched to the new portable intermediate
> format SPIR-V, which has replaced the original SPIR. The advantage is that
> it offers higher portability across different toolchains. There was a talk
> about it at a Dev Meeting:
> >>
> http://llvm.org/devmtg/2017-03//2017/02/20/accepted-sessions.html#17
> >>
> >>     LLVM currently only supports SPIR format for OpenCL in Clang.
> Several Khronos vendors (ARM, AMD, Intel, Xilinx, Codeplay and others) are
> interested in adding support for SPIR-V, which should gradually replace the
> old SPIR once products are no longer shipped with the old format. Here is
> the detailed description:
> >>
> https://github.com/KhronosGroup/SPIRV-LLVM-Translator/wiki/SPIRV-Toolchain-for-Clang
> >>
> >>     To summarize, the idea is to add a SPIR-V target triple to Clang
> that can be used to generate a SPIR-V binary for OpenCL code. There was a
> separate thread regarding generation of SPIR-V binary and the community
> suggested that a translator from LLVM IR to SPIR-V can be used as an
> external tool, called llvm-spirv. This can be invoked similar to such tools
> as ptxas and fatbinary for the CUDA toolchain:
> >>     http://lists.llvm.org/pipermail/llvm-dev/2018-February/121440.html
> >>
> >>     An example of how Clang can be used to target SPIR-V:
> >>
> >>     clang -c test.cl <http://test.cl> -target
> spirv[32|64]-unknown-unknown -o test.spv
> >>
> >>     This will result in the following Clang actions:
> >>
> >>     (1) clang -cc1 -triple spirv[32|64]-unknown-unknown test.cl <
> http://test.cl> -emit-llvm-bc -o test.bc
> >>
> >>     (2) llvm-spirv test.bc -o test.spv
> >>
> >>     SPIR-V generation is essential for completion of OpenCL C++ support
> in Clang, as newer OpenCL standards require frontend invocation to be
> performed offline, producing the SPIR-V binary that can be then loaded at
> application execution time. Besides that, it will also allow Clang to be
> used as a complete standalone tool to generate portable binaries that can
> then be consumed by different proprietary toolchains. In addition, this
> will open a path to the LLVM backends for various languages and frontends
> that already generate SPIR-V.
> >>
> >>     A more detailed explanation of the complete design proposal is
> given in this Wiki page:
> >>
> https://github.com/KhronosGroup/SPIRV-LLVM-Translator/wiki/SPIRV-Toolchain-for-Clang
> >>
> >>     Looking forward to any feedback about the proposal or possible
> collaborations,
> >>
> >>     Thanks!
> >>
> >>     Anastasia
> >>     _______________________________________________
> >>     LLVM Developers mailing list
> >>     llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
> >>     http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> >
> >     _______________________________________________
> >     LLVM Developers mailing list
> >     llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
> >     http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> >
> >
> >
> > _______________________________________________
> > LLVM Developers mailing list
> > llvm-dev at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> >
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180912/6cfabd03/attachment.html>


More information about the llvm-dev mailing list