diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2008-09-09 20:05:04 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2008-09-09 20:05:04 +0000 |
commit | 19e861a4ffb896f16a691d5ac869e894df3cd464 (patch) | |
tree | 70e54c4bb030e963a4d15d45abb8bb48f8447e3f | |
parent | 7ca9d81bce9b3ea6ed2f5e7476a6c4d15c882b2a (diff) | |
download | llvm-19e861a4ffb896f16a691d5ac869e894df3cd464.tar.gz llvm-19e861a4ffb896f16a691d5ac869e894df3cd464.tar.bz2 llvm-19e861a4ffb896f16a691d5ac869e894df3cd464.tar.xz |
Make safer variant of alias resolution routine to be default
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56005 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/GlobalAlias.h | 4 | ||||
-rw-r--r-- | lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 2 | ||||
-rw-r--r-- | lib/ExecutionEngine/JIT/JITEmitter.cpp | 2 | ||||
-rw-r--r-- | lib/Linker/LinkModules.cpp | 2 | ||||
-rw-r--r-- | lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp | 2 | ||||
-rw-r--r-- | lib/Transforms/IPO/GlobalOpt.cpp | 3 | ||||
-rw-r--r-- | lib/VMCore/Globals.cpp | 6 | ||||
-rw-r--r-- | lib/VMCore/Verifier.cpp | 2 |
8 files changed, 11 insertions, 12 deletions
diff --git a/include/llvm/GlobalAlias.h b/include/llvm/GlobalAlias.h index 1081fc675f..d689ad7565 100644 --- a/include/llvm/GlobalAlias.h +++ b/include/llvm/GlobalAlias.h @@ -76,10 +76,10 @@ public: /// resolveAliasedGlobal() - This method tries to ultimately resolve the alias /// by going through the aliasing chain and trying to find the very last - /// global. Returns NULL if a cycle was found. If traverseWeak is true, then + /// global. Returns NULL if a cycle was found. If stopOnWeak is false, then /// the whole chain aliasing chain is traversed, otherwise - only strong /// aliases. - const GlobalValue* resolveAliasedGlobal(bool traverseWeak = true) const; + const GlobalValue* resolveAliasedGlobal(bool stopOnWeak = true) const; // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const GlobalAlias *) { return true; } diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 747c1400fc..31cd2e3393 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -949,7 +949,7 @@ SDValue SelectionDAG::getGlobalAddress(const GlobalValue *GV, if (!GVar) { // If GV is an alias then use the aliasee for determining thread-localness. if (const GlobalAlias *GA = dyn_cast<GlobalAlias>(GV)) - GVar = dyn_cast_or_null<GlobalVariable>(GA->resolveAliasedGlobal()); + GVar = dyn_cast_or_null<GlobalVariable>(GA->resolveAliasedGlobal(false)); } if (GVar && GVar->isThreadLocal()) diff --git a/lib/ExecutionEngine/JIT/JITEmitter.cpp b/lib/ExecutionEngine/JIT/JITEmitter.cpp index da4cd095fa..02752a01cd 100644 --- a/lib/ExecutionEngine/JIT/JITEmitter.cpp +++ b/lib/ExecutionEngine/JIT/JITEmitter.cpp @@ -567,7 +567,7 @@ void *JITEmitter::getPointerToGlobal(GlobalValue *V, void *Reference, return TheJIT->getOrEmitGlobalVariable(GV); } if (GlobalAlias *GA = dyn_cast<GlobalAlias>(V)) - return TheJIT->getPointerToGlobal(GA->resolveAliasedGlobal()); + return TheJIT->getPointerToGlobal(GA->resolveAliasedGlobal(false)); // If we have already compiled the function, return a pointer to its body. Function *F = cast<Function>(V); diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp index f4ebe6b10c..b867705fe1 100644 --- a/lib/Linker/LinkModules.cpp +++ b/lib/Linker/LinkModules.cpp @@ -1169,7 +1169,7 @@ static bool LinkAppendingVars(Module *M, static bool ResolveAliases(Module *Dest) { for (Module::alias_iterator I = Dest->alias_begin(), E = Dest->alias_end(); I != E; ++I) - if (const GlobalValue *GV = I->resolveAliasedGlobal(/*traverseWeak*/ false)) + if (const GlobalValue *GV = I->resolveAliasedGlobal()) if (GV != I && !GV->isDeclaration()) I->replaceAllUsesWith(const_cast<GlobalValue*>(GV)); diff --git a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp index eb31752ded..6977ead58e 100644 --- a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp +++ b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp @@ -369,7 +369,7 @@ void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo, // If GV is an alias then use the aliasee for determining // thread-localness. if (const GlobalAlias *GA = dyn_cast<GlobalAlias>(GV)) - GVar = dyn_cast_or_null<GlobalVariable>(GA->resolveAliasedGlobal()); + GVar = dyn_cast_or_null<GlobalVariable>(GA->resolveAliasedGlobal(false)); } bool isThreadLocal = GVar && GVar->isThreadLocal(); diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp index 8c6631aa2b..0c059ff014 100644 --- a/lib/Transforms/IPO/GlobalOpt.cpp +++ b/lib/Transforms/IPO/GlobalOpt.cpp @@ -2223,7 +2223,7 @@ bool GlobalOpt::ResolveAliases(Module &M) { if (I->use_empty()) continue; - if (const GlobalValue *GV = I->resolveAliasedGlobal(/*traverseWeak*/ false)) + if (const GlobalValue *GV = I->resolveAliasedGlobal()) if (GV != I) { I->replaceAllUsesWith(const_cast<GlobalValue*>(GV)); Changed = true; @@ -2252,7 +2252,6 @@ bool GlobalOpt::runOnModule(Module &M) { // Optimize non-address-taken globals. LocalChange |= OptimizeGlobalVars(M); - Changed |= LocalChange; // Resolve aliases, when possible. LocalChange |= ResolveAliases(M); diff --git a/lib/VMCore/Globals.cpp b/lib/VMCore/Globals.cpp index 7ceda6cd53..c917dfc3be 100644 --- a/lib/VMCore/Globals.cpp +++ b/lib/VMCore/Globals.cpp @@ -248,11 +248,11 @@ const GlobalValue *GlobalAlias::getAliasedGlobal() const { return 0; } -const GlobalValue *GlobalAlias::resolveAliasedGlobal(bool traverseWeak) const { +const GlobalValue *GlobalAlias::resolveAliasedGlobal(bool stopOnWeak) const { SmallPtrSet<const GlobalValue*, 3> Visited; // Check if we need to stop early. - if (!traverseWeak && hasWeakLinkage()) + if (stopOnWeak && hasWeakLinkage()) return this; const GlobalValue *GV = getAliasedGlobal(); @@ -260,7 +260,7 @@ const GlobalValue *GlobalAlias::resolveAliasedGlobal(bool traverseWeak) const { // Iterate over aliasing chain, stopping on weak alias if necessary. while (const GlobalAlias *GA = dyn_cast<GlobalAlias>(GV)) { - if (!traverseWeak && GA->hasWeakLinkage()) + if (stopOnWeak && GA->hasWeakLinkage()) break; GV = GA->getAliasedGlobal(); diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp index af11fce5e7..be053aba94 100644 --- a/lib/VMCore/Verifier.cpp +++ b/lib/VMCore/Verifier.cpp @@ -394,7 +394,7 @@ void Verifier::visitGlobalAlias(GlobalAlias &GA) { &GA); } - const GlobalValue* Aliasee = GA.resolveAliasedGlobal(); + const GlobalValue* Aliasee = GA.resolveAliasedGlobal(/*stopOnWeak*/ false); Assert1(Aliasee, "Aliasing chain should end with function or global variable", &GA); |