69 lines · cpp
1//===- llvm/unittests/Target/DirectX/RegisterCostTests.cpp ----------------===//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 "DirectXInstrInfo.h"10#include "DirectXTargetLowering.h"11#include "DirectXTargetMachine.h"12#include "TargetInfo/DirectXTargetInfo.h"13#include "llvm/IR/DerivedTypes.h"14#include "llvm/IR/Function.h"15#include "llvm/MC/MCTargetOptions.h"16#include "llvm/MC/TargetRegistry.h"17#include "llvm/Support/TargetSelect.h"18 19#include "gtest/gtest.h"20 21using namespace llvm;22using namespace llvm::dxil;23 24namespace {25class RegisterCostTests : public testing::Test {26protected:27 std::unique_ptr<DirectXInstrInfo> DXInstInfo;28 DirectXTargetLowering *DL;29 30 virtual void SetUp() {31 LLVMInitializeDirectXTargetMC();32 Target T = getTheDirectXTarget();33 RegisterTargetMachine<DirectXTargetMachine> X(T);34 Triple TT("dxil-pc-shadermodel6.3-library");35 StringRef CPU = "";36 StringRef FS = "";37 DirectXTargetMachine TM(T, TT, CPU, FS, TargetOptions(), Reloc::Static,38 CodeModel::Small, CodeGenOptLevel::Default, false);39 40 LLVMContext Context;41 Function *F =42 Function::Create(FunctionType::get(Type::getVoidTy(Context), false),43 Function::ExternalLinkage, 0);44 const DirectXSubtarget *DXSubtarget = TM.getSubtargetImpl(*F);45 DL = new DirectXTargetLowering(TM, *DXSubtarget);46 DXInstInfo = std::make_unique<DirectXInstrInfo>(*DXSubtarget);47 48 delete F;49 }50 virtual void TearDown() { delete DL; }51};52 53TEST_F(RegisterCostTests, TestRepRegClassForVTSet) {54 const TargetRegisterClass *RC = DL->getRepRegClassFor(MVT::i32);55 EXPECT_EQ(&dxil::DXILClassRegClass, RC);56}57 58TEST_F(RegisterCostTests, TestTrivialCopyCostGetter) {59 const DirectXRegisterInfo &TRI = DXInstInfo->getRegisterInfo();60 const TargetRegisterClass *RC = TRI.getRegClass(0);61 unsigned Cost = RC->getCopyCost();62 EXPECT_EQ(1u, Cost);63 64 RC = TRI.getRegClass(0);65 Cost = RC->getCopyCost();66 EXPECT_EQ(1u, Cost);67}68} // namespace69