AMDGPURegisterBankInfo.h revision 319799
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
19namespace llvm {
20
21class SIRegisterInfo;
22class TargetRegisterInfo;
23
24namespace AMDGPU {
25enum {
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.
33class AMDGPUGenRegisterBankInfo : public RegisterBankInfo {
34
35protected:
36
37#define GET_TARGET_REGBANK_CLASS
38#include "AMDGPUGenRegisterBank.inc"
39};
40class AMDGPURegisterBankInfo : public AMDGPUGenRegisterBankInfo {
41  const SIRegisterInfo *TRI;
42
43  /// See RegisterBankInfo::applyMapping.
44  void applyMappingImpl(const OperandsMapper &OpdMapper) const override;
45
46  const RegisterBankInfo::InstructionMapping &
47  getInstrMappingForLoad(const MachineInstr &MI) const;
48
49public:
50  AMDGPURegisterBankInfo(const TargetRegisterInfo &TRI);
51
52  unsigned copyCost(const RegisterBank &A, const RegisterBank &B,
53                    unsigned Size) const override;
54
55  const RegisterBank &
56  getRegBankFromRegClass(const TargetRegisterClass &RC) const override;
57
58  InstructionMappings
59  getInstrAlternativeMappings(const MachineInstr &MI) const override;
60
61  const InstructionMapping &
62  getInstrMapping(const MachineInstr &MI) const override;
63};
64} // End llvm namespace.
65#endif
66