[Mlir-commits] [mlir] ad92174 - [MLIR][LLVM] Fix uses of LLVM's visibility attr (#173024)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Fri Dec 19 09:52:14 PST 2025
Author: Asher Mancinelli
Date: 2025-12-19T09:52:10-08:00
New Revision: ad92174077cb715f2e1479af9b29686da3359945
URL: https://github.com/llvm/llvm-project/commit/ad92174077cb715f2e1479af9b29686da3359945
DIFF: https://github.com/llvm/llvm-project/commit/ad92174077cb715f2e1479af9b29686da3359945.diff
LOG: [MLIR][LLVM] Fix uses of LLVM's visibility attr (#173024)
I noticed that I was using LLVM::VisibilityAttr::name when looking for
the attribute on LLVM ops, but LLVM::VisibilityAttr::name is just
"builtin.integer"... Now we switch on the types of the specific ops we would
like to match, and use the getters/setters for the attribute directly instead of
the deprecated setAttr/getAttr.
Added:
Modified:
mlir/lib/Dialect/LLVMIR/Transforms/UseDefaultVisibilityPass.cpp
mlir/test/Dialect/LLVMIR/use-default-visibility.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/LLVMIR/Transforms/UseDefaultVisibilityPass.cpp b/mlir/lib/Dialect/LLVMIR/Transforms/UseDefaultVisibilityPass.cpp
index 767fc0799026b..248400428cfc0 100644
--- a/mlir/lib/Dialect/LLVMIR/Transforms/UseDefaultVisibilityPass.cpp
+++ b/mlir/lib/Dialect/LLVMIR/Transforms/UseDefaultVisibilityPass.cpp
@@ -10,6 +10,7 @@
#include "mlir/Dialect/LLVMIR/LLVMAttrs.h"
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
#include "mlir/Pass/Pass.h"
+#include "llvm/ADT/TypeSwitch.h"
namespace mlir {
namespace LLVM {
@@ -20,17 +21,6 @@ namespace LLVM {
using namespace mlir;
-static void updateVisibility(Operation *op,
- LLVM::VisibilityAttr newVisibilityAttr) {
- if (auto visibilityAttr =
- op->getAttrOfType<LLVM::VisibilityAttr>(LLVM::VisibilityAttr::name)) {
- LLVM::Visibility visibility = visibilityAttr.getValue();
- if (visibility == LLVM::Visibility::Default) {
- op->setAttr(LLVM::VisibilityAttr::name, newVisibilityAttr);
- }
- }
-}
-
namespace {
class UseDefaultVisibilityPass
: public LLVM::impl::LLVMUseDefaultVisibilityPassBase<
@@ -40,14 +30,16 @@ class UseDefaultVisibilityPass
public:
void runOnOperation() override {
LLVM::Visibility useDefaultVisibility = useVisibility.getValue();
+ if (useDefaultVisibility == LLVM::Visibility::Default)
+ return;
Operation *op = getOperation();
- MLIRContext *context = op->getContext();
- Dialect *llvmDialect = context->getLoadedDialect<LLVM::LLVMDialect>();
- auto newVisibilityAttr =
- LLVM::VisibilityAttr::get(context, useDefaultVisibility);
op->walk([&](Operation *op) {
- if (op->getDialect() == llvmDialect)
- updateVisibility(op, newVisibilityAttr);
+ llvm::TypeSwitch<Operation *, void>(op)
+ .Case<LLVM::LLVMFuncOp, LLVM::GlobalOp, LLVM::IFuncOp, LLVM::AliasOp>(
+ [&](auto op) {
+ if (op.getVisibility_() == LLVM::Visibility::Default)
+ op.setVisibility_(useDefaultVisibility);
+ });
});
}
};
diff --git a/mlir/test/Dialect/LLVMIR/use-default-visibility.mlir b/mlir/test/Dialect/LLVMIR/use-default-visibility.mlir
index 37c75e52debcd..112c465b5514a 100644
--- a/mlir/test/Dialect/LLVMIR/use-default-visibility.mlir
+++ b/mlir/test/Dialect/LLVMIR/use-default-visibility.mlir
@@ -78,27 +78,27 @@ llvm.mlir.ifunc external protected @ifunc3: !llvm.func<void ()>, !llvm.ptr @ifun
// HIDDEN: llvm.comdat_selector @any any
// HIDDEN: }
-// HIDDEN-LABEL: llvm.func @func() {
+// HIDDEN-LABEL: llvm.func hidden @func() {
// HIDDEN: llvm.return
// HIDDEN: }
-// HIDDEN-LABEL: llvm.func @ifunc_resolver() -> !llvm.ptr {
+// HIDDEN-LABEL: llvm.func hidden @ifunc_resolver() -> !llvm.ptr {
// HIDDEN: %[[MLIR_0:.*]] = llvm.mlir.addressof @func : !llvm.ptr
// HIDDEN: llvm.return %[[MLIR_0]] : !llvm.ptr
// HIDDEN: }
-// HIDDEN-LABEL: llvm.func @func1() {
+// HIDDEN-LABEL: llvm.func hidden @func1() {
// HIDDEN: llvm.return
// HIDDEN: }
-// HIDDEN: llvm.mlir.global internal constant @global1(0 : i32) {addr_space = 0 : i32} : i32
+// HIDDEN: llvm.mlir.global internal hidden constant @global1(0 : i32) {addr_space = 0 : i32} : i32
-// HIDDEN-LABEL: llvm.mlir.alias external @func1_alias {addr_space = 0 : i32} : !llvm.ptr {
+// HIDDEN-LABEL: llvm.mlir.alias external hidden @func1_alias {addr_space = 0 : i32} : !llvm.ptr {
// HIDDEN: %[[MLIR_0:.*]] = llvm.mlir.addressof @func1 : !llvm.ptr
// HIDDEN: llvm.return %[[MLIR_0]] : !llvm.ptr
// HIDDEN: }
-// HIDDEN: llvm.func @decl1()
-// HIDDEN: llvm.mlir.global internal constant @comdat1(1 : i64) comdat(@llvm_comdat::@any) {addr_space = 0 : i32} : i64
-// HIDDEN: llvm.mlir.ifunc external @ifunc1 : !llvm.func<void ()>, !llvm.ptr @ifunc_resolver
+// HIDDEN: llvm.func hidden @decl1()
+// HIDDEN: llvm.mlir.global internal hidden constant @comdat1(1 : i64) comdat(@llvm_comdat::@any) {addr_space = 0 : i32} : i64
+// HIDDEN: llvm.mlir.ifunc external hidden @ifunc1 : !llvm.func<void ()>, !llvm.ptr @ifunc_resolver
// HIDDEN-LABEL: llvm.func hidden @func2() {
// HIDDEN: llvm.return
@@ -130,27 +130,27 @@ llvm.mlir.ifunc external protected @ifunc3: !llvm.func<void ()>, !llvm.ptr @ifun
// PROTECTED: llvm.comdat_selector @any any
// PROTECTED: }
-// PROTECTED-LABEL: llvm.func @func() {
+// PROTECTED-LABEL: llvm.func protected @func() {
// PROTECTED: llvm.return
// PROTECTED: }
-// PROTECTED-LABEL: llvm.func @ifunc_resolver() -> !llvm.ptr {
+// PROTECTED-LABEL: llvm.func protected @ifunc_resolver() -> !llvm.ptr {
// PROTECTED: %[[MLIR_0:.*]] = llvm.mlir.addressof @func : !llvm.ptr
// PROTECTED: llvm.return %[[MLIR_0]] : !llvm.ptr
// PROTECTED: }
-// PROTECTED-LABEL: llvm.func @func1() {
+// PROTECTED-LABEL: llvm.func protected @func1() {
// PROTECTED: llvm.return
// PROTECTED: }
-// PROTECTED: llvm.mlir.global internal constant @global1(0 : i32) {addr_space = 0 : i32} : i32
+// PROTECTED: llvm.mlir.global internal protected constant @global1(0 : i32) {addr_space = 0 : i32} : i32
-// PROTECTED-LABEL: llvm.mlir.alias external @func1_alias {addr_space = 0 : i32} : !llvm.ptr {
+// PROTECTED-LABEL: llvm.mlir.alias external protected @func1_alias {addr_space = 0 : i32} : !llvm.ptr {
// PROTECTED: %[[MLIR_0:.*]] = llvm.mlir.addressof @func1 : !llvm.ptr
// PROTECTED: llvm.return %[[MLIR_0]] : !llvm.ptr
// PROTECTED: }
-// PROTECTED: llvm.func @decl1()
-// PROTECTED: llvm.mlir.global internal constant @comdat1(1 : i64) comdat(@llvm_comdat::@any) {addr_space = 0 : i32} : i64
-// PROTECTED: llvm.mlir.ifunc external @ifunc1 : !llvm.func<void ()>, !llvm.ptr @ifunc_resolver
+// PROTECTED: llvm.func protected @decl1()
+// PROTECTED: llvm.mlir.global internal protected constant @comdat1(1 : i64) comdat(@llvm_comdat::@any) {addr_space = 0 : i32} : i64
+// PROTECTED: llvm.mlir.ifunc external protected @ifunc1 : !llvm.func<void ()>, !llvm.ptr @ifunc_resolver
// PROTECTED-LABEL: llvm.func hidden @func2() {
// PROTECTED: llvm.return
More information about the Mlir-commits
mailing list