15f757f3fSDimitry Andric //===-- LinkInModulesPass.h - Module Linking pass ----------------- C++ -*-===// 25f757f3fSDimitry Andric // 35f757f3fSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 45f757f3fSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 55f757f3fSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65f757f3fSDimitry Andric // 75f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 85f757f3fSDimitry Andric /// \file 95f757f3fSDimitry Andric /// 105f757f3fSDimitry Andric /// This file provides a pass to link in Modules from a provided 115f757f3fSDimitry Andric /// BackendConsumer. 125f757f3fSDimitry Andric /// 135f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 145f757f3fSDimitry Andric 155f757f3fSDimitry Andric #ifndef LLVM_BITCODE_LINKINMODULESPASS_H 165f757f3fSDimitry Andric #define LLVM_BITCODE_LINKINMODULESPASS_H 175f757f3fSDimitry Andric 185f757f3fSDimitry Andric #include "BackendConsumer.h" 195f757f3fSDimitry Andric #include "llvm/IR/PassManager.h" 205f757f3fSDimitry Andric 215f757f3fSDimitry Andric namespace llvm { 225f757f3fSDimitry Andric class Module; 235f757f3fSDimitry Andric class ModulePass; 245f757f3fSDimitry Andric class Pass; 255f757f3fSDimitry Andric 265f757f3fSDimitry Andric /// Create and return a pass that links in Moduels from a provided 275f757f3fSDimitry Andric /// BackendConsumer to a given primary Module. Note that this pass is designed 285f757f3fSDimitry Andric /// for use with the legacy pass manager. 295f757f3fSDimitry Andric class LinkInModulesPass : public PassInfoMixin<LinkInModulesPass> { 305f757f3fSDimitry Andric clang::BackendConsumer *BC; 315f757f3fSDimitry Andric 325f757f3fSDimitry Andric public: 33*0fca6ea1SDimitry Andric LinkInModulesPass(clang::BackendConsumer *BC); 345f757f3fSDimitry Andric 355f757f3fSDimitry Andric PreservedAnalyses run(Module &M, AnalysisManager<Module> &); 365f757f3fSDimitry Andric static bool isRequired() { return true; } 375f757f3fSDimitry Andric }; 385f757f3fSDimitry Andric 395f757f3fSDimitry Andric } // namespace llvm 405f757f3fSDimitry Andric 415f757f3fSDimitry Andric #endif 42