1*5f613dfdSUlrich Weigand //==- SystemZMachineFuctionInfo.h - SystemZ machine function info -*- C++ -*-=// 2*5f613dfdSUlrich Weigand // 3*5f613dfdSUlrich Weigand // The LLVM Compiler Infrastructure 4*5f613dfdSUlrich Weigand // 5*5f613dfdSUlrich Weigand // This file is distributed under the University of Illinois Open Source 6*5f613dfdSUlrich Weigand // License. See LICENSE.TXT for details. 7*5f613dfdSUlrich Weigand // 8*5f613dfdSUlrich Weigand //===----------------------------------------------------------------------===// 9*5f613dfdSUlrich Weigand 10*5f613dfdSUlrich Weigand #ifndef SYSTEMZMACHINEFUNCTIONINFO_H 11*5f613dfdSUlrich Weigand #define SYSTEMZMACHINEFUNCTIONINFO_H 12*5f613dfdSUlrich Weigand 13*5f613dfdSUlrich Weigand #include "llvm/CodeGen/MachineFunction.h" 14*5f613dfdSUlrich Weigand 15*5f613dfdSUlrich Weigand namespace llvm { 16*5f613dfdSUlrich Weigand 17*5f613dfdSUlrich Weigand class SystemZMachineFunctionInfo : public MachineFunctionInfo { 18*5f613dfdSUlrich Weigand unsigned SavedGPRFrameSize; 19*5f613dfdSUlrich Weigand unsigned LowSavedGPR; 20*5f613dfdSUlrich Weigand unsigned HighSavedGPR; 21*5f613dfdSUlrich Weigand unsigned VarArgsFirstGPR; 22*5f613dfdSUlrich Weigand unsigned VarArgsFirstFPR; 23*5f613dfdSUlrich Weigand unsigned VarArgsFrameIndex; 24*5f613dfdSUlrich Weigand unsigned RegSaveFrameIndex; 25*5f613dfdSUlrich Weigand bool ManipulatesSP; 26*5f613dfdSUlrich Weigand 27*5f613dfdSUlrich Weigand public: 28*5f613dfdSUlrich Weigand explicit SystemZMachineFunctionInfo(MachineFunction &MF) 29*5f613dfdSUlrich Weigand : SavedGPRFrameSize(0), LowSavedGPR(0), HighSavedGPR(0), VarArgsFirstGPR(0), 30*5f613dfdSUlrich Weigand VarArgsFirstFPR(0), VarArgsFrameIndex(0), RegSaveFrameIndex(0), 31*5f613dfdSUlrich Weigand ManipulatesSP(false) {} 32*5f613dfdSUlrich Weigand 33*5f613dfdSUlrich Weigand // Get and set the number of bytes allocated by generic code to store 34*5f613dfdSUlrich Weigand // call-saved GPRs. 35*5f613dfdSUlrich Weigand unsigned getSavedGPRFrameSize() const { return SavedGPRFrameSize; } 36*5f613dfdSUlrich Weigand void setSavedGPRFrameSize(unsigned bytes) { SavedGPRFrameSize = bytes; } 37*5f613dfdSUlrich Weigand 38*5f613dfdSUlrich Weigand // Get and set the first call-saved GPR that should be saved and restored 39*5f613dfdSUlrich Weigand // by this function. This is 0 if no GPRs need to be saved or restored. 40*5f613dfdSUlrich Weigand unsigned getLowSavedGPR() const { return LowSavedGPR; } 41*5f613dfdSUlrich Weigand void setLowSavedGPR(unsigned Reg) { LowSavedGPR = Reg; } 42*5f613dfdSUlrich Weigand 43*5f613dfdSUlrich Weigand // Get and set the last call-saved GPR that should be saved and restored 44*5f613dfdSUlrich Weigand // by this function. 45*5f613dfdSUlrich Weigand unsigned getHighSavedGPR() const { return HighSavedGPR; } 46*5f613dfdSUlrich Weigand void setHighSavedGPR(unsigned Reg) { HighSavedGPR = Reg; } 47*5f613dfdSUlrich Weigand 48*5f613dfdSUlrich Weigand // Get and set the number of fixed (as opposed to variable) arguments 49*5f613dfdSUlrich Weigand // that are passed in GPRs to this function. 50*5f613dfdSUlrich Weigand unsigned getVarArgsFirstGPR() const { return VarArgsFirstGPR; } 51*5f613dfdSUlrich Weigand void setVarArgsFirstGPR(unsigned GPR) { VarArgsFirstGPR = GPR; } 52*5f613dfdSUlrich Weigand 53*5f613dfdSUlrich Weigand // Likewise FPRs. 54*5f613dfdSUlrich Weigand unsigned getVarArgsFirstFPR() const { return VarArgsFirstFPR; } 55*5f613dfdSUlrich Weigand void setVarArgsFirstFPR(unsigned FPR) { VarArgsFirstFPR = FPR; } 56*5f613dfdSUlrich Weigand 57*5f613dfdSUlrich Weigand // Get and set the frame index of the first stack vararg. 58*5f613dfdSUlrich Weigand unsigned getVarArgsFrameIndex() const { return VarArgsFrameIndex; } 59*5f613dfdSUlrich Weigand void setVarArgsFrameIndex(unsigned FI) { VarArgsFrameIndex = FI; } 60*5f613dfdSUlrich Weigand 61*5f613dfdSUlrich Weigand // Get and set the frame index of the register save area 62*5f613dfdSUlrich Weigand // (i.e. the incoming stack pointer). 63*5f613dfdSUlrich Weigand unsigned getRegSaveFrameIndex() const { return RegSaveFrameIndex; } 64*5f613dfdSUlrich Weigand void setRegSaveFrameIndex(unsigned FI) { RegSaveFrameIndex = FI; } 65*5f613dfdSUlrich Weigand 66*5f613dfdSUlrich Weigand // Get and set whether the function directly manipulates the stack pointer, 67*5f613dfdSUlrich Weigand // e.g. through STACKSAVE or STACKRESTORE. 68*5f613dfdSUlrich Weigand bool getManipulatesSP() const { return ManipulatesSP; } 69*5f613dfdSUlrich Weigand void setManipulatesSP(bool MSP) { ManipulatesSP = MSP; } 70*5f613dfdSUlrich Weigand }; 71*5f613dfdSUlrich Weigand 72*5f613dfdSUlrich Weigand } // end llvm namespace 73*5f613dfdSUlrich Weigand 74*5f613dfdSUlrich Weigand #endif 75