]> granicus.if.org Git - llvm/commit
[AArch64] Set preferred function alignment to 16 bytes on Neoverse N1
authorPablo Barrio <pablo.barrio@arm.com>
Mon, 5 Aug 2019 17:38:58 +0000 (17:38 +0000)
committerPablo Barrio <pablo.barrio@arm.com>
Mon, 5 Aug 2019 17:38:58 +0000 (17:38 +0000)
commit728b110e1989a55749e963fc57cb6320a3b88c10
treec9d294a819015feeb043e808b1da38f9e2c94c0b
parent89c81e162554b45fd94f45132c7d15772749750e
[AArch64] Set preferred function alignment to 16 bytes on Neoverse N1

Summary:
The Arm Neoverse N1 Software Optimization Guide [1], Section "4.8 Branch
instruction alignment" states:

"Consider aligning subroutine entry points and branch targets to 32B
boundaries, within the bounds of the code-density requirements of the
program."

This patch sets the preferred function alignment on Neoverse N1 to 2^4=16B.
This was already the case in some of the latest Cortex-A CPUs. Benchmarking
in previous Cortex-A CPUs suggested that 16B alignment is already better
than the default. See commit d04ee305.

The reason we don't set it to 32B right now (as the optimisation guide
suggests) is that this will impact code size and perhaps the instruction
cache performance. Therefore we need benchmark numbers first.

I have also added testing for A75 and A76 that we were missing.

[1] https://developer.arm.com/docs/swog309707/latest

Reviewers: fhahn, greened, samparker, dmgreen

Reviewed By: dmgreen

Subscribers: dmgreen, javed.absar, kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D65654

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367894 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/AArch64/AArch64Subtarget.cpp
test/CodeGen/AArch64/preferred-function-alignment.ll