mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 04:30:12 +00:00
2c3514ae0d
On Mips, frame pointer points to the same side of the frame as the stack pointer. This function is used to decide where to put register scavenging spill slot. So far, it was put on the wrong side of the frame, and thus it was too far away from $fp when frame was larger than 2^15 bytes. Patch by Vladimir Radosavljevic. http://reviews.llvm.org/D8895 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237153 91177308-0d34-0410-b5e6-96231b3b80d8
53 lines
1.5 KiB
C++
53 lines
1.5 KiB
C++
//===-- MipsFrameLowering.h - Define frame lowering for Mips ----*- 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_MIPS_MIPSFRAMELOWERING_H
|
|
#define LLVM_LIB_TARGET_MIPS_MIPSFRAMELOWERING_H
|
|
|
|
#include "Mips.h"
|
|
#include "llvm/Target/TargetFrameLowering.h"
|
|
|
|
namespace llvm {
|
|
class MipsSubtarget;
|
|
|
|
class MipsFrameLowering : public TargetFrameLowering {
|
|
protected:
|
|
const MipsSubtarget &STI;
|
|
|
|
public:
|
|
explicit MipsFrameLowering(const MipsSubtarget &sti, unsigned Alignment)
|
|
: TargetFrameLowering(StackGrowsDown, Alignment, 0, Alignment), STI(sti) {}
|
|
|
|
static const MipsFrameLowering *create(const MipsSubtarget &ST);
|
|
|
|
bool hasFP(const MachineFunction &MF) const override;
|
|
|
|
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
|