[llvm] a08dce6 - [AArch64] Set the default cache line size to 64 bytes. (#200776)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 8 02:16:53 PDT 2026
Author: Ricardo Jesus
Date: 2026-06-08T10:16:48+01:00
New Revision: a08dce6881f64158a9ccb91216ec57ac6570bc8c
URL: https://github.com/llvm/llvm-project/commit/a08dce6881f64158a9ccb91216ec57ac6570bc8c
DIFF: https://github.com/llvm/llvm-project/commit/a08dce6881f64158a9ccb91216ec57ac6570bc8c.diff
LOG: [AArch64] Set the default cache line size to 64 bytes. (#200776)
This should be set to enable more precise interchange in the future, for
instance.
Added:
llvm/unittests/Target/AArch64/AArch64CacheLineSizeTest.cpp
Modified:
llvm/lib/Target/AArch64/AArch64Subtarget.cpp
llvm/lib/Target/AArch64/AArch64Subtarget.h
llvm/unittests/Target/AArch64/CMakeLists.txt
Removed:
################################################################################
diff --git a/llvm/lib/Target/AArch64/AArch64Subtarget.cpp b/llvm/lib/Target/AArch64/AArch64Subtarget.cpp
index d45a6d5496399..eea1e61d4da17 100644
--- a/llvm/lib/Target/AArch64/AArch64Subtarget.cpp
+++ b/llvm/lib/Target/AArch64/AArch64Subtarget.cpp
@@ -137,7 +137,6 @@ void AArch64Subtarget::initializeProperties(bool HasMinSize) {
AvoidLDAPUR = true;
break;
case Carmel:
- CacheLineSize = 64;
break;
case CortexA35:
case CortexA53:
@@ -221,7 +220,6 @@ void AArch64Subtarget::initializeProperties(bool HasMinSize) {
case AppleA17:
case AppleM4:
case AppleM5:
- CacheLineSize = 64;
PrefetchDistance = 280;
MinPrefetchStride = 2048;
MaxPrefetchIterationsAhead = 3;
@@ -258,7 +256,6 @@ void AArch64Subtarget::initializeProperties(bool HasMinSize) {
break;
case NeoverseV2:
case NeoverseV3:
- CacheLineSize = 64;
EpilogueVectorizationMinVF = 8;
ScatterOverhead = 13;
[[fallthrough]];
@@ -285,7 +282,6 @@ void AArch64Subtarget::initializeProperties(bool HasMinSize) {
MinVectorRegisterBitWidth = 128;
break;
case ThunderX2T99:
- CacheLineSize = 64;
PrefFunctionAlignment = Align(8);
PrefLoopAlignment = Align(4);
PrefetchDistance = 128;
@@ -305,12 +301,10 @@ void AArch64Subtarget::initializeProperties(bool HasMinSize) {
MinVectorRegisterBitWidth = 128;
break;
case TSV110:
- CacheLineSize = 64;
PrefFunctionAlignment = Align(16);
PrefLoopAlignment = Align(4);
break;
case ThunderX3T110:
- CacheLineSize = 64;
PrefFunctionAlignment = Align(16);
PrefLoopAlignment = Align(4);
PrefetchDistance = 128;
@@ -323,12 +317,10 @@ void AArch64Subtarget::initializeProperties(bool HasMinSize) {
case Ampere1A:
case Ampere1B:
case Ampere1C:
- CacheLineSize = 64;
PrefFunctionAlignment = Align(64);
PrefLoopAlignment = Align(64);
break;
case Oryon:
- CacheLineSize = 64;
PrefFunctionAlignment = Align(16);
PrefetchDistance = 128;
MinPrefetchStride = 1024;
diff --git a/llvm/lib/Target/AArch64/AArch64Subtarget.h b/llvm/lib/Target/AArch64/AArch64Subtarget.h
index b466c7f2224b7..cb02f2584b61f 100644
--- a/llvm/lib/Target/AArch64/AArch64Subtarget.h
+++ b/llvm/lib/Target/AArch64/AArch64Subtarget.h
@@ -59,7 +59,7 @@ class AArch64Subtarget final : public AArch64GenSubtargetInfo {
unsigned EpilogueVectorizationMinVF = 16;
uint8_t MaxInterleaveFactor = 2;
uint8_t VectorInsertExtractBaseCost = 2;
- uint16_t CacheLineSize = 0;
+ uint16_t CacheLineSize = 64;
// Default scatter/gather overhead.
unsigned ScatterOverhead = 10;
unsigned GatherOverhead = 10;
diff --git a/llvm/unittests/Target/AArch64/AArch64CacheLineSizeTest.cpp b/llvm/unittests/Target/AArch64/AArch64CacheLineSizeTest.cpp
new file mode 100644
index 0000000000000..dc227dd06b321
--- /dev/null
+++ b/llvm/unittests/Target/AArch64/AArch64CacheLineSizeTest.cpp
@@ -0,0 +1,61 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "AArch64Subtarget.h"
+#include "llvm/MC/TargetRegistry.h"
+#include "llvm/Support/TargetSelect.h"
+#include "llvm/Target/TargetMachine.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+
+namespace {
+
+class AArch64CacheLineSizeTest : public testing::Test {
+protected:
+ static void SetUpTestSuite() {
+ LLVMInitializeAArch64TargetInfo();
+ LLVMInitializeAArch64Target();
+ LLVMInitializeAArch64TargetMC();
+ }
+
+ unsigned getCacheLineSizeForCPU(StringRef CPU) {
+ std::string Error;
+ Triple TT("aarch64--");
+ const Target *T = TargetRegistry::lookupTarget(TT, Error);
+ std::unique_ptr<TargetMachine> TM(
+ T->createTargetMachine(TT, CPU, "", TargetOptions(), std::nullopt));
+ AArch64Subtarget ST(TT, CPU, CPU, TM->getTargetFeatureString(), *TM, true);
+ return ST.getCacheLineSize();
+ }
+};
+
+TEST_F(AArch64CacheLineSizeTest, IsCorrect) {
+ EXPECT_EQ(getCacheLineSizeForCPU("generic"), 64u);
+ EXPECT_EQ(getCacheLineSizeForCPU("a64fx"), 256u);
+ EXPECT_EQ(getCacheLineSizeForCPU("ampere1"), 64u);
+ EXPECT_EQ(getCacheLineSizeForCPU("apple-m5"), 64u);
+ EXPECT_EQ(getCacheLineSizeForCPU("carmel"), 64u);
+ EXPECT_EQ(getCacheLineSizeForCPU("cortex-a57"), 64u);
+ EXPECT_EQ(getCacheLineSizeForCPU("cortex-a725"), 64u);
+ EXPECT_EQ(getCacheLineSizeForCPU("cortex-x4"), 64u);
+ EXPECT_EQ(getCacheLineSizeForCPU("cortex-x925"), 64u);
+ EXPECT_EQ(getCacheLineSizeForCPU("falkor"), 128u);
+ EXPECT_EQ(getCacheLineSizeForCPU("grace"), 64u);
+ EXPECT_EQ(getCacheLineSizeForCPU("kryo"), 128u);
+ EXPECT_EQ(getCacheLineSizeForCPU("neoverse-v1"), 64u);
+ EXPECT_EQ(getCacheLineSizeForCPU("neoverse-v3"), 64u);
+ EXPECT_EQ(getCacheLineSizeForCPU("olympus"), 64u);
+ EXPECT_EQ(getCacheLineSizeForCPU("oryon-1"), 64u);
+ EXPECT_EQ(getCacheLineSizeForCPU("thunderx"), 128u);
+ EXPECT_EQ(getCacheLineSizeForCPU("thunderx2t99"), 64u);
+ EXPECT_EQ(getCacheLineSizeForCPU("thunderx3t110"), 64u);
+ EXPECT_EQ(getCacheLineSizeForCPU("tsv110"), 64u);
+}
+
+} // namespace
diff --git a/llvm/unittests/Target/AArch64/CMakeLists.txt b/llvm/unittests/Target/AArch64/CMakeLists.txt
index 3875163772575..08dc38423fac2 100644
--- a/llvm/unittests/Target/AArch64/CMakeLists.txt
+++ b/llvm/unittests/Target/AArch64/CMakeLists.txt
@@ -30,6 +30,7 @@ add_llvm_target_unittest(AArch64Tests
InstSizes.cpp
MatrixRegisterAliasing.cpp
SMEAttributesTest.cpp
+ AArch64CacheLineSizeTest.cpp
AArch64RegisterInfoTest.cpp
AArch64SVESchedPseudoTest.cpp
AArch64SelectionDAGTest.cpp
More information about the llvm-commits
mailing list