summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/LinkAllPasses.h1
-rw-r--r--llvm/lib/Transforms/IPO/ElimAvailExtern.cpp3
-rw-r--r--llvm/lib/Transforms/IPO/IPO.cpp1
-rw-r--r--llvm/test/Transforms/EliminateAvailableExternally/visibility.ll11
4 files changed, 13 insertions, 3 deletions
diff --git a/llvm/include/llvm/LinkAllPasses.h b/llvm/include/llvm/LinkAllPasses.h
index 8ac1b212ae5..cea5530db3b 100644
--- a/llvm/include/llvm/LinkAllPasses.h
+++ b/llvm/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/llvm/lib/Transforms/IPO/ElimAvailExtern.cpp b/llvm/lib/Transforms/IPO/ElimAvailExtern.cpp
index 1566e85e99b..e70ab871b88 100644
--- a/llvm/lib/Transforms/IPO/ElimAvailExtern.cpp
+++ b/llvm/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/llvm/lib/Transforms/IPO/IPO.cpp b/llvm/lib/Transforms/IPO/IPO.cpp
index fcacec3286f..50f56b0f2af 100644
--- a/llvm/lib/Transforms/IPO/IPO.cpp
+++ b/llvm/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/llvm/test/Transforms/EliminateAvailableExternally/visibility.ll b/llvm/test/Transforms/EliminateAvailableExternally/visibility.ll
new file mode 100644
index 00000000000..9966fcf30e8
--- /dev/null
+++ b/llvm/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
+}
OpenPOWER on IntegriCloud