mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
[ThinLTO] Make -lto-embed-bitcode an enum
The current behavior of -lto-embed-bitcode is not quite the same as that of -fembed-bitcode. While both populate .llvmbc with bitcode, the latter populates it with pre-optimized bitcode(*), while the former with post-optimized. The scenarios driving them are different - the latter's goal is to allow re-compilation, while the former, IIUC, is execution. I plan to add a third mode for thinlto cases, closely-related to -fembed-bitcode's scenario: adding the bitcode pre-optimization, but post-merging. This would allow re-compilation without requiring the other .bc files that were merged (akin to how -fembed-bitcode allows recompilation without all the .h files) The third mode can't co-exist with the current -lto-embed-bitcode mode, because the latter would overwrite it. For clarity, we change -lto-embed-bitcode to be an enum. (*) That's the compiler semantics. The driver splits compilation in 2 phases, so if -fembed-bitcode is given to the driver, the .llvmbc is optimized bitcode; if the option is passed to the compiler (after -cc1), the section is pre-optimized. Differential Revision: https://reviews.llvm.org/D87477
This commit is contained in:
parent
4522227204
commit
a6aa03251f
@ -50,6 +50,19 @@
|
||||
using namespace llvm;
|
||||
using namespace lto;
|
||||
|
||||
enum class LTOBitcodeEmbedding {
|
||||
DoNotEmbed = 0,
|
||||
EmbedOptimized = 1,
|
||||
};
|
||||
|
||||
static cl::opt<LTOBitcodeEmbedding> EmbedBitcode(
|
||||
"lto-embed-bitcode", cl::init(LTOBitcodeEmbedding::DoNotEmbed),
|
||||
cl::values(clEnumValN(LTOBitcodeEmbedding::DoNotEmbed, "none",
|
||||
"Do not embed"),
|
||||
clEnumValN(LTOBitcodeEmbedding::EmbedOptimized, "optimized",
|
||||
"Embed after all optimization passes")),
|
||||
cl::desc("Embed LLVM bitcode in object files produced by LTO"));
|
||||
|
||||
LLVM_ATTRIBUTE_NORETURN static void reportOpenError(StringRef Path, Twine Msg) {
|
||||
errs() << "failed to open " << Path << ": " << Msg << '\n';
|
||||
errs().flush();
|
||||
@ -346,24 +359,16 @@ bool opt(const Config &Conf, TargetMachine *TM, unsigned Task, Module &Mod,
|
||||
return !Conf.PostOptModuleHook || Conf.PostOptModuleHook(Task, Mod);
|
||||
}
|
||||
|
||||
static cl::opt<bool> EmbedBitcode(
|
||||
"lto-embed-bitcode", cl::init(false),
|
||||
cl::desc("Embed LLVM bitcode in object files produced by LTO"));
|
||||
|
||||
static void EmitBitcodeSection(Module &M) {
|
||||
if (!EmbedBitcode)
|
||||
return;
|
||||
llvm::EmbedBitcodeInModule(M, llvm::MemoryBufferRef(), /*EmbedBitcode*/ true,
|
||||
/*EmbedMarker*/ false, /*CmdArgs*/ nullptr);
|
||||
}
|
||||
|
||||
void codegen(const Config &Conf, TargetMachine *TM, AddStreamFn AddStream,
|
||||
unsigned Task, Module &Mod,
|
||||
const ModuleSummaryIndex &CombinedIndex) {
|
||||
if (Conf.PreCodeGenModuleHook && !Conf.PreCodeGenModuleHook(Task, Mod))
|
||||
return;
|
||||
|
||||
EmitBitcodeSection(Mod);
|
||||
if (EmbedBitcode == LTOBitcodeEmbedding::EmbedOptimized)
|
||||
llvm::EmbedBitcodeInModule(Mod, llvm::MemoryBufferRef(),
|
||||
/*EmbedBitcode*/ true,
|
||||
/*EmbedMarker*/ false, /*CmdArgs*/ nullptr);
|
||||
|
||||
std::unique_ptr<ToolOutputFile> DwoOut;
|
||||
SmallString<1024> DwoFile(Conf.SplitDwarfOutput);
|
||||
|
@ -5,10 +5,10 @@
|
||||
; RUN: llvm-lto2 run -r %t1.o,_start,px -r %t2.o,foo,px -r %t3.o,bar,px -r %t2.o,bar,lx -o %t3 %t1.o %t2.o %t3.o
|
||||
; RUN: llvm-readelf -S %t3.0 | FileCheck %s --implicit-check-not=.llvmbc
|
||||
|
||||
; RUN: llvm-lto2 run -r %t1.o,_start,px -r %t2.o,foo,px -r %t3.o,bar,px -r %t2.o,bar,lx -lto-embed-bitcode=false -o %t3 %t1.o %t2.o %t3.o
|
||||
; RUN: llvm-lto2 run -r %t1.o,_start,px -r %t2.o,foo,px -r %t3.o,bar,px -r %t2.o,bar,lx -lto-embed-bitcode=none -o %t3 %t1.o %t2.o %t3.o
|
||||
; RUN: llvm-readelf -S %t3.0 | FileCheck %s --implicit-check-not=.llvmbc
|
||||
|
||||
; RUN: llvm-lto2 run -r %t1.o,_start,px -r %t2.o,foo,px -r %t3.o,bar,px -r %t2.o,bar,lx -lto-embed-bitcode -o %t3 %t1.o %t2.o %t3.o
|
||||
; RUN: llvm-lto2 run -r %t1.o,_start,px -r %t2.o,foo,px -r %t3.o,bar,px -r %t2.o,bar,lx -lto-embed-bitcode=optimized -o %t3 %t1.o %t2.o %t3.o
|
||||
; RUN: llvm-readelf -S %t3.0 | FileCheck %s --check-prefix=CHECK-ELF
|
||||
; RUN: llvm-objcopy --dump-section=.llvmbc=%t-embedded.bc %t3.0 /dev/null
|
||||
; RUN: llvm-dis %t-embedded.bc -o - | FileCheck %s --check-prefix=CHECK-LL
|
||||
|
Loading…
Reference in New Issue
Block a user