mirror of
https://github.com/RPCSX/llvm.git
synced 2026-01-31 01:05:23 +01:00
The module splitter splits a module into linkable partitions. It will be used to implement parallel LTO code generation. This initial version of the splitter does not attempt to deal with the somewhat subtle symbol visibility issues around module splitting. These will be dealt with in a future change. Differential Revision: http://reviews.llvm.org/D12132 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@245662 91177308-0d34-0410-b5e6-96231b3b80d8
44 lines
1.4 KiB
C++
44 lines
1.4 KiB
C++
//===- SplitModule.h - Split a module into partitions -----------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines the function llvm::SplitModule, which splits a module
|
|
// into multiple linkable partitions. It can be used to implement parallel code
|
|
// generation for link-time optimization.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_TRANSFORMS_UTILS_SPLITMODULE_H
|
|
#define LLVM_TRANSFORMS_UTILS_SPLITMODULE_H
|
|
|
|
#include <functional>
|
|
#include <memory>
|
|
|
|
namespace llvm {
|
|
|
|
class Module;
|
|
class StringRef;
|
|
|
|
/// Splits the module M into N linkable partitions. The function ModuleCallback
|
|
/// is called N times passing each individual partition as the MPart argument.
|
|
///
|
|
/// FIXME: This function does not deal with the somewhat subtle symbol
|
|
/// visibility issues around module splitting, including (but not limited to):
|
|
///
|
|
/// - Internal symbols should not collide with symbols defined outside the
|
|
/// module.
|
|
/// - Internal symbols defined in module-level inline asm should be visible to
|
|
/// each partition.
|
|
void SplitModule(
|
|
std::unique_ptr<Module> M, unsigned N,
|
|
std::function<void(std::unique_ptr<Module> MPart)> ModuleCallback);
|
|
|
|
} // End llvm namespace
|
|
|
|
#endif
|