[llvm-dev] [SPIR-V] SPIR-V in LLVM
Neil Henning via llvm-dev
llvm-dev at lists.llvm.org
Thu Jun 22 02:27:50 PDT 2017
Yup - entirely possible to have targets that are basically just one or
more ModulePass's.
I also agree that lib/CodeGen would hinder rather than help us (which is
why I stuck with using a few ModulePass's instead!)
- Codeplay Neil.
On 2017-06-21 19:06, Matthias Braun wrote:
> At least in principle LLVM is designed to have Targets that are not
> based on lib/CodeGen.
>
> Looking at the APIs it should be possible to just implement
> TargetMachine (but not LLVMTargetMachine which is only meant for
> lib/CodeGen targets) and register that with the target registry.
>
> Note that I have never actually done so, so I may be missing some
> things. It also seems the last non-CodeGen target in public tree was
> the cpp target which was removed a few years ago so hopefully the API
> has not regressed without testing.
>
> Still I think it would be a good idea to at least evaluate/try this as
> I've got the feeling lib/CodeGen may get more in the way than being
> helpful in this case...
>
> - Matthias
>
>> On May 10, 2017, at 5:26 AM, Neil Henning via llvm-dev
>> <llvm-dev at lists.llvm.org> wrote:
>>
>> Totally agree Philip! I think the main pending issue is are we allowed
>> to have a target that doesn't go through the normal mechanisms that
>> targets adhere to - and is basically just a ModulePass underneath.
>>
>> In light of how thorny this request has been perceived in the past,
>> I'd honestly rather just make external targets work _without_ patching
>> LLVM being a requirement, and then any SPIR-V target (or any other
>> external LLVM targets too!) can live, mature, and prove its usefulness
>> while there is an avenue to use vanilla tip LLVM with the SPIR-V
>> target and go through the normal mechanisms.
>>
>> Cheers,
>> -Codeplay Neil.
>>
>> On 2017-05-10 03:52, Philip Reames via llvm-dev wrote:
>>> On 05/08/2017 10:31 AM, Friedman, Eli via llvm-dev wrote:
>>>> On 5/3/2017 12:04 PM, Tom Stellard via llvm-dev wrote:
>>>>> On 05/03/2017 11:19 AM, Nicholas Wilson wrote:
>>>>>>> Right, what I was trying to say is that there are more benefits
>>>>>>> from
>>>>>>> having this not be a target than there is from having it be a
>>>>>>> target.
>>>>>> Please enumerate them, I have seen none posted so far . The
>>>>>> implied “it is what all the the other backends do” w.r.t ISel/MC
>>>>>> is at best(worst?) an implementation detail, and I’m still not
>>>>>> quite sure why Chandler was so adamant about that. He seemed to
>>>>>> imply that generating straight from the IR (as opposed to post
>>>>>> legalisation?) introduces a direct dependance in the IR that the
>>>>>> rest of LLVM would then be required to not break? I agree that the
>>>>>> SPIRV backend should be insulated from changes the IR, although
>>>>>> I’m not sure how to achieve that property. I’m also not sure how
>>>>>> much, if at all, it would be susceptible to that to begin with.
>>>>>> Deletions of instructions/attributes would obviously cause
>>>>>> breakage and additions may cause unhandled and/or invalid
>>>>>> combinations. I still don’t get the severity if this though,
>>>>>> insight appreciated.
>>>>> So there are really two questions here:
>>>>> 1. Should targets be required to use SelectionDAG/GlobalISEL ?
>>>>> 2. Should SPIR-V use SelectionDAG/GlobalISel?
>>>>> In my opinion, regardless of the answer to question #1, the answer
>>>>> to question #2 is no, SPIR-V should not use
>>>>> SelectionDAG/GlobalISel.
>>>>> I touched on this before in previous emails, but the main problem
>>>>> is that
>>>>> SelectionDAG (and GlobalISel to a lesser extent) plus the whole
>>>>> MachineInstr
>>>>> layer is a much lower-level representation than SPIR-V, so you will
>>>>> need to do a lot of extra work and/or modifications to existing
>>>>> infrastructure in order to get a working target, and even then
>>>>> you may be limited to emitting poor quality SPIR-V that other
>>>>> backends will have a hard time optimizing.
>>>>> With all this work, what advantages are you getting? If the
>>>>> only reason to do it this way is so you can use intrinsics,
>>>>> or TargetLibraryInfo, or easier integration with other tools,
>>>>> I think it would be better to try to save the effort and try
>>>>> to solve those problems in some other way.
>>>>> LLVM IR -> SPIR-V directly will give you better code, lower compile
>>>>> times. It will be more simple and easier to maintain, and you will
>>>>> be able to re-use existing SPIR-V parsers/writers that exist
>>>>> in SPIRV-Tools.
>>>>> This goes back to something I mentioned in my original email, but
>>>>> I really think the best thing to do for this project right now is
>>>>> to
>>>>> keep it separate from LLVM, clean up the code, and try to get
>>>>> people
>>>>> using it. It's going to be much easier to get this upstream in
>>>>> LLVM or
>>>>> even convince people that the answer to question #1 should be 'no'
>>>>> if we
>>>>> have a code base that is mature, well supported, and has a healthy
>>>>> userbase.
>>>> This is completely skipping over one very important step which is
>>>> currently part of ISel: legalization. The LLVM optimizers expect
>>>> backends to support arbitrary-width integers, arbitrary-width
>>>> vectors, and target-independent intrinsics which are lowered by
>>>> legalization. SPIR-V does not have native support for these,
>>>> therefore you need the legalization framework. And the legalization
>>>> framework in LLVM is fundamentally tied to ISel.
>>> I'll just add a non-technical point here. Beyond the technical
>>> merits
>>> of "being a target" vs "not being a target" (which I will admit I've
>>> mostly skipped in this thread because it appears to be repeating
>>> previously discussed material), there is a *much* lower barrier to
>>> entry for "being a target". We have standards in place for new
>>> targets; we're use to thinking about new targets. If you want to add
>>> something fundamentally new, that will require a lot more design buy
>>> in and will have to clear a higher bar (in practice.) Given I see
>>> little evidence of such buy-in to date, pursuing a "not a target
>>> strategy" will be substantially more risky.
>>> Philip
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> llvm-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
More information about the llvm-dev
mailing list