[LLVMdev] [RFC] Upstreaming LLVM/SPIR-V converter

Owen Anderson resistor at mac.com
Tue May 19 08:30:51 PDT 2015


> On May 19, 2015, at 1:25 AM, Neil Henning <llvm at duskborn.com> wrote:
> 
> The problem is - as Sean and Pete (and others before) have pointed out, from a users perspective they'll want to say 'clang make me SPIR-V’.

The *entire point* of my email was that that is only one of two use cases of SPIR-V.  As I said above, it’s a serialization format between a frontend and a backend, which means that for some clients it is an output format and for others it’s an input format.  It’s also likely that SPIR-V to SPIR-V translators will exist in the future.

> There are things in SPIR-V that are not representable by the LLVM IR, so we'd have to add SPIR-V specific intrinsics for this (again making the case for having it as a target more palatable),

Why does that motivate it being a target?  Intrinsics do not have to be linked to a target.

> and also there are things in the IR that won't be allowed when producing SPIR-V (off the top of my head, in a graphics shader with logical addressing mode a ton of pointer use is banned).

Again, why does that motivate it being a target?  No amount of legalization can define away fundamentally unsupported major constructs.

More generally,  making it a target immediately invokes a lot of behavior that is undesirable for a serialization format between a fronted and a backend.  You don’t *want* LLVM to do a lot of wacky CodeGenPrepare and/or lowering before emitting SPIR-V, which is likely to lose source-level information that the eventual consumer wanted to have available.  You do not want to leverage any of the general target architecture.

I really don’t see any strong reason for it to be a target at all, and all the use cases I can see for it are exactly the same as the use cases for LLVM bitcode, with a  “for graphics” qualifier tacked on.

—Owen






More information about the llvm-dev mailing list