X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FMips%2FMipsFrameLowering.h;h=5eabd58e8686a0350e4c300d668ab02b356bce30;hb=fd8928ded9fa74d7127d4277440d5928145ebc7e;hp=f42711da841dff1623d0561e44b0403a25bf9bf2;hpb=17a1e8775119db75ece41e041eeb6480793696ff;p=oota-llvm.git diff --git a/lib/Target/Mips/MipsFrameLowering.h b/lib/Target/Mips/MipsFrameLowering.h index f42711da841..5eabd58e868 100644 --- a/lib/Target/Mips/MipsFrameLowering.h +++ b/lib/Target/Mips/MipsFrameLowering.h @@ -1,4 +1,4 @@ -//==--- MipsFrameLowering.h - Define frame lowering for Mips --*- C++ -*---===// +//===-- MipsFrameLowering.h - Define frame lowering for Mips ----*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -11,11 +11,10 @@ // //===----------------------------------------------------------------------===// -#ifndef MIPS_FRAMEINFO_H -#define MIPS_FRAMEINFO_H +#ifndef LLVM_LIB_TARGET_MIPS_MIPSFRAMELOWERING_H +#define LLVM_LIB_TARGET_MIPS_MIPSFRAMELOWERING_H #include "Mips.h" -#include "MipsSubtarget.h" #include "llvm/Target/TargetFrameLowering.h" namespace llvm { @@ -26,25 +25,30 @@ protected: const MipsSubtarget &STI; public: - explicit MipsFrameLowering(const MipsSubtarget &sti) - // FIXME: Is this correct at all? - : TargetFrameLowering(StackGrowsUp, 8, 0), STI(sti) { - } + explicit MipsFrameLowering(const MipsSubtarget &sti, unsigned Alignment) + : TargetFrameLowering(StackGrowsDown, Alignment, 0, Alignment), STI(sti) {} - void adjustMipsStackFrame(MachineFunction &MF) const; + static const MipsFrameLowering *create(const MipsSubtarget &ST); - /// emitProlog/emitEpilog - These methods insert prolog and epilog code into - /// the function. - void emitPrologue(MachineFunction &MF) const; - void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const; + bool hasFP(const MachineFunction &MF) const override; - bool hasFP(const MachineFunction &MF) const; + bool hasBP(const MachineFunction &MF) const; - void processFunctionBeforeCalleeSavedScan(MachineFunction &MF, - RegScavenger *RS) const; - void processFunctionBeforeFrameFinalized(MachineFunction &MF) const; + bool isFPCloseToIncomingSP() const override { return false; } + + void + eliminateCallFramePseudoInstr(MachineFunction &MF, + MachineBasicBlock &MBB, + MachineBasicBlock::iterator I) const override; + +protected: + uint64_t estimateStackSize(const MachineFunction &MF) const; }; +/// Create MipsFrameLowering objects. +const MipsFrameLowering *createMips16FrameLowering(const MipsSubtarget &ST); +const MipsFrameLowering *createMipsSEFrameLowering(const MipsSubtarget &ST); + } // End llvm namespace #endif