xref: /freebsd/contrib/llvm-project/llvm/lib/Target/DirectX/DXILFinalizeLinkage.h (revision 700637cbb5e582861067a11aaca4d053546871d2)
1*700637cbSDimitry Andric //===- DXILFinalizeLinkage.h - Finalize linkage of functions --------------===//
2*700637cbSDimitry Andric //
3*700637cbSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*700637cbSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*700637cbSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*700637cbSDimitry Andric //
7*700637cbSDimitry Andric //===----------------------------------------------------------------------===//
8*700637cbSDimitry Andric ///
9*700637cbSDimitry Andric /// DXILFinalizeLinkage pass updates the linkage of functions to make sure only
10*700637cbSDimitry Andric /// shader entry points and exported functions are visible from the module (have
11*700637cbSDimitry Andric /// program linkage). All other functions will be updated to have internal
12*700637cbSDimitry Andric /// linkage.
13*700637cbSDimitry Andric ///
14*700637cbSDimitry Andric //===----------------------------------------------------------------------===//
15*700637cbSDimitry Andric 
16*700637cbSDimitry Andric #ifndef LLVM_TARGET_DIRECTX_DXILFINALIZELINKAGE_H
17*700637cbSDimitry Andric #define LLVM_TARGET_DIRECTX_DXILFINALIZELINKAGE_H
18*700637cbSDimitry Andric 
19*700637cbSDimitry Andric #include "llvm/IR/PassManager.h"
20*700637cbSDimitry Andric #include "llvm/Pass.h"
21*700637cbSDimitry Andric 
22*700637cbSDimitry Andric namespace llvm {
23*700637cbSDimitry Andric 
24*700637cbSDimitry Andric class DXILFinalizeLinkage : public PassInfoMixin<DXILFinalizeLinkage> {
25*700637cbSDimitry Andric public:
26*700637cbSDimitry Andric   PreservedAnalyses run(Module &M, ModuleAnalysisManager &);
isRequired()27*700637cbSDimitry Andric   static bool isRequired() { return true; }
28*700637cbSDimitry Andric };
29*700637cbSDimitry Andric 
30*700637cbSDimitry Andric class DXILFinalizeLinkageLegacy : public ModulePass {
31*700637cbSDimitry Andric public:
DXILFinalizeLinkageLegacy()32*700637cbSDimitry Andric   DXILFinalizeLinkageLegacy() : ModulePass(ID) {}
33*700637cbSDimitry Andric   bool runOnModule(Module &M) override;
34*700637cbSDimitry Andric 
35*700637cbSDimitry Andric   static char ID; // Pass identification.
36*700637cbSDimitry Andric };
37*700637cbSDimitry Andric } // namespace llvm
38*700637cbSDimitry Andric 
39*700637cbSDimitry Andric #endif // LLVM_TARGET_DIRECTX_DXILFINALIZELINKAGE_H
40