<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Mon, 10 Sep 2018 at 18:47, Nicholas Wilson via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div style="word-wrap:break-word">
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.
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>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.</div></div></blockquote><div><br></div><div>+1. What would be the justification for using an external binary for this rather than treating it like any other LLVM backend?<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">
<div>Could you please link the thread mentioned?</div>
<div><br>
</div>
<div>Thanks,</div>
<div>Nic</div>
<div><br>
</div>
<div>P.S. Feel free to use the tablegen descriptions of the SPIR-V format from [2]</div>
<div>
<div><br>
</div>
<div>[1]: <a href="http://lists.llvm.org/pipermail/llvm-dev/2017-May/112538.html" target="_blank">http://lists.llvm.org/pipermail/llvm-dev/2017-May/112538.html</a></div>
<div>[2]: <a href="https://github.com/thewilsonator/llvm-target-spirv" target="_blank">
https://github.com/thewilsonator/llvm-target-spirv</a> </div>
<div><br>
</div>
<div>
<div>
<blockquote type="cite">
<div>On 10 Sep 2018, at 11:10 pm, Anastasia Stulova via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:</div>
<br class="m_-7177700753661718874Apple-interchange-newline">
<div>
<div>Hello,<br>
<br>
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:<br>
<a href="http://llvm.org/devmtg/2017-03//2017/02/20/accepted-sessions.html#17" target="_blank">http://llvm.org/devmtg/2017-03//2017/02/20/accepted-sessions.html#17</a><br>
<br>
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:<br>
<a href="https://github.com/KhronosGroup/SPIRV-LLVM-Translator/wiki/SPIRV-Toolchain-for-Clang" target="_blank">https://github.com/KhronosGroup/SPIRV-LLVM-Translator/wiki/SPIRV-Toolchain-for-Clang</a><br>
<br>
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:<br>
<a href="http://lists.llvm.org/pipermail/llvm-dev/2018-February/121440.html" target="_blank">http://lists.llvm.org/pipermail/llvm-dev/2018-February/121440.html</a><br>
<br>
An example of how Clang can be used to target SPIR-V:<br>
<br>
clang -c <a href="http://test.cl" target="_blank">test.cl</a> -target spirv[32|64]-unknown-unknown -o test.spv<br>
<br>
This will result in the following Clang actions:<br>
<br>
(1) clang -cc1 -triple spirv[32|64]-unknown-unknown <a href="http://test.cl" target="_blank">test.cl</a> -emit-llvm-bc -o test.bc<br>
<br>
(2) llvm-spirv test.bc -o test.spv<br>
<br>
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.<br>
<br>
A more detailed explanation of the complete design proposal is given in this Wiki page:<br>
<a href="https://github.com/KhronosGroup/SPIRV-LLVM-Translator/wiki/SPIRV-Toolchain-for-Clang" target="_blank">https://github.com/KhronosGroup/SPIRV-LLVM-Translator/wiki/SPIRV-Toolchain-for-Clang</a><br>
<br>
Looking forward to any feedback about the proposal or possible collaborations,<br>
<br>
Thanks!<br>
<br>
Anastasia<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</div>

_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div></div>