OSDN Git Service

[llvm-exegesis][NFC] Add a way to declare the default counter binding for unbound...
[android-x86/external-llvm.git] / unittests / tools / llvm-exegesis / AArch64 / TargetTest.cpp
1 #include "Target.h"
2
3 #include <cassert>
4 #include <memory>
5
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"
11
12 namespace llvm {
13 namespace exegesis {
14
15 void InitializeAArch64ExegesisTarget();
16
17 namespace {
18
19 using llvm::APInt;
20 using llvm::MCInst;
21 using testing::Gt;
22 using testing::IsEmpty;
23 using testing::Not;
24 using testing::NotNull;
25
26 constexpr const char kTriple[] = "aarch64-unknown-linux";
27
28 class AArch64TargetTest : public ::testing::Test {
29 protected:
30   AArch64TargetTest()
31       : ExegesisTarget_(ExegesisTarget::lookup(llvm::Triple(kTriple))) {
32     EXPECT_THAT(ExegesisTarget_, NotNull());
33     std::string error;
34     Target_ = llvm::TargetRegistry::lookupTarget(kTriple, error);
35     EXPECT_THAT(Target_, NotNull());
36     STI_.reset(
37         Target_->createMCSubtargetInfo(kTriple, "generic", /*no features*/ ""));
38   }
39
40   static void SetUpTestCase() {
41     LLVMInitializeAArch64TargetInfo();
42     LLVMInitializeAArch64Target();
43     LLVMInitializeAArch64TargetMC();
44     InitializeAArch64ExegesisTarget();
45   }
46
47   std::vector<MCInst> setRegTo(unsigned Reg, const APInt &Value) {
48     return ExegesisTarget_->setRegTo(*STI_, Reg, Value);
49   }
50
51   const llvm::Target *Target_;
52   const ExegesisTarget *const ExegesisTarget_;
53   std::unique_ptr<llvm::MCSubtargetInfo> STI_;
54 };
55
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()));
60 }
61
62 TEST_F(AArch64TargetTest, DefaultPfmCounters) {
63   EXPECT_EQ(ExegesisTarget_->getPfmCounters("").CycleCounter, "CPU_CYCLES");
64   EXPECT_EQ(ExegesisTarget_->getPfmCounters("unknown_cpu").CycleCounter,
65             "CPU_CYCLES");
66 }
67
68 } // namespace
69 } // namespace exegesis
70 } // namespace llvm