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

Philip Reames listmail at philipreames.com
Thu May 21 22:34:30 PDT 2015


After following the thread through the rounds of discussion that have 
happened, I have serious concern about this proposal and believe that it 
should not land as proposed.  I am not opposed to the idea of SPIR, but 
the current proposal is lacking key details and could be construed to 
imply maintenance and support obligations on the community as a whole 
which are not clearly defined, much less widely discussed and agreed to.

I would suggest that interested parties need to settle on a usage model, 
what the model implies for the rest of LLVM, and come back with a more 
detailed specific proposal.

 From what I've gathered so far, it really sounds like there are two 
proposals within one here.

The first is a SPIR-frontend targeting arbitrary backends.  The usage 
model sounds like an existing SPIR program being compiled to either x86 
(say for testing purposes) or one of the existing GPU focused backends.  
To me, this sounds like the less invasive part since none of the 
concerns about data layout (or lack there of) apply.  By the time we're 
compiling a SPIR program to a particular target, we should be able to 
optimize using target specific information.  My suggestion would be to 
establish a new repository (hosted on llvm.org) which holds this 
frontend.  I have seen no reason this should live in the main llvm or 
clang repositories in the discussion to date.

The second sounds like it's a proposal to have Clang support an SPIR 
backend.  Exactly what form this would take appears to be really unclear 
and the implications for the project have not be spelled out.  In 
particular, it's not clear to me that preserving all the invariants 
needed to emit SPIR through the optimizer is even possible with our 
current IR and type system.  I would be actively opposed to seeing 
changes in this direction land without substaintial further discussion 
and active contribution/ownership by an existing active member of the 
LLVM community.

Philip

On 05/13/2015 05:56 AM, Liu, Yaxun (Sam) wrote:
> Khronos Group SPIR WG is working on a bi-way converter between LLVM bitcode and SPIR-V (https://www.khronos.org/registry/spir-v/specs/1.0/SPIRV.pdf ) binary and is willing to upstream it to the LLVM project.
>
> The bi-way converter uses a common in-memory representation of SPIR-V. It works by breaking down a module to instructions and construct the translated module in memory then output it. Currently it supports SPIR-V common instructions and OpenCL specific instructions. Supporting of other languages is under consideration.
>
> We plan to refactor the LLVM to SPIR-V converter as a backend at llvm/lib/Target/SPIRV to allow Clang targeting SPIR-V. Since this will result in an unconventional backend which does not use SelectionDAG/MC, we would like to know whether it is acceptable. We are open to the SelectionDAG/MC approach if the community recommends it.
>
> For the SPIR-V to LLVM converter, we are seeking suggestions on its proper location in the LLVM project.
>
> Any comments are welcome. Thanks.
>
> Yaxun Liu
> AMD
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev




More information about the llvm-dev mailing list