[BOLT] Only link and initialize supported targets (#127509)
Bolt currently links and initializes all LLVM targets. This substantially increases the binary size, and link time if LTO is used. Instead, only link the targets specified by BOLT_TARGETS_TO_BUILD. We also have to only initialize those targets, so generate a TargetConfig.def file with the necessary information. The way the initialization is done mirrors what llvm-exegesis does. This reduces llvm-bolt size from 137MB to 78MB for me.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
set(LLVM_LINK_COMPONENTS
|
||||
${LLVM_TARGETS_TO_BUILD}
|
||||
${BOLT_TARGETS_TO_BUILD}
|
||||
MC
|
||||
Object
|
||||
Support
|
||||
|
||||
@@ -88,13 +88,15 @@ int main(int argc, char **argv) {
|
||||
llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
|
||||
|
||||
// Initialize targets and assembly printers/parsers.
|
||||
llvm::InitializeAllTargetInfos();
|
||||
llvm::InitializeAllTargetMCs();
|
||||
llvm::InitializeAllAsmParsers();
|
||||
llvm::InitializeAllDisassemblers();
|
||||
#define BOLT_TARGET(target) \
|
||||
LLVMInitialize##target##TargetInfo(); \
|
||||
LLVMInitialize##target##TargetMC(); \
|
||||
LLVMInitialize##target##AsmParser(); \
|
||||
LLVMInitialize##target##Disassembler(); \
|
||||
LLVMInitialize##target##Target(); \
|
||||
LLVMInitialize##target##AsmPrinter();
|
||||
|
||||
llvm::InitializeAllTargets();
|
||||
llvm::InitializeAllAsmPrinters();
|
||||
#include "bolt/Core/TargetConfig.def"
|
||||
|
||||
ParseCommandLine(argc, argv);
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
set(LLVM_LINK_COMPONENTS
|
||||
${LLVM_TARGETS_TO_BUILD}
|
||||
${BOLT_TARGETS_TO_BUILD}
|
||||
MC
|
||||
Object
|
||||
Support
|
||||
|
||||
@@ -183,13 +183,15 @@ int main(int argc, char **argv) {
|
||||
std::string ToolPath = llvm::sys::fs::getMainExecutable(argv[0], nullptr);
|
||||
|
||||
// Initialize targets and assembly printers/parsers.
|
||||
llvm::InitializeAllTargetInfos();
|
||||
llvm::InitializeAllTargetMCs();
|
||||
llvm::InitializeAllAsmParsers();
|
||||
llvm::InitializeAllDisassemblers();
|
||||
#define BOLT_TARGET(target) \
|
||||
LLVMInitialize##target##TargetInfo(); \
|
||||
LLVMInitialize##target##TargetMC(); \
|
||||
LLVMInitialize##target##AsmParser(); \
|
||||
LLVMInitialize##target##Disassembler(); \
|
||||
LLVMInitialize##target##Target(); \
|
||||
LLVMInitialize##target##AsmPrinter();
|
||||
|
||||
llvm::InitializeAllTargets();
|
||||
llvm::InitializeAllAsmPrinters();
|
||||
#include "bolt/Core/TargetConfig.def"
|
||||
|
||||
ToolName = argv[0];
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
set(LLVM_LINK_COMPONENTS
|
||||
${LLVM_TARGETS_TO_BUILD}
|
||||
${BOLT_TARGETS_TO_BUILD}
|
||||
MC
|
||||
Object
|
||||
Support
|
||||
|
||||
@@ -76,13 +76,15 @@ int main(int argc, char **argv) {
|
||||
opts::OutputFilename = "-";
|
||||
|
||||
// Initialize targets and assembly printers/parsers.
|
||||
llvm::InitializeAllTargetInfos();
|
||||
llvm::InitializeAllTargetMCs();
|
||||
llvm::InitializeAllAsmParsers();
|
||||
llvm::InitializeAllDisassemblers();
|
||||
#define BOLT_TARGET(target) \
|
||||
LLVMInitialize##target##TargetInfo(); \
|
||||
LLVMInitialize##target##TargetMC(); \
|
||||
LLVMInitialize##target##AsmParser(); \
|
||||
LLVMInitialize##target##Disassembler(); \
|
||||
LLVMInitialize##target##Target(); \
|
||||
LLVMInitialize##target##AsmPrinter();
|
||||
|
||||
llvm::InitializeAllTargets();
|
||||
llvm::InitializeAllAsmPrinters();
|
||||
#include "bolt/Core/TargetConfig.def"
|
||||
|
||||
ToolName = argv[0];
|
||||
std::string ToolPath = GetExecutablePath(argv[0]);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
set(LLVM_LINK_COMPONENTS
|
||||
${LLVM_TARGETS_TO_BUILD}
|
||||
${BOLT_TARGETS_TO_BUILD}
|
||||
)
|
||||
|
||||
add_llvm_fuzzer(llvm-bolt-fuzzer
|
||||
|
||||
@@ -58,13 +58,16 @@ extern "C" int LLVMFuzzerTestOneInput(const char *Data, size_t Size) {
|
||||
|
||||
extern "C" LLVM_ATTRIBUTE_USED int LLVMFuzzerInitialize(int *argc,
|
||||
char ***argv) {
|
||||
llvm::InitializeAllTargetInfos();
|
||||
llvm::InitializeAllTargetMCs();
|
||||
llvm::InitializeAllAsmParsers();
|
||||
llvm::InitializeAllDisassemblers();
|
||||
// Initialize targets and assembly printers/parsers.
|
||||
#define BOLT_TARGET(target) \
|
||||
LLVMInitialize##target##TargetInfo(); \
|
||||
LLVMInitialize##target##TargetMC(); \
|
||||
LLVMInitialize##target##AsmParser(); \
|
||||
LLVMInitialize##target##Disassembler(); \
|
||||
LLVMInitialize##target##Target(); \
|
||||
LLVMInitialize##target##AsmPrinter();
|
||||
|
||||
llvm::InitializeAllTargets();
|
||||
llvm::InitializeAllAsmPrinters();
|
||||
#include "bolt/Core/TargetConfig.def"
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user