diff options
author | Markus Böck <markus.boeck02@gmail.com> | 2022-01-03 23:52:13 +0100 |
---|---|---|
committer | Markus Böck <markus.boeck02@gmail.com> | 2022-01-04 08:19:26 +0100 |
commit | 2a0e05100c26473b3ce94507200b55f71a9c9482 (patch) | |
tree | 49b5a8683dec82b35bcc6b912e14bf66ff45c2f6 | |
parent | f68ecdd45812021b32b738df3bee602ca5042bb4 (diff) | |
download | llvm-2a0e05100c26473b3ce94507200b55f71a9c9482.tar.gz |
[mlir][LLVM] Set cleanup flag on `llvm.landingpad` when exporting to LLVM IR
Exporting a llvm.landingpad operation with the cleanup flag set is currently ignored by the export code.
Differential Revision: https://reviews.llvm.org/D116565
-rw-r--r-- | mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp | 1 | ||||
-rw-r--r-- | mlir/test/Target/LLVMIR/llvmir.mlir | 10 |
2 files changed, 5 insertions, 6 deletions
diff --git a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp index 4f5e636c0a8e..3254aed6c341 100644 --- a/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp @@ -371,6 +371,7 @@ convertOperationImpl(Operation &opInst, llvm::IRBuilderBase &builder, llvm::Type *ty = moduleTranslation.convertType(lpOp.getType()); llvm::LandingPadInst *lpi = builder.CreateLandingPad(ty, lpOp.getNumOperands()); + lpi->setCleanup(lpOp.getCleanup()); // Add clauses for (llvm::Value *operand : diff --git a/mlir/test/Target/LLVMIR/llvmir.mlir b/mlir/test/Target/LLVMIR/llvmir.mlir index e87eebaca515..6741d51b5f39 100644 --- a/mlir/test/Target/LLVMIR/llvmir.mlir +++ b/mlir/test/Target/LLVMIR/llvmir.mlir @@ -1298,31 +1298,29 @@ llvm.func @invokeLandingpad() -> i32 attributes { personality = @__gxx_personali // ----- -llvm.mlir.global external constant @_ZTIi() : !llvm.ptr<i8> llvm.func @foo() -> i8 llvm.func @__gxx_personality_v0(...) -> i32 // CHECK-LABEL: @invoke_result // CHECK-SAME: %[[a0:[0-9]+]] llvm.func @invoke_result(%arg0 : !llvm.ptr<i8>) attributes { personality = @__gxx_personality_v0 } { - %0 = llvm.mlir.addressof @_ZTIi : !llvm.ptr<ptr<i8>> // CHECK: %[[a1:[0-9]+]] = invoke i8 @foo() // CHECK-NEXT: to label %[[normal:[0-9]+]] unwind label %[[unwind:[0-9]+]] - %1 = llvm.invoke @foo() to ^bb1 unwind ^bb2 : () -> i8 + %0 = llvm.invoke @foo() to ^bb1 unwind ^bb2 : () -> i8 // CHECK: [[normal]]: // CHECK-NEXT: store i8 %[[a1]], i8* %[[a0]] // CHECK-NEXT: ret void ^bb1: - llvm.store %1, %arg0 : !llvm.ptr<i8> + llvm.store %0, %arg0 : !llvm.ptr<i8> llvm.return // CHECK: [[unwind]]: // CHECK-NEXT: landingpad { i8*, i32 } -// CHECK-NEXT: catch i8** @_ZTIi +// CHECK-NEXT: cleanup // CHECK-NEXT: ret void ^bb2: - %7 = llvm.landingpad (catch %0 : !llvm.ptr<ptr<i8>>) : !llvm.struct<(ptr<i8>, i32)> + %7 = llvm.landingpad cleanup : !llvm.struct<(ptr<i8>, i32)> llvm.return } |