1*9880d681SAndroid Build Coastguard Worker //===-- R600RegisterInfo.h - R600 Register Info Interface ------*- C++ -*--===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker // 10*9880d681SAndroid Build Coastguard Worker /// \file 11*9880d681SAndroid Build Coastguard Worker /// \brief Interface definition for R600RegisterInfo 12*9880d681SAndroid Build Coastguard Worker // 13*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_LIB_TARGET_AMDGPU_R600REGISTERINFO_H 16*9880d681SAndroid Build Coastguard Worker #define LLVM_LIB_TARGET_AMDGPU_R600REGISTERINFO_H 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker #include "AMDGPURegisterInfo.h" 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker namespace llvm { 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker class AMDGPUSubtarget; 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker struct R600RegisterInfo final : public AMDGPURegisterInfo { 25*9880d681SAndroid Build Coastguard Worker RegClassWeight RCW; 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker R600RegisterInfo(); 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Worker BitVector getReservedRegs(const MachineFunction &MF) const override; 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker /// \brief get the HW encoding for a register's channel. 32*9880d681SAndroid Build Coastguard Worker unsigned getHWRegChan(unsigned reg) const; 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker unsigned getHWRegIndex(unsigned Reg) const; 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker /// \brief get the register class of the specified type to use in the 37*9880d681SAndroid Build Coastguard Worker /// CFGStructurizer 38*9880d681SAndroid Build Coastguard Worker const TargetRegisterClass *getCFGStructurizerRegClass(MVT VT) const; 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker const RegClassWeight & 41*9880d681SAndroid Build Coastguard Worker getRegClassWeight(const TargetRegisterClass *RC) const override; 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker // \returns true if \p Reg can be defined in one ALU clause and used in 44*9880d681SAndroid Build Coastguard Worker // another. 45*9880d681SAndroid Build Coastguard Worker bool isPhysRegLiveAcrossClauses(unsigned Reg) const; 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker void eliminateFrameIndex(MachineBasicBlock::iterator MI, int SPAdj, 48*9880d681SAndroid Build Coastguard Worker unsigned FIOperandNum, 49*9880d681SAndroid Build Coastguard Worker RegScavenger *RS = nullptr) const override; 50*9880d681SAndroid Build Coastguard Worker }; 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Worker } // End namespace llvm 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Worker #endif 55