mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 07:11:49 +00:00
Stack Alignment: move functions from header file MachineFrameInfo.h.
No functional change for this commit. The follow-up patch will add more stuff to these functions. rdar://12713765 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169186 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4af1ca5229
commit
dc8126bbb8
@ -432,9 +432,7 @@ public:
|
||||
|
||||
/// ensureMaxAlignment - Make sure the function is at least Align bytes
|
||||
/// aligned.
|
||||
void ensureMaxAlignment(unsigned Align) {
|
||||
if (MaxAlignment < Align) MaxAlignment = Align;
|
||||
}
|
||||
void ensureMaxAlignment(unsigned Align);
|
||||
|
||||
/// AdjustsStack - Return true if this function adjusts the stack -- e.g.,
|
||||
/// when calling another function. This is only valid during and after
|
||||
@ -496,26 +494,13 @@ public:
|
||||
/// a nonnegative identifier to represent it.
|
||||
///
|
||||
int CreateStackObject(uint64_t Size, unsigned Alignment, bool isSS,
|
||||
bool MayNeedSP = false, const AllocaInst *Alloca = 0) {
|
||||
assert(Size != 0 && "Cannot allocate zero size stack objects!");
|
||||
Objects.push_back(StackObject(Size, Alignment, 0, false, isSS, MayNeedSP,
|
||||
Alloca));
|
||||
int Index = (int)Objects.size() - NumFixedObjects - 1;
|
||||
assert(Index >= 0 && "Bad frame index!");
|
||||
ensureMaxAlignment(Alignment);
|
||||
return Index;
|
||||
}
|
||||
bool MayNeedSP = false, const AllocaInst *Alloca = 0);
|
||||
|
||||
/// CreateSpillStackObject - Create a new statically sized stack object that
|
||||
/// represents a spill slot, returning a nonnegative identifier to represent
|
||||
/// it.
|
||||
///
|
||||
int CreateSpillStackObject(uint64_t Size, unsigned Alignment) {
|
||||
CreateStackObject(Size, Alignment, true, false);
|
||||
int Index = (int)Objects.size() - NumFixedObjects - 1;
|
||||
ensureMaxAlignment(Alignment);
|
||||
return Index;
|
||||
}
|
||||
int CreateSpillStackObject(uint64_t Size, unsigned Alignment);
|
||||
|
||||
/// RemoveStackObject - Remove or mark dead a statically sized stack object.
|
||||
///
|
||||
@ -529,12 +514,7 @@ public:
|
||||
/// variable sized object is created, whether or not the index returned is
|
||||
/// actually used.
|
||||
///
|
||||
int CreateVariableSizedObject(unsigned Alignment) {
|
||||
HasVarSizedObjects = true;
|
||||
Objects.push_back(StackObject(0, Alignment, 0, false, false, true, 0));
|
||||
ensureMaxAlignment(Alignment);
|
||||
return (int)Objects.size()-NumFixedObjects-1;
|
||||
}
|
||||
int CreateVariableSizedObject(unsigned Alignment);
|
||||
|
||||
/// getCalleeSavedInfo - Returns a reference to call saved info vector for the
|
||||
/// current function.
|
||||
|
@ -445,6 +445,50 @@ MCSymbol *MachineFunction::getPICBaseSymbol() const {
|
||||
// MachineFrameInfo implementation
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
/// ensureMaxAlignment - Make sure the function is at least Align bytes
|
||||
/// aligned.
|
||||
void MachineFrameInfo::ensureMaxAlignment(unsigned Align) {
|
||||
if (MaxAlignment < Align) MaxAlignment = Align;
|
||||
}
|
||||
|
||||
/// CreateStackObject - Create a new statically sized stack object, returning
|
||||
/// a nonnegative identifier to represent it.
|
||||
///
|
||||
int MachineFrameInfo::CreateStackObject(uint64_t Size, unsigned Alignment,
|
||||
bool isSS, bool MayNeedSP, const AllocaInst *Alloca) {
|
||||
assert(Size != 0 && "Cannot allocate zero size stack objects!");
|
||||
Objects.push_back(StackObject(Size, Alignment, 0, false, isSS, MayNeedSP,
|
||||
Alloca));
|
||||
int Index = (int)Objects.size() - NumFixedObjects - 1;
|
||||
assert(Index >= 0 && "Bad frame index!");
|
||||
ensureMaxAlignment(Alignment);
|
||||
return Index;
|
||||
}
|
||||
|
||||
/// CreateSpillStackObject - Create a new statically sized stack object that
|
||||
/// represents a spill slot, returning a nonnegative identifier to represent
|
||||
/// it.
|
||||
///
|
||||
int MachineFrameInfo::CreateSpillStackObject(uint64_t Size,
|
||||
unsigned Alignment) {
|
||||
CreateStackObject(Size, Alignment, true, false);
|
||||
int Index = (int)Objects.size() - NumFixedObjects - 1;
|
||||
ensureMaxAlignment(Alignment);
|
||||
return Index;
|
||||
}
|
||||
|
||||
/// CreateVariableSizedObject - Notify the MachineFrameInfo object that a
|
||||
/// variable sized object has been created. This must be created whenever a
|
||||
/// variable sized object is created, whether or not the index returned is
|
||||
/// actually used.
|
||||
///
|
||||
int MachineFrameInfo::CreateVariableSizedObject(unsigned Alignment) {
|
||||
HasVarSizedObjects = true;
|
||||
Objects.push_back(StackObject(0, Alignment, 0, false, false, true, 0));
|
||||
ensureMaxAlignment(Alignment);
|
||||
return (int)Objects.size()-NumFixedObjects-1;
|
||||
}
|
||||
|
||||
/// CreateFixedObject - Create a new object at a fixed location on the stack.
|
||||
/// All fixed objects should be created before other objects are created for
|
||||
/// efficiency. By default, fixed objects are immutable. This returns an
|
||||
|
Loading…
Reference in New Issue
Block a user