SystemZRegisterInfo.h revision 288943
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 LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZREGISTERINFO_H
11#define LLVM_LIB_TARGET_SYSTEMZ_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
32struct SystemZRegisterInfo : public SystemZGenRegisterInfo {
33public:
34  SystemZRegisterInfo();
35
36  // Override TargetRegisterInfo.h.
37  bool requiresRegisterScavenging(const MachineFunction &MF) const override {
38    return true;
39  }
40  bool requiresFrameIndexScavenging(const MachineFunction &MF) const override {
41    return true;
42  }
43  bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override {
44    return true;
45  }
46  const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const override;
47  const uint32_t *getCallPreservedMask(const MachineFunction &MF,
48                                       CallingConv::ID CC) const override;
49  BitVector getReservedRegs(const MachineFunction &MF) const override;
50  void eliminateFrameIndex(MachineBasicBlock::iterator MI,
51                           int SPAdj, unsigned FIOperandNum,
52                           RegScavenger *RS) const override;
53  unsigned getFrameRegister(const MachineFunction &MF) const override;
54};
55
56} // end namespace llvm
57
58#endif
59