[clang] [CIR] Upstream StackSave and StackRestoreOp (PR #136426)
Andy Kaylor via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 21 12:25:56 PDT 2025
================
@@ -1419,6 +1419,50 @@ def CallOp : CIR_CallOpBase<"call", [NoRegionArguments]> {
}]>];
}
+//===----------------------------------------------------------------------===//
+// StackSave & StackRestoreOp
+//===----------------------------------------------------------------------===//
+
+def StackSaveOp : CIR_Op<"stacksave"> {
+ let summary = "remembers the current state of the function stack";
+ let description = [{
+ Remembers the current state of the function stack. Returns a pointer
+ that later can be passed into cir.stackrestore.
+ Useful for implementing language features like variable length arrays.
+
+ This operation corresponds to LLVM intrinsic `stacksave`.
+
+ ```mlir
+ %0 = cir.stacksave : <!u8i>
+ ```
+ }];
+
+ let results = (outs CIR_PointerType:$result);
+ let assemblyFormat = "attr-dict `:` qualified(type($result))";
+}
+
+def StackRestoreOp : CIR_Op<"stackrestore"> {
+ let summary = "restores the state of the function stack";
+ let description = [{
+ Restore the state of the function stack to the state it was
+ in when the corresponding cir.stacksave executed.
+ Useful for implementing language features like variable length arrays.
----------------
andykaylor wrote:
```suggestion
This is used during the lowering of variable length array allocas.
```
https://github.com/llvm/llvm-project/pull/136426
More information about the cfe-commits
mailing list