blob: 91a70dea29c929df8a12485f444e2ddd86edf973 [file] [log] [blame]
//===-- SystemZRegisterInfo.h - SystemZ register information ----*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef SystemZREGISTERINFO_H
#define SystemZREGISTERINFO_H
#include "SystemZ.h"
#include "llvm/Target/TargetRegisterInfo.h"
#define GET_REGINFO_HEADER
#include "SystemZGenRegisterInfo.inc"
namespace llvm {
namespace SystemZ {
// Return the subreg to use for referring to the even and odd registers
// in a GR128 pair. Is32Bit says whether we want a GR32 or GR64.
inline unsigned even128(bool Is32bit) {
return Is32bit ? subreg_32bit : subreg_high;
}
inline unsigned odd128(bool Is32bit) {
return Is32bit ? subreg_low32 : subreg_low;
}
}
class SystemZSubtarget;
class SystemZInstrInfo;
struct SystemZRegisterInfo : public SystemZGenRegisterInfo {
private:
SystemZTargetMachine &TM;
const SystemZInstrInfo &TII;
public:
SystemZRegisterInfo(SystemZTargetMachine &tm, const SystemZInstrInfo &tii);
// Override TargetRegisterInfo.h.
virtual bool requiresRegisterScavenging(const MachineFunction &MF) const
LLVM_OVERRIDE {
return true;
}
virtual bool requiresFrameIndexScavenging(const MachineFunction &MF) const
LLVM_OVERRIDE {
return true;
}
virtual const uint16_t *getCalleeSavedRegs(const MachineFunction *MF = 0)
const LLVM_OVERRIDE;
virtual BitVector getReservedRegs(const MachineFunction &MF)
const LLVM_OVERRIDE;
virtual bool saveScavengerRegister(MachineBasicBlock &MBB,
MachineBasicBlock::iterator SaveMBBI,
MachineBasicBlock::iterator &UseMBBI,
const TargetRegisterClass *RC,
unsigned Reg) const LLVM_OVERRIDE;
virtual void eliminateFrameIndex(MachineBasicBlock::iterator MI,
int SPAdj, unsigned FIOperandNum,
RegScavenger *RS) const LLVM_OVERRIDE;
virtual unsigned getFrameRegister(const MachineFunction &MF) const
LLVM_OVERRIDE;
};
} // end namespace llvm
#endif