(void) llvm::createStraightLineStrengthReducePass();
(void) llvm::createMemDerefPrinter();
(void) llvm::createFloat2IntPass();
+ (void) llvm::createEliminateAvailableExternallyPass();
(void)new llvm::IntervalPartition();
(void)new llvm::ScalarEvolution();
}
I->removeDeadConstantUsers();
I->setLinkage(GlobalValue::ExternalLinkage);
- I->setVisibility(GlobalValue::DefaultVisibility);
NumVariables++;
}
if (!I->isDeclaration())
// This will set the linkage to external
I->deleteBody();
- I->setVisibility(GlobalValue::DefaultVisibility);
I->removeDeadConstantUsers();
NumFunctions++;
}
I->setAliasee(nullptr);
I->removeDeadConstantUsers();
I->setLinkage(GlobalValue::ExternalLinkage);
- I->setVisibility(GlobalValue::DefaultVisibility);
NumAliases++;
}
initializeStripDeadDebugInfoPass(Registry);
initializeStripNonDebugSymbolsPass(Registry);
initializeBarrierNoopPass(Registry);
+ initializeEliminateAvailableExternallyPass(Registry);
}
void LLVMInitializeIPO(LLVMPassRegistryRef R) {
--- /dev/null
+; 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
+}