diff --git a/include/llvm/LinkAllPasses.h b/include/llvm/LinkAllPasses.h index 8ac1b212ae5..cea5530db3b 100644 --- a/include/llvm/LinkAllPasses.h +++ b/include/llvm/LinkAllPasses.h @@ -176,6 +176,7 @@ namespace { (void) llvm::createStraightLineStrengthReducePass(); (void) llvm::createMemDerefPrinter(); (void) llvm::createFloat2IntPass(); + (void) llvm::createEliminateAvailableExternallyPass(); (void)new llvm::IntervalPartition(); (void)new llvm::ScalarEvolution(); diff --git a/lib/Transforms/IPO/ElimAvailExtern.cpp b/lib/Transforms/IPO/ElimAvailExtern.cpp index 1566e85e99b..e70ab871b88 100644 --- a/lib/Transforms/IPO/ElimAvailExtern.cpp +++ b/lib/Transforms/IPO/ElimAvailExtern.cpp @@ -67,7 +67,6 @@ bool EliminateAvailableExternally::runOnModule(Module &M) { } I->removeDeadConstantUsers(); I->setLinkage(GlobalValue::ExternalLinkage); - I->setVisibility(GlobalValue::DefaultVisibility); NumVariables++; } @@ -78,7 +77,6 @@ bool EliminateAvailableExternally::runOnModule(Module &M) { if (!I->isDeclaration()) // This will set the linkage to external I->deleteBody(); - I->setVisibility(GlobalValue::DefaultVisibility); I->removeDeadConstantUsers(); NumFunctions++; } @@ -91,7 +89,6 @@ bool EliminateAvailableExternally::runOnModule(Module &M) { I->setAliasee(nullptr); I->removeDeadConstantUsers(); I->setLinkage(GlobalValue::ExternalLinkage); - I->setVisibility(GlobalValue::DefaultVisibility); NumAliases++; } diff --git a/lib/Transforms/IPO/IPO.cpp b/lib/Transforms/IPO/IPO.cpp index fcacec3286f..50f56b0f2af 100644 --- a/lib/Transforms/IPO/IPO.cpp +++ b/lib/Transforms/IPO/IPO.cpp @@ -46,6 +46,7 @@ void llvm::initializeIPO(PassRegistry &Registry) { initializeStripDeadDebugInfoPass(Registry); initializeStripNonDebugSymbolsPass(Registry); initializeBarrierNoopPass(Registry); + initializeEliminateAvailableExternallyPass(Registry); } void LLVMInitializeIPO(LLVMPassRegistryRef R) { diff --git a/test/Transforms/EliminateAvailableExternally/visibility.ll b/test/Transforms/EliminateAvailableExternally/visibility.ll new file mode 100644 index 00000000000..9966fcf30e8 --- /dev/null +++ b/test/Transforms/EliminateAvailableExternally/visibility.ll @@ -0,0 +1,11 @@ +; RUN: opt -elim-avail-extern -S < %s | FileCheck %s + +; CHECK: declare hidden void @f() +define available_externally hidden void @f() { + ret void +} + +define void @g() { + call void @f() + ret void +}