1251607Sdim//===-- SystemZRegisterInfo.h - SystemZ register information ----*- C++ -*-===//
2251607Sdim//
3251607Sdim//                     The LLVM Compiler Infrastructure
4251607Sdim//
5251607Sdim// This file is distributed under the University of Illinois Open Source
6251607Sdim// License. See LICENSE.TXT for details.
7251607Sdim//
8251607Sdim//===----------------------------------------------------------------------===//
9251607Sdim
10280031Sdim#ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZREGISTERINFO_H
11280031Sdim#define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZREGISTERINFO_H
12251607Sdim
13251607Sdim#include "SystemZ.h"
14251607Sdim#include "llvm/Target/TargetRegisterInfo.h"
15251607Sdim
16251607Sdim#define GET_REGINFO_HEADER
17251607Sdim#include "SystemZGenRegisterInfo.inc"
18251607Sdim
19251607Sdimnamespace llvm {
20251607Sdim
21251607Sdimnamespace SystemZ {
22276479Sdim// Return the subreg to use for referring to the even and odd registers
23276479Sdim// in a GR128 pair.  Is32Bit says whether we want a GR32 or GR64.
24276479Sdiminline unsigned even128(bool Is32bit) {
25276479Sdim  return Is32bit ? subreg_hl32 : subreg_h64;
26251607Sdim}
27276479Sdiminline unsigned odd128(bool Is32bit) {
28276479Sdim  return Is32bit ? subreg_l32 : subreg_l64;
29276479Sdim}
30276479Sdim} // end namespace SystemZ
31251607Sdim
32251607Sdimstruct SystemZRegisterInfo : public SystemZGenRegisterInfo {
33251607Sdimpublic:
34276479Sdim  SystemZRegisterInfo();
35251607Sdim
36251607Sdim  // Override TargetRegisterInfo.h.
37276479Sdim  bool requiresRegisterScavenging(const MachineFunction &MF) const override {
38251607Sdim    return true;
39251607Sdim  }
40276479Sdim  bool requiresFrameIndexScavenging(const MachineFunction &MF) const override {
41251607Sdim    return true;
42251607Sdim  }
43276479Sdim  bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override {
44261991Sdim    return true;
45261991Sdim  }
46288943Sdim  const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const override;
47288943Sdim  const uint32_t *getCallPreservedMask(const MachineFunction &MF,
48288943Sdim                                       CallingConv::ID CC) const override;
49276479Sdim  BitVector getReservedRegs(const MachineFunction &MF) const override;
50276479Sdim  void eliminateFrameIndex(MachineBasicBlock::iterator MI,
51276479Sdim                           int SPAdj, unsigned FIOperandNum,
52276479Sdim                           RegScavenger *RS) const override;
53276479Sdim  unsigned getFrameRegister(const MachineFunction &MF) const override;
54251607Sdim};
55251607Sdim
56251607Sdim} // end namespace llvm
57251607Sdim
58251607Sdim#endif
59