SystemZRegisterInfo.h revision 36b56886974eae4f9c5ebc96befd3e7bfe5de338
1//===-- SystemZRegisterInfo.h - SystemZ register information ----*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef SystemZREGISTERINFO_H
11#define SystemZREGISTERINFO_H
12
13#include "SystemZ.h"
14#include "llvm/Target/TargetRegisterInfo.h"
15
16#define GET_REGINFO_HEADER
17#include "SystemZGenRegisterInfo.inc"
18
19namespace llvm {
20
21namespace SystemZ {
22// Return the subreg to use for referring to the even and odd registers
23// in a GR128 pair.  Is32Bit says whether we want a GR32 or GR64.
24inline unsigned even128(bool Is32bit) {
25  return Is32bit ? subreg_hl32 : subreg_h64;
26}
27inline unsigned odd128(bool Is32bit) {
28  return Is32bit ? subreg_l32 : subreg_l64;
29}
30} // end namespace SystemZ
31
32class SystemZSubtarget;
33class SystemZInstrInfo;
34
35struct SystemZRegisterInfo : public SystemZGenRegisterInfo {
36private:
37  SystemZTargetMachine &TM;
38
39public:
40  SystemZRegisterInfo(SystemZTargetMachine &tm);
41
42  // Override TargetRegisterInfo.h.
43  bool requiresRegisterScavenging(const MachineFunction &MF) const override {
44    return true;
45  }
46  bool requiresFrameIndexScavenging(const MachineFunction &MF) const override {
47    return true;
48  }
49  bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override {
50    return true;
51  }
52  const uint16_t *getCalleeSavedRegs(const MachineFunction *MF = 0) const
53    override;
54  BitVector getReservedRegs(const MachineFunction &MF) const override;
55  void eliminateFrameIndex(MachineBasicBlock::iterator MI,
56                           int SPAdj, unsigned FIOperandNum,
57                           RegScavenger *RS) const override;
58  unsigned getFrameRegister(const MachineFunction &MF) const override;
59};
60
61} // end namespace llvm
62
63#endif
64