SparcFrameLowering.h revision 700ed80d3da5e98e05ceb90e9bfb66058581a6db
131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//===-- SparcFrameLowering.h - Define frame lowering for Sparc --*- C++ -*-===//
233464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov//
333464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov//                     The LLVM Compiler Infrastructure
433464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov//
533464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov// This file is distributed under the University of Illinois Open Source
633464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov// License. See LICENSE.TXT for details.
733464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov//
833464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov//===----------------------------------------------------------------------===//
933464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov//
1033464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov//
1133464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov//
1233464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov//===----------------------------------------------------------------------===//
1333464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov
1433464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov#ifndef SPARC_FRAMEINFO_H
1533464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov#define SPARC_FRAMEINFO_H
1633464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov
1733464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov#include "Sparc.h"
1833464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov#include "SparcSubtarget.h"
1916c29b5f285f375be53dabaa73e3e91107485fe4Anton Korobeynikov#include "llvm/Target/TargetFrameLowering.h"
2033464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov
2133464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikovnamespace llvm {
2233464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov  class SparcSubtarget;
2333464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov
2416c29b5f285f375be53dabaa73e3e91107485fe4Anton Korobeynikovclass SparcFrameLowering : public TargetFrameLowering {
2533464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikovpublic:
2695a9d937728ca9cf2bf44f86ff1184df318b3bd7Benjamin Kramer  explicit SparcFrameLowering(const SparcSubtarget &/*sti*/)
2795a9d937728ca9cf2bf44f86ff1184df318b3bd7Benjamin Kramer    : TargetFrameLowering(TargetFrameLowering::StackGrowsDown, 8, 0) {
2833464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov  }
2933464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov
3033464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov  /// emitProlog/emitEpilog - These methods insert prolog and epilog code into
3133464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov  /// the function.
3233464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov  void emitPrologue(MachineFunction &MF) const;
3333464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov  void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const;
34d0c38176690e9602a93a20a43f1bd084564a8116Anton Korobeynikov
35700ed80d3da5e98e05ceb90e9bfb66058581a6dbEli Bendersky  void eliminateCallFramePseudoInstr(MachineFunction &MF,
36700ed80d3da5e98e05ceb90e9bfb66058581a6dbEli Bendersky                                     MachineBasicBlock &MBB,
37700ed80d3da5e98e05ceb90e9bfb66058581a6dbEli Bendersky                                     MachineBasicBlock::iterator I) const;
38700ed80d3da5e98e05ceb90e9bfb66058581a6dbEli Bendersky
39d0c38176690e9602a93a20a43f1bd084564a8116Anton Korobeynikov  bool hasFP(const MachineFunction &MF) const { return false; }
4033464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov};
4133464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov
4233464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov} // End llvm namespace
4333464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov
4433464912237efaa0ed7060829e66b59055bdd48bAnton Korobeynikov#endif
45