[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