[Mlir-commits] [mlir] [MLIR][LLVMIR] Translation: honor frame-pointer fn attribute (PR #130335)

Bruno Cardoso Lopes llvmlistbot at llvm.org
Fri Mar 7 18:13:01 PST 2025


https://github.com/bcardosolopes updated https://github.com/llvm/llvm-project/pull/130335

>From 0d97fa7b6e6b0bb6479a45ae022b74c019881ebe Mon Sep 17 00:00:00 2001
From: Bruno Cardoso Lopes <bruno.cardoso at gmail.com>
Date: Fri, 7 Mar 2025 11:44:42 -0800
Subject: [PATCH 1/3] [MLIR][LLVMIR] Translation: honor frame-pointer fn
 attribute

---
 mlir/lib/Target/LLVMIR/ModuleTranslation.cpp | 3 +++
 mlir/test/Target/LLVMIR/llvmir.mlir          | 8 ++++++++
 2 files changed, 11 insertions(+)

diff --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
index b1bc26a545f62..ab377be0cfe2c 100644
--- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
@@ -1606,6 +1606,9 @@ static void convertFunctionAttributes(LLVMFuncOp func,
     llvmFunc->addFnAttr(llvm::Attribute::NoUnwind);
   if (func.getWillReturnAttr())
     llvmFunc->addFnAttr(llvm::Attribute::WillReturn);
+  if (FramePointerKindAttr fpAttr = func.getFramePointerAttr())
+    llvmFunc->addFnAttr("frame-pointer", stringifyFramePointerKind(
+                                             fpAttr.getFramePointerKind()));
   convertFunctionMemoryAttributes(func, llvmFunc);
 }
 
diff --git a/mlir/test/Target/LLVMIR/llvmir.mlir b/mlir/test/Target/LLVMIR/llvmir.mlir
index db2e08742dbca..701189b65fa3d 100644
--- a/mlir/test/Target/LLVMIR/llvmir.mlir
+++ b/mlir/test/Target/LLVMIR/llvmir.mlir
@@ -2454,6 +2454,14 @@ llvm.func @preserves_za_func() attributes {arm_preserves_za} {
 
 // -----
 
+// CHECK-LABEL: @t
+// CHECK-SAME: #[[FP:.*]]
+llvm.func @t(!llvm.ptr) attributes {frame_pointer = #llvm.framePointerKind<"non-leaf">}
+
+// CHECK: attributes #[[FP]] = { "frame-pointer"="non-leaf" }
+
+// -----
+
 //
 // Zero-initialize operation.
 //

>From ea3e625a0c9808dbdad60f78411a68fd2857f2d9 Mon Sep 17 00:00:00 2001
From: Bruno Cardoso Lopes <bruno.cardoso at gmail.com>
Date: Fri, 7 Mar 2025 12:33:13 -0800
Subject: [PATCH 2/3] Add more comments

---
 mlir/test/Target/LLVMIR/llvmir.mlir | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/mlir/test/Target/LLVMIR/llvmir.mlir b/mlir/test/Target/LLVMIR/llvmir.mlir
index 701189b65fa3d..c618b1309da45 100644
--- a/mlir/test/Target/LLVMIR/llvmir.mlir
+++ b/mlir/test/Target/LLVMIR/llvmir.mlir
@@ -2454,6 +2454,10 @@ llvm.func @preserves_za_func() attributes {arm_preserves_za} {
 
 // -----
 
+//
+// frame pointer attribute.
+//
+
 // CHECK-LABEL: @t
 // CHECK-SAME: #[[FP:.*]]
 llvm.func @t(!llvm.ptr) attributes {frame_pointer = #llvm.framePointerKind<"non-leaf">}

>From e85ff758c4675988882a817c768cf230b6ea5bc8 Mon Sep 17 00:00:00 2001
From: Bruno Cardoso Lopes <bruno.cardoso at gmail.com>
Date: Fri, 7 Mar 2025 18:12:17 -0800
Subject: [PATCH 3/3] Remove redundanct frame-pointer

---
 mlir/lib/Target/LLVMIR/ModuleTranslation.cpp | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
index ab377be0cfe2c..1f0b9556f6b20 100644
--- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
@@ -1528,12 +1528,6 @@ LogicalResult ModuleTranslation::convertOneFunction(LLVMFuncOp func) {
   if (auto fpContract = func.getFpContract())
     llvmFunc->addFnAttr("fp-contract", *fpContract);
 
-  // Add function attribute frame-pointer, if found.
-  if (FramePointerKindAttr attr = func.getFramePointerAttr())
-    llvmFunc->addFnAttr("frame-pointer",
-                        LLVM::framePointerKind::stringifyFramePointerKind(
-                            (attr.getFramePointerKind())));
-
   // First, create all blocks so we can jump to them.
   llvm::LLVMContext &llvmContext = llvmFunc->getContext();
   for (auto &bb : func) {



More information about the Mlir-commits mailing list