1 //===-- TargetTest.cpp ------------------------------------------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
14 #include "MCTargetDesc/AArch64MCTargetDesc.h"
15 #include "llvm/Support/TargetRegistry.h"
16 #include "llvm/Support/TargetSelect.h"
17 #include "gmock/gmock.h"
18 #include "gtest/gtest.h"
23 void InitializeAArch64ExegesisTarget();
30 using testing::IsEmpty
;
32 using testing::NotNull
;
34 constexpr const char kTriple
[] = "aarch64-unknown-linux";
36 class AArch64TargetTest
: public ::testing::Test
{
39 : ExegesisTarget_(ExegesisTarget::lookup(llvm::Triple(kTriple
))) {
40 EXPECT_THAT(ExegesisTarget_
, NotNull());
42 Target_
= llvm::TargetRegistry::lookupTarget(kTriple
, error
);
43 EXPECT_THAT(Target_
, NotNull());
45 Target_
->createMCSubtargetInfo(kTriple
, "generic", /*no features*/ ""));
48 static void SetUpTestCase() {
49 LLVMInitializeAArch64TargetInfo();
50 LLVMInitializeAArch64Target();
51 LLVMInitializeAArch64TargetMC();
52 InitializeAArch64ExegesisTarget();
55 std::vector
<MCInst
> setRegTo(unsigned Reg
, const APInt
&Value
) {
56 return ExegesisTarget_
->setRegTo(*STI_
, Reg
, Value
);
59 const llvm::Target
*Target_
;
60 const ExegesisTarget
*const ExegesisTarget_
;
61 std::unique_ptr
<llvm::MCSubtargetInfo
> STI_
;
64 TEST_F(AArch64TargetTest
, SetRegToConstant
) {
65 // The AArch64 target currently doesn't know how to set register values.
66 const auto Insts
= setRegTo(llvm::AArch64::X0
, llvm::APInt());
67 EXPECT_THAT(Insts
, Not(IsEmpty()));
70 TEST_F(AArch64TargetTest
, DefaultPfmCounters
) {
71 const std::string Expected
= "CPU_CYCLES";
72 EXPECT_EQ(ExegesisTarget_
->getPfmCounters("").CycleCounter
, Expected
);
73 EXPECT_EQ(ExegesisTarget_
->getPfmCounters("unknown_cpu").CycleCounter
,
78 } // namespace exegesis