[llvm-dev] [RFC] Lanai backend

Sean Silva via llvm-dev
Wed, 10 Feb 2016 00:18:34 -0000

On Tue, Feb 9, 2016 at 2:37 PM, Chris Lattner via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

>
> > On Feb 9, 2016, at 9:40 AM, Jacques Pienaar via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
> >
> > Hi all,
> >
> > We would like to contribute a new backend for the Lanai processor
> (derived from the processor described in [1]).
>
> Hi Jacques,
>
> We generally have a low bar for accepting new “experimental” backends, but
> I think that this is the first proposal to add a target for a hardware that
> general LLVM contributors can’t have access to.  As such, we’ll have to
> figure out as a community whether this makes sense.
>
> Here are the tradeoffs I see of accepting the backend:
>
> 1) I imagine that there is a big win for you, not having to merge with
> mainline.  Maintaining an out of tree backend is a pain :-)
>
> 2) For the community, this is probably a net loss since changes to common
> codegen could would be required to update your backend, but no one else in
> the community would benefit from the target being in mainline.
>
> 3) There is probably a small but non-zero benefit to keeping your team
> working directly on mainline, since you’re more likely to do ancillary work
> in ToT.  If your development is in mainline, this work is most likely to go
> into llvm.org instead of into your local branch.
>
> 4) There could be an educational benefit of having the backend,
> particularly if it has unique challenges to overcome.
>
>
> What do others think about this?  I know that several organizations have
> not even bothered proposing internal-only targets for inclusion in
> llvm.org, since they would effectively be contributing dead code that the
> community would have to maintain.
>

One data point (IIRC) is that the NVPTX backend sat in tree for a long time
without a way to actually use them. But lately this has been opening up
(e.g. http://llvm.org/docs/CompileCudaWithLLVM.html). However, the obstacle
for NVPTX was mostly a software proprietary-ness (no way to plug it into
the driver stack really, except via nvidia's own proprietary software),
whereas the actual hardware was available. For the Lanai stuff, it seems
like the hardware is fundamentally not available for purchase.

The reverse situation is with e.g. Apple's GPU backends, where the devices
are readily available, but (AFAIK) even if the backend were open-source you
couldn't run the code produced by the open-source compiler.

Or to put it in matrix form (this is all heavily prefixed by "AFAIK";
corrections welcome):

AMDGPU:      InTree:Yes DevicesAvailable:Yes CanIRunTheCode:Yes
NVPTX:       InTree:Yes DevicesAvailable:Yes CanIRunTheCode:Yes
Lanai:       InTree:?   DevicesAvailable:No  CanIRunTheCode:No
Apple GPU's: InTree:No  DevicesAvailable:Yes CanIRunTheCode:No

I couldn't come up with a good name for "Can I Run The Code"
column.
Basically it means: "assuming the backend were in open source, could I
actually run the code produced by the open source backend somehow?".

I had a quick look at lib/Target and it seems like every backend we have
has "CanIRunTheCode:Yes" in theory.
IIRC, the NVPTX stuff used to actually be "No" though?

Anyway, just a random thought. Not sure what the conclusion is.

-- Sean Silva


> -Chris
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20160209/ee1df43b/attachment.html>