mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-25 22:12:57 +02:00
b346721555
llvm::splitCodeGen is a function that implements the core of parallel LTO code generation. It uses llvm::SplitModule to split the module into linkable partitions and spawning one code generation thread per partition. The function produces multiple object files which can be linked in the usual way. This has been threaded through to LTOCodeGenerator (and llvm-lto for testing purposes). Separate patches will add parallel LTO support to the gold plugin and lld. Differential Revision: http://reviews.llvm.org/D12260 llvm-svn: 246236
42 lines
1.4 KiB
C++
42 lines
1.4 KiB
C++
//===-- llvm/CodeGen/ParallelCG.h - Parallel code generation ----*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This header declares functions that can be used for parallel code generation.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_CODEGEN_PARALLELCG_H
|
|
#define LLVM_CODEGEN_PARALLELCG_H
|
|
|
|
#include "llvm/ADT/ArrayRef.h"
|
|
#include "llvm/Support/CodeGen.h"
|
|
|
|
namespace llvm {
|
|
|
|
class Module;
|
|
class TargetOptions;
|
|
class raw_pwrite_stream;
|
|
|
|
/// Split M into OSs.size() partitions, and generate code for each. Writes
|
|
/// OSs.size() object files to the output streams in OSs. The resulting object
|
|
/// files if linked together are intended to be equivalent to the single object
|
|
/// file that would have been code generated from M.
|
|
///
|
|
/// \returns M if OSs.size() == 1, otherwise returns std::unique_ptr<Module>().
|
|
std::unique_ptr<Module>
|
|
splitCodeGen(std::unique_ptr<Module> M, ArrayRef<raw_pwrite_stream *> OSs,
|
|
StringRef CPU, StringRef Features, const TargetOptions &Options,
|
|
Reloc::Model RM = Reloc::Default,
|
|
CodeModel::Model CM = CodeModel::Default,
|
|
CodeGenOpt::Level OL = CodeGenOpt::Default);
|
|
|
|
} // namespace llvm
|
|
|
|
#endif
|