1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//===-- SIRegisterInfo.h - SI Register Info Interface ----------*- C++ -*--===//
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//                     The LLVM Compiler Infrastructure
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// This file is distributed under the University of Illinois Open Source
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// License. See LICENSE.TXT for details.
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//===----------------------------------------------------------------------===//
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org// Interface definition for SIRegisterInfo
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//===----------------------------------------------------------------------===//
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef SIREGISTERINFO_H_
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SIREGISTERINFO_H_
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "AMDGPURegisterInfo.h"
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgnamespace llvm {
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass AMDGPUTargetMachine;
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass TargetInstrInfo;
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct SIRegisterInfo : public AMDGPURegisterInfo
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  AMDGPUTargetMachine &TM;
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  const TargetInstrInfo &TII;
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  SIRegisterInfo(AMDGPUTargetMachine &tm, const TargetInstrInfo &tii);
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  virtual BitVector getReservedRegs(const MachineFunction &MF) const;
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  /// getBinaryCode - Returns the hardware encoding for a register
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  virtual unsigned getBinaryCode(unsigned reg) const;
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  /// getISARegClass - rc is an AMDIL reg class.  This function returns the
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  /// SI register class that is equivalent to the given AMDIL register class.
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  virtual const TargetRegisterClass *
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    getISARegClass(const TargetRegisterClass * rc) const;
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  /// getHWRegNum - Generated function that returns the hardware encoding for
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  /// a register
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  unsigned getHWRegNum(unsigned reg) const;
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  /// getCFGStructurizerRegClass - get the register class of the specified
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  /// type to use in the CFGStructurizer
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org  virtual const TargetRegisterClass * getCFGStructurizerRegClass(MVT VT) const;
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} // End namespace llvm
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif // SIREGISTERINFO_H_
55