11d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand//===-- SystemZRegisterInfo.h - SystemZ register information ----*- C++ -*-===// 21d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// 31d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// The LLVM Compiler Infrastructure 41d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// 51d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// This file is distributed under the University of Illinois Open Source 61d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// License. See LICENSE.TXT for details. 71d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand// 81d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand//===----------------------------------------------------------------------===// 91d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 101d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#ifndef SystemZREGISTERINFO_H 111d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#define SystemZREGISTERINFO_H 121d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 131d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "SystemZ.h" 141d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "llvm/Target/TargetRegisterInfo.h" 151d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 161d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#define GET_REGINFO_HEADER 171d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#include "SystemZGenRegisterInfo.inc" 181d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 191d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandnamespace llvm { 201d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 211d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandnamespace SystemZ { 2236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// Return the subreg to use for referring to the even and odd registers 2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// in a GR128 pair. Is32Bit says whether we want a GR32 or GR64. 2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesinline unsigned even128(bool Is32bit) { 2536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines return Is32bit ? subreg_hl32 : subreg_h64; 2636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} 2736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hinesinline unsigned odd128(bool Is32bit) { 2836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines return Is32bit ? subreg_l32 : subreg_l64; 291d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand} 3036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} // end namespace SystemZ 311d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 321d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandstruct SystemZRegisterInfo : public SystemZGenRegisterInfo { 331d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigandpublic: 34cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines SystemZRegisterInfo(); 351d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 361d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand // Override TargetRegisterInfo.h. 3736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool requiresRegisterScavenging(const MachineFunction &MF) const override { 381d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand return true; 391d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand } 4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool requiresFrameIndexScavenging(const MachineFunction &MF) const override { 411d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand return true; 421d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand } 4336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override { 44c2b840cb7c58e59c68aaa589841c41fb272df66dRichard Sandiford return true; 45c2b840cb7c58e59c68aaa589841c41fb272df66dRichard Sandiford } 46dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF = nullptr) const 4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines override; 48cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines const uint32_t *getCallPreservedMask(CallingConv::ID CC) const override; 4936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines BitVector getReservedRegs(const MachineFunction &MF) const override; 5036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines void eliminateFrameIndex(MachineBasicBlock::iterator MI, 5136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines int SPAdj, unsigned FIOperandNum, 5236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines RegScavenger *RS) const override; 5336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines unsigned getFrameRegister(const MachineFunction &MF) const override; 541d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand}; 551d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 561d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand} // end namespace llvm 571d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand 581d09d56fe1e3f3faadd4bf4ccf3e585ddb3c3b07Ulrich Weigand#endif 59