[llvm-dev] [GlobalISel][AArch64] Toward flipping the switch for O0: Please give it a try!

via llvm-dev llvm-dev at lists.llvm.org
Fri Nov 10 12:36:49 PST 2017


SGTM, Quentin.

On 2017-11-07 19:42, Quentin Colombet via llvm-dev wrote:
> Hi all,
> 
> I’d like to resurrect this thread and ask if people are on board for
> enabling this by default for AArch64 O0.
> 
> *** What Changed Since June? ***
> 
> - We added a way to describe the legalization actions for
> non-power-of-2
> - We gave a tutorial that covers the best practices to target
> GlobalISel
> - We improved the TableGen backend to reuse existing SDISel patterns
> - We built and ran huge internal software with GISel
> - We evaluated the performance of GISel and are confident things are
> in a good shape (with https://reviews.llvm.org/D39034) and moving
> forward would look even better (see the last LLVM Dev talk:
> _GlobalISel: Present, Past, and Future_ when it is available)
> 
> *** So What’s he Plan? ***
> 
> - Switch the default instruction selector to GISel for AArch64 at O0
> - Enable the fallback path by default for AArch64 (with warnings
> enabled when that path is hit)
> - Provide a clang option to turn GISel off
> 
> What do you think?
> 
> Thanks,
> -Quentin
> 
>> On Jun 16, 2017, at 4:43 PM, Quentin Colombet <qcolombet at apple.com>
>> wrote:
>> 
>> Hi all,
>> 
>> We had some internal discussions about flipping the default for O0
>> and we concluded that we wanted to postpone it.
>> 
>> *** Why Is That? ***
>> 
>> We don’t want to send the wrong message that GlobalISel’s design
>> is set in stone and ready for broader adoption.
>> In particular,
>> 1. The APIs are still evolving and can still possibly change
>> significantly
>> 2. The TableGen backend to reuse the existing SD patterns is still
>> at its early stage
>> 3. We want to investigate closely the performance of global-isel
>> (compile-time, runtime, code size, fallbacks)
>> 
>> The rationale behind those items is that we want to minimize the
>> pain of moving forward for everybody. We also want the
>> out-of-the-box experience to be pleasant (like all/most of the
>> tablegen patterns just work, we have documentation on how to target
>> a new backend, etc.) Finally, we want to gain confidence we are
>> going to be able to address the performance issues we have with the
>> current design and if not, derive a plan for that.
>> 
>> We purposely left out of the conversation what will be the right
>> time and requirements to flip the switch. We want to gather more
>> data first. Your help would be appreciated!
>> 
>> *** Short-Term Proposal ***
>> 
>> What we would like to do instead short-term is:
>> A. Repurpose or create an option
>> “-aarch64-enable-global-isel-at-O” to enable GISel with
>> fallbacks and warnings enables (i.e., equivalent of -global-isel
>> -global-isel-abort=2)
>> B. Advertise this option in the next open source release to allow
>> compiler enthusiastic to try it and report problems
>> C. Have GISel always built so we can push thing in the right place,
>> MachineVerifier in mind, and stop doing some weird gymnastic
>> 
>> What do people think?
>> 
>> *** Your Help Is Needed ***
>> 
>> - Please share your experience in using the GISel APIs and how we
>> can make them better. Moving forward we’ll have those
>> conversations on open source instead of internally/with a narrower
>> audience.
>> - Report any performance problem you identify
>> - Propose patches!
>> 
>> Cheers,
>> -Quentin
>> 
>> On Jun 16, 2017, at 3:06 PM, Quentin Colombet via llvm-dev
>> <llvm-dev at lists.llvm.org> wrote:
>> 
>> On Jun 14, 2017, at 7:27 AM, Diana Picus <diana.picus at linaro.org>
>> wrote:
>> 
>> On 12 June 2017 at 18:54, Diana Picus <diana.picus at linaro.org>
>> wrote:
>> 
>> Hi all,
>> 
>> I added a buildbot [1] running the test-suite with -O0 -global-isel.
>> It runs into the same 2 timeouts that I reported previously on this
>> thread (paq8p and scimark2). It would be nice to make it green
>> before flipping the switch.
>> 
>> I did some more investigations on a machine similar to the one
>> running the buildbot. For paq8p and scimark2, I get these results
>> for O0:
>> 
>> PAQ8p:
>> Fast isel: 666.344
>> Global isel: 731.384
>> 
>> SciMark2-C:
>> Fast isel: 463.908
>> Global isel: 496.22
>> 
>> The current timeout is 500s (so in this particular case we didn't
>> hit it for scimark2, and it ran successfully to completion). I don't
>> think the difference between FastISel and GlobalISel is too
>> atrocious, so I would propose increasing the timeout for these 2
>> benchmarks. I'm not sure if we can do this on a per-bot basis, but I
>> see some precedent for setting custom timeout thresholds for various
>> benchmarks on different architectures (sometimes with comments that
>> it's done so we can run O0 on that particular benchmark).
>> 
>> Something along these lines works:
>> https://reviews.llvm.org/differential/diff/102547/ [1]
>> 
>> What do you guys think about this approach?
> 
> Looks reasonable to me.
> 
>> Thanks,
>> Diana
>> 
>> PS: The buildbot is using the Makefiles because that's what our
>> other AArch64 test-suite bots use. Moving all of them to CMake is a
>> transition for another time.
> 
> 
> 
> Links:
> ------
> [1] https://reviews.llvm.org/differential/diff/102547/
> _______________________________________________
> 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