1251607Sdim//===-- SystemZRegisterInfo.h - SystemZ register information ----*- C++ -*-===// 2251607Sdim// 3251607Sdim// The LLVM Compiler Infrastructure 4251607Sdim// 5251607Sdim// This file is distributed under the University of Illinois Open Source 6251607Sdim// License. See LICENSE.TXT for details. 7251607Sdim// 8251607Sdim//===----------------------------------------------------------------------===// 9251607Sdim 10280031Sdim#ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZREGISTERINFO_H 11280031Sdim#define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZREGISTERINFO_H 12251607Sdim 13251607Sdim#include "SystemZ.h" 14251607Sdim#include "llvm/Target/TargetRegisterInfo.h" 15251607Sdim 16251607Sdim#define GET_REGINFO_HEADER 17251607Sdim#include "SystemZGenRegisterInfo.inc" 18251607Sdim 19251607Sdimnamespace llvm { 20251607Sdim 21251607Sdimnamespace SystemZ { 22276479Sdim// Return the subreg to use for referring to the even and odd registers 23276479Sdim// in a GR128 pair. Is32Bit says whether we want a GR32 or GR64. 24276479Sdiminline unsigned even128(bool Is32bit) { 25276479Sdim return Is32bit ? subreg_hl32 : subreg_h64; 26251607Sdim} 27276479Sdiminline unsigned odd128(bool Is32bit) { 28276479Sdim return Is32bit ? subreg_l32 : subreg_l64; 29276479Sdim} 30276479Sdim} // end namespace SystemZ 31251607Sdim 32251607Sdimstruct SystemZRegisterInfo : public SystemZGenRegisterInfo { 33251607Sdimpublic: 34276479Sdim SystemZRegisterInfo(); 35251607Sdim 36251607Sdim // Override TargetRegisterInfo.h. 37276479Sdim bool requiresRegisterScavenging(const MachineFunction &MF) const override { 38251607Sdim return true; 39251607Sdim } 40276479Sdim bool requiresFrameIndexScavenging(const MachineFunction &MF) const override { 41251607Sdim return true; 42251607Sdim } 43276479Sdim bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override { 44261991Sdim return true; 45261991Sdim } 46288943Sdim const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const override; 47288943Sdim const uint32_t *getCallPreservedMask(const MachineFunction &MF, 48288943Sdim CallingConv::ID CC) const override; 49276479Sdim BitVector getReservedRegs(const MachineFunction &MF) const override; 50276479Sdim void eliminateFrameIndex(MachineBasicBlock::iterator MI, 51276479Sdim int SPAdj, unsigned FIOperandNum, 52276479Sdim RegScavenger *RS) const override; 53276479Sdim unsigned getFrameRegister(const MachineFunction &MF) const override; 54251607Sdim}; 55251607Sdim 56251607Sdim} // end namespace llvm 57251607Sdim 58251607Sdim#endif 59