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.
24  inline unsigned even128(bool Is32bit) {
25    return Is32bit ? subreg_32bit : subreg_high;
26  }
27  inline unsigned odd128(bool Is32bit) {
28    return Is32bit ? subreg_low32 : subreg_low;
29  }
30}
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  virtual bool requiresRegisterScavenging(const MachineFunction &MF) const
44    LLVM_OVERRIDE {
45    return true;
46  }
47  virtual bool requiresFrameIndexScavenging(const MachineFunction &MF) const
48    LLVM_OVERRIDE {
49    return true;
50  }
51  virtual const uint16_t *getCalleeSavedRegs(const MachineFunction *MF = 0)
52    const LLVM_OVERRIDE;
53  virtual BitVector getReservedRegs(const MachineFunction &MF)
54    const LLVM_OVERRIDE;
55  virtual void eliminateFrameIndex(MachineBasicBlock::iterator MI,
56                                   int SPAdj, unsigned FIOperandNum,
57                                   RegScavenger *RS) const LLVM_OVERRIDE;
58  virtual unsigned getFrameRegister(const MachineFunction &MF) const
59    LLVM_OVERRIDE;
60};
61
62} // end namespace llvm
63
64#endif
65