[Mlir-commits] [mlir] [MLIR][FuncToLLVM] Propagate no_inline attribute (PR #143809)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Thu Jun 12 14:51:17 PDT 2025
https://github.com/junfengd-nv updated https://github.com/llvm/llvm-project/pull/143809
>From 2105c345c5a612026f60b0c3e48f524670c61bb0 Mon Sep 17 00:00:00 2001
From: Junfeng Dong <junfengd at nvidia.com>
Date: Wed, 11 Jun 2025 16:34:57 -0700
Subject: [PATCH 1/2] Propagate no_inline attributes
---
mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp | 6 ++++++
mlir/test/Conversion/FuncToLLVM/convert-funcs.mlir | 8 ++++++++
2 files changed, 14 insertions(+)
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
+}
>From 9d3df5f8345548c0e3b8c9ef63b65847b1fd40e0 Mon Sep 17 00:00:00 2001
From: Junfeng Dong <junfengd at nvidia.com>
Date: Thu, 12 Jun 2025 14:50:05 -0700
Subject: [PATCH 2/2] Use setNoInline method.
---
mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp b/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp
index 35228fb9c9e72..7170d56069e80 100644
--- a/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp
+++ b/mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp
@@ -62,7 +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";
+static constexpr StringRef noInlineAttrName = "no_inline";
/// Return `true` if the `op` should use bare pointer calling convention.
static bool shouldUseBarePtrCallConv(Operation *op,
@@ -383,9 +383,7 @@ mlir::convertFuncOpToLLVMFuncOp(FunctionOpInterface funcOp,
}
// Propagate no_inline attributes
- if (funcOp->hasAttr(noInlineAttr)) {
- newFuncOp->setAttr(noInlineAttr, rewriter.getUnitAttr());
- }
+ newFuncOp.setNoInline(funcOp->hasAttr(noInlineAttrName));
// Propagate argument/result attributes to all converted arguments/result
// obtained after converting a given original argument/result.
More information about the Mlir-commits
mailing list