SystemZRegisterInfo.h revision 263508
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_hl32 : subreg_h64;
26  }
27  inline unsigned odd128(bool Is32bit) {
28    return Is32bit ? subreg_l32 : subreg_l64;
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 bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const
52    LLVM_OVERRIDE {
53    return true;
54  }
55  virtual const uint16_t *getCalleeSavedRegs(const MachineFunction *MF = 0)
56    const LLVM_OVERRIDE;
57  virtual BitVector getReservedRegs(const MachineFunction &MF)
58    const LLVM_OVERRIDE;
59  virtual void eliminateFrameIndex(MachineBasicBlock::iterator MI,
60                                   int SPAdj, unsigned FIOperandNum,
61                                   RegScavenger *RS) const LLVM_OVERRIDE;
62  virtual unsigned getFrameRegister(const MachineFunction &MF) const
63    LLVM_OVERRIDE;
64};
65
66} // end namespace llvm
67
68#endif
69