diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2008-09-09 19:04:59 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2008-09-09 19:04:59 +0000 |
commit | e4c6b61ebd8f2dbb6a2e51fe1d0e2bdbe17986c4 (patch) | |
tree | 5af548f33ed717c5eba0d3b48da5f1e796198ba4 /lib/Transforms | |
parent | bd297bcd4a69dd14e97afae555b593a25071fb6f (diff) | |
download | llvm-e4c6b61ebd8f2dbb6a2e51fe1d0e2bdbe17986c4.tar.gz llvm-e4c6b61ebd8f2dbb6a2e51fe1d0e2bdbe17986c4.tar.bz2 llvm-e4c6b61ebd8f2dbb6a2e51fe1d0e2bdbe17986c4.tar.xz |
Resolve aliases, when possible
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56001 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r-- | lib/Transforms/IPO/GlobalOpt.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp index f9a7c73534..8c6631aa2b 100644 --- a/lib/Transforms/IPO/GlobalOpt.cpp +++ b/lib/Transforms/IPO/GlobalOpt.cpp @@ -65,6 +65,7 @@ namespace { GlobalVariable *FindGlobalCtors(Module &M); bool OptimizeFunctions(Module &M); bool OptimizeGlobalVars(Module &M); + bool ResolveAliases(Module &M); bool OptimizeGlobalCtorsList(GlobalVariable *&GCL); bool ProcessInternalGlobal(GlobalVariable *GV,Module::global_iterator &GVI); }; @@ -2214,6 +2215,23 @@ bool GlobalOpt::OptimizeGlobalCtorsList(GlobalVariable *&GCL) { return true; } +bool GlobalOpt::ResolveAliases(Module &M) { + bool Changed = false; + + for (Module::alias_iterator I = M.alias_begin(), + E = M.alias_end(); I != E; ++I) { + if (I->use_empty()) + continue; + + if (const GlobalValue *GV = I->resolveAliasedGlobal(/*traverseWeak*/ false)) + if (GV != I) { + I->replaceAllUsesWith(const_cast<GlobalValue*>(GV)); + Changed = true; + } + } + + return Changed; +} bool GlobalOpt::runOnModule(Module &M) { bool Changed = false; @@ -2235,6 +2253,10 @@ bool GlobalOpt::runOnModule(Module &M) { // Optimize non-address-taken globals. LocalChange |= OptimizeGlobalVars(M); Changed |= LocalChange; + + // Resolve aliases, when possible. + LocalChange |= ResolveAliases(M); + Changed |= LocalChange; } // TODO: Move all global ctors functions to the end of the module for code |