6 #include "MCTargetDesc/AArch64MCTargetDesc.h"
7 #include "llvm/Support/TargetRegistry.h"
8 #include "llvm/Support/TargetSelect.h"
9 #include "gmock/gmock.h"
10 #include "gtest/gtest.h"
15 void InitializeAArch64ExegesisTarget();
22 using testing::IsEmpty;
24 using testing::NotNull;
26 constexpr const char kTriple[] = "aarch64-unknown-linux";
28 class AArch64TargetTest : public ::testing::Test {
31 : ExegesisTarget_(ExegesisTarget::lookup(llvm::Triple(kTriple))) {
32 EXPECT_THAT(ExegesisTarget_, NotNull());
34 Target_ = llvm::TargetRegistry::lookupTarget(kTriple, error);
35 EXPECT_THAT(Target_, NotNull());
37 Target_->createMCSubtargetInfo(kTriple, "generic", /*no features*/ ""));
40 static void SetUpTestCase() {
41 LLVMInitializeAArch64TargetInfo();
42 LLVMInitializeAArch64Target();
43 LLVMInitializeAArch64TargetMC();
44 InitializeAArch64ExegesisTarget();
47 std::vector<MCInst> setRegTo(unsigned Reg, const APInt &Value) {
48 return ExegesisTarget_->setRegTo(*STI_, Reg, Value);
51 const llvm::Target *Target_;
52 const ExegesisTarget *const ExegesisTarget_;
53 std::unique_ptr<llvm::MCSubtargetInfo> STI_;
56 TEST_F(AArch64TargetTest, SetRegToConstant) {
57 // The AArch64 target currently doesn't know how to set register values.
58 const auto Insts = setRegTo(llvm::AArch64::X0, llvm::APInt());
59 EXPECT_THAT(Insts, Not(IsEmpty()));
62 TEST_F(AArch64TargetTest, DefaultPfmCounters) {
63 EXPECT_EQ(ExegesisTarget_->getPfmCounters("").CycleCounter, "CPU_CYCLES");
64 EXPECT_EQ(ExegesisTarget_->getPfmCounters("unknown_cpu").CycleCounter,
69 } // namespace exegesis