Add back r201608, r201622, r201624 and r201625
[oota-llvm.git] / lib / CodeGen / TargetLoweringBase.cpp
index bdcb7216a56fb6e49fa07b2e930677c7ac4fa2a1..d3c42be5e6c951899e609db6af5ff8c931a35025 100644 (file)
@@ -24,7 +24,9 @@
 #include "llvm/IR/DataLayout.h"
 #include "llvm/IR/DerivedTypes.h"
 #include "llvm/IR/GlobalVariable.h"
+#include "llvm/IR/Mangler.h"
 #include "llvm/MC/MCAsmInfo.h"
+#include "llvm/MC/MCContext.h"
 #include "llvm/MC/MCExpr.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ErrorHandling.h"
@@ -1426,3 +1428,30 @@ bool TargetLoweringBase::isLegalAddressingMode(const AddrMode &AM,
 
   return true;
 }
+
+void TargetLoweringBase::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, getTargetMachine());
+  const TargetLoweringObjectFile &TLOF = getObjFileLowering();
+  const MCSection *TheSection =
+    TLOF.SectionForGlobal(GV, GVKind, Mang, getTargetMachine());
+  bool CannotUsePrivateLabel = TLOF.isSectionAtomizableBySymbols(*TheSection);
+  Mang.getNameWithPrefix(Name, GV, CannotUsePrivateLabel);
+}
+
+MCSymbol *TargetLoweringBase::getSymbol(const GlobalValue *GV,
+                                        Mangler &Mang) const {
+  SmallString<60> NameStr;
+  getNameWithPrefix(NameStr, GV, Mang);
+  const TargetLoweringObjectFile &TLOF = getObjFileLowering();
+  return TLOF.getContext().GetOrCreateSymbol(NameStr.str());
+}