the 'isWeakForLinker' code is common between functions and globals, hoist it

and simplify some other code.

llvm-svn: 76949
This commit is contained in:
Chris Lattner 2009-07-24 04:52:38 +00:00
parent 0f5ebf5509
commit ab0c0ef515
1 changed files with 44 additions and 55 deletions

View File

@ -77,6 +77,13 @@ const Section*
ELFTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const {
SectionKind::Kind Kind = SectionKindForGlobal(GV);
if (GV->isWeakForLinker()) {
// FIXME: Use mangler interface (PR4584).
std::string Name = getSectionPrefixForUniqueGlobal(Kind)+GV->getName();
unsigned Flags = SectionFlagsForGlobal(GV, Name.c_str());
return getNamedSection(Name.c_str(), Flags);
}
if (const Function *F = dyn_cast<Function>(GV)) {
switch (F->getLinkage()) {
default: llvm_unreachable("Unknown linkage type!");
@ -86,23 +93,11 @@ ELFTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const {
case Function::DLLExportLinkage:
case Function::ExternalLinkage:
return TextSection;
case Function::WeakAnyLinkage:
case Function::WeakODRLinkage:
case Function::LinkOnceAnyLinkage:
case Function::LinkOnceODRLinkage:
// FIXME: Use mangler interface (PR4584).
std::string Name = getSectionPrefixForUniqueGlobal(Kind)+GV->getName();
unsigned Flags = SectionFlagsForGlobal(GV, Name.c_str());
return getNamedSection(Name.c_str(), Flags);
}
} else if (const GlobalVariable *GVar = dyn_cast<GlobalVariable>(GV)) {
if (GVar->isWeakForLinker()) {
// FIXME: Use mangler interface (PR4584).
std::string Name = getSectionPrefixForUniqueGlobal(Kind)+GV->getName();
unsigned Flags = SectionFlagsForGlobal(GVar, Name.c_str());
return getNamedSection(Name.c_str(), Flags);
} else {
const GlobalVariable *GVar = cast<GlobalVariable>(GV);
switch (Kind) {
default: llvm_unreachable("Unsuported section kind for global");
case SectionKind::Data:
case SectionKind::DataRel:
return DataRelSection;
@ -128,14 +123,8 @@ ELFTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const {
return TLSDataSection;
case SectionKind::ThreadBSS:
return TLSBSSSection;
default:
llvm_unreachable("Unsuported section kind for global");
}
}
} else
llvm_unreachable("Unsupported global");
return NULL;
}
/// getSectionForMergableConstant - Given a mergable constant with the