Skip to content

Commit d9ccfd7

Browse files
authored
[mlir][llvm] Respect call noinline attr in inliner (#134493)
This commit extends the LLVM dialect inliner interface to respect the call op's noinline attribute. This is a follow-up to #133726 which added the noinline attribute to the LLVM dialect call op.
1 parent e90d40a commit d9ccfd7

File tree

2 files changed

+8
-3
lines changed

2 files changed

+8
-3
lines changed

mlir/lib/Dialect/LLVMIR/Transforms/InlinerInterfaceImpl.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -664,11 +664,16 @@ struct LLVMInlinerInterface : public DialectInlinerInterface {
664664

665665
bool isLegalToInline(Operation *call, Operation *callable,
666666
bool wouldBeCloned) const final {
667-
if (!isa<LLVM::CallOp>(call)) {
667+
auto callOp = dyn_cast<LLVM::CallOp>(call);
668+
if (!callOp) {
668669
LLVM_DEBUG(llvm::dbgs() << "Cannot inline: call is not an '"
669670
<< LLVM::CallOp::getOperationName() << "' op\n");
670671
return false;
671672
}
673+
if (callOp.getNoInline()) {
674+
LLVM_DEBUG(llvm::dbgs() << "Cannot inline: call is marked no_inline\n");
675+
return false;
676+
}
672677
auto funcOp = dyn_cast<LLVM::LLVMFuncOp>(callable);
673678
if (!funcOp) {
674679
LLVM_DEBUG(llvm::dbgs()

mlir/test/Dialect/LLVMIR/inlining.mlir

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ llvm.func @foo() -> (i32) attributes { no_inline } {
9595
llvm.return %0 : i32
9696
}
9797

98-
llvm.func @bar() -> (i32) attributes { no_inline } {
98+
llvm.func @bar() -> (i32) {
9999
%0 = llvm.mlir.constant(1 : i32) : i32
100100
llvm.return %0 : i32
101101
}
@@ -106,7 +106,7 @@ llvm.func @callee_with_multiple_blocks(%cond: i1) -> (i32) {
106106
%0 = llvm.call @foo() : () -> (i32)
107107
llvm.br ^bb3(%0: i32)
108108
^bb2:
109-
%1 = llvm.call @bar() : () -> (i32)
109+
%1 = llvm.call @bar() { no_inline } : () -> (i32)
110110
llvm.br ^bb3(%1: i32)
111111
^bb3(%arg: i32):
112112
llvm.return %arg : i32

0 commit comments

Comments
 (0)