79 lines · cpp
1//===-- TargetTest.cpp ------------------------------------------*- C++ -*-===//2//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-exception6//7//===----------------------------------------------------------------------===//8 9#include "Target.h"10 11#include <cassert>12#include <memory>13 14#include "MCTargetDesc/AArch64MCTargetDesc.h"15#include "llvm/MC/TargetRegistry.h"16#include "llvm/Support/TargetSelect.h"17#include "gmock/gmock.h"18#include "gtest/gtest.h"19 20namespace llvm {21namespace exegesis {22 23void InitializeAArch64ExegesisTarget();24 25namespace {26 27using testing::IsEmpty;28using testing::Not;29using testing::NotNull;30 31constexpr char kTriple[] = "aarch64-unknown-linux";32 33class AArch64TargetTest : public ::testing::Test {34protected:35 const Triple TT;36 37 AArch64TargetTest()38 : TT(kTriple), ExegesisTarget_(ExegesisTarget::lookup(TT)) {39 EXPECT_THAT(ExegesisTarget_, NotNull());40 std::string error;41 Target_ = TargetRegistry::lookupTarget(TT, error);42 EXPECT_THAT(Target_, NotNull());43 STI_.reset(44 Target_->createMCSubtargetInfo(TT, "generic", /*no features*/ ""));45 }46 47 static void SetUpTestCase() {48 LLVMInitializeAArch64TargetInfo();49 LLVMInitializeAArch64Target();50 LLVMInitializeAArch64TargetMC();51 InitializeAArch64ExegesisTarget();52 }53 54 std::vector<MCInst> setRegTo(unsigned Reg, const APInt &Value) {55 return ExegesisTarget_->setRegTo(*STI_, Reg, Value);56 }57 58 const Target *Target_;59 const ExegesisTarget *const ExegesisTarget_;60 std::unique_ptr<MCSubtargetInfo> STI_;61};62 63TEST_F(AArch64TargetTest, SetRegToConstant) {64 // The AArch64 target currently doesn't know how to set register values.65 const auto Insts = setRegTo(AArch64::X0, APInt());66 EXPECT_THAT(Insts, Not(IsEmpty()));67}68 69TEST_F(AArch64TargetTest, DefaultPfmCounters) {70 const std::string Expected = "CYCLES";71 EXPECT_EQ(ExegesisTarget_->getPfmCounters("").CycleCounter, Expected);72 EXPECT_EQ(ExegesisTarget_->getPfmCounters("unknown_cpu").CycleCounter,73 Expected);74}75 76} // namespace77} // namespace exegesis78} // namespace llvm79