diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2009-01-15 20:18:42 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2009-01-15 20:18:42 +0000 |
commit | a168fc98dedfc8cac01c34f84b699fe5f48ad76d (patch) | |
tree | ebdd7fc62b19bc9bdb7cc03563fd817d3943f17e /lib/Transforms/IPO | |
parent | ef4bf3b063ea20732c4647c6f2d5d77caf907578 (diff) | |
download | external_llvm-a168fc98dedfc8cac01c34f84b699fe5f48ad76d.zip external_llvm-a168fc98dedfc8cac01c34f84b699fe5f48ad76d.tar.gz external_llvm-a168fc98dedfc8cac01c34f84b699fe5f48ad76d.tar.bz2 |
Add the private linkage.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62279 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/IPO')
-rw-r--r-- | lib/Transforms/IPO/ArgumentPromotion.cpp | 2 | ||||
-rw-r--r-- | lib/Transforms/IPO/ConstantMerge.cpp | 4 | ||||
-rw-r--r-- | lib/Transforms/IPO/DeadArgumentElimination.cpp | 4 | ||||
-rw-r--r-- | lib/Transforms/IPO/ExtractGV.cpp | 3 | ||||
-rw-r--r-- | lib/Transforms/IPO/GlobalDCE.cpp | 4 | ||||
-rw-r--r-- | lib/Transforms/IPO/GlobalOpt.cpp | 12 | ||||
-rw-r--r-- | lib/Transforms/IPO/IPConstantPropagation.cpp | 2 | ||||
-rw-r--r-- | lib/Transforms/IPO/Inliner.cpp | 4 | ||||
-rw-r--r-- | lib/Transforms/IPO/Internalize.cpp | 6 | ||||
-rw-r--r-- | lib/Transforms/IPO/MergeFunctions.cpp | 4 | ||||
-rw-r--r-- | lib/Transforms/IPO/StripSymbols.cpp | 12 | ||||
-rw-r--r-- | lib/Transforms/IPO/StructRetPromotion.cpp | 2 |
12 files changed, 31 insertions, 28 deletions
diff --git a/lib/Transforms/IPO/ArgumentPromotion.cpp b/lib/Transforms/IPO/ArgumentPromotion.cpp index 00d06ba..69e427e 100644 --- a/lib/Transforms/IPO/ArgumentPromotion.cpp +++ b/lib/Transforms/IPO/ArgumentPromotion.cpp @@ -114,7 +114,7 @@ bool ArgPromotion::PromoteArguments(CallGraphNode *CGN) { Function *F = CGN->getFunction(); // Make sure that it is local to this module. - if (!F || !F->hasInternalLinkage()) return false; + if (!F || !F->hasLocalLinkage()) return false; // First check: see if there are any pointer arguments! If not, quick exit. SmallVector<std::pair<Argument*, unsigned>, 16> PointerArgs; diff --git a/lib/Transforms/IPO/ConstantMerge.cpp b/lib/Transforms/IPO/ConstantMerge.cpp index b4bab2d..237e6db 100644 --- a/lib/Transforms/IPO/ConstantMerge.cpp +++ b/lib/Transforms/IPO/ConstantMerge.cpp @@ -72,7 +72,7 @@ bool ConstantMerge::runOnModule(Module &M) { // If this GV is dead, remove it. GV->removeDeadConstantUsers(); - if (GV->use_empty() && GV->hasInternalLinkage()) { + if (GV->use_empty() && GV->hasLocalLinkage()) { GV->eraseFromParent(); continue; } @@ -86,7 +86,7 @@ bool ConstantMerge::runOnModule(Module &M) { if (Slot == 0) { // Nope, add it to the map. Slot = GV; - } else if (GV->hasInternalLinkage()) { // Yup, this is a duplicate! + } else if (GV->hasLocalLinkage()) { // Yup, this is a duplicate! // Make all uses of the duplicate constant use the canonical version. Replacements.push_back(std::make_pair(GV, Slot)); } diff --git a/lib/Transforms/IPO/DeadArgumentElimination.cpp b/lib/Transforms/IPO/DeadArgumentElimination.cpp index 8f0c4c4..9d7980c 100644 --- a/lib/Transforms/IPO/DeadArgumentElimination.cpp +++ b/lib/Transforms/IPO/DeadArgumentElimination.cpp @@ -172,7 +172,7 @@ ModulePass *llvm::createDeadArgHackingPass() { return new DAH(); } /// llvm.vastart is never called, the varargs list is dead for the function. bool DAE::DeleteDeadVarargs(Function &Fn) { assert(Fn.getFunctionType()->isVarArg() && "Function isn't varargs!"); - if (Fn.isDeclaration() || !Fn.hasInternalLinkage()) return false; + if (Fn.isDeclaration() || !Fn.hasLocalLinkage()) return false; // Ensure that the function is only directly called. for (Value::use_iterator I = Fn.use_begin(), E = Fn.use_end(); I != E; ++I) { @@ -424,7 +424,7 @@ void DAE::SurveyFunction(Function &F) { return; } - if (!F.hasInternalLinkage() && (!ShouldHackArguments() || F.isIntrinsic())) { + if (!F.hasLocalLinkage() && (!ShouldHackArguments() || F.isIntrinsic())) { MarkLive(F); return; } diff --git a/lib/Transforms/IPO/ExtractGV.cpp b/lib/Transforms/IPO/ExtractGV.cpp index 79e51d0..0c529d2 100644 --- a/lib/Transforms/IPO/ExtractGV.cpp +++ b/lib/Transforms/IPO/ExtractGV.cpp @@ -63,7 +63,7 @@ namespace { I != E; ++I) { if (CallInst* callInst = dyn_cast<CallInst>(&*I)) { Function* Callee = callInst->getCalledFunction(); - if (Callee && Callee->hasInternalLinkage()) + if (Callee && Callee->hasLocalLinkage()) Callee->setLinkage(GlobalValue::ExternalLinkage); } } @@ -85,6 +85,7 @@ namespace { bool isolateGV(Module &M) { // Mark all globals internal + // FIXME: what should we do with private linkage? for (Module::global_iterator I = M.global_begin(), E = M.global_end(); I != E; ++I) if (!I->isDeclaration()) { I->setLinkage(GlobalValue::InternalLinkage); diff --git a/lib/Transforms/IPO/GlobalDCE.cpp b/lib/Transforms/IPO/GlobalDCE.cpp index a9c9ec0..a0f8923 100644 --- a/lib/Transforms/IPO/GlobalDCE.cpp +++ b/lib/Transforms/IPO/GlobalDCE.cpp @@ -63,7 +63,7 @@ bool GlobalDCE::runOnModule(Module &M) { for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) { Changed |= RemoveUnusedGlobalValue(*I); // Functions with external linkage are needed if they have a body - if ((!I->hasInternalLinkage() && !I->hasLinkOnceLinkage()) && + if ((!I->hasLocalLinkage() && !I->hasLinkOnceLinkage()) && !I->isDeclaration()) GlobalIsNeeded(I); } @@ -73,7 +73,7 @@ bool GlobalDCE::runOnModule(Module &M) { Changed |= RemoveUnusedGlobalValue(*I); // Externally visible & appending globals are needed, if they have an // initializer. - if ((!I->hasInternalLinkage() && !I->hasLinkOnceLinkage()) && + if ((!I->hasLocalLinkage() && !I->hasLinkOnceLinkage()) && !I->isDeclaration()) GlobalIsNeeded(I); } diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp index b4a5634..99fc731 100644 --- a/lib/Transforms/IPO/GlobalOpt.cpp +++ b/lib/Transforms/IPO/GlobalOpt.cpp @@ -464,7 +464,7 @@ static GlobalVariable *SRAGlobal(GlobalVariable *GV, const TargetData &TD) { if (!GlobalUsersSafeToSRA(GV)) return 0; - assert(GV->hasInternalLinkage() && !GV->isConstant()); + assert(GV->hasLocalLinkage() && !GV->isConstant()); Constant *Init = GV->getInitializer(); const Type *Ty = Init->getType(); @@ -1808,12 +1808,12 @@ bool GlobalOpt::OptimizeFunctions(Module &M) { for (Module::iterator FI = M.begin(), E = M.end(); FI != E; ) { Function *F = FI++; F->removeDeadConstantUsers(); - if (F->use_empty() && (F->hasInternalLinkage() || + if (F->use_empty() && (F->hasLocalLinkage() || F->hasLinkOnceLinkage())) { M.getFunctionList().erase(F); Changed = true; ++NumFnDeleted; - } else if (F->hasInternalLinkage()) { + } else if (F->hasLocalLinkage()) { if (F->getCallingConv() == CallingConv::C && !F->isVarArg() && OnlyCalledDirectly(F)) { // If this function has C calling conventions, is not a varargs @@ -1843,7 +1843,7 @@ bool GlobalOpt::OptimizeGlobalVars(Module &M) { for (Module::global_iterator GVI = M.global_begin(), E = M.global_end(); GVI != E; ) { GlobalVariable *GV = GVI++; - if (!GV->isConstant() && GV->hasInternalLinkage() && + if (!GV->isConstant() && GV->hasLocalLinkage() && GV->hasInitializer()) Changed |= ProcessInternalGlobal(GV, GVI); } @@ -1982,7 +1982,7 @@ static Constant *getVal(DenseMap<Value*, Constant*> &ComputedValues, /// globals. This should be kept up to date with CommitValueTo. static bool isSimpleEnoughPointerToCommit(Constant *C) { if (GlobalVariable *GV = dyn_cast<GlobalVariable>(C)) { - if (!GV->hasExternalLinkage() && !GV->hasInternalLinkage()) + if (!GV->hasExternalLinkage() && !GV->hasLocalLinkage()) return false; // do not allow weak/linkonce/dllimport/dllexport linkage. return !GV->isDeclaration(); // reject external globals. } @@ -1991,7 +1991,7 @@ static bool isSimpleEnoughPointerToCommit(Constant *C) { if (CE->getOpcode() == Instruction::GetElementPtr && isa<GlobalVariable>(CE->getOperand(0))) { GlobalVariable *GV = cast<GlobalVariable>(CE->getOperand(0)); - if (!GV->hasExternalLinkage() && !GV->hasInternalLinkage()) + if (!GV->hasExternalLinkage() && !GV->hasLocalLinkage()) return false; // do not allow weak/linkonce/dllimport/dllexport linkage. return GV->hasInitializer() && ConstantFoldLoadThroughGEPConstantExpr(GV->getInitializer(), CE); diff --git a/lib/Transforms/IPO/IPConstantPropagation.cpp b/lib/Transforms/IPO/IPConstantPropagation.cpp index 5bd7a3d..6ae8276 100644 --- a/lib/Transforms/IPO/IPConstantPropagation.cpp +++ b/lib/Transforms/IPO/IPConstantPropagation.cpp @@ -63,7 +63,7 @@ bool IPCP::runOnModule(Module &M) { if (!I->isDeclaration()) { // Delete any klingons. I->removeDeadConstantUsers(); - if (I->hasInternalLinkage()) + if (I->hasLocalLinkage()) LocalChange |= PropagateConstantsIntoArguments(*I); Changed |= PropagateConstantReturn(*I); } diff --git a/lib/Transforms/IPO/Inliner.cpp b/lib/Transforms/IPO/Inliner.cpp index 8d40c9b..ed17747 100644 --- a/lib/Transforms/IPO/Inliner.cpp +++ b/lib/Transforms/IPO/Inliner.cpp @@ -68,7 +68,7 @@ static bool InlineCallIfPossible(CallSite CS, CallGraph &CG, // If we inlined the last possible call site to the function, delete the // function body now. - if (Callee->use_empty() && Callee->hasInternalLinkage() && + if (Callee->use_empty() && Callee->hasLocalLinkage() && !SCCFunctions.count(Callee)) { DOUT << " -> Deleting dead function: " << Callee->getName() << "\n"; CallGraphNode *CalleeNode = CG[Callee]; @@ -240,7 +240,7 @@ bool Inliner::removeDeadFunctions(CallGraph &CG, if (DNR && DNR->count(F)) continue; - if ((F->hasLinkOnceLinkage() || F->hasInternalLinkage()) && + if ((F->hasLinkOnceLinkage() || F->hasLocalLinkage()) && F->use_empty()) { // Remove any call graph edges from the function to its callees. diff --git a/lib/Transforms/IPO/Internalize.cpp b/lib/Transforms/IPO/Internalize.cpp index b6d89aa..b226d19 100644 --- a/lib/Transforms/IPO/Internalize.cpp +++ b/lib/Transforms/IPO/Internalize.cpp @@ -121,9 +121,10 @@ bool InternalizePass::runOnModule(Module &M) { bool Changed = false; // Mark all functions not in the api as internal. + // FIXME: maybe use private linkage? for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) if (!I->isDeclaration() && // Function must be defined here - !I->hasInternalLinkage() && // Can't already have internal linkage + !I->hasLocalLinkage() && // Can't already have internal linkage !ExternalNames.count(I->getName())) {// Not marked to keep external? I->setLinkage(GlobalValue::InternalLinkage); // Remove a callgraph edge from the external node to this function. @@ -149,9 +150,10 @@ bool InternalizePass::runOnModule(Module &M) { // Mark all global variables with initializers that are not in the api as // internal as well. + // FIXME: maybe use private linkage? for (Module::global_iterator I = M.global_begin(), E = M.global_end(); I != E; ++I) - if (!I->isDeclaration() && !I->hasInternalLinkage() && + if (!I->isDeclaration() && !I->hasLocalLinkage() && !ExternalNames.count(I->getName())) { I->setLinkage(GlobalValue::InternalLinkage); Changed = true; diff --git a/lib/Transforms/IPO/MergeFunctions.cpp b/lib/Transforms/IPO/MergeFunctions.cpp index 3c5c258..17bc2d4 100644 --- a/lib/Transforms/IPO/MergeFunctions.cpp +++ b/lib/Transforms/IPO/MergeFunctions.cpp @@ -245,7 +245,7 @@ static bool fold(std::vector<Function *> &FnVec, unsigned i, unsigned j) { Function *G = FnVec[j]; if (!F->mayBeOverridden()) { - if (G->hasInternalLinkage()) { + if (G->hasLocalLinkage()) { F->setAlignment(std::max(F->getAlignment(), G->getAlignment())); G->replaceAllUsesWith(F); G->eraseFromParent(); @@ -329,7 +329,7 @@ bool MergeFunctions::runOnModule(Module &M) { if (F->isDeclaration() || F->isIntrinsic()) continue; - if (!F->hasInternalLinkage() && !F->hasExternalLinkage() && + if (!F->hasLocalLinkage() && !F->hasExternalLinkage() && !F->hasWeakLinkage()) continue; diff --git a/lib/Transforms/IPO/StripSymbols.cpp b/lib/Transforms/IPO/StripSymbols.cpp index 7e225e2..47a18e2 100644 --- a/lib/Transforms/IPO/StripSymbols.cpp +++ b/lib/Transforms/IPO/StripSymbols.cpp @@ -95,7 +95,7 @@ static void RemoveDeadConstant(Constant *C) { OnlyUsedBy(C->getOperand(i), C)) Operands.insert(C->getOperand(i)); if (GlobalVariable *GV = dyn_cast<GlobalVariable>(C)) { - if (!GV->hasInternalLinkage()) return; // Don't delete non static globals. + if (!GV->hasLocalLinkage()) return; // Don't delete non static globals. GV->eraseFromParent(); } else if (!isa<Function>(C)) @@ -114,7 +114,7 @@ static void StripSymtab(ValueSymbolTable &ST, bool PreserveDbgInfo) { for (ValueSymbolTable::iterator VI = ST.begin(), VE = ST.end(); VI != VE; ) { Value *V = VI->getValue(); ++VI; - if (!isa<GlobalValue>(V) || cast<GlobalValue>(V)->hasInternalLinkage()) { + if (!isa<GlobalValue>(V) || cast<GlobalValue>(V)->hasLocalLinkage()) { if (!PreserveDbgInfo || strncmp(V->getNameStart(), "llvm.dbg", 8)) // Set name to "", removing from symbol table! V->setName(""); @@ -162,13 +162,13 @@ bool StripSymbolNames(Module &M, bool PreserveDbgInfo) { for (Module::global_iterator I = M.global_begin(), E = M.global_end(); I != E; ++I) { - if (I->hasInternalLinkage() && llvmUsedValues.count(I) == 0) + if (I->hasLocalLinkage() && llvmUsedValues.count(I) == 0) if (!PreserveDbgInfo || strncmp(I->getNameStart(), "llvm.dbg", 8)) I->setName(""); // Internal symbols can't participate in linkage } for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) { - if (I->hasInternalLinkage() && llvmUsedValues.count(I) == 0) + if (I->hasLocalLinkage() && llvmUsedValues.count(I) == 0) if (!PreserveDbgInfo || strncmp(I->getNameStart(), "llvm.dbg", 8)) I->setName(""); // Internal symbols can't participate in linkage StripSymtab(I->getValueSymbolTable(), PreserveDbgInfo); @@ -268,6 +268,7 @@ bool StripDebugInfo(Module &M) { // llvm.dbg.compile_units and llvm.dbg.subprograms are marked as linkonce // but since we are removing all debug information, make them internal now. + // FIXME: Use private linkage maybe? if (Constant *C = M.getNamedGlobal("llvm.dbg.compile_units")) if (GlobalVariable *GV = dyn_cast<GlobalVariable>(C)) GV->setLinkage(GlobalValue::InternalLinkage); @@ -299,7 +300,7 @@ bool StripDebugInfo(Module &M) { Constant *C = DeadConstants.back(); DeadConstants.pop_back(); if (GlobalVariable *GV = dyn_cast<GlobalVariable>(C)) { - if (GV->hasInternalLinkage()) + if (GV->hasLocalLinkage()) RemoveDeadConstant(GV); } else @@ -329,4 +330,3 @@ bool StripSymbols::runOnModule(Module &M) { bool StripNonDebugSymbols::runOnModule(Module &M) { return StripSymbolNames(M, true); } - diff --git a/lib/Transforms/IPO/StructRetPromotion.cpp b/lib/Transforms/IPO/StructRetPromotion.cpp index 96ef66c..00556f9 100644 --- a/lib/Transforms/IPO/StructRetPromotion.cpp +++ b/lib/Transforms/IPO/StructRetPromotion.cpp @@ -82,7 +82,7 @@ bool SRETPromotion::runOnSCC(const std::vector<CallGraphNode *> &SCC) { bool SRETPromotion::PromoteReturn(CallGraphNode *CGN) { Function *F = CGN->getFunction(); - if (!F || F->isDeclaration() || !F->hasInternalLinkage()) + if (!F || F->isDeclaration() || !F->hasLocalLinkage()) return false; // Make sure that function returns struct. |