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