[LTO API] add lto_codegen_set_should_internalize.

When debugging LTO issues with ld64, we use -save-temps to save the merged
optimized bitcode file, then invoke ld64 again on the single bitcode file.
The saved bitcode file is already internalized, so we can call
lto_codegen_set_should_internalize and skip running internalization again.

rdar://20227235


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235211 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Manman Ren 2015-04-17 17:10:09 +00:00
parent c7b16819e8
commit 44b800f44d
5 changed files with 22 additions and 2 deletions

View File

@ -40,7 +40,7 @@ typedef bool lto_bool_t;
* @{
*/
#define LTO_API_VERSION 13
#define LTO_API_VERSION 14
/**
* \since prior to LTO_API_VERSION=3
@ -548,6 +548,16 @@ lto_codegen_debug_options(lto_code_gen_t cg, const char *);
extern void
lto_initialize_disassembler(void);
/**
* Sets if we should run internalize pass during optimization and code
* generation.
*
* \since prior to LTO_API_VERSION=14
*/
extern void
lto_codegen_set_should_internalize(lto_code_gen_t cg,
lto_bool_t ShouldInternalize);
#ifdef __cplusplus
}
#endif

View File

@ -79,6 +79,8 @@ struct LTOCodeGenerator {
void setAttr(const char *mAttr) { MAttr = mAttr; }
void setOptLevel(unsigned optLevel) { OptLevel = optLevel; }
void setShouldInternalize(bool Value) { ShouldInternalize = Value; }
void addMustPreserveSymbol(const char *sym) { MustPreserveSymbols[sym] = 1; }
// To pass options to the driver and optimization passes. These options are
@ -174,6 +176,7 @@ private:
lto_diagnostic_handler_t DiagHandler;
void *DiagContext;
LTOModule *OwnedModule;
bool ShouldInternalize;
};
}
#endif

View File

@ -82,6 +82,7 @@ void LTOCodeGenerator::initialize() {
DiagHandler = nullptr;
DiagContext = nullptr;
OwnedModule = nullptr;
ShouldInternalize = true;
initializeLTOPasses();
}
@ -464,7 +465,7 @@ static void accumulateAndSortLibcalls(std::vector<StringRef> &Libcalls,
}
void LTOCodeGenerator::applyScopeRestrictions() {
if (ScopeRestrictionsDone)
if (ScopeRestrictionsDone || !ShouldInternalize)
return;
Module *mergedModule = IRLinker.getModule();

View File

@ -333,3 +333,8 @@ void lto_codegen_debug_options(lto_code_gen_t cg, const char *opt) {
}
unsigned int lto_api_version() { return LTO_API_VERSION; }
void lto_codegen_set_should_internalize(lto_code_gen_t cg,
bool ShouldInternalize) {
unwrap(cg)->setShouldInternalize(ShouldInternalize);
}

View File

@ -41,6 +41,7 @@ lto_codegen_set_cpu
lto_codegen_compile_to_file
lto_codegen_optimize
lto_codegen_compile_optimized
lto_codegen_set_should_internalize
LLVMCreateDisasm
LLVMCreateDisasmCPU
LLVMDisasmDispose