1f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===-- R600RegisterInfo.h - R600 Register Info Interface ------*- C++ -*--===// 2f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 3f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// The LLVM Compiler Infrastructure 4f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 5f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// This file is distributed under the University of Illinois Open Source 6f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// License. See LICENSE.TXT for details. 7f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 8f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===----------------------------------------------------------------------===// 9f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 10f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard/// \file 11f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard/// \brief Interface definition for R600RegisterInfo 12f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 13f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===----------------------------------------------------------------------===// 14f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 15f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#ifndef R600REGISTERINFO_H_ 16f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#define R600REGISTERINFO_H_ 17f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 18f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "AMDGPURegisterInfo.h" 1958a2cbef4aac9ee7d530dfb690c78d6fc11a2371Chandler Carruth#include "AMDGPUTargetMachine.h" 20f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 21f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardnamespace llvm { 22f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 23f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardclass R600TargetMachine; 24f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardclass TargetInstrInfo; 25f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 26f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardstruct R600RegisterInfo : public AMDGPURegisterInfo { 27f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard AMDGPUTargetMachine &TM; 28f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard const TargetInstrInfo &TII; 29f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 30f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard R600RegisterInfo(AMDGPUTargetMachine &tm, const TargetInstrInfo &tii); 31f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 32f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual BitVector getReservedRegs(const MachineFunction &MF) const; 33f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 34f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard /// \param RC is an AMDIL reg class. 35f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard /// 36f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard /// \returns the R600 reg class that is equivalent to \p RC. 37f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual const TargetRegisterClass *getISARegClass( 38f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard const TargetRegisterClass *RC) const; 39f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 40f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard /// \brief get the HW encoding for a register's channel. 41f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard unsigned getHWRegChan(unsigned reg) const; 42f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 43f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard /// \brief get the register class of the specified type to use in the 44f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard /// CFGStructurizer 45f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard virtual const TargetRegisterClass * getCFGStructurizerRegClass(MVT VT) const; 46f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 47f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard /// \returns the sub reg enum value for the given \p Channel 48f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard /// (e.g. getSubRegFromChannel(0) -> AMDGPU::sel_x) 49f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard unsigned getSubRegFromChannel(unsigned Channel) const; 50f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 51f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard}; 52f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 53f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} // End namespace llvm 54f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 55f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#endif // AMDIDSAREGISTERINFO_H_ 56