diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-02-19 20:30:41 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-02-19 20:30:41 +0000 |
commit | a3ad4e693c6531d7cd4c1fb35629b23e5b1416bb (patch) | |
tree | bde162434a675cc4cd97c5c9d01e57ad2ec1a5e3 /llvm/lib/Target/TargetMachine.cpp | |
parent | 8a2a0dfba5c1224bc5a79d99156133de37767e30 (diff) | |
download | bcm5719-llvm-a3ad4e693c6531d7cd4c1fb35629b23e5b1416bb.tar.gz bcm5719-llvm-a3ad4e693c6531d7cd4c1fb35629b23e5b1416bb.zip |
move getNameWithPrefix and getSymbol to TargetMachine.
TargetLoweringBase is implemented in CodeGen, so before this patch we had
a dependency fom Target to CodeGen. This would show up as a link failure of
llvm-stress when building with -DBUILD_SHARED_LIBS=ON.
This fixes pr18900.
llvm-svn: 201711
Diffstat (limited to 'llvm/lib/Target/TargetMachine.cpp')
-rw-r--r-- | llvm/lib/Target/TargetMachine.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/llvm/lib/Target/TargetMachine.cpp b/llvm/lib/Target/TargetMachine.cpp index 8c99bffc00f..f8a58ec2922 100644 --- a/llvm/lib/Target/TargetMachine.cpp +++ b/llvm/lib/Target/TargetMachine.cpp @@ -17,9 +17,14 @@ #include "llvm/IR/GlobalAlias.h" #include "llvm/IR/GlobalValue.h" #include "llvm/IR/GlobalVariable.h" +#include "llvm/IR/Mangler.h" #include "llvm/MC/MCAsmInfo.h" #include "llvm/MC/MCCodeGenInfo.h" +#include "llvm/MC/MCContext.h" +#include "llvm/MC/SectionKind.h" #include "llvm/Support/CommandLine.h" +#include "llvm/Target/TargetLowering.h" +#include "llvm/Target/TargetLoweringObjectFile.h" using namespace llvm; //--------------------------------------------------------------------------- @@ -192,3 +197,28 @@ void TargetMachine::setFunctionSections(bool V) { void TargetMachine::setDataSections(bool V) { DataSections = V; } + +void TargetMachine::getNameWithPrefix(SmallVectorImpl<char> &Name, + const GlobalValue *GV, Mangler &Mang, + bool MayAlwaysUsePrivate) const { + if (MayAlwaysUsePrivate || !GV->hasPrivateLinkage()) { + // Simple case: If GV is not private, it is not important to find out if + // private labels are legal in this case or not. + Mang.getNameWithPrefix(Name, GV, false); + return; + } + SectionKind GVKind = TargetLoweringObjectFile::getKindForGlobal(GV, *this); + const TargetLoweringObjectFile &TLOF = + getTargetLowering()->getObjFileLowering(); + const MCSection *TheSection = TLOF.SectionForGlobal(GV, GVKind, Mang, *this); + bool CannotUsePrivateLabel = TLOF.isSectionAtomizableBySymbols(*TheSection); + Mang.getNameWithPrefix(Name, GV, CannotUsePrivateLabel); +} + +MCSymbol *TargetMachine::getSymbol(const GlobalValue *GV, Mangler &Mang) const { + SmallString<60> NameStr; + getNameWithPrefix(NameStr, GV, Mang); + const TargetLoweringObjectFile &TLOF = + getTargetLowering()->getObjFileLowering(); + return TLOF.getContext().GetOrCreateSymbol(NameStr.str()); +} |