mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-23 02:32:11 +00:00
Add a isImmutable bit to StackObject. Fixed stack objects are immutable (in the function) unless specified otherwise.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45812 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
038129dd58
commit
0d0e1b58cb
@ -86,8 +86,13 @@ class MachineFrameInfo {
|
|||||||
// the function. This field has no meaning for a variable sized element.
|
// the function. This field has no meaning for a variable sized element.
|
||||||
int64_t SPOffset;
|
int64_t SPOffset;
|
||||||
|
|
||||||
StackObject(uint64_t Sz, unsigned Al, int64_t SP)
|
// isImmutable - If true, the value of the stack object does not change
|
||||||
: Size(Sz), Alignment(Al), SPOffset(SP) {}
|
// in this function. By default, fixed objects are immutable unless marked
|
||||||
|
// otherwise.
|
||||||
|
bool isImmutable;
|
||||||
|
|
||||||
|
StackObject(uint64_t Sz, unsigned Al, int64_t SP, bool IM = false)
|
||||||
|
: Size(Sz), Alignment(Al), SPOffset(SP), isImmutable(IM) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Objects - The list of stack objects allocated...
|
/// Objects - The list of stack objects allocated...
|
||||||
@ -255,11 +260,13 @@ public:
|
|||||||
|
|
||||||
/// CreateFixedObject - Create a new object at a fixed location on the stack.
|
/// CreateFixedObject - Create a new object at a fixed location on the stack.
|
||||||
/// All fixed objects should be created before other objects are created for
|
/// All fixed objects should be created before other objects are created for
|
||||||
/// efficiency. This returns an index with a negative value.
|
/// efficiency. By default, fixed objects are immutable. This returns an
|
||||||
|
/// index with a negative value.
|
||||||
///
|
///
|
||||||
int CreateFixedObject(uint64_t Size, int64_t SPOffset) {
|
int CreateFixedObject(uint64_t Size, int64_t SPOffset,
|
||||||
|
bool Immutable = true) {
|
||||||
assert(Size != 0 && "Cannot allocate zero size fixed stack objects!");
|
assert(Size != 0 && "Cannot allocate zero size fixed stack objects!");
|
||||||
Objects.insert(Objects.begin(), StackObject(Size, 1, SPOffset));
|
Objects.insert(Objects.begin(), StackObject(Size, 1, SPOffset, Immutable));
|
||||||
return -++NumFixedObjects;
|
return -++NumFixedObjects;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -269,6 +276,12 @@ public:
|
|||||||
return ObjectIdx < 0 && (ObjectIdx >= -(int)NumFixedObjects);
|
return ObjectIdx < 0 && (ObjectIdx >= -(int)NumFixedObjects);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// isImmutableObjectIndex - Returns true if the specified index corresponds
|
||||||
|
/// to an immutable object.
|
||||||
|
bool isImmutableObjectIndex(int ObjectIdx) const {
|
||||||
|
return Objects[ObjectIdx+NumFixedObjects].isImmutable;
|
||||||
|
}
|
||||||
|
|
||||||
/// CreateStackObject - Create a new statically sized stack object, returning
|
/// CreateStackObject - Create a new statically sized stack object, returning
|
||||||
/// a postive identifier to represent it.
|
/// a postive identifier to represent it.
|
||||||
///
|
///
|
||||||
|
Loading…
x
Reference in New Issue
Block a user