[llvm-dev] [SPIR-V] SPIR-V in LLVM
Philip Reames via llvm-dev
llvm-dev at lists.llvm.org
Tue May 9 19:52:27 PDT 2017
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
More information about the llvm-dev
mailing list