SystemZRegisterInfo.h revision cd81d94322a39503e4a3e87b6ee03d4fcb3465fb
1579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson//===-- SystemZRegisterInfo.h - SystemZ register information ----*- C++ -*-===// 2579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson// 3579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson// The LLVM Compiler Infrastructure 4579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson// 5579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson// This file is distributed under the University of Illinois Open Source 6579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson// License. See LICENSE.TXT for details. 7579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson// 8579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson//===----------------------------------------------------------------------===// 9579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 10579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson#ifndef SystemZREGISTERINFO_H 11579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson#define SystemZREGISTERINFO_H 12579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 13579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson#include "SystemZ.h" 14579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson#include "llvm/Target/TargetRegisterInfo.h" 15579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 16579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson#define GET_REGINFO_HEADER 17579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson#include "SystemZGenRegisterInfo.inc" 18579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 19579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonnamespace llvm { 20579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 21579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonnamespace SystemZ { 22579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson// Return the subreg to use for referring to the even and odd registers 23579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson// in a GR128 pair. Is32Bit says whether we want a GR32 or GR64. 24579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsoninline unsigned even128(bool Is32bit) { 25579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson return Is32bit ? subreg_hl32 : subreg_h64; 26579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson} 27579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsoninline unsigned odd128(bool Is32bit) { 28579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson return Is32bit ? subreg_l32 : subreg_l64; 29579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson} 30579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson} // end namespace SystemZ 31579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 32579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonstruct SystemZRegisterInfo : public SystemZGenRegisterInfo { 33579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonpublic: 34579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson SystemZRegisterInfo(); 35579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 36579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson // Override TargetRegisterInfo.h. 37579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson bool requiresRegisterScavenging(const MachineFunction &MF) const override { 38579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson return true; 39579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 40579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson bool requiresFrameIndexScavenging(const MachineFunction &MF) const override { 41579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson return true; 42579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 43579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override { 44579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson return true; 45579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson } 46579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF = nullptr) const 47579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson override; 48579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson const uint32_t *getCallPreservedMask(CallingConv::ID CC) const override; 49579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson BitVector getReservedRegs(const MachineFunction &MF) const override; 50579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson void eliminateFrameIndex(MachineBasicBlock::iterator MI, 51579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson int SPAdj, unsigned FIOperandNum, 52579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson RegScavenger *RS) const override; 53579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson unsigned getFrameRegister(const MachineFunction &MF) const override; 54579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson}; 55579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 56579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson} // end namespace llvm 57579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson 58579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson#endif 59579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson