119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//=- MBlazeFrameLowering.h - Define frame lowering for MicroBlaze -*- C++ -*-=// 219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// The LLVM Compiler Infrastructure 419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// This file is distributed under the University of Illinois Open Source 619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// License. See LICENSE.TXT for details. 719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//===----------------------------------------------------------------------===// 919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 1019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 1119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman// 1219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman//===----------------------------------------------------------------------===// 1319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 1419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#ifndef MBLAZE_FRAMEINFO_H 1519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#define MBLAZE_FRAMEINFO_H 1619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 1719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "MBlaze.h" 1819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "MBlazeSubtarget.h" 1919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#include "llvm/Target/TargetFrameLowering.h" 2019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 2119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumannamespace llvm { 2219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman class MBlazeSubtarget; 2319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 2419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanclass MBlazeFrameLowering : public TargetFrameLowering { 2519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanprotected: 2619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman const MBlazeSubtarget &STI; 2719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 2819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Baumanpublic: 2919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman explicit MBlazeFrameLowering(const MBlazeSubtarget &sti) 3019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman : TargetFrameLowering(TargetFrameLowering::StackGrowsUp, 4, 0), STI(sti) { 3119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman } 3219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 3319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman /// targetHandlesStackFrameRounding - Returns true if the target is 3419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman /// responsible for rounding up the stack frame (probably at emitPrologue 3519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman /// time). 3619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman bool targetHandlesStackFrameRounding() const { return true; } 3719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 3819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman /// emitProlog/emitEpilog - These methods insert prolog and epilog code into 3919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman /// the function. 4019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman void emitPrologue(MachineFunction &MF) const; 4119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const; 4219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 4319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman bool hasFP(const MachineFunction &MF) const; 4419bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 4519bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman int getFrameIndexOffset(const MachineFunction &MF, int FI) const; 4619bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 4719bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman virtual void processFunctionBeforeCalleeSavedScan(MachineFunction &MF, 4819bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman RegScavenger *RS) const; 4919bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman}; 5019bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 5119bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman} // End llvm namespace 5219bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman 5319bac1e08be200c31efd26f0f5fd144c9b3eefd3John Bauman#endif 54