[mlir] Add stacksave, stackrestore to llvm dialect
authorDenys Shabalin <shabalin@google.com>
Tue, 9 Feb 2021 14:09:02 +0000 (15:09 +0100)
committerAlex Zinenko <zinenko@google.com>
Tue, 9 Feb 2021 14:13:16 +0000 (15:13 +0100)
Reviewed By: ftynse

Differential Revision: https://reviews.llvm.org/D96333

mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
mlir/test/Target/llvmir-intrinsics.mlir

index e44dbb8..3683735 100644 (file)
@@ -1278,6 +1278,19 @@ def LLVM_CoroResumeOp : LLVM_IntrOp<"coro.resume", [], [], [], 0> {
 }
 
 //
+// Stack save/restore intrinsics.
+//
+
+def LLVM_StackSaveOp : LLVM_OneResultIntrOp<"stacksave"> {
+  let assemblyFormat = "attr-dict `:` type($res)";
+}
+
+def LLVM_StackRestoreOp : LLVM_ZeroResultIntrOp<"stackrestore"> {
+  let arguments = (ins LLVM_i8Ptr:$ptr);
+  let assemblyFormat = "$ptr attr-dict";
+}
+
+//
 // Vector Reductions.
 //
 
index 12b470a..a9fe6f6 100644 (file)
@@ -405,6 +405,20 @@ llvm.func @coro_resume(%arg0: !llvm.ptr<i8>) {
   llvm.return
 }
 
+// CHECK-LABEL: @stack_save
+llvm.func @stack_save() {
+  // CHECK: call i8* @llvm.stacksave
+  %0 = llvm.intr.stacksave : !llvm.ptr<i8>
+  llvm.return
+}
+
+// CHECK-LABEL: @stack_restore
+llvm.func @stack_restore(%arg0: !llvm.ptr<i8>) {
+  // CHECK: call void @llvm.stackrestore
+  llvm.intr.stackrestore %arg0
+  llvm.return
+}
+
 // Check that intrinsics are declared with appropriate types.
 // CHECK-DAG: declare float @llvm.fma.f32(float, float, float)
 // CHECK-DAG: declare <8 x float> @llvm.fma.v8f32(<8 x float>, <8 x float>, <8 x float>) #0