60 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
//===-- SystemZFrameLowering.h - Frame lowering for SystemZ -----*- C++ -*-===//
 | 
						|
//
 | 
						|
//                     The LLVM Compiler Infrastructure
 | 
						|
//
 | 
						|
// This file is distributed under the University of Illinois Open Source
 | 
						|
// License. See LICENSE.TXT for details.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZFRAMELOWERING_H
 | 
						|
#define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZFRAMELOWERING_H
 | 
						|
 | 
						|
#include "llvm/ADT/IndexedMap.h"
 | 
						|
#include "llvm/CodeGen/TargetFrameLowering.h"
 | 
						|
 | 
						|
namespace llvm {
 | 
						|
class SystemZTargetMachine;
 | 
						|
class SystemZSubtarget;
 | 
						|
 | 
						|
class SystemZFrameLowering : public TargetFrameLowering {
 | 
						|
  IndexedMap<unsigned> RegSpillOffsets;
 | 
						|
 | 
						|
public:
 | 
						|
  SystemZFrameLowering();
 | 
						|
 | 
						|
  // Override TargetFrameLowering.
 | 
						|
  bool isFPCloseToIncomingSP() const override { return false; }
 | 
						|
  const SpillSlot *getCalleeSavedSpillSlots(unsigned &NumEntries) const
 | 
						|
    override;
 | 
						|
  void determineCalleeSaves(MachineFunction &MF, BitVector &SavedRegs,
 | 
						|
                            RegScavenger *RS) const override;
 | 
						|
  bool spillCalleeSavedRegisters(MachineBasicBlock &MBB,
 | 
						|
                                 MachineBasicBlock::iterator MBBI,
 | 
						|
                                 const std::vector<CalleeSavedInfo> &CSI,
 | 
						|
                                 const TargetRegisterInfo *TRI) const override;
 | 
						|
  bool restoreCalleeSavedRegisters(MachineBasicBlock &MBB,
 | 
						|
                                   MachineBasicBlock::iterator MBBII,
 | 
						|
                                   std::vector<CalleeSavedInfo> &CSI,
 | 
						|
                                   const TargetRegisterInfo *TRI) const
 | 
						|
    override;
 | 
						|
  void processFunctionBeforeFrameFinalized(MachineFunction &MF,
 | 
						|
                                           RegScavenger *RS) const override;
 | 
						|
  void emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
 | 
						|
  void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const override;
 | 
						|
  bool hasFP(const MachineFunction &MF) const override;
 | 
						|
  bool hasReservedCallFrame(const MachineFunction &MF) const override;
 | 
						|
  MachineBasicBlock::iterator
 | 
						|
  eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
 | 
						|
                                MachineBasicBlock::iterator MI) const override;
 | 
						|
 | 
						|
  // Return the byte offset from the incoming stack pointer of Reg's
 | 
						|
  // ABI-defined save slot.  Return 0 if no slot is defined for Reg.
 | 
						|
  unsigned getRegSpillOffset(unsigned Reg) const {
 | 
						|
    return RegSpillOffsets[Reg];
 | 
						|
  }
 | 
						|
};
 | 
						|
} // end namespace llvm
 | 
						|
 | 
						|
#endif
 |