[Mlir-commits] [mlir] [MLIR][FuncToLLVM] Propagate no_inline attribute (PR #143809)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Wed Jun 11 16:45:36 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-mlir

Author: None (junfengd-nv)

<details>
<summary>Changes</summary>

This commit fixes the no_inline attribute propagation from func::FuncOp to LLVM::LLVMFuncOp and adds corresponding test coverage. After the change, functions marked with no_inline in the func dialect maintain this optimization hint when lowered to LLVM IR.

---
Full diff: https://github.com/llvm/llvm-project/pull/143809.diff


2 Files Affected:

- (modified) mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp (+6) 
- (modified) mlir/test/Conversion/FuncToLLVM/convert-funcs.mlir (+8) 


``````````diff
diff --git a/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp b/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp
index 328c605add65c..35228fb9c9e72 100644
--- a/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp
+++ b/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp
@@ -62,6 +62,7 @@ using namespace mlir;
 static constexpr StringRef varargsAttrName = "func.varargs";
 static constexpr StringRef linkageAttrName = "llvm.linkage";
 static constexpr StringRef barePtrAttrName = "llvm.bareptr";
+static constexpr StringRef noInlineAttr = "no_inline";
 
 /// Return `true` if the `op` should use bare pointer calling convention.
 static bool shouldUseBarePtrCallConv(Operation *op,
@@ -381,6 +382,11 @@ mlir::convertFuncOpToLLVMFuncOp(FunctionOpInterface funcOp,
     newFuncOp.setMemoryEffectsAttr(memoryAttr);
   }
 
+  // Propagate no_inline attributes
+  if (funcOp->hasAttr(noInlineAttr)) {
+    newFuncOp->setAttr(noInlineAttr, rewriter.getUnitAttr());
+  }
+
   // Propagate argument/result attributes to all converted arguments/result
   // obtained after converting a given original argument/result.
   if (ArrayAttr resAttrDicts = funcOp.getAllResultAttrs()) {
diff --git a/mlir/test/Conversion/FuncToLLVM/convert-funcs.mlir b/mlir/test/Conversion/FuncToLLVM/convert-funcs.mlir
index ae1dc70d0686b..b4e6cdffb7640 100644
--- a/mlir/test/Conversion/FuncToLLVM/convert-funcs.mlir
+++ b/mlir/test/Conversion/FuncToLLVM/convert-funcs.mlir
@@ -96,3 +96,11 @@ func.func private @badllvmlinkage(i32) attributes { "llvm.linkage" = 3 : i64 } /
 func.func @variadic_func(%arg0: i32) attributes { "func.varargs" = true, "llvm.emit_c_interface" } {
   return
 }
+
+// -----
+
+// Check that no_inline attribute is propagated from func::FuncOp to LLVM::LLVMFuncOp
+// CHECK-LABEL: llvm.func @func_with_noinline(%arg0: i32) attributes {no_inline}
+func.func @func_with_noinline(%arg0: i32) attributes { no_inline } {
+  return
+}

``````````

</details>


https://github.com/llvm/llvm-project/pull/143809


More information about the Mlir-commits mailing list