[llvm-dev] [RFC][AArch64] Make -mcpu=generic schedule for an in-order core

David Green via llvm-dev llvm-dev at lists.llvm.org
Mon Oct 4 00:40:17 PDT 2021

Hello folks,

We would like to start pushing -mcpu=generic for AArch64 towards enabling a set of features that is believed to be beneficial in general - that improve performance the for some CPUs without hurting it on any others. A blend of the performance options hopefully beneficial to all CPUs.

The largest part of that is enabling in-order scheduling using the Cortex-A55 schedule model. This is similar to the Arm backend change from eecb353d0e25ba which made -mcpu=generic perform inorder scheduling using the Cortex-A8 scheduling model.

The idea is that in-order cpu's require the most help in instruction scheduling, whereas out-of-order cpus can for the most part out-of-order schedule around different codegen. Our benchmarking suggests that hypothesis holds, with in-order performance benefiting from the scheduling by between 1% and 4% geomean. Out of order performance was quite noisy and the results were within the noise margins, tending towards a slight improvement in general.

When specifying an Apple target, clang will set "-target-cpu apple-a7" on the command line, so should not be affected by this change when running from clang. This also doesn't enable more runtime unrolling like -mcpu=cortex-a55 does, only changing the schedule used.

There is a patch to make the change in https://reviews.llvm.org/D110830, with extra details about performance changes and all the tests that are updated.

Let us know if you have comments.


More information about the llvm-dev mailing list