Make this more useful for cleaning up after the

one-definition-rule llvm-gcc changes (coming soon
to a tree near you!).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64588 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan Sands 2009-02-15 11:54:49 +00:00
parent 7987e1a2c1
commit a37d119f63

View File

@ -2405,26 +2405,16 @@ bool GlobalOpt::ResolveAliases(Module &M) {
if (J->hasInternalLinkage())
continue;
// Be conservative and do not perform the transform if multiple aliases
// potentially target the aliasee. TODO: Make this more aggressive.
// Do not perform the transform if multiple aliases potentially target the
// aliasee. This check also ensures that it is safe to replace the section
// and other attributes of the aliasee with those of the alias.
if (!hasOneUse)
continue;
// Do not perform the transform if it would change the visibility.
if (J->getVisibility() != Target->getVisibility())
continue;
// Do not perform the transform if it would change the section.
if (J->hasSection() != Target->hasSection() ||
(J->hasSection() && J->getSection() != Target->getSection()))
continue;
// Give the aliasee the name and linkage of the alias.
// Give the aliasee the name, linkage and other attributes of the alias.
Target->takeName(J);
Target->setLinkage(J->getLinkage());
// The alignment is the only remaining attribute that may not match.
Target->setAlignment(std::max(J->getAlignment(), Target->getAlignment()));
Target->GlobalValue::copyAttributesFrom(J);
// Delete the alias.
M.getAliasList().erase(J);