Add a isImmutable bit to StackObject. Fixed stack objects are immutable (in the function) unless specified otherwise.

llvm-svn: 45812
This commit is contained in:
Evan Cheng 2008-01-10 02:18:37 +00:00
parent fdd4b3846f
commit f20828226e

View File

@ -86,8 +86,13 @@ class MachineFrameInfo {
// the function. This field has no meaning for a variable sized element.
int64_t SPOffset;
StackObject(uint64_t Sz, unsigned Al, int64_t SP)
: Size(Sz), Alignment(Al), SPOffset(SP) {}
// isImmutable - If true, the value of the stack object does not change
// 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...
@ -255,11 +260,13 @@ public:
/// 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. 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!");
Objects.insert(Objects.begin(), StackObject(Size, 1, SPOffset));
Objects.insert(Objects.begin(), StackObject(Size, 1, SPOffset, Immutable));
return -++NumFixedObjects;
}
@ -269,6 +276,12 @@ public:
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
/// a postive identifier to represent it.
///