Add a isImmutable bit to StackObject. Fixed stack objects are immutable (in the funct...
authorEvan Cheng <evan.cheng@apple.com>
Thu, 10 Jan 2008 02:18:37 +0000 (02:18 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Thu, 10 Jan 2008 02:18:37 +0000 (02:18 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45812 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/MachineFrameInfo.h

index bad73fda5f497d57570ffdc0085295a40ab716fd..9b1cacd66e52334f3c984269a3a815800644f2e9 100644 (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.
   ///