[clang] [CIR] Upstream StackSave and StackRestoreOp (PR #136426)
Henrich Lauko via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 21 10:23:34 PDT 2025
================
@@ -1419,6 +1419,50 @@ def CallOp : CIR_CallOpBase<"call", [NoRegionArguments]> {
}]>];
}
+//===----------------------------------------------------------------------===//
+// StackSave & StackRestoreOp
+//===----------------------------------------------------------------------===//
+
+def StackSaveOp : CIR_Op<"stack_save"> {
+ 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.stack_restore.
+ Useful for implementing language features like variable length arrays.
+
+ This operation is correspond to LLVM intrinsic `stacksave`.
+
+ ```mlir
+ %0 = cir.stack_save : <!u8i>
+ ```
+ }];
+
+ let results = (outs CIR_PointerType:$result);
+ let assemblyFormat = "attr-dict `:` qualified(type($result))";
+}
+
+def StackRestoreOp : CIR_Op<"stack_restore"> {
+ 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.stack_save executed.
+ Useful for implementing language features like variable length arrays.
+
+ This operation is correspond to LLVM intrinsic `stackrestore`.
----------------
xlauko wrote:
```suggestion
This operation corresponds to LLVM intrinsic `stackrestore`.
```
https://github.com/llvm/llvm-project/pull/136426
More information about the cfe-commits
mailing list