40 lines · c
1//===- AMDGPUSplitModule.h -------------------------------------*- C++ -*-===//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-exception6//7//===----------------------------------------------------------------------===//8//9//===----------------------------------------------------------------------===//10 11#ifndef LLVM_TARGET_AMDGPUSPLITMODULE_H12#define LLVM_TARGET_AMDGPUSPLITMODULE_H13 14#include "llvm/ADT/STLFunctionalExtras.h"15#include "llvm/IR/PassManager.h"16#include <memory>17 18namespace llvm {19 20/// Splits the module M into N linkable partitions. The function ModuleCallback21/// is called N times passing each individual partition as the MPart argument.22class AMDGPUSplitModulePass : public PassInfoMixin<AMDGPUSplitModulePass> {23public:24 using ModuleCreationCallback =25 function_ref<void(std::unique_ptr<Module> MPart)>;26 27 AMDGPUSplitModulePass(unsigned N, ModuleCreationCallback ModuleCallback)28 : N(N), ModuleCallback(ModuleCallback) {}29 30 PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);31 32private:33 unsigned N;34 ModuleCreationCallback ModuleCallback;35};36 37} // end namespace llvm38 39#endif // LLVM_TARGET_AMDGPUSPLITMODULE_H40