<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, "EmojiFont", "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p style="margin-top:0;margin-bottom:0">Hi Justin,</p>
<p style="margin-top:0;margin-bottom:0"><br>
</p>
<p style="margin-top:0;margin-bottom:0">Since we are discussing the option of invoking external tools (not just for emitting the binary btw) and Richard has raised a number of important concerns, we were just wondering if you have any good recommendations from
your experience of using external tools. <br>
</p>
<p style="margin-top:0;margin-bottom:0"><br>
</p>
<p style="margin-top:0;margin-bottom:0"><span>> For example, for a user who builds a particular SVN revision of Clang and LLVM, how are they to determine the corresponding revision of llvm-spirv that accepts the LLVM IR produced by that version of LLVM? How
often will such a version of llvm-spirv even exist? If llvm-spirv is lagging behind LLVM trunk (as I would expect it to if it's maintained out-of-tree), would that mean that people who track clang and LLVM trunk (which is a thing we encourage people to do)
can't use it?</span></p>
<p style="margin-top:0;margin-bottom:0"><span><br>
</span></p>
<p style="margin-top:0;margin-bottom:0"><span>Thanks,</span></p>
<p style="margin-top:0;margin-bottom:0"><span>Anastasia</span><br>
</p>
<br>
<div style="color: rgb(0, 0, 0);">
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" face="Calibri, sans-serif" color="#000000"><b>From:</b> Justin Lebar <jlebar@google.com><br>
<b>Sent:</b> 14 September 2018 17:47<br>
<b>To:</b> Anastasia Stulova<br>
<b>Cc:</b> Richard Smith; nd; cfe-dev; Sumner, Brian<br>
<b>Subject:</b> Re: [cfe-dev] [llvm-dev] [RfC] A proposal of adding SPIR-V Toolchain in Clang</font>
<div> </div>
</div>
<meta content="text/html; charset=utf-8">
<div>
<div dir="ltr">
<div dir="ltr">> Currently llvm-spirv completely aligns development process with the main LLVM. And we even started the same release structure starting from the last release 7.0. I assume similar problems arise with the other external tools, for example with
CUDA tools - ptxas and fatbinary? And yet it seems the solutions have been found. If that is the main issue I am happy to have discussion with people working on CUDA to understand their process better and adapt whatever necessary. </div>
<div dir="ltr"><br>
</div>
<div dir="ltr">Hi, LLVM CUDA person here.</div>
<div dir="ltr"><br>
</div>
<div dir="ltr">We treat ptxas and fatbinary as external tools, akin to an assembler and linker. As far as clang/llvm is concerned, we have a "proper LLVM backend" targeting PTX. You don't need ptxas at all in order to compile and run a CUDA file (the GPU
driver will happily compile ptx -> machine code at runtime), although today you do need fatbinary.</div>
<div><br>
</div>
<div>Without taking a position on the question of whether SPIR-V should or should not happen via proper LLVM backend or a separate tool, I don't see the connection between CUDA support in clang/llvm and an argument that we should use a separate tool.</div>
<div dir="ltr">
<div><br>
</div>
<div>-Justin</div>
</div>
</div>
<br>
<div class="x_gmail_quote">
<div dir="ltr">On Fri, Sep 14, 2018 at 5:06 AM Anastasia Stulova via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br>
</div>
<blockquote class="x_gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
<div dir="ltr">
<div id="x_m_-7655146865895252283divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:rgb(0,0,0); font-family:Calibri,Helvetica,sans-serif,"EmojiFont","Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<p style="margin-top:0; margin-bottom:0"></p>
<div>> For example, for a user who builds a particular SVN revision of Clang and LLVM, how are they to determine the corresponding revision of llvm-spirv that accepts the LLVM IR produced by that version of LLVM? How often will such a version of llvm-spirv
even exist? If llvm-spirv is lagging behind LLVM trunk (as I would expect it to if it's maintained out-of-tree), would that mean that people who track clang and LLVM trunk (which is a thing we encourage people to do) can't use it?<br>
<br>
</div>
<div>Currently llvm-spirv completely aligns development process with the main LLVM. And we even started the same release structure starting from the last release 7.0. I assume similar problems arise with the other external tools, for example with CUDA tools
- ptxas and fatbinary? And yet it seems the solutions have been found. If that is the main issue I am happy to have discussion with people working on CUDA to understand their process better and adapt whatever necessary.
<br>
</div>
<br>
<p></p>
Another question is how will we handle other use cases - like importing SPIR-V modules and compiling into let's say AMD GPU binary? Can we use the external tool for these cases?<br>
<br>
><span>As an alternative, you could maintain your SPIR-V target entirely out of tree as your own fork of Clang. That way, you get to ensure that your Clang fork and the version of LLVM IR that your tool accepts stay in sync.</span><br>
<br>
As for the current OpenCL C++ support and development of other new features in OpenCL, what target can we use to develop new code? My team doesn't work for AMD so targeting AMD is not an option for us and some other teams have the same problem with out of tree
backends. Old SPIR is discontinued by Khronos to be replaced by SPIR-V eventually. Would adding Clang triple <span style="font-family:Calibri,Helvetica,sans-serif">at least be
</span>something acceptable in the main code base? This would allow us to continue developing the main frontend features in the main code base.
<br>
<br>
Cheers,<br>
Anastasia<br>
<br>
<div style="color:rgb(0,0,0)">
<hr style="display:inline-block; width:98%">
<div id="x_m_-7655146865895252283divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" face="Calibri, sans-serif" color="#000000"><b>From:</b> Richard Smith <<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>><br>
<b>Sent:</b> 14 September 2018 00:04<br>
<b>To:</b> Anastasia Stulova<br>
<b>Cc:</b> Tom Stellard; Clang Dev; nd; Sumner, Brian<br>
<b>Subject:</b> Re: [cfe-dev] [llvm-dev] [RfC] A proposal of adding SPIR-V Toolchain in Clang</font>
<div> </div>
</div>
<div>
<div dir="ltr">
<div class="x_m_-7655146865895252283x_gmail_quote">
<div>Clang is the C language family frontend for LLVM. You will need extremely strong justification if you want Clang to support a target that LLVM does not support.</div>
<div><br>
</div>
<div>An external tool seems to provide a *vastly* worse experience for our users than an integrated LLVM backend. For example, for a user who builds a particular SVN revision of Clang and LLVM, how are they to determine the corresponding revision of llvm-spirv
that accepts the LLVM IR produced by that version of LLVM? How often will such a version of llvm-spirv even exist? If llvm-spirv is lagging behind LLVM trunk (as I would expect it to if it's maintained out-of-tree), would that mean that people who track clang
and LLVM trunk (which is a thing we encourage people to do) can't use it?</div>
<div><br>
</div>
<div>I still don't see why SPIR-V should be treated as being any different from any other target that Clang can compile for. Everyone wants to believe that their own target or feature or build mode is special and different, but if we actually go down that path
the result will be an unmaintainable mess. We have infrastructure for the precise purpose of allowing targets to specify how to lower LLVM IR to their desired format. You should use it rather than inventing a new approach. And if it doesn't fit your target,
you should generalize it until it does. Yes, this is more work for you, but the end result is better for everyone.</div>
<div><br>
</div>
<div>As an alternative, you could maintain your SPIR-V target entirely out of tree as your own fork of Clang. That way, you get to ensure that your Clang fork and the version of LLVM IR that your tool accepts stay in sync. I'd prefer you don't take that path,
and that you make SPIR-V a proper LLVM backend instead.</div>
<div dir="ltr"><br>
</div>
<div dir="ltr">On Thu, 13 Sep 2018 at 12:00, Anastasia Stulova via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>> wrote:<br>
</div>
<blockquote class="x_m_-7655146865895252283x_gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
<div dir="ltr">
<div id="x_m_-7655146865895252283x_m_6085321555889825863divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:rgb(0,0,0); font-family:Calibri,Helvetica,sans-serif,"EmojiFont","Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<div id="x_m_-7655146865895252283x_m_6085321555889825863divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:rgb(0,0,0); font-family:Calibri,Helvetica,sans-serif,"EmojiFont","Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols">
<p style="margin-top:0; margin-bottom:0">I feel this thread is now diverging into various directions. I agree that exploring available alternatives is important. But at this point I would like to be clear first about the problems with the current solution
in the format of an external tool proposed here?</p>
<p style="margin-top:0; margin-bottom:0"><br>
</p>
<p style="margin-top:0; margin-bottom:0">Just to highlight, after the last discussion on llvm-dev <a href="http://lists.llvm.org/pipermail/llvm-dev/2018-February/121440.html" class="x_m_-7655146865895252283x_m_6085321555889825863OWAAutoLink" target="_blank">http://lists.llvm.org/pipermail/llvm-dev/2018-February/121440.html</a>
we were working on this last idea that seems to be extremely light weight and nearly transparent for the LLVM community:</p>
<p style="margin-top:0; margin-bottom:0">- The tool is a part of an external repo and doesn't reside in the LLVM space at all.</p>
<p style="margin-top:0; margin-bottom:0">- Clang will have a thin layer of extra toolchain with the translator tool invocation bypassing the backend stage (only driver actions will be tested and generated IR if needed, no installation of the tool in the LLVM
workspace will be required).</p>
<p style="margin-top:0; margin-bottom:0"><br>
</p>
<p style="margin-top:0; margin-bottom:0">Also to highlight some extra points to consider:</p>
<p style="margin-top:0; margin-bottom:0">- Producing SPIR-V binary is only one set of the use cases we would like to cover. We also would like to be able to import SPIR-V modules and further perform the end binary generation (for example for AMD GPU), for which
we still need to invoke the tool for reverse translation (SPIR-V2LLVMIR). More details are in
<a href="https://github.com/KhronosGroup/SPIRV-LLVM-Translator/wiki/SPIRV-Toolchain-for-Clang" rel="noreferrer" target="_blank">
https://github.com/KhronosGroup/SPIRV-LLVM-Translator/wiki/SPIRV-Toolchain-for-Clang</a><br>
</p>
<p style="margin-top:0; margin-bottom:0">- Clang users need a target that opens a path to proprietary backends for OpenCL (which most of backends are!) without going into vendor toolchains.
<span>Current SPIR triple is unsupported by the new OpenCL standards.</span><br>
</p>
- SPIR-V is a higher level format than PTX because it doesn't target just one GPU family but a number of very different devices: GPUs, DSPs, FPGAs, custom accelerators. In fact in some cases it's even higher level than LLVM IR (It doesn't have any target info,
for example).<br>
- Several vendors were looking into SPIR-V backend and even prototyped this approach. The conclusion was it is not very suitable conceptually and therefore has extra complications if compared to traditional backend (not to say about the implementation effort).
The benefits are very unclear to us apart from the integration with the rest of LLVM (OpenCL frontend mainly). But for this we would like to get some flexibility in order not to be forced to do something that might not be suitable to us.<br>
<br>
Let me know if any further elaboration is needed for those topics. Also we had a number of threads about the SPIR-V backend before. Here is the link to one of the old ones:<br>
<a href="http://lists.llvm.org/pipermail/llvm-dev/2015-June/086905.html" class="x_m_-7655146865895252283x_m_6085321555889825863OWAAutoLink" target="_blank">http://lists.llvm.org/pipermail/llvm-dev/2015-June/086905.html</a><br>
<br>
Cheers,<br>
Anastasia<br>
<p style="margin-top:0; margin-bottom:0"><br>
</p>
</div>
<hr style="display:inline-block; width:98%">
<div id="x_m_-7655146865895252283x_m_6085321555889825863divRplyFwdMsg" dir="ltr">
<font style="font-size:11pt" face="Calibri, sans-serif" color="#000000"><b>From:</b> llvm-dev <<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@lists.llvm.org</a>> on behalf of Richard Smith via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
<b>Sent:</b> 13 September 2018 02:08:04<br>
<b>To:</b> Tom Stellard<br>
<b>Cc:</b> llvm-dev; nd; Clang Dev; Sumner, Brian<br>
<b>Subject:</b> Re: [llvm-dev] [cfe-dev] [RfC] A proposal of adding SPIR-V Toolchain in Clang</font>
<div> </div>
</div>
<div>
<div dir="ltr">
<div class="x_m_-7655146865895252283x_m_6085321555889825863x_gmail_quote">
<div dir="ltr">On Wed, 12 Sep 2018 at 17:15, Tom Stellard via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>> wrote:<br>
</div>
<blockquote class="x_m_-7655146865895252283x_m_6085321555889825863x_gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
On 09/12/2018 05:04 PM, Richard Smith wrote:<br>
> On Wed, 12 Sep 2018 at 16:52, Tom Stellard via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a> <mailto:<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>>> wrote:<br>
> <br>
> On 09/12/2018 02:32 PM, Matthias Braun wrote:<br>
> ><br>
> ><br>
> >> On Sep 11, 2018, at 7:39 PM, Tom Stellard via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a> <mailto:<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>>> wrote:<br>
> >><br>
> >> On 09/11/2018 12:50 PM, Richard Smith via llvm-dev wrote:<br>
> >>> On Mon, 10 Sep 2018 at 18:47, Nicholas Wilson via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a> <mailto:<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> <mailto:<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>
<mailto:<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>>>> wrote:<br>
> >>><br>
> >>> 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.<br>
> >>><br>
> >>> 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.<br>
> >>><br>
> >>> 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.<br>
> >>><br>
> >>><br>
> >>> +1. What would be the justification for using an external binary for this rather than treating it like any other LLVM backend?<br>
> >>><br>
> >><br>
> >> This has been discussed in the past, but I don't think SPIR-V<br>
> >> is a good fit for an LLVM backend. It is very similar to LLVM<br>
> >> IR and it seems like overkill to write a whole backend just to<br>
> >> do a simple translation. Not to mention the fact that I don't<br>
> >> see how it's possible with the current backend infrastructure<br>
> >> to preserve type information for complex types like structs all<br>
> >> the way through the codegen pipeline.<br>
> ><br>
> > Note that even when not using lib/CodeGen (which is indeed a bad fit here), you should still be able to implement the TargetMachine interface (and return nullptr for most of the methods in there) so it behaves like the other LLVM backend on the outside
API.<br>
> ><br>
> <br>
> In the past one of the arguments against doing this is that when you<br>
> have a target that doesn't use the common legalization/lowering framework<br>
> then it makes changes to the IR that much more burdensome, because<br>
> you now have one more thing to update in addition to SelectionDAG,<br>
> GlobalISel, and FastISel. And then what happens if we end up with<br>
> multiple targets like this?<br>
> <br>
> <br>
> We have to pay that cost regardless of whether it's part of maintaining llvm-spirv or part of maintaining a SPIR-V backend, though, don't we?<br>
> <br>
<br>
This all depends on if llvm-spirv becomes an official sub-project or not, which<br>
is a whole other discussion, but if it does then yes the cost would be the same.<br>
</blockquote>
<div><br>
</div>
<div>If compiling to SPIR-V is not officially something that LLVM can do, then supporting that target in Clang *at all* is whole other discussion we need to have.</div>
<div> </div>
<blockquote class="x_m_-7655146865895252283x_m_6085321555889825863x_gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
-Tom<br>
<br>
> I do think having some having some kind of TargeMachine wrapper<br>
> around an IR pass(es) would be a good technical solution, though, if<br>
> we can find a way to keep the support burden minimal, especially<br>
> since the LLVM IR -> SPIR-V translation code already exists.<br>
> <br>
> -Tom<br>
> <br>
> > - Matthias<br>
> ><br>
> >><br>
> >> -Tom<br>
> >><br>
> >><br>
> >>><br>
> >>> Could you please link the thread mentioned?<br>
> >>><br>
> >>> Thanks,<br>
> >>> Nic<br>
> >>><br>
> >>> P.S. Feel free to use the tablegen descriptions of the SPIR-V format from [2]<br>
> >>><br>
> >>> [1]: <a href="http://lists.llvm.org/pipermail/llvm-dev/2017-May/112538.html" rel="noreferrer" target="_blank">
http://lists.llvm.org/pipermail/llvm-dev/2017-May/112538.html</a><br>
> >>> [2]: <a href="https://github.com/thewilsonator/llvm-target-spirv" rel="noreferrer" target="_blank">
https://github.com/thewilsonator/llvm-target-spirv</a><br>
> >>><br>
> >>>> 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> <mailto:<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> <mailto:<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>
<mailto:<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>>>> wrote:<br>
> >>>><br>
> >>>> 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" rel="noreferrer" 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" rel="noreferrer" 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" rel="noreferrer" 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" rel="noreferrer" target="_blank">
test.cl</a> <<a href="http://test.cl" rel="noreferrer" target="_blank">http://test.cl</a>> <<a href="http://test.cl" rel="noreferrer" target="_blank">http://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" rel="noreferrer" target="_blank">
test.cl</a> <<a href="http://test.cl" rel="noreferrer" target="_blank">http://test.cl</a>> <<a href="http://test.cl" rel="noreferrer" target="_blank">http://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" rel="noreferrer" 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> <mailto:<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> <mailto:<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>
<mailto:<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>
> >>><br>
> >>> _______________________________________________<br>
> >>> LLVM Developers mailing list<br>
> >>> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a> <mailto:<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> <mailto:<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>
<mailto:<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>
> >>><br>
> >>><br>
> >>><br>
> >>> _______________________________________________<br>
> >>> LLVM Developers mailing list<br>
> >>> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a> <mailto:<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>
> >>><br>
> >><br>
> >> _______________________________________________<br>
> >> LLVM Developers mailing list<br>
> >> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a> <mailto:<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>
> ><br>
> <br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a> <mailto:<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>
> <br>
<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote>
</div>
</div>
</div>
</div>
</div>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote>
</div>
</div>
</div>
</div>
</body>
</html>