<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<meta content="text/html; charset=UTF-8">
<style type="text/css" style="">
<!--
p
        {margin-top:0;
        margin-bottom:0}
-->
</style>
<div dir="ltr">
<div id="x_divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:#000000; font-family:Calibri,Arial,Helvetica,sans-serif">
<p><span style="color:rgb(33,33,33); font-size:15px">Hi all, I'd like to kick this discussion off again, and summarise the points that have been expressed so far.</span><br style="color:rgb(33,33,33); font-size:15px">
<br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px">Firstly, as a member of Khronos, I'd like to state that this would be a very interesting development.</span><br style="color:rgb(33,33,33); font-size:15px">
<br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px">Khronos, for those who don't know, is a standards body developing open standards for accelerating rich media content on a wide variety of platforms, including GPUs as an example.</span><br style="color:rgb(33,33,33); font-size:15px">
<br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px">Khronos is made up of a large number of companies across a range of industries, but as an example, ARM, Google, Intel, Imagination are all members.</span><br style="color:rgb(33,33,33); font-size:15px">
<br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px">Khronos members are already working on writing backend for llvm that retarget SPIR-V, for example, taking LLVM-IR compiled from OpenCL and targeting this at something that can accept Vulkan, so there is clear
 interest within the community to see this happen.</span><br style="color:rgb(33,33,33); font-size:15px">
<br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px">Firstly, there are a number of benefits to having SPIR-V in LLVM as a backend, both to SPIR-V, the ecosystem and to LLVM.</span><br style="color:rgb(33,33,33); font-size:15px">
<br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px"> * Allows any frontend targeting llvm to also target SPIR-V</span><br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px"> * Improves robustness of open source tooling for SPIR-V</span><br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px"> * Single place for toolchain - People don't need to knit repositories together from multiple locations</span><br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px"> * Compatibility between LLVM and SPIR-V - As SPIR-V is integrated it will always track top of tree</span><br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px"> * We can create a target triple to subset what dialect of SPIR-V we are targeting</span><br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px"> * Using the aforementioned triple we can guide optimisations that take target information</span><br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px"> * Challenges of implementing SPIR-V backend can influence LLVM backend development, to improve LLVM usability by less conventional targets</span><br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px"> * Benefits LLVM by improving support for GPU code generation specifically</span><br style="color:rgb(33,33,33); font-size:15px">
<br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px">I'd also like to touch specifically on a point that I believe was originally made by Tom.</span><br style="color:rgb(33,33,33); font-size:15px">
<br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px">If the initial implementation of the SPIR-V backend went straight for GlobalISel and only GlobalISel then we would remove the need to worry about SelectionDAG and would remove some of the complexity from the
 translation step.</span><br style="color:rgb(33,33,33); font-size:15px">
<br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px">So as a proposal, could I suggest the following next steps?</span><br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px">1) Add a dummy SPIR-V target machine to llvm, replete with target triple</span><br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px">2) Implement an experimental backend making use of globalisel to target SPIR-V code generation</span><br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px">3) Add tests to verify correct execution</span><br style="color:rgb(33,33,33); font-size:15px">
<br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px">Moving forward, the plan would be to develop this into a fully featured and complete backend, with a complete set of tests, but targeting GlobalISel exclusively.</span><br style="color:rgb(33,33,33); font-size:15px">
<br style="color:rgb(33,33,33); font-size:15px">
<span style="color:rgb(33,33,33); font-size:15px">Neil</span><br>
</p>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> llvm-dev <llvm-dev-bounces@lists.llvm.org> on behalf of Michael Kruse via llvm-dev <llvm-dev@lists.llvm.org><br>
<b>Sent:</b> 10 May 2017 15:05:22<br>
<b>To:</b> tstellar@redhat.com<br>
<b>Cc:</b> llvm-dev@lists.llvm.org<br>
<b>Subject:</b> Re: [llvm-dev] [SPIR-V] SPIR-V in LLVM</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText">2017-05-03 21:04 GMT+02:00 Tom Stellard via llvm-dev <llvm-dev@lists.llvm.org>:<br>
> So there are really two questions here:<br>
> 1. Should targets be required to use SelectionDAG/GlobalISEL ?<br>
<br>
In the past we also had a C and an LLVM-IR builder-backend (also known<br>
as Cpp backend)  which did not use instruction selection. That is,<br>
there are other uses cases for non-SelectionDAG/GlobalISEL backends.<br>
<br>
I have no use for the Cpp backend, but a revival of the C backend<br>
could be interesting.<br>
<br>
Michael<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
llvm-dev@lists.llvm.org<br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</div>
</span></font>
</body>
</html>