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

Hal Finkel via llvm-dev llvm-dev at lists.llvm.org
Wed Sep 12 15:25:26 PDT 2018


On 09/12/2018 05:21 PM, Matthias Braun via llvm-dev wrote:
>
>
>> On Sep 12, 2018, at 2:54 PM, Richard Smith via llvm-dev
>> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>
>> On Tue, 11 Sep 2018 at 19:40, Tom Stellard via llvm-dev
>> <llvm-dev at lists.llvm.org <mailto: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> <mailto: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.
> Using lib/CodeGen and going to MIR makes sense if you have to solve
> instruction selection, legalization, scheduling, register/resource
> allocation problems, manage a callstack etc. if you don't need any (or
> most) of that then I think it makes sense to just build a custom IR
> pass rather than invoking the whole codegen machinery.
>
>>  
>>
>>     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.
> Indeed we should still be able to implement the TargetMachine
> interface and get the thing into the TargetMachine registry.

I agree. Isn't this the way that the C backend used to work?

 -Hal

>
> - Matthias
>
>>
>>     -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> <mailto: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/> <http://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/> <http://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> <mailto: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> <mailto: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 <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

-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180912/1011aa83/attachment.html>


More information about the llvm-dev mailing list