MLIR 22.0.0git
UseDefaultVisibilityPass.cpp
Go to the documentation of this file.
1//===- UseDefaultVisibilityPass.cpp - Update default visibility -----------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
12#include "mlir/Pass/Pass.h"
13
14namespace mlir {
15namespace LLVM {
16#define GEN_PASS_DEF_LLVMUSEDEFAULTVISIBILITYPASS
17#include "mlir/Dialect/LLVMIR/Transforms/Passes.h.inc"
18} // namespace LLVM
19} // namespace mlir
20
21using namespace mlir;
22
24 LLVM::VisibilityAttr newVisibilityAttr) {
25 if (auto visibilityAttr =
26 op->getAttrOfType<LLVM::VisibilityAttr>(LLVM::VisibilityAttr::name)) {
27 LLVM::Visibility visibility = visibilityAttr.getValue();
28 if (visibility == LLVM::Visibility::Default) {
29 op->setAttr(LLVM::VisibilityAttr::name, newVisibilityAttr);
30 }
31 }
32}
33
34namespace {
35class UseDefaultVisibilityPass
36 : public LLVM::impl::LLVMUseDefaultVisibilityPassBase<
37 UseDefaultVisibilityPass> {
38 using Base::Base;
39
40public:
41 void runOnOperation() override {
42 LLVM::Visibility useDefaultVisibility = useVisibility.getValue();
43 Operation *op = getOperation();
44 MLIRContext *context = op->getContext();
45 Dialect *llvmDialect = context->getLoadedDialect<LLVM::LLVMDialect>();
46 auto newVisibilityAttr =
47 LLVM::VisibilityAttr::get(context, useDefaultVisibility);
48 op->walk([&](Operation *op) {
49 if (op->getDialect() == llvmDialect)
50 updateVisibility(op, newVisibilityAttr);
51 });
52 }
53};
54} // namespace
static void updateVisibility(Operation *op, LLVM::VisibilityAttr newVisibilityAttr)
Dialect * getLoadedDialect(StringRef name)
Get a registered IR dialect with the given namespace.
Operation is the basic unit of execution within MLIR.
Definition Operation.h:88
Dialect * getDialect()
Return the dialect this operation is associated with, or nullptr if the associated dialect is not loa...
Definition Operation.h:220
AttrClass getAttrOfType(StringAttr name)
Definition Operation.h:550
void setAttr(StringAttr name, Attribute value)
If the an attribute exists with the specified name, change it to the new value.
Definition Operation.h:582
std::enable_if_t< llvm::function_traits< std::decay_t< FnT > >::num_args==1, RetT > walk(FnT &&callback)
Walk the operation by calling the callback for each nested operation (including this one),...
Definition Operation.h:797
MLIRContext * getContext()
Return the context this operation is associated with.
Definition Operation.h:216
Include the generated interface declarations.