<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"Book Antiqua";
        panose-1:2 4 6 2 5 3 5 3 3 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Book Antiqua",serif;
        color:#943634;
        font-weight:normal;
        font-style:normal;
        text-decoration:none none;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-IE link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;color:black;mso-fareast-language:EN-US'>I am one of these users.<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;color:black;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;color:black;mso-fareast-language:EN-US'>Ideally (for my audience), I would like to be able to emit SPIR-V from the Front-End natively, and then consume SPIR-V in the back-end natively.<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;color:black;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;color:black;mso-fareast-language:EN-US'>While working with an intermediate externalised tool that converts between LLVM-IR and SPIR-V is workable, it is not at all convenient.  At the very least, it would be desirable to have an option; ‘</span><span style='font-family:"Courier New";color:black;mso-fareast-language:EN-US'>-emit-spirv</span><span style='font-family:"Book Antiqua",serif;color:black;mso-fareast-language:EN-US'>’ for example; that allowed the FE to produce SPIR-V analogous to how ‘</span><span style='font-family:"Courier New";color:black;mso-fareast-language:EN-US'>-emit-llvm</span><span style='font-family:"Book Antiqua",serif;color:black;mso-fareast-language:EN-US'>’ works today.<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;color:black;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;color:black;mso-fareast-language:EN-US'>And on the other end, it would also be convenient if the Back-End could accept SPIR-V as an accepted source format, perhaps using an community agreed convention for the file’s extension.<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;color:black;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;color:black;mso-fareast-language:EN-US'>But even if CLang/LLVM were merely to invoke the external conversion automatically, this would be more-or-less adequate to ensure a seamless SPIR-V development pipeline (my preference is integrated).<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;color:black;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;color:black;mso-fareast-language:EN-US'>It also opens up the opportunity for 3<sup>rd</sup> party DSL front-end developers to engage with LLVM without being concerned about future versionability.<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;color:black;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;color:black;mso-fareast-language:EN-US'>            MartinO<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Book Antiqua",serif;color:black;mso-fareast-language:EN-US'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'>From:</span></b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'> llvm-dev [mailto:llvm-dev-bounces@lists.llvm.org] <b>On Behalf Of </b>Anastasia Stulova via llvm-dev<br><b>Sent:</b> 06 March 2018 18:54<br><b>To:</b> Chris Lattner <clattner@nondot.org><br><b>Cc:</b> llvm-dev@lists.llvm.org; nd <nd@arm.com>; Tomeu Vizoso <tomeu.vizoso@collabora.com><br><b>Subject:</b> Re: [llvm-dev] SPIRV-LLVM as an external tool<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><div id=divtagdefaultwrapper><p><span style='font-family:"Calibri",sans-serif;color:black'>Hi Chris,<o:p></o:p></span></p><p><span style='font-family:"Calibri",sans-serif;color:black'><o:p> </o:p></span></p><p><span style='font-family:"Calibri",sans-serif;color:black'>The main benefit for LLVM to include SPIRV support directly is to increase the number of users and developers in the area of heterogeneous computing, e.g. GPUs, FPGAs, DSPs. <o:p></o:p></span></p><p><span style='font-family:"Calibri",sans-serif;color:black'><o:p> </o:p></span></p><p><span style='font-family:"Calibri",sans-serif;color:black'>We want to increase the number of such devices that LLVM natively supports by adding compilation to SPIRV due to the shortage of proprietary backends in upstream LLVM.<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Calibri",sans-serif;color:black'><br>Just to clarify we are currently suggesting to integrate the converter as a subproject of LLVM, similar to Clang or libclc, to reduce the overhead for the overall community in maintaining it and running tests. <o:p></o:p></span></p><p><span style='font-family:"Calibri",sans-serif;color:black'><o:p> </o:p></span></p><p><span style='font-family:"Calibri",sans-serif;color:black'>One more thing to be mentioned, the latest OpenCL standards evolve towards off-line compilation from OpenCL C++ to SPIRV. So having SPIRV generation directly in LLVM would allow us to deliver fully complete and compliant OpenCL C++ support, without using any external tools. See discussion with Tom earlier.<o:p></o:p></span></p><p><span style='font-family:"Calibri",sans-serif;color:black'><o:p> </o:p></span></p><p><span style='font-family:"Calibri",sans-serif;color:black'>Thanks!<o:p></o:p></span></p><p><span style='font-family:"Calibri",sans-serif;color:black'>Anastasia<o:p></o:p></span></p><p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-family:"Calibri",sans-serif;color:black'><o:p> </o:p></span></p><div><div class=MsoNormal align=center style='text-align:center'><span style='font-family:"Calibri",sans-serif;color:black'><hr size=2 width="98%" align=center></span></div><div id=divRplyFwdMsg><p class=MsoNormal><b><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:black'>From:</span></b><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:black'> Chris Lattner <<a href="mailto:clattner@nondot.org">clattner@nondot.org</a>><br><b>Sent:</b> 01 March 2018 01:52<br><b>To:</b> <a href="mailto:tstellar@redhat.com">tstellar@redhat.com</a><br><b>Cc:</b> Anastasia Stulova; Tomeu Vizoso; <a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>; nd<br><b>Subject:</b> Re: [llvm-dev] SPIRV-LLVM as an external tool</span><span style='font-family:"Calibri",sans-serif;color:black'> <o:p></o:p></span></p><div><p class=MsoNormal><span style='font-family:"Calibri",sans-serif;color:black'> <o:p></o:p></span></p></div></div><div><div><p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:black'>On Feb 27, 2018, at 10:25 AM, Tom Stellard via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br>> On 02/27/2018 05:07 AM, Anastasia Stulova wrote:<br>>>> SPIR-V does not have to be a part of LLVM for you to do this.  You can add<br>>>> the SPIR-V target to clang and then define a SPIR-V toolchain (i.e. clang/Driver/Toolchains)<br>>>> that uses the external tool to translate LLVM IR to SPIR-V.<br>>> <br>>> <br>>> Ok. I guess if Clang community accepts this way, it would be better to set up the SPIRV converter as a tool of LLVM.<br>>> <br>>> So the question is are there any downsides of this? Or would anyone object if we add the converter to the LLVM project as an optional tool? We would of course take care of configuring and maintaining it ourselves.<br>> <br>> There is no requirement that the tool needs to be an official part of the LLVM<br>> project to implement to use it this way  For example, the cuda toolchain<br>> in clang relies on a few proprietary tools from NVIDIA.<br>> <br>> I think too much emphasis is being placed on having this tool be part of the<br>> LLVM project.<br><br>Agreed.  Why is it good for LLVM to include this tool?<br><br>If there was a strong rationale for doing so, it would probably make sense to be a new subproject of some sort rather than included in the main llvm repo (not sure if that is what was being proposed).<br><br>-Chris<br><br><o:p></o:p></span></p></div></div></div></div></div></body></html>