[Mlir-commits] [mlir] 3536d24 - [mlir][LLVMIR] Add `llvm.eh.typeid.for` intrinsic
Markus Böck
llvmlistbot at llvm.org
Fri Dec 31 17:03:13 PST 2021
Author: Markus Böck
Date: 2022-01-01T02:03:00+01:00
New Revision: 3536d24a1aad1bf7e8f383cfd8f4673742df22a0
URL: https://github.com/llvm/llvm-project/commit/3536d24a1aad1bf7e8f383cfd8f4673742df22a0
DIFF: https://github.com/llvm/llvm-project/commit/3536d24a1aad1bf7e8f383cfd8f4673742df22a0.diff
LOG: [mlir][LLVMIR] Add `llvm.eh.typeid.for` intrinsic
MLIR already exposes landingpads, the invokeop and the personality function on LLVM functions. With this intrinsic it should be possible to implement exception handling via the exception handling mechanisms provided by the Itanium ABI.
Differential Revision: https://reviews.llvm.org/D116436
Added:
Modified:
mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
mlir/test/Dialect/LLVMIR/roundtrip.mlir
mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
index a2a1f7a57f43..345d03e93940 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
@@ -1542,6 +1542,15 @@ def LLVM_CoroResumeOp : LLVM_IntrOp<"coro.resume", [], [], [], 0> {
let assemblyFormat = "$handle attr-dict";
}
+//
+// Exception handling intrinsics.
+//
+
+def LLVM_EhTypeidForOp : LLVM_OneResultIntrOp<"eh.typeid.for"> {
+ let arguments = (ins LLVM_i8Ptr:$type_info);
+ let assemblyFormat = "$type_info attr-dict `:` type($res)";
+}
+
//
// Stack save/restore intrinsics.
//
diff --git a/mlir/test/Dialect/LLVMIR/roundtrip.mlir b/mlir/test/Dialect/LLVMIR/roundtrip.mlir
index 9e504e7fe081..b6a09d6ff09e 100644
--- a/mlir/test/Dialect/LLVMIR/roundtrip.mlir
+++ b/mlir/test/Dialect/LLVMIR/roundtrip.mlir
@@ -332,9 +332,11 @@ llvm.func @invokeLandingpad() -> i32 attributes { personality = @__gxx_personali
// CHECK: ^[[BB1]]:
// CHECK: %[[lp:.*]] = llvm.landingpad cleanup (catch %[[a3]] : !llvm.ptr<ptr<i8>>) (catch %[[a6]] : !llvm.ptr<i8>) (filter %[[a2]] : !llvm.array<1 x i8>) : !llvm.struct<(ptr<i8>, i32)>
+// CHECK: %{{.*}} = llvm.intr.eh.typeid.for %6 : i32
// CHECK: llvm.resume %[[lp]] : !llvm.struct<(ptr<i8>, i32)>
^bb1:
%10 = llvm.landingpad cleanup (catch %3 : !llvm.ptr<ptr<i8>>) (catch %6 : !llvm.ptr<i8>) (filter %2 : !llvm.array<1 x i8>) : !llvm.struct<(ptr<i8>, i32)>
+ %11 = llvm.intr.eh.typeid.for %6 : i32
llvm.resume %10 : !llvm.struct<(ptr<i8>, i32)>
// CHECK: ^[[BB2]]:
diff --git a/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir b/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir
index e1eff69a4251..752e9e961bcd 100644
--- a/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir
+++ b/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir
@@ -485,6 +485,13 @@ llvm.func @coro_resume(%arg0: !llvm.ptr<i8>) {
llvm.return
}
+// CHECK-LABEL: @eh_typeid_for
+llvm.func @eh_typeid_for(%arg0 : !llvm.ptr<i8>) {
+ // CHECK: call i32 @llvm.eh.typeid.for
+ %0 = llvm.intr.eh.typeid.for %arg0 : i32
+ llvm.return
+}
+
// CHECK-LABEL: @stack_save
llvm.func @stack_save() {
// CHECK: call i8* @llvm.stacksave
More information about the Mlir-commits
mailing list