================ @@ -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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits