blob: 6fca5b231d84ed1ee25fb41c5a51a39f9d301712 [file] [edit]
//===----------------------------------------------------------------------===//
//
// 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);
EXPECT_EQ(getCacheLineSizeForCPU("hip12"), 64u);
}
} // namespace