diff --git a/mlir/lib/Dialect/LLVMIR/Transforms/InlinerInterfaceImpl.cpp b/mlir/lib/Dialect/LLVMIR/Transforms/InlinerInterfaceImpl.cpp index dd20412ee7080..b3bed5ab5f412 100644 --- a/mlir/lib/Dialect/LLVMIR/Transforms/InlinerInterfaceImpl.cpp +++ b/mlir/lib/Dialect/LLVMIR/Transforms/InlinerInterfaceImpl.cpp @@ -663,8 +663,6 @@ struct LLVMInlinerInterface : public DialectInlinerInterface { bool isLegalToInline(Operation *call, Operation *callable, bool wouldBeCloned) const final { - if (!wouldBeCloned) - return false; if (!isa(call)) { LLVM_DEBUG(llvm::dbgs() << "Cannot inline: call is not an '" << LLVM::CallOp::getOperationName() << "' op\n"); diff --git a/mlir/test/Dialect/LLVMIR/inlining.mlir b/mlir/test/Dialect/LLVMIR/inlining.mlir index 0b7ca3f2bb048..edaac4da0b044 100644 --- a/mlir/test/Dialect/LLVMIR/inlining.mlir +++ b/mlir/test/Dialect/LLVMIR/inlining.mlir @@ -663,3 +663,16 @@ llvm.func @caller() { llvm.call @vararg_intrinrics() : () -> () llvm.return } + +// ----- + +llvm.func @private_func(%a : i32) -> i32 attributes {sym_visibility = "private"} { + llvm.return %a : i32 +} + +// CHECK-LABEL: func @caller +llvm.func @caller(%x : i32) -> i32 { + // CHECK-NOT: llvm.call @private_func + %z = llvm.call @private_func(%x) : (i32) -> (i32) + llvm.return %z : i32 +}