1fa63f976522bd4faf19249e8c9ac4d3edda498d9Tom Stellard//===-- SIRegisterInfo.cpp - SI Register Information ---------------------===//
2a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//
3a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//                     The LLVM Compiler Infrastructure
4a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//
5a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// This file is distributed under the University of Illinois Open Source
6a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard// License. See LICENSE.TXT for details.
7a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//
8a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//===----------------------------------------------------------------------===//
9a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//
10fa63f976522bd4faf19249e8c9ac4d3edda498d9Tom Stellard// This file contains the SI implementation of the TargetRegisterInfo class.
11a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//
12a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard//===----------------------------------------------------------------------===//
13a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
14a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
15a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "SIRegisterInfo.h"
16a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "AMDGPUTargetMachine.h"
17a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
18a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardusing namespace llvm;
19a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
20a75c6163e605f35b14f26930dd9227e4f337ec9eTom StellardSIRegisterInfo::SIRegisterInfo(AMDGPUTargetMachine &tm,
21a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    const TargetInstrInfo &tii)
22a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard: AMDGPURegisterInfo(tm, tii),
23a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  TM(tm),
24a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  TII(tii)
25a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  { }
26a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
27a75c6163e605f35b14f26930dd9227e4f337ec9eTom StellardBitVector SIRegisterInfo::getReservedRegs(const MachineFunction &MF) const
28a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
29a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  BitVector Reserved(getNumRegs());
30a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  return Reserved;
31a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}
32a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
33a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardunsigned SIRegisterInfo::getBinaryCode(unsigned reg) const
34a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
35a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  switch (reg) {
3676b44034b9b234d3db4012342f0fae677d4f10f6Tom Stellard    case AMDGPU::M0: return 124;
3776b44034b9b234d3db4012342f0fae677d4f10f6Tom Stellard    case AMDGPU::SREG_LIT_0: return 128;
38a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard    default: return getHWRegNum(reg);
39a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  }
40a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}
41a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
42a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardconst TargetRegisterClass *
43a75c6163e605f35b14f26930dd9227e4f337ec9eTom StellardSIRegisterInfo::getISARegClass(const TargetRegisterClass * rc) const
44a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
45a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  switch (rc->getID()) {
4676b44034b9b234d3db4012342f0fae677d4f10f6Tom Stellard  case AMDGPU::GPRF32RegClassID:
4776b44034b9b234d3db4012342f0fae677d4f10f6Tom Stellard    return &AMDGPU::VReg_32RegClass;
48a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  default: return rc;
49a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard  }
50a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}
51a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
52d6c2d3722d795381d3cdf11fe00f63780ad0725aTom Stellardconst TargetRegisterClass * SIRegisterInfo::getCFGStructurizerRegClass(
53d6c2d3722d795381d3cdf11fe00f63780ad0725aTom Stellard                                                                   MVT VT) const
54d6c2d3722d795381d3cdf11fe00f63780ad0725aTom Stellard{
55d6c2d3722d795381d3cdf11fe00f63780ad0725aTom Stellard  switch(VT.SimpleTy) {
56d6c2d3722d795381d3cdf11fe00f63780ad0725aTom Stellard    default:
57228a6641ccddaf24a993f827af1e97379785985aTom Stellard    case MVT::i32: return &AMDGPU::VReg_32RegClass;
58d6c2d3722d795381d3cdf11fe00f63780ad0725aTom Stellard  }
59d6c2d3722d795381d3cdf11fe00f63780ad0725aTom Stellard}
60a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "SIRegisterGetHWRegNum.inc"
61