forked from OSchip/llvm-project
Don't internalize all but main by default.
This is mostly a cleanup, but it changes a fairly old behavior. Every "real" LTO user was already disabling the silly internalize pass and creating the internalize pass itself. The difference with this patch is for "opt -std-link-opts" and the C api. Now to get a usable behavior out of opt one doesn't need the funny looking command line: opt -internalize -disable-internalize -internalize-public-api-list=foo,bar -std-link-opts llvm-svn: 214919
This commit is contained in:
parent
c03b6e7880
commit
f9e52cf015
|
@ -144,8 +144,8 @@ public:
|
|||
|
||||
/// populateModulePassManager - This sets up the primary pass manager.
|
||||
void populateModulePassManager(PassManagerBase &MPM);
|
||||
void populateLTOPassManager(PassManagerBase &PM, bool Internalize,
|
||||
bool RunInliner, bool DisableGVNLoadPRE = false);
|
||||
void populateLTOPassManager(PassManagerBase &PM, bool RunInliner,
|
||||
bool DisableGVNLoadPRE);
|
||||
};
|
||||
|
||||
/// Registers a function for adding a standard set of passes. This should be
|
||||
|
|
|
@ -475,10 +475,8 @@ bool LTOCodeGenerator::generateObjectFile(raw_ostream &out,
|
|||
// keeps only main if it exists and does nothing for libraries. Instead
|
||||
// we create the pass ourselves with the symbol list provided by the linker.
|
||||
if (!DisableOpt)
|
||||
PassManagerBuilder().populateLTOPassManager(passes,
|
||||
/*Internalize=*/false,
|
||||
!DisableInline,
|
||||
DisableGVNLoadPRE);
|
||||
PassManagerBuilder().populateLTOPassManager(passes, !DisableInline,
|
||||
DisableGVNLoadPRE);
|
||||
|
||||
// Make sure everything is still good.
|
||||
passes.add(createVerifierPass());
|
||||
|
|
|
@ -284,18 +284,11 @@ void PassManagerBuilder::populateModulePassManager(PassManagerBase &MPM) {
|
|||
}
|
||||
|
||||
void PassManagerBuilder::populateLTOPassManager(PassManagerBase &PM,
|
||||
bool Internalize,
|
||||
bool RunInliner,
|
||||
bool DisableGVNLoadPRE) {
|
||||
// Provide AliasAnalysis services for optimizations.
|
||||
addInitialAliasAnalysisPasses(PM);
|
||||
|
||||
// Now that composite has been compiled, scan through the module, looking
|
||||
// for a main function. If main is defined, mark all other functions
|
||||
// internal.
|
||||
if (Internalize)
|
||||
PM.add(createInternalizePass("main"));
|
||||
|
||||
// Propagate constants at call sites into the functions they call. This
|
||||
// opens opportunities for globalopt (and inlining) by substituting function
|
||||
// pointers passed as arguments to direct uses of functions.
|
||||
|
@ -461,5 +454,5 @@ void LLVMPassManagerBuilderPopulateLTOPassManager(LLVMPassManagerBuilderRef PMB,
|
|||
LLVMBool RunInliner) {
|
||||
PassManagerBuilder *Builder = unwrap(PMB);
|
||||
PassManagerBase *LPM = unwrap(PM);
|
||||
Builder->populateLTOPassManager(*LPM, Internalize != 0, RunInliner != 0);
|
||||
Builder->populateLTOPassManager(*LPM, RunInliner != 0, false);
|
||||
}
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
;RUN: opt -S -std-link-opts < %s | FileCheck %s
|
||||
; Simple test to check that -std-link-opts keeps only the main function.
|
||||
|
||||
; CHECK-NOT: define
|
||||
; CHECK: define void @main
|
||||
; CHECK-NOT: define
|
||||
define void @main() {
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @foo() {
|
||||
ret void
|
||||
}
|
|
@ -179,8 +179,7 @@ int main(int argc, char **argv) {
|
|||
|
||||
if (StandardLinkOpts) {
|
||||
PassManagerBuilder Builder;
|
||||
Builder.populateLTOPassManager(PM, /*Internalize=*/true,
|
||||
/*RunInliner=*/true);
|
||||
Builder.populateLTOPassManager(PM, /*RunInliner=*/true, false);
|
||||
}
|
||||
|
||||
if (OptLevelO1 || OptLevelO2 || OptLevelO3) {
|
||||
|
|
|
@ -108,10 +108,6 @@ static cl::opt<bool>
|
|||
DisableOptimizations("disable-opt",
|
||||
cl::desc("Do not run any optimization passes"));
|
||||
|
||||
static cl::opt<bool>
|
||||
DisableInternalize("disable-internalize",
|
||||
cl::desc("Do not mark all symbols as internal"));
|
||||
|
||||
static cl::opt<bool>
|
||||
StandardCompileOpts("std-compile-opts",
|
||||
cl::desc("Include the standard compile time optimizations"));
|
||||
|
@ -271,8 +267,7 @@ static void AddStandardLinkPasses(PassManagerBase &PM) {
|
|||
if (DisableOptimizations) return;
|
||||
|
||||
PassManagerBuilder Builder;
|
||||
Builder.populateLTOPassManager(PM, /*Internalize=*/ !DisableInternalize,
|
||||
/*RunInliner=*/ !DisableInline);
|
||||
Builder.populateLTOPassManager(PM, /*RunInliner=*/!DisableInline, false);
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
Loading…
Reference in New Issue