SIRegisterInfo.cpp revision 228a6641ccddaf24a993f827af1e97379785985a
168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)//===-- SIRegisterInfo.cpp - SI Register Information ---------------------===//
268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)//
368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)//
568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source
668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// License. See LICENSE.TXT for details.
768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)//
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)//===----------------------------------------------------------------------===//
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)//
1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// This file contains the SI implementation of the TargetRegisterInfo class.
1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)//
1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)//===----------------------------------------------------------------------===//
1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "SIRegisterInfo.h"
1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "AMDGPUTargetMachine.h"
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using namespace llvm;
1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)SIRegisterInfo::SIRegisterInfo(AMDGPUTargetMachine &tm,
2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const TargetInstrInfo &tii)
2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles): AMDGPURegisterInfo(tm, tii),
2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  TM(tm),
2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  TII(tii)
2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  { }
2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)BitVector SIRegisterInfo::getReservedRegs(const MachineFunction &MF) const
2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles){
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  BitVector Reserved(getNumRegs());
3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  return Reserved;
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)unsigned SIRegisterInfo::getBinaryCode(unsigned reg) const
3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles){
3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  switch (reg) {
3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    case AMDGPU::M0: return 124;
37    case AMDGPU::SREG_LIT_0: return 128;
38    default: return getHWRegNum(reg);
39  }
40}
41
42const TargetRegisterClass *
43SIRegisterInfo::getISARegClass(const TargetRegisterClass * rc) const
44{
45  switch (rc->getID()) {
46  case AMDGPU::GPRF32RegClassID:
47    return &AMDGPU::VReg_32RegClass;
48  default: return rc;
49  }
50}
51
52const TargetRegisterClass * SIRegisterInfo::getCFGStructurizerRegClass(
53                                                                   MVT VT) const
54{
55  switch(VT.SimpleTy) {
56    default:
57    case MVT::i32: return &AMDGPU::VReg_32RegClass;
58  }
59}
60#include "SIRegisterGetHWRegNum.inc"
61