[llvm-dev] Testing "normal" cross-compilers versus GPU backends

Mehdi Amini via llvm-dev llvm-dev at lists.llvm.org
Thu Sep 3 02:07:54 PDT 2015


> On Sep 3, 2015, at 12:18 AM, Robinson, Paul <Paul_Robinson at playstation.sony.com> wrote:
> 
> 
> 
>> -----Original Message-----
>> From: Mehdi Amini [mailto:mehdi.amini at apple.com]
>> Sent: Wednesday, September 02, 2015 7:10 PM
>> To: Robinson, Paul
>> Cc: llvm-dev at lists.llvm.org; tom at stellard.net; NAKAMURA Takumi
>> Subject: Re: Testing "normal" cross-compilers versus GPU backends
>> 
>> Hi Paul,
>> 
>> Thanks for the summary!
>> 
>>> On Sep 2, 2015, at 5:44 PM, Robinson, Paul
>> <Paul_Robinson at playstation.sony.com> wrote:
>>> 
>>> This note arose from https://urldefense.proofpoint.com/v2/url?u=http-
>> 3A__reviews.llvm.org_D12506&d=BQIFAg&c=eEvniauFctOgLOKGJOplqw&r=v-
>> ruWq0KCv2O3thJZiK6naxuXK8mQHZUmGq5FBtAmZ4&m=Wr0uOhkAp_10X4edWwxZQ9V8L97j8e
>> o6cR_1Ia-gMOw&s=OOTP9DnL-TWV1zvy9EcU0Z6yfTq5lBjhE-LvYlWMJ3Y&e=  but the
>> reviewers
>>> felt that we needed a broader audience, because the proposed patch
>>> really didn't solve the entire problem and we had no better ideas.
>>> 
>>> Mehdi Amini needs to build LLVM with just a GPU backend, and still have
>>> "ninja check" Just Work.  Commits r243958-243960 tried to accomplish
>>> that; however they are too big a hammer, and cause much simpler cross
>>> environments (like mine) to exclude big chunks of very useful tests
>>> (including my favorite, DebugInfo).
>>> 
>>> FYI, my main cross environment is building on X86 Windows but using
>>> a default target triple for PS4 (which is also X86).
>>> 
>>> I experimented with building LLVM with just the ARM backend (running on
>>> an X86 workstation) and setting the default triple to some ARM value.
>>> "ninja check" worked fine (without Mehdi's series of commits), so the
>>> normal kind of cross-compiler environment seems to be happy with how
>>> things were set up originally.
>>> 
>>> Mehdi reports building LLVM with the X86 and AMDGPU backends, setting
>>> the default triple to "amdgcn--amdhsa", and getting 200-some failures.
>>> 
>>> (This does make me wonder about AMDGPU testing in general; how does that
>>> work?  The only places I see lit checks for AMDGPU are in the usual
>>> target-dependent places.)
>> 
>> I don’t understand this interrogation about how do you do testing in
>> general. The same way you don’t process tests/CodeGen/X86/* with the ARM
>> backend, you can’t process any random IR through these backends.
> 
> You said you had 200+ failures with AMDGPU.  Are the AMD folks simply
> tolerating the 200 failures, and you don't want to?  I should hope there
> is more to it than that.

Well, I don’t know, they might just run `ninja check` with the default triple set to X86?
(which I would consider being working around a buggy test suite)

> 
>> 
>> IMO, the problem is in general about tests that are written without
>> specifying a triple, that will be executed with the default triple.
>> 
>> Most of these tests were written with X86 (or ARM) in mind, and there is
>> no guarantee that they will behave as intended with every possible triple.
>> The DataLayout for instance has to be the one from the target, and is not
>> portable.
>> I think a "portable backend test” is pretty rare in general.
> 
> It depends on what the test is trying to do.  I'm sure it is quite common
> for IR tests to behave essentially the same way regardless of target.

IR tests != backend test (I may miss your point here, it’s late…).


> We have lots of tests (the ones you chose to mark "native") that had been
> working fine with ARM, X86, PPC, SPARC, and whatever.
> 
> The fact that they don't work with your backend is different from saying
> those tests can't possibly work for any cross-compiler.

I believe this is far from what I said, or at least from what I had in mind.

>  But the latter is what your patch implemented, and it is preventing useful testing.

I don’t disagree with that statement, and I agree that it should be fixed.
It doesn’t mean that I think the previous situation was better though. 
The current over-conservative state seems at least more correct than having only a subset of the targets that can pass `ninja check`.

Are you attending the LLVM bay area social tonight by any chance?

Best,

— 
Mehdi



> --paulr
> 
>> 
>> You can run all the tests by setting the default triple to X86 and
>> compiling in the X86 backend, but that’s just a trick to make the tests
>> happy.
>> Alternatively, and this is what I tried to do, blacklisting these tests
>> that “pretends” to be “portable” but are not.
>> 
>> 
>>> Mehdi's solution was:
>>> - In lit.cfg, change the existing "native" feature definition from
>>> "host-triple == target-triple" to also check "and the corresponding
>>> backend is included."(**)
>> 
>> I agree that we could remove the condition on the host backend included
>> and deemed it a unsupported, but the build system needs to reject this
>> configuration.
>> 
>> 
>>> - Make piles of tests that seemed inapplicable to GPUs depend on the
>>> "native" feature (through REQUIRES: or in the lit.local.cfg).
>> 
>> Nitpick: the GPU is just an example, any other backends can be affected.
>> It seems that these test are “lying” about the target they will be able to
>> run on (like if they would run on “anything”).
>> 
>> 
>>> - Build LLVM with just the GPU backend, and not set a target triple
>>> (i.e., it's set to the host triple, typically an X86-something).(*)
>>> Thus lit.cfg sees matching host and target triples, but the X86
>>> backend is missing, and so the "native" feature is not set.
>>> 
>>> [The "native" feature was invented to identify environments where
>>> JIT would work properly. The "host-triple == target-triple" condition
>>> isn't exactly right, but it works well enough.]
>>> 
>>> The major problem is that these new "native" dependencies are incorrect.
>>> For example the DebugInfo tests don't really require it; they work fine
>>> as long as the default triple has the corresponding backend included,
>>> as my ARM-on-X86 experiment demonstrated.
>> 
>> Are they are guarantee’d to work with a default triple set to any of the
>> possible (in-tree) backend?
>> (I don’t know enough about these tests, which is definitively why I
>> included them in the “big hammer” solution)
>> 
>> Thanks,
>> 
>>>> Mehdi



More information about the llvm-dev mailing list