]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Target/AMDGPU/AMDGPURegisterBankInfo.h
Merge clang trunk r300422 and resolve conflicts.
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Target / AMDGPU / AMDGPURegisterBankInfo.h
1 //===- AMDGPURegisterBankInfo -----------------------------------*- C++ -*-==//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 /// \file
10 /// This file declares the targeting of the RegisterBankInfo class for AMDGPU.
11 /// \todo This should be generated by TableGen.
12 //===----------------------------------------------------------------------===//
13
14 #ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPUREGISTERBANKINFO_H
15 #define LLVM_LIB_TARGET_AMDGPU_AMDGPUREGISTERBANKINFO_H
16
17 #include "llvm/CodeGen/GlobalISel/RegisterBankInfo.h"
18
19 namespace llvm {
20
21 class SIRegisterInfo;
22 class TargetRegisterInfo;
23
24 namespace AMDGPU {
25 enum {
26   SGPRRegBankID = 0,
27   VGPRRegBankID = 1,
28   NumRegisterBanks
29 };
30 } // End AMDGPU namespace.
31
32 /// This class provides the information for the target register banks.
33 class AMDGPUGenRegisterBankInfo : public RegisterBankInfo {
34
35 protected:
36
37 #define GET_TARGET_REGBANK_CLASS
38 #include "AMDGPUGenRegisterBank.inc"
39
40 };
41 class AMDGPURegisterBankInfo : public AMDGPUGenRegisterBankInfo {
42   const SIRegisterInfo *TRI;
43
44   /// See RegisterBankInfo::applyMapping.
45   void applyMappingImpl(const OperandsMapper &OpdMapper) const override;
46
47   RegisterBankInfo::InstructionMapping
48   getInstrMappingForLoad(const MachineInstr &MI) const;
49
50 public:
51   AMDGPURegisterBankInfo(const TargetRegisterInfo &TRI);
52
53   unsigned copyCost(const RegisterBank &A, const RegisterBank &B,
54                     unsigned Size) const override;
55
56   const RegisterBank &
57   getRegBankFromRegClass(const TargetRegisterClass &RC) const override;
58
59   InstructionMappings
60   getInstrAlternativeMappings(const MachineInstr &MI) const override;
61
62   InstructionMapping getInstrMapping(const MachineInstr &MI) const override;
63 };
64 } // End llvm namespace.
65 #endif