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 10251607Sdim#ifndef SystemZREGISTERINFO_H 11251607Sdim#define 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 { 22251607Sdim // Return the subreg to use for referring to the even and odd registers 23251607Sdim // in a GR128 pair. Is32Bit says whether we want a GR32 or GR64. 24251607Sdim inline unsigned even128(bool Is32bit) { 25263508Sdim return Is32bit ? subreg_hl32 : subreg_h64; 26251607Sdim } 27251607Sdim inline unsigned odd128(bool Is32bit) { 28263508Sdim return Is32bit ? subreg_l32 : subreg_l64; 29251607Sdim } 30251607Sdim} 31251607Sdim 32251607Sdimclass SystemZSubtarget; 33251607Sdimclass SystemZInstrInfo; 34251607Sdim 35251607Sdimstruct SystemZRegisterInfo : public SystemZGenRegisterInfo { 36251607Sdimprivate: 37251607Sdim SystemZTargetMachine &TM; 38251607Sdim 39251607Sdimpublic: 40263508Sdim SystemZRegisterInfo(SystemZTargetMachine &tm); 41251607Sdim 42251607Sdim // Override TargetRegisterInfo.h. 43251607Sdim virtual bool requiresRegisterScavenging(const MachineFunction &MF) const 44251607Sdim LLVM_OVERRIDE { 45251607Sdim return true; 46251607Sdim } 47251607Sdim virtual bool requiresFrameIndexScavenging(const MachineFunction &MF) const 48251607Sdim LLVM_OVERRIDE { 49251607Sdim return true; 50251607Sdim } 51263508Sdim virtual bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const 52263508Sdim LLVM_OVERRIDE { 53263508Sdim return true; 54263508Sdim } 55251607Sdim virtual const uint16_t *getCalleeSavedRegs(const MachineFunction *MF = 0) 56251607Sdim const LLVM_OVERRIDE; 57251607Sdim virtual BitVector getReservedRegs(const MachineFunction &MF) 58251607Sdim const LLVM_OVERRIDE; 59251607Sdim virtual void eliminateFrameIndex(MachineBasicBlock::iterator MI, 60251607Sdim int SPAdj, unsigned FIOperandNum, 61251607Sdim RegScavenger *RS) const LLVM_OVERRIDE; 62251607Sdim virtual unsigned getFrameRegister(const MachineFunction &MF) const 63251607Sdim LLVM_OVERRIDE; 64251607Sdim}; 65251607Sdim 66251607Sdim} // end namespace llvm 67251607Sdim 68251607Sdim#endif 69