<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Jan 3, 2014 at 11:21 AM, Rafael Espindola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rafael<br>
Date: Fri Jan  3 13:21:54 2014<br>
New Revision: 198438<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=198438&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=198438&view=rev</a><br>
Log:<br>
Make the llvm mangler depend only on DataLayout.<br>
<br>
Before this patch any program that wanted to know the final symbol name of a<br>
GlobalValue had to link with Target.<br>
<br>
This patch implements a compromise solution where the mangler uses DataLayout.<br>
This way, any tool that already links with Target (llc, clang) gets the exact<br>
behavior as before and new IR files can be mangled without linking with Target.<br>
<br>
With this patch the mangler is constructed with just a DataLayout and DataLayout<br>
is extended to include the information the Mangler needs.<br>
<br>
Modified:<br>
    llvm/trunk/docs/LangRef.rst<br>
    llvm/trunk/include/llvm/IR/DataLayout.h<br>
    llvm/trunk/include/llvm/MC/MCAsmInfo.h<br>
    llvm/trunk/include/llvm/Target/Mangler.h<br>
    llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h<br>
    llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp<br>
    llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp<br>
    llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp<br>
    llvm/trunk/lib/CodeGen/MachineFunction.cpp<br>
    llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp<br>
    llvm/trunk/lib/IR/DataLayout.cpp<br>
    llvm/trunk/lib/LTO/LTOCodeGenerator.cpp<br>
    llvm/trunk/lib/LTO/LTOModule.cpp<br>
    llvm/trunk/lib/MC/MCAsmInfo.cpp<br>
    llvm/trunk/lib/MC/MCAsmInfoCOFF.cpp<br>
    llvm/trunk/lib/MC/MCAsmInfoDarwin.cpp<br>
    llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp<br>
    llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp<br>
    llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp<br>
    llvm/trunk/lib/Target/Hexagon/HexagonTargetMachine.cpp<br>
    llvm/trunk/lib/Target/MSP430/MSP430MCInstLower.cpp<br>
    llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.cpp<br>
    llvm/trunk/lib/Target/Mangler.cpp<br>
    llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp<br>
    llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp<br>
    llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp<br>
    llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp<br>
    llvm/trunk/lib/Target/PowerPC/PPCMCInstLower.cpp<br>
    llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp<br>
    llvm/trunk/lib/Target/Sparc/SparcAsmPrinter.cpp<br>
    llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp<br>
    llvm/trunk/lib/Target/SystemZ/SystemZTargetMachine.cpp<br>
    llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp<br>
    llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp<br>
    llvm/trunk/lib/Target/X86/X86MCInstLower.cpp<br>
    llvm/trunk/lib/Target/X86/X86TargetMachine.cpp<br>
    llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp<br>
    llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp<br>
<br>
Modified: llvm/trunk/docs/LangRef.rst<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/LangRef.rst?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/LangRef.rst?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/docs/LangRef.rst (original)<br>
+++ llvm/trunk/docs/LangRef.rst Fri Jan  3 13:21:54 2014<br>
@@ -1160,6 +1160,15 @@ as follows:<br>
 ``a<size>:<abi>:<pref>``<br>
     This specifies the alignment for an aggregate type of a given bit<br>
     ``<size>``.<br>
+``m:<mangling>``<br>
+   If prerest, specifies that llvm names are mangled in the output. The<br>
+   options are<br>
+   * ``e``: ELF mangling: Private symbols get a ``.L`` prefix.<br>
+   * ``m``: Mips mangling: Private symbols get a ``$`` prefix.<br>
+   * ``o``: Mach-O mangling: Private symbols get ``L`` prefix. Other<br>
+    symbols get a ``_`` prefix.<br>
+   * ``c``:  COFF prefix:  Similar to Mach-O, but stdcall and fastcall<br>
+  functions also get a sufiix based on the frame size.<br></blockquote><div><br></div><div>Is this truly COFF or COFF/PE?  PE has diverged significantly from COFF, and I think it would be nice to indicate that this is PE mangling (unless Im mistaken and this is meant to be specifically COFF).  I may be mistaken here, but I believe that the stdcall/fastcall mangling is PE specific.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
 ``n<size1>:<size2>:<size3>...``<br>
     This specifies a set of native integer widths for the target CPU in<br>
     bits. For example, it might contain ``n32`` for 32-bit PowerPC,<br>
<br>
Modified: llvm/trunk/include/llvm/IR/DataLayout.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DataLayout.h?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/DataLayout.h?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/include/llvm/IR/DataLayout.h (original)<br>
+++ llvm/trunk/include/llvm/IR/DataLayout.h Fri Jan  3 13:21:54 2014<br>
@@ -34,6 +34,7 @@ class Type;<br>
 class IntegerType;<br>
 class StructType;<br>
 class StructLayout;<br>
+class Triple;<br>
 class GlobalVariable;<br>
 class LLVMContext;<br>
 template<typename T><br>
@@ -99,6 +100,15 @@ private:<br>
   bool          LittleEndian;          ///< Defaults to false<br>
   unsigned      StackNaturalAlign;     ///< Stack natural alignment<br>
<br>
+  enum ManglingModeT {<br>
+    MM_None,<br>
+    MM_ELF,<br>
+    MM_MachO,<br>
+    MM_COFF,<br>
+    MM_Mips<br>
+  };<br>
+  ManglingModeT ManglingMode;<br>
+<br>
   SmallVector<unsigned char, 8> LegalIntWidths; ///< Legal Integers.<br>
<br>
   /// Alignments - Where the primitive type alignment data is stored.<br>
@@ -174,6 +184,7 @@ public:<br>
     ImmutablePass(ID),<br>
     LittleEndian(DL.isLittleEndian()),<br>
     StackNaturalAlign(DL.StackNaturalAlign),<br>
+    ManglingMode(DL.ManglingMode),<br>
     LegalIntWidths(DL.LegalIntWidths),<br>
     Alignments(DL.Alignments),<br>
     Pointers(DL.Pointers),<br>
@@ -222,6 +233,48 @@ public:<br>
     return (StackNaturalAlign != 0) && (Align > StackNaturalAlign);<br>
   }<br>
<br>
+  bool hasMicrosoftFastStdCallMangling() const {<br>
+    return ManglingMode == MM_COFF;<br>
+  }<br>
+<br>
+  bool hasLinkerPrivateGlobalPrefix() const {<br>
+    return ManglingMode == MM_MachO;<br>
+  }<br>
+<br>
+  const char *getLinkerPrivateGlobalPrefix() const {<br>
+    if (ManglingMode == MM_MachO)<br>
+      return "l";<br>
+    return getPrivateGlobalPrefix();<br>
+  }<br>
+<br>
+  char getGlobalPrefix() const {<br>
+    switch (ManglingMode) {<br>
+    case MM_None:<br>
+    case MM_ELF:<br>
+    case MM_Mips:<br>
+      return '\0';<br>
+    case MM_MachO:<br>
+    case MM_COFF:<br>
+      return '_';<br>
+    }<br>
+  }<br>
+<br>
+  const char *getPrivateGlobalPrefix() const {<br>
+    switch (ManglingMode) {<br>
+    case MM_None:<br>
+      return "";<br>
+    case MM_ELF:<br>
+      return ".L";<br>
+    case MM_Mips:<br>
+      return "$";<br>
+    case MM_MachO:<br>
+    case MM_COFF:<br>
+      return "L";<br>
+    }<br>
+  }<br>
+<br>
+  static const char *getManglingComponent(const Triple &T);<br>
+<br>
   /// fitsInLegalInteger - This function returns true if the specified type fits<br>
   /// in a native integer type supported by the CPU.  For example, if the CPU<br>
   /// only supports i32 as a native integer type, then i27 fits in a legal<br>
<br>
Modified: llvm/trunk/include/llvm/MC/MCAsmInfo.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCAsmInfo.h?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCAsmInfo.h?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/include/llvm/MC/MCAsmInfo.h (original)<br>
+++ llvm/trunk/include/llvm/MC/MCAsmInfo.h Fri Jan  3 13:21:54 2014<br>
@@ -115,22 +115,11 @@ namespace llvm {<br>
     /// LabelSuffix - This is appended to emitted labels.<br>
     const char *DebugLabelSuffix;                 // Defaults to ":"<br>
<br>
-    /// If this is set to anything other than '\0', it is prepended<br>
-    /// onto all global symbols.  This is often used for '_'.<br>
-    char GlobalPrefix;                // Defaults to '\0'<br>
-<br>
     /// This prefix is used for globals like constant pool entries that are<br>
     /// completely private to the .s file and should not have names in the .o<br>
     /// file.<br>
     const char *PrivateGlobalPrefix;         // Defaults to "L"<br>
<br>
-    /// This prefix is used for symbols that should be passed through the<br>
-    /// assembler but be removed by the linker.  This is 'l' on Darwin,<br>
-    /// currently used for some ObjC metadata.<br>
-    /// The default of "" meast that for this system a plain private symbol<br>
-    /// should be used.<br>
-    const char *LinkerPrivateGlobalPrefix;    // Defaults to "".<br>
-<br>
     /// InlineAsmStart/End - If these are nonempty, they contain a directive to<br>
     /// emit before and after an inline assembly statement.<br>
     const char *InlineAsmStart;              // Defaults to "#APP\n"<br>
@@ -200,11 +189,6 @@ namespace llvm {<br>
     /// which doesn't support the '.bss' directive only.<br>
     bool UsesELFSectionDirectiveForBSS;      // Defaults to false.<br>
<br>
-    /// HasMicrosoftFastStdCallMangling - True if this target uses microsoft<br>
-    /// style mangling for functions with X86_StdCall/X86_FastCall calling<br>
-    /// convention.<br>
-    bool HasMicrosoftFastStdCallMangling;    // Defaults to false.<br>
-<br>
     bool NeedsDwarfSectionOffsetDirective;<br>
<br>
     //===--- Alignment Information ----------------------------------------===//<br>
@@ -393,10 +377,6 @@ namespace llvm {<br>
       return UsesELFSectionDirectiveForBSS;<br>
     }<br>
<br>
-    bool hasMicrosoftFastStdCallMangling() const {<br>
-      return HasMicrosoftFastStdCallMangling;<br>
-    }<br>
-<br>
     bool needsDwarfSectionOffsetDirective() const {<br>
       return NeedsDwarfSectionOffsetDirective;<br>
     }<br>
@@ -436,21 +416,9 @@ namespace llvm {<br>
     const char *getDebugLabelSuffix() const {<br>
       return DebugLabelSuffix;<br>
     }<br>
-<br>
-    char getGlobalPrefix() const {<br>
-      return GlobalPrefix;<br>
-    }<br>
     const char *getPrivateGlobalPrefix() const {<br>
       return PrivateGlobalPrefix;<br>
     }<br>
-    bool hasLinkerPrivateGlobalPrefix() const {<br>
-      return LinkerPrivateGlobalPrefix[0] != '\0';<br>
-    }<br>
-    const char *getLinkerPrivateGlobalPrefix() const {<br>
-      if (hasLinkerPrivateGlobalPrefix())<br>
-        return LinkerPrivateGlobalPrefix;<br>
-      return getPrivateGlobalPrefix();<br>
-    }<br>
     const char *getInlineAsmStart() const {<br>
       return InlineAsmStart;<br>
     }<br>
<br>
Modified: llvm/trunk/include/llvm/Target/Mangler.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/Mangler.h?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/Mangler.h?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/include/llvm/Target/Mangler.h (original)<br>
+++ llvm/trunk/include/llvm/Target/Mangler.h Fri Jan  3 13:21:54 2014<br>
@@ -18,10 +18,10 @@<br>
<br>
 namespace llvm {<br>
<br>
+class DataLayout;<br>
 class GlobalValue;<br>
 class MCContext;<br>
 template <typename T> class SmallVectorImpl;<br>
-class TargetMachine;<br>
 class Twine;<br>
<br>
 class Mangler {<br>
@@ -33,7 +33,7 @@ public:<br>
   };<br>
<br>
 private:<br>
-  const TargetMachine *TM;<br>
+  const DataLayout *DL;<br>
<br>
   /// AnonGlobalIDs - We need to give global values the same name every time<br>
   /// they are mangled.  This keeps track of the number we give to anonymous<br>
@@ -46,7 +46,7 @@ private:<br>
   unsigned NextAnonGlobalID;<br>
<br>
 public:<br>
-  Mangler(const TargetMachine *TM) : TM(TM), NextAnonGlobalID(1) {}<br>
+  Mangler(const DataLayout *DL) : DL(DL), NextAnonGlobalID(1) {}<br>
<br>
   /// getNameWithPrefix - Fill OutName with the name of the appropriate prefix<br>
   /// and the specified global variable's name.  If the global variable doesn't<br>
<br>
Modified: llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h (original)<br>
+++ llvm/trunk/include/llvm/Target/TargetLoweringObjectFile.h Fri Jan  3 13:21:54 2014<br>
@@ -34,6 +34,7 @@ namespace llvm {<br>
<br>
 class TargetLoweringObjectFile : public MCObjectFileInfo {<br>
   MCContext *Ctx;<br>
+  const DataLayout *DL;<br>
<br>
   TargetLoweringObjectFile(<br>
     const TargetLoweringObjectFile&) LLVM_DELETED_FUNCTION;<br>
@@ -42,7 +43,7 @@ class TargetLoweringObjectFile : public<br>
 public:<br>
   MCContext &getContext() const { return *Ctx; }<br>
<br>
-  TargetLoweringObjectFile() : MCObjectFileInfo(), Ctx(0) {}<br>
+  TargetLoweringObjectFile() : MCObjectFileInfo(), Ctx(0), DL(0) {}<br>
<br>
   virtual ~TargetLoweringObjectFile();<br>
<br>
<br>
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Fri Jan  3 13:21:54 2014<br>
@@ -165,7 +165,7 @@ bool AsmPrinter::doInitialization(Module<br>
<br>
   OutStreamer.InitStreamer();<br>
<br>
-  Mang = new Mangler(&TM);<br>
+  Mang = new Mangler(TM.getDataLayout());<br>
<br>
   // Allow the target to emit any magic that it wants at the start of the file.<br>
   EmitStartOfAsmFile(M);<br>
@@ -1106,6 +1106,7 @@ void AsmPrinter::EmitConstantPool() {<br>
 /// by the current function to the current output stream.<br>
 ///<br>
 void AsmPrinter::EmitJumpTableInfo() {<br>
+  const DataLayout *DL = MF->getTarget().getDataLayout();<br>
   const MachineJumpTableInfo *MJTI = MF->getJumpTableInfo();<br>
   if (MJTI == 0) return;<br>
   if (MJTI->getEntryKind() == MachineJumpTableInfo::EK_Inline) return;<br>
@@ -1171,7 +1172,7 @@ void AsmPrinter::EmitJumpTableInfo() {<br>
     // before each jump table.  The first label is never referenced, but tells<br>
     // the assembler and linker the extents of the jump table object.  The<br>
     // second label is actually referenced by the code.<br>
-    if (JTInDiffSection && MAI->hasLinkerPrivateGlobalPrefix())<br>
+    if (JTInDiffSection && DL->hasLinkerPrivateGlobalPrefix())<br>
       // FIXME: This doesn't have to have any specific name, just any randomly<br>
       // named and numbered 'l' label would work.  Simplify GetJTISymbol.<br>
       OutStreamer.EmitLabel(GetJTISymbol(JTI, true));<br>
@@ -1993,14 +1994,16 @@ void AsmPrinter::printOffset(int64_t Off<br>
 /// GetTempSymbol - Return the MCSymbol corresponding to the assembler<br>
 /// temporary label with the specified stem and unique ID.<br>
 MCSymbol *AsmPrinter::GetTempSymbol(StringRef Name, unsigned ID) const {<br>
-  return OutContext.GetOrCreateSymbol(Twine(MAI->getPrivateGlobalPrefix()) +<br>
+  const DataLayout *DL = TM.getDataLayout();<br>
+  return OutContext.GetOrCreateSymbol(Twine(DL->getPrivateGlobalPrefix()) +<br>
                                       Name + Twine(ID));<br>
 }<br>
<br>
 /// GetTempSymbol - Return an assembler temporary label with the specified<br>
 /// stem.<br>
 MCSymbol *AsmPrinter::GetTempSymbol(StringRef Name) const {<br>
-  return OutContext.GetOrCreateSymbol(Twine(MAI->getPrivateGlobalPrefix())+<br>
+  const DataLayout *DL = TM.getDataLayout();<br>
+  return OutContext.GetOrCreateSymbol(Twine(DL->getPrivateGlobalPrefix())+<br>
                                       Name);<br>
 }<br>
<br>
@@ -2015,8 +2018,9 @@ MCSymbol *AsmPrinter::GetBlockAddressSym<br>
<br>
 /// GetCPISymbol - Return the symbol for the specified constant pool entry.<br>
 MCSymbol *AsmPrinter::GetCPISymbol(unsigned CPID) const {<br>
+  const DataLayout *DL = TM.getDataLayout();<br>
   return OutContext.GetOrCreateSymbol<br>
-    (Twine(MAI->getPrivateGlobalPrefix()) + "CPI" + Twine(getFunctionNumber())<br>
+    (Twine(DL->getPrivateGlobalPrefix()) + "CPI" + Twine(getFunctionNumber())<br>
      + "_" + Twine(CPID));<br>
 }<br>
<br>
@@ -2028,8 +2032,9 @@ MCSymbol *AsmPrinter::GetJTISymbol(unsig<br>
 /// GetJTSetSymbol - Return the symbol for the specified jump table .set<br>
 /// FIXME: privatize to AsmPrinter.<br>
 MCSymbol *AsmPrinter::GetJTSetSymbol(unsigned UID, unsigned MBBID) const {<br>
+  const DataLayout *DL = TM.getDataLayout();<br>
   return OutContext.GetOrCreateSymbol<br>
-  (Twine(MAI->getPrivateGlobalPrefix()) + Twine(getFunctionNumber()) + "_" +<br>
+  (Twine(DL->getPrivateGlobalPrefix()) + Twine(getFunctionNumber()) + "_" +<br>
    Twine(UID) + "_set_" + Twine(MBBID));<br>
 }<br>
<br>
<br>
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp Fri Jan  3 13:21:54 2014<br>
@@ -19,6 +19,7 @@<br>
 #include "llvm/CodeGen/MachineBasicBlock.h"<br>
 #include "llvm/CodeGen/MachineModuleInfo.h"<br>
 #include "llvm/IR/Constants.h"<br>
+#include "llvm/IR/DataLayout.h"<br>
 #include "llvm/IR/InlineAsm.h"<br>
 #include "llvm/IR/LLVMContext.h"<br>
 #include "llvm/IR/Module.h"<br>
@@ -491,8 +492,9 @@ void AsmPrinter::EmitInlineAsm(const Mac<br>
 /// for their own strange codes.<br>
 void AsmPrinter::PrintSpecial(const MachineInstr *MI, raw_ostream &OS,<br>
                               const char *Code) const {<br>
+  const DataLayout *DL = TM.getDataLayout();<br>
   if (!strcmp(Code, "private")) {<br>
-    OS << MAI->getPrivateGlobalPrefix();<br>
+    OS << DL->getPrivateGlobalPrefix();<br>
   } else if (!strcmp(Code, "comment")) {<br>
     OS << MAI->getCommentString();<br>
   } else if (!strcmp(Code, "uid")) {<br>
<br>
Modified: llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp Fri Jan  3 13:21:54 2014<br>
@@ -52,7 +52,8 @@ MCSymbol *MachineBasicBlock::getSymbol()<br>
   if (!CachedMCSymbol) {<br>
     const MachineFunction *MF = getParent();<br>
     MCContext &Ctx = MF->getContext();<br>
-    const char *Prefix = Ctx.getAsmInfo()->getPrivateGlobalPrefix();<br>
+    const TargetMachine &TM = MF->getTarget();<br>
+    const char *Prefix = TM.getDataLayout()->getPrivateGlobalPrefix();<br>
     CachedMCSymbol = Ctx.GetOrCreateSymbol(Twine(Prefix) + "BB" +<br>
                                            Twine(MF->getFunctionNumber()) +<br>
                                            "_" + Twine(getNumber()));<br>
<br>
Modified: llvm/trunk/lib/CodeGen/MachineFunction.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineFunction.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineFunction.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/CodeGen/MachineFunction.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/MachineFunction.cpp Fri Jan  3 13:21:54 2014<br>
@@ -447,12 +447,12 @@ unsigned MachineFunction::addLiveIn(unsi<br>
 /// normal 'L' label is returned.<br>
 MCSymbol *MachineFunction::getJTISymbol(unsigned JTI, MCContext &Ctx,<br>
                                         bool isLinkerPrivate) const {<br>
+  const DataLayout *DL = getTarget().getDataLayout();<br>
   assert(JumpTableInfo && "No jump tables");<br>
   assert(JTI < JumpTableInfo->getJumpTables().size() && "Invalid JTI!");<br>
-  const MCAsmInfo &MAI = *getTarget().getMCAsmInfo();<br>
<br>
-  const char *Prefix = isLinkerPrivate ? MAI.getLinkerPrivateGlobalPrefix() :<br>
-                                         MAI.getPrivateGlobalPrefix();<br>
+  const char *Prefix = isLinkerPrivate ? DL->getLinkerPrivateGlobalPrefix() :<br>
+                                         DL->getPrivateGlobalPrefix();<br>
   SmallString<60> Name;<br>
   raw_svector_ostream(Name)<br>
     << Prefix << "JTI" << getFunctionNumber() << '_' << JTI;<br>
@@ -462,8 +462,8 @@ MCSymbol *MachineFunction::getJTISymbol(<br>
 /// getPICBaseSymbol - Return a function-local symbol to represent the PIC<br>
 /// base.<br>
 MCSymbol *MachineFunction::getPICBaseSymbol() const {<br>
-  const MCAsmInfo &MAI = *Target.getMCAsmInfo();<br>
-  return Ctx.GetOrCreateSymbol(Twine(MAI.getPrivateGlobalPrefix())+<br>
+  const DataLayout *DL = getTarget().getDataLayout();<br>
+  return Ctx.GetOrCreateSymbol(Twine(DL->getPrivateGlobalPrefix())+<br>
                                Twine(getFunctionNumber())+"$pb");<br>
 }<br>
<br>
<br>
Modified: llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp (original)<br>
+++ llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp Fri Jan  3 13:21:54 2014<br>
@@ -232,7 +232,7 @@ void *MCJIT::getPointerToBasicBlock(Basi<br>
 }<br>
<br>
 uint64_t MCJIT::getExistingSymbolAddress(const std::string &Name) {<br>
-  Mangler Mang(TM);<br>
+  Mangler Mang(TM->getDataLayout());<br>
   SmallString<128> FullName;<br>
   Mang.getNameWithPrefix(FullName, Name);<br>
   return Dyld.getSymbolLoadAddress(FullName);<br>
@@ -323,7 +323,7 @@ void *MCJIT::getPointerToFunction(Functi<br>
   //<br>
   // This is the accessor for the target address, so make sure to check the<br>
   // load address of the symbol, not the local address.<br>
-  Mangler Mang(TM);<br>
+  Mangler Mang(TM->getDataLayout());<br>
   SmallString<128> Name;<br>
   Mang.getNameWithPrefix(Name, F);<br>
   return (void*)Dyld.getSymbolLoadAddress(Name);<br>
<br>
Modified: llvm/trunk/lib/IR/DataLayout.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DataLayout.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DataLayout.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/IR/DataLayout.cpp (original)<br>
+++ llvm/trunk/lib/IR/DataLayout.cpp Fri Jan  3 13:21:54 2014<br>
@@ -19,6 +19,7 @@<br>
 #include "llvm/IR/DataLayout.h"<br>
 #include "llvm/ADT/DenseMap.h"<br>
 #include "llvm/ADT/STLExtras.h"<br>
+#include "llvm/ADT/Triple.h"<br>
 #include "llvm/IR/Constants.h"<br>
 #include "llvm/IR/DerivedTypes.h"<br>
 #include "llvm/IR/Module.h"<br>
@@ -152,6 +153,15 @@ DataLayout::InvalidPointerElem = { 0U, 0<br>
 //                       DataLayout Class Implementation<br>
 //===----------------------------------------------------------------------===//<br>
<br>
+const char *DataLayout::getManglingComponent(const Triple &T) {<br>
+  if (T.isOSBinFormatMachO())<br>
+    return "-m:o";<br>
+  if (T.isOSBinFormatELF() || T.isArch64Bit())<br>
+    return "-m:e";<br>
+  assert(T.isOSBinFormatCOFF());<br>
+  return "-m:c";<br>
+}<br>
+<br>
 static const LayoutAlignElem DefaultAlignments[] = {<br>
   { INTEGER_ALIGN, 1, 1, 1 },    // i1<br>
   { INTEGER_ALIGN, 8, 1, 1 },    // i8<br>
@@ -173,6 +183,7 @@ void DataLayout::init(StringRef Desc) {<br>
   LayoutMap = 0;<br>
   LittleEndian = false;<br>
   StackNaturalAlign = 0;<br>
+  ManglingMode = MM_None;<br>
<br>
   // Default alignments<br>
   for (int I = 0, N = array_lengthof(DefaultAlignments); I < N; ++I) {<br>
@@ -305,6 +316,26 @@ void DataLayout::parseSpecifier(StringRe<br>
       StackNaturalAlign = inBytes(getInt(Tok));<br>
       break;<br>
     }<br>
+    case 'm':<br>
+      assert(Tok.empty());<br>
+      assert(Rest.size() == 1);<br>
+      switch(Rest[0]) {<br>
+      default:<br>
+        llvm_unreachable("Unknown mangling in datalayout string");<br>
+      case 'e':<br>
+        ManglingMode = MM_ELF;<br>
+        break;<br>
+      case 'o':<br>
+        ManglingMode = MM_MachO;<br>
+        break;<br>
+      case 'm':<br>
+        ManglingMode = MM_Mips;<br>
+        break;<br>
+      case 'c':<br>
+        ManglingMode = MM_COFF;<br>
+        break;<br>
+      }<br>
+      break;<br>
     default:<br>
       llvm_unreachable("Unknown specifier in datalayout string");<br>
       break;<br>
@@ -481,6 +512,24 @@ std::string DataLayout::getStringReprese<br>
   raw_string_ostream OS(Result);<br>
<br>
   OS << (LittleEndian ? "e" : "E");<br>
+<br>
+  switch (ManglingMode) {<br>
+  case MM_None:<br>
+    break;<br>
+  case MM_ELF:<br>
+    OS << "-m:e";<br>
+    break;<br>
+  case MM_MachO:<br>
+    OS << "-m:o";<br>
+    break;<br>
+  case MM_COFF:<br>
+    OS << "-m:c";<br>
+    break;<br>
+  case MM_Mips:<br>
+    OS << "-m:m";<br>
+    break;<br>
+  }<br>
+<br>
   SmallVector<unsigned, 8> addrSpaces;<br>
   // Lets get all of the known address spaces and sort them<br>
   // into increasing order so that we can emit the string<br>
<br>
Modified: llvm/trunk/lib/LTO/LTOCodeGenerator.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOCodeGenerator.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOCodeGenerator.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/LTO/LTOCodeGenerator.cpp (original)<br>
+++ llvm/trunk/lib/LTO/LTOCodeGenerator.cpp Fri Jan  3 13:21:54 2014<br>
@@ -387,7 +387,7 @@ void LTOCodeGenerator::applyScopeRestric<br>
   passes.add(createVerifierPass());<br>
<br>
   // mark which symbols can not be internalized<br>
-  Mangler Mangler(TargetMach);<br>
+  Mangler Mangler(TargetMach->getDataLayout());<br>
   std::vector<const char*> MustPreserveList;<br>
   SmallPtrSet<GlobalValue*, 8> AsmUsed;<br>
   std::vector<StringRef> Libcalls;<br>
<br>
Modified: llvm/trunk/lib/LTO/LTOModule.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOModule.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOModule.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/LTO/LTOModule.cpp (original)<br>
+++ llvm/trunk/lib/LTO/LTOModule.cpp Fri Jan  3 13:21:54 2014<br>
@@ -44,7 +44,7 @@ using namespace llvm;<br>
 LTOModule::LTOModule(llvm::Module *m, llvm::TargetMachine *t)<br>
   : _module(m), _target(t),<br>
     _context(_target->getMCAsmInfo(), _target->getRegisterInfo(), &ObjFileInfo),<br>
-    _mangler(t) {<br>
+    _mangler(t->getDataLayout()) {<br>
   ObjFileInfo.InitMCObjectFileInfo(t->getTargetTriple(),<br>
                                    t->getRelocationModel(), t->getCodeModel(),<br>
                                    _context);<br>
<br>
Modified: llvm/trunk/lib/MC/MCAsmInfo.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmInfo.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmInfo.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/MC/MCAsmInfo.cpp (original)<br>
+++ llvm/trunk/lib/MC/MCAsmInfo.cpp Fri Jan  3 13:21:54 2014<br>
@@ -41,9 +41,7 @@ MCAsmInfo::MCAsmInfo() {<br>
   CommentString = "#";<br>
   LabelSuffix = ":";<br>
   DebugLabelSuffix = ":";<br>
-  GlobalPrefix = '\0';<br>
   PrivateGlobalPrefix = "L";<br>
-  LinkerPrivateGlobalPrefix = "";<br>
   InlineAsmStart = "APP";<br>
   InlineAsmEnd = "NO_APP";<br>
   Code16Directive = ".code16";<br>
@@ -87,7 +85,6 @@ MCAsmInfo::MCAsmInfo() {<br>
   ExceptionsType = ExceptionHandling::None;<br>
   DwarfUsesRelocationsAcrossSections = true;<br>
   DwarfRegNumForCFI = false;<br>
-  HasMicrosoftFastStdCallMangling = false;<br>
   NeedsDwarfSectionOffsetDirective = false;<br>
   UseParensForSymbolVariant = false;<br>
 }<br>
<br>
Modified: llvm/trunk/lib/MC/MCAsmInfoCOFF.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmInfoCOFF.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmInfoCOFF.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/MC/MCAsmInfoCOFF.cpp (original)<br>
+++ llvm/trunk/lib/MC/MCAsmInfoCOFF.cpp Fri Jan  3 13:21:54 2014<br>
@@ -18,7 +18,6 @@ using namespace llvm;<br>
 void MCAsmInfoCOFF::anchor() { }<br>
<br>
 MCAsmInfoCOFF::MCAsmInfoCOFF() {<br>
-  GlobalPrefix = '_';<br>
   // MingW 4.5 and later support .comm with log2 alignment, but .lcomm uses byte<br>
   // alignment.<br>
   COMMDirectiveAlignmentIsInBytes = false;<br>
@@ -35,7 +34,6 @@ MCAsmInfoCOFF::MCAsmInfoCOFF() {<br>
   // Set up DWARF directives<br>
   HasLEB128 = true;  // Target asm supports leb128 directives (little-endian)<br>
   SupportsDebugInformation = true;<br>
-  HasMicrosoftFastStdCallMangling = true;<br>
   NeedsDwarfSectionOffsetDirective = true;<br>
 }<br>
<br>
<br>
Modified: llvm/trunk/lib/MC/MCAsmInfoDarwin.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmInfoDarwin.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmInfoDarwin.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/MC/MCAsmInfoDarwin.cpp (original)<br>
+++ llvm/trunk/lib/MC/MCAsmInfoDarwin.cpp Fri Jan  3 13:21:54 2014<br>
@@ -23,8 +23,6 @@ void MCAsmInfoDarwin::anchor() { }<br>
 MCAsmInfoDarwin::MCAsmInfoDarwin() {<br>
   // Common settings for all Darwin targets.<br>
   // Syntax:<br>
-  GlobalPrefix = '_';<br>
-  LinkerPrivateGlobalPrefix = "l";<br>
   HasSingleParameterDotFile = false;<br>
   HasSubsectionsViaSymbols = true;<br>
<br>
<br>
Modified: llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp (original)<br>
+++ llvm/trunk/lib/Target/AArch64/AArch64TargetMachine.cpp Fri Jan  3 13:21:54 2014<br>
@@ -34,7 +34,7 @@ AArch64TargetMachine::AArch64TargetMachi<br>
   : LLVMTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL),<br>
     Subtarget(TT, CPU, FS),<br>
     InstrInfo(Subtarget),<br>
-    DL("e-i64:64-i128:128-n32:64-S128"),<br>
+    DL("e-m:e-i64:64-i128:128-n32:64-S128"),<br>
     TLInfo(*this),<br>
     TSInfo(*this),<br>
     FrameLowering(Subtarget) {<br>
<br>
Modified: llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp (original)<br>
+++ llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp Fri Jan  3 13:21:54 2014<br>
@@ -223,16 +223,18 @@ void ARMAsmPrinter::printOperand(const M<br>
<br>
 MCSymbol *ARMAsmPrinter::<br>
 GetARMJTIPICJumpTableLabel2(unsigned uid, unsigned uid2) const {<br>
+  const DataLayout *DL = TM.getDataLayout();<br>
   SmallString<60> Name;<br>
-  raw_svector_ostream(Name) << MAI->getPrivateGlobalPrefix() << "JTI"<br>
+  raw_svector_ostream(Name) << DL->getPrivateGlobalPrefix() << "JTI"<br>
     << getFunctionNumber() << '_' << uid << '_' << uid2;<br>
   return OutContext.GetOrCreateSymbol(Name.str());<br>
 }<br>
<br>
<br>
 MCSymbol *ARMAsmPrinter::GetARMSJLJEHLabel() const {<br>
+  const DataLayout *DL = TM.getDataLayout();<br>
   SmallString<60> Name;<br>
-  raw_svector_ostream(Name) << MAI->getPrivateGlobalPrefix() << "SJLJEH"<br>
+  raw_svector_ostream(Name) << DL->getPrivateGlobalPrefix() << "SJLJEH"<br>
     << getFunctionNumber();<br>
   return OutContext.GetOrCreateSymbol(Name.str());<br>
 }<br>
@@ -802,6 +804,7 @@ MCSymbol *ARMAsmPrinter::GetARMGVSymbol(<br>
<br>
 void ARMAsmPrinter::<br>
 EmitMachineConstantPoolValue(MachineConstantPoolValue *MCPV) {<br>
+  const DataLayout *DL = TM.getDataLayout();<br>
   int Size = TM.getDataLayout()->getTypeAllocSize(MCPV->getType());<br>
<br>
   ARMConstantPoolValue *ACPV = static_cast<ARMConstantPoolValue*>(MCPV);<br>
@@ -810,7 +813,7 @@ EmitMachineConstantPoolValue(MachineCons<br>
   if (ACPV->isLSDA()) {<br>
     SmallString<128> Str;<br>
     raw_svector_ostream OS(Str);<br>
-    OS << MAI->getPrivateGlobalPrefix() << "_LSDA_" << getFunctionNumber();<br>
+    OS << DL->getPrivateGlobalPrefix() << "_LSDA_" << getFunctionNumber();<br>
     MCSym = OutContext.GetOrCreateSymbol(OS.str());<br>
   } else if (ACPV->isBlockAddress()) {<br>
     const BlockAddress *BA =<br>
@@ -838,7 +841,7 @@ EmitMachineConstantPoolValue(MachineCons<br>
                             OutContext);<br>
<br>
   if (ACPV->getPCAdjustment()) {<br>
-    MCSymbol *PCLabel = getPICLabel(MAI->getPrivateGlobalPrefix(),<br>
+    MCSymbol *PCLabel = getPICLabel(DL->getPrivateGlobalPrefix(),<br>
                                     getFunctionNumber(),<br>
                                     ACPV->getLabelId(),<br>
                                     OutContext);<br>
@@ -1117,6 +1120,8 @@ extern cl::opt<bool> EnableARMEHABI;<br>
 #include "ARMGenMCPseudoLowering.inc"<br>
<br>
 void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) {<br>
+  const DataLayout *DL = TM.getDataLayout();<br>
+<br>
   // If we just ended a constant pool, mark it as such.<br>
   if (InConstantPool && MI->getOpcode() != ARM::CONSTPOOL_ENTRY) {<br>
     OutStreamer.EmitDataRegion(MCDR_DataRegionEnd);<br>
@@ -1254,7 +1259,7 @@ void ARMAsmPrinter::EmitInstruction(cons<br>
     MCSymbol *GVSym = GetARMGVSymbol(GV, TF);<br>
     const MCExpr *GVSymExpr = MCSymbolRefExpr::Create(GVSym, OutContext);<br>
<br>
-    MCSymbol *LabelSym = getPICLabel(MAI->getPrivateGlobalPrefix(),<br>
+    MCSymbol *LabelSym = getPICLabel(DL->getPrivateGlobalPrefix(),<br>
                                      getFunctionNumber(),<br>
                                      MI->getOperand(2).getImm(), OutContext);<br>
     const MCExpr *LabelSymExpr= MCSymbolRefExpr::Create(LabelSym, OutContext);<br>
@@ -1287,7 +1292,7 @@ void ARMAsmPrinter::EmitInstruction(cons<br>
     MCSymbol *GVSym = GetARMGVSymbol(GV, TF);<br>
     const MCExpr *GVSymExpr = MCSymbolRefExpr::Create(GVSym, OutContext);<br>
<br>
-    MCSymbol *LabelSym = getPICLabel(MAI->getPrivateGlobalPrefix(),<br>
+    MCSymbol *LabelSym = getPICLabel(DL->getPrivateGlobalPrefix(),<br>
                                      getFunctionNumber(),<br>
                                      MI->getOperand(3).getImm(), OutContext);<br>
     const MCExpr *LabelSymExpr= MCSymbolRefExpr::Create(LabelSym, OutContext);<br>
@@ -1313,7 +1318,7 @@ void ARMAsmPrinter::EmitInstruction(cons<br>
     // This adds the address of LPC0 to r0.<br>
<br>
     // Emit the label.<br>
-    OutStreamer.EmitLabel(getPICLabel(MAI->getPrivateGlobalPrefix(),<br>
+    OutStreamer.EmitLabel(getPICLabel(DL->getPrivateGlobalPrefix(),<br>
                           getFunctionNumber(), MI->getOperand(2).getImm(),<br>
                           OutContext));<br>
<br>
@@ -1334,7 +1339,7 @@ void ARMAsmPrinter::EmitInstruction(cons<br>
     // This adds the address of LPC0 to r0.<br>
<br>
     // Emit the label.<br>
-    OutStreamer.EmitLabel(getPICLabel(MAI->getPrivateGlobalPrefix(),<br>
+    OutStreamer.EmitLabel(getPICLabel(DL->getPrivateGlobalPrefix(),<br>
                           getFunctionNumber(), MI->getOperand(2).getImm(),<br>
                           OutContext));<br>
<br>
@@ -1365,7 +1370,7 @@ void ARMAsmPrinter::EmitInstruction(cons<br>
     // a PC-relative address at the ldr instruction.<br>
<br>
     // Emit the label.<br>
-    OutStreamer.EmitLabel(getPICLabel(MAI->getPrivateGlobalPrefix(),<br>
+    OutStreamer.EmitLabel(getPICLabel(DL->getPrivateGlobalPrefix(),<br>
                           getFunctionNumber(), MI->getOperand(2).getImm(),<br>
                           OutContext));<br>
<br>
<br>
Modified: llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp (original)<br>
+++ llvm/trunk/lib/Target/ARM/ARMTargetMachine.cpp Fri Jan  3 13:21:54 2014<br>
@@ -70,8 +70,13 @@ void ARMBaseTargetMachine::addAnalysisPa<br>
 void ARMTargetMachine::anchor() { }<br>
<br>
 static std::string computeDataLayout(ARMSubtarget &ST) {<br>
-  // Little endian. Pointers are 32 bits and aligned to 32 bits.<br>
-  std::string Ret = "e-p:32:32";<br>
+  // Little endian.<br>
+  std::string Ret = "e";<br>
+<br>
+  Ret += DataLayout::getManglingComponent(ST.getTargetTriple());<br>
+<br>
+  // Pointers are 32 bits and aligned to 32 bits.<br>
+  Ret += "-p:32:32";<br>
<br>
   // On thumb, i16,i18 and i1 have natural aligment requirements, but we try to<br>
   // align to 32.<br>
<br>
Modified: llvm/trunk/lib/Target/Hexagon/HexagonTargetMachine.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonTargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonTargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/Hexagon/HexagonTargetMachine.cpp (original)<br>
+++ llvm/trunk/lib/Target/Hexagon/HexagonTargetMachine.cpp Fri Jan  3 13:21:54 2014<br>
@@ -71,7 +71,7 @@ HexagonTargetMachine::HexagonTargetMachi<br>
                                            CodeModel::Model CM,<br>
                                            CodeGenOpt::Level OL)<br>
   : LLVMTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL),<br>
-    DL("e-p:32:32-i1:32-i64:64-a:0-n32") ,<br>
+    DL("e-m:e-p:32:32-i1:32-i64:64-a:0-n32") ,<br>
     Subtarget(TT, CPU, FS), InstrInfo(Subtarget), TLInfo(*this),<br>
     TSInfo(*this),<br>
     FrameLowering(Subtarget),<br>
<br>
Modified: llvm/trunk/lib/Target/MSP430/MSP430MCInstLower.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MSP430MCInstLower.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MSP430MCInstLower.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/MSP430/MSP430MCInstLower.cpp (original)<br>
+++ llvm/trunk/lib/Target/MSP430/MSP430MCInstLower.cpp Fri Jan  3 13:21:54 2014<br>
@@ -17,6 +17,7 @@<br>
 #include "llvm/CodeGen/AsmPrinter.h"<br>
 #include "llvm/CodeGen/MachineBasicBlock.h"<br>
 #include "llvm/CodeGen/MachineInstr.h"<br>
+#include "llvm/IR/DataLayout.h"<br>
 #include "llvm/MC/MCAsmInfo.h"<br>
 #include "llvm/MC/MCContext.h"<br>
 #include "llvm/MC/MCExpr.h"<br>
@@ -24,6 +25,7 @@<br>
 #include "llvm/Support/ErrorHandling.h"<br>
 #include "llvm/Support/raw_ostream.h"<br>
 #include "llvm/Target/Mangler.h"<br>
+#include "llvm/Target/TargetMachine.h"<br>
 using namespace llvm;<br>
<br>
 MCSymbol *MSP430MCInstLower::<br>
@@ -48,8 +50,9 @@ GetExternalSymbolSymbol(const MachineOpe<br>
<br>
 MCSymbol *MSP430MCInstLower::<br>
 GetJumpTableSymbol(const MachineOperand &MO) const {<br>
+  const DataLayout *DL = Printer.TM.getDataLayout();<br>
   SmallString<256> Name;<br>
-  raw_svector_ostream(Name) << Printer.MAI->getPrivateGlobalPrefix() << "JTI"<br>
+  raw_svector_ostream(Name) << DL->getPrivateGlobalPrefix() << "JTI"<br>
                             << Printer.getFunctionNumber() << '_'<br>
                             << MO.getIndex();<br>
<br>
@@ -64,8 +67,9 @@ GetJumpTableSymbol(const MachineOperand<br>
<br>
 MCSymbol *MSP430MCInstLower::<br>
 GetConstantPoolIndexSymbol(const MachineOperand &MO) const {<br>
+  const DataLayout *DL = Printer.TM.getDataLayout();<br>
   SmallString<256> Name;<br>
-  raw_svector_ostream(Name) << Printer.MAI->getPrivateGlobalPrefix() << "CPI"<br>
+  raw_svector_ostream(Name) << DL->getPrivateGlobalPrefix() << "CPI"<br>
                             << Printer.getFunctionNumber() << '_'<br>
                             << MO.getIndex();<br>
<br>
<br>
Modified: llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.cpp (original)<br>
+++ llvm/trunk/lib/Target/MSP430/MSP430TargetMachine.cpp Fri Jan  3 13:21:54 2014<br>
@@ -34,7 +34,7 @@ MSP430TargetMachine::MSP430TargetMachine<br>
   : LLVMTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL),<br>
     Subtarget(TT, CPU, FS),<br>
     // FIXME: Check DataLayout string.<br>
-    DL("e-p:16:16-i32:16:32-n8:16"),<br>
+    DL("e-m:e-p:16:16-i32:16:32-n8:16"),<br>
     InstrInfo(*this), TLInfo(*this), TSInfo(*this),<br>
     FrameLowering(Subtarget) {<br>
   initAsmInfo();<br>
<br>
Modified: llvm/trunk/lib/Target/Mangler.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mangler.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mangler.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/Mangler.cpp (original)<br>
+++ llvm/trunk/lib/Target/Mangler.cpp Fri Jan  3 13:21:54 2014<br>
@@ -17,9 +17,7 @@<br>
 #include "llvm/IR/DataLayout.h"<br>
 #include "llvm/IR/DerivedTypes.h"<br>
 #include "llvm/IR/Function.h"<br>
-#include "llvm/MC/MCAsmInfo.h"<br>
 #include "llvm/MC/MCContext.h"<br>
-#include "llvm/Target/TargetMachine.h"<br>
 #include "llvm/Support/raw_ostream.h"<br>
 using namespace llvm;<br>
<br>
@@ -31,23 +29,20 @@ void Mangler::getNameWithPrefix(SmallVec<br>
   SmallString<256> TmpData;<br>
   StringRef Name = GVName.toStringRef(TmpData);<br>
   assert(!Name.empty() && "getNameWithPrefix requires non-empty name");<br>
-<br>
-  const MCAsmInfo *MAI = TM->getMCAsmInfo();<br>
-<br>
+<br>
   // If the global name is not led with \1, add the appropriate prefixes.<br>
   if (Name[0] == '\1') {<br>
     Name = Name.substr(1);<br>
   } else {<br>
     if (PrefixTy == Mangler::Private) {<br>
-      const char *Prefix = MAI->getPrivateGlobalPrefix();<br>
+      const char *Prefix = DL->getPrivateGlobalPrefix();<br>
       OutName.append(Prefix, Prefix+strlen(Prefix));<br>
     } else if (PrefixTy == Mangler::LinkerPrivate) {<br>
-      const char *Prefix = MAI->getLinkerPrivateGlobalPrefix();<br>
+      const char *Prefix = DL->getLinkerPrivateGlobalPrefix();<br>
       OutName.append(Prefix, Prefix+strlen(Prefix));<br>
     }<br>
<br>
-<br>
-    char Prefix = MAI->getGlobalPrefix();<br>
+    char Prefix = DL->getGlobalPrefix();<br>
     if (Prefix != '\0')<br>
       OutName.push_back(Prefix);<br>
   }<br>
@@ -105,10 +100,10 @@ void Mangler::getNameWithPrefix(SmallVec<br>
     // Must mangle the global into a unique ID.<br>
     getNameWithPrefix(OutName, "__unnamed_" + Twine(ID), PrefixTy);<br>
   }<br>
-<br>
+<br>
   // If we are supposed to add a microsoft-style suffix for stdcall/fastcall,<br>
   // add it.<br>
-  if (TM->getMCAsmInfo()->hasMicrosoftFastStdCallMangling()) {<br>
+  if (DL->hasMicrosoftFastStdCallMangling()) {<br>
     if (const Function *F = dyn_cast<Function>(GV)) {<br>
       CallingConv::ID CC = F->getCallingConv();<br>
<br>
@@ -128,7 +123,7 @@ void Mangler::getNameWithPrefix(SmallVec<br>
           // "Pure" variadic functions do not receive @0 suffix.<br>
           (!FT->isVarArg() || FT->getNumParams() == 0 ||<br>
            (FT->getNumParams() == 1 && F->hasStructRetAttr())))<br>
-        AddFastCallStdCallSuffix(OutName, F, *TM->getDataLayout());<br>
+        AddFastCallStdCallSuffix(OutName, F, *DL);<br>
     }<br>
   }<br>
 }<br>
<br>
Modified: llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp (original)<br>
+++ llvm/trunk/lib/Target/Mips/MipsAsmPrinter.cpp Fri Jan  3 13:21:54 2014<br>
@@ -495,6 +495,7 @@ bool MipsAsmPrinter::PrintAsmMemoryOpera<br>
<br>
 void MipsAsmPrinter::printOperand(const MachineInstr *MI, int opNum,<br>
                                   raw_ostream &O) {<br>
+  const DataLayout *DL = TM.getDataLayout();<br>
   const MachineOperand &MO = MI->getOperand(opNum);<br>
   bool closeP = false;<br>
<br>
@@ -543,7 +544,7 @@ void MipsAsmPrinter::printOperand(const<br>
     }<br>
<br>
     case MachineOperand::MO_ConstantPoolIndex:<br>
-      O << MAI->getPrivateGlobalPrefix() << "CPI"<br>
+      O << DL->getPrivateGlobalPrefix() << "CPI"<br>
         << getFunctionNumber() << "_" << MO.getIndex();<br>
       if (MO.getOffset())<br>
         O << "+" << MO.getOffset();<br>
<br>
Modified: llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp (original)<br>
+++ llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp Fri Jan  3 13:21:54 2014<br>
@@ -54,6 +54,8 @@ static std::string computeDataLayout(con<br>
   else<br>
     Ret += "E";<br>
<br>
+  Ret += "-m:m";<br>
+<br>
   // Pointers are 32 bit on some ABIs.<br>
   if (!ST.isABI_N64())<br>
     Ret += "-p:32:32";<br>
<br>
Modified: llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp (original)<br>
+++ llvm/trunk/lib/Target/NVPTX/NVPTXAsmPrinter.cpp Fri Jan  3 13:21:54 2014<br>
@@ -895,7 +895,7 @@ bool NVPTXAsmPrinter::doInitialization(M<br>
   const_cast<TargetLoweringObjectFile &>(getObjFileLowering())<br>
       .Initialize(OutContext, TM);<br>
<br>
-  Mang = new Mangler(&TM);<br>
+  Mang = new Mangler(TM.getDataLayout());<br>
<br>
   // Emit header before any dwarf directives are emitted below.<br>
   emitHeader(M, OS1);<br>
<br>
Modified: llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp (original)<br>
+++ llvm/trunk/lib/Target/PowerPC/PPCAsmPrinter.cpp Fri Jan  3 13:21:54 2014<br>
@@ -139,6 +139,7 @@ static const char *stripRegisterPrefix(c<br>
<br>
 void PPCAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo,<br>
                                  raw_ostream &O) {<br>
+  const DataLayout *DL = TM.getDataLayout();<br>
   const MachineOperand &MO = MI->getOperand(OpNo);<br>
<br>
   switch (MO.getType()) {<br>
@@ -158,7 +159,7 @@ void PPCAsmPrinter::printOperand(const M<br>
     O << *MO.getMBB()->getSymbol();<br>
     return;<br>
   case MachineOperand::MO_ConstantPoolIndex:<br>
-    O << MAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber()<br>
+    O << DL->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber()<br>
       << '_' << MO.getIndex();<br>
     return;<br>
   case MachineOperand::MO_BlockAddress:<br>
@@ -281,12 +282,12 @@ bool PPCAsmPrinter::PrintAsmMemoryOperan<br>
 /// exists for it.  If not, create one.  Then return a symbol that references<br>
 /// the TOC entry.<br>
 MCSymbol *PPCAsmPrinter::lookUpOrCreateTOCEntry(MCSymbol *Sym) {<br>
-<br>
+  const DataLayout *DL = TM.getDataLayout();<br>
   MCSymbol *&TOCEntry = TOC[Sym];<br>
<br>
   // To avoid name clash check if the name already exists.<br>
   while (TOCEntry == 0) {<br>
-    if (OutContext.LookupSymbol(Twine(MAI->getPrivateGlobalPrefix()) +<br>
+    if (OutContext.LookupSymbol(Twine(DL->getPrivateGlobalPrefix()) +<br>
                                 "C" + Twine(TOCLabelID++)) == 0) {<br>
       TOCEntry = GetTempSymbol("C", TOCLabelID);<br>
     }<br>
<br>
Modified: llvm/trunk/lib/Target/PowerPC/PPCMCInstLower.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCMCInstLower.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCMCInstLower.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/PowerPC/PPCMCInstLower.cpp (original)<br>
+++ llvm/trunk/lib/Target/PowerPC/PPCMCInstLower.cpp Fri Jan  3 13:21:54 2014<br>
@@ -19,11 +19,13 @@<br>
 #include "llvm/CodeGen/AsmPrinter.h"<br>
 #include "llvm/CodeGen/MachineFunction.h"<br>
 #include "llvm/CodeGen/MachineModuleInfoImpls.h"<br>
+#include "llvm/IR/DataLayout.h"<br>
 #include "llvm/IR/GlobalValue.h"<br>
 #include "llvm/MC/MCAsmInfo.h"<br>
 #include "llvm/MC/MCExpr.h"<br>
 #include "llvm/MC/MCInst.h"<br>
 #include "llvm/Target/Mangler.h"<br>
+#include "llvm/Target/TargetMachine.h"<br>
 using namespace llvm;<br>
<br>
 static MachineModuleInfoMachO &getMachOMMI(AsmPrinter &AP) {<br>
@@ -32,6 +34,7 @@ static MachineModuleInfoMachO &getMachOM<br>
<br>
<br>
 static MCSymbol *GetSymbolFromOperand(const MachineOperand &MO, AsmPrinter &AP){<br>
+  const DataLayout *DL = AP.TM.getDataLayout();<br>
   MCContext &Ctx = AP.OutContext;<br>
<br>
   SmallString<128> Name;<br>
@@ -42,7 +45,7 @@ static MCSymbol *GetSymbolFromOperand(co<br>
     Suffix = "$non_lazy_ptr";<br>
<br>
   if (!Suffix.empty())<br>
-    Name += AP.MAI->getPrivateGlobalPrefix();<br>
+    Name += DL->getPrivateGlobalPrefix();<br>
<br>
   unsigned PrefixLen = Name.size();<br>
<br>
<br>
Modified: llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp (original)<br>
+++ llvm/trunk/lib/Target/PowerPC/PPCTargetMachine.cpp Fri Jan  3 13:21:54 2014<br>
@@ -40,6 +40,8 @@ static std::string getDataLayoutString(c<br>
   // PPC is big endian.<br>
   std::string Ret = "E";<br>
<br>
+  Ret += DataLayout::getManglingComponent(T);<br>
+<br>
   // PPC32 has 32 bit pointers. The PS3 (OS Lv2) is a PPC64 machine with 32 bit<br>
   // pointers.<br>
   if (!ST.isPPC64() || T.getOS() == Triple::Lv2)<br>
<br>
Modified: llvm/trunk/lib/Target/Sparc/SparcAsmPrinter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcAsmPrinter.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcAsmPrinter.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/Sparc/SparcAsmPrinter.cpp (original)<br>
+++ llvm/trunk/lib/Target/Sparc/SparcAsmPrinter.cpp Fri Jan  3 13:21:54 2014<br>
@@ -219,6 +219,7 @@ void SparcAsmPrinter::EmitFunctionBodySt<br>
<br>
 void SparcAsmPrinter::printOperand(const MachineInstr *MI, int opNum,<br>
                                    raw_ostream &O) {<br>
+  const DataLayout *DL = TM.getDataLayout();<br>
   const MachineOperand &MO = MI->getOperand (opNum);<br>
   unsigned TF = MO.getTargetFlags();<br>
 #ifndef NDEBUG<br>
@@ -318,7 +319,7 @@ void SparcAsmPrinter::printOperand(const<br>
     O << MO.getSymbolName();<br>
     break;<br>
   case MachineOperand::MO_ConstantPoolIndex:<br>
-    O << MAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() << "_"<br>
+    O << DL->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber() << "_"<br>
       << MO.getIndex();<br>
     break;<br>
   default:<br>
<br>
Modified: llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp (original)<br>
+++ llvm/trunk/lib/Target/Sparc/SparcTargetMachine.cpp Fri Jan  3 13:21:54 2014<br>
@@ -25,7 +25,7 @@ extern "C" void LLVMInitializeSparcTarge<br>
<br>
 static std::string computeDataLayout(const SparcSubtarget &ST) {<br>
   // Sparc is big endian.<br>
-  std::string Ret = "E";<br>
+  std::string Ret = "E-m:e";<br>
<br>
   // Some ABIs have 32bit pointers.<br>
   if (!ST.is64Bit())<br>
<br>
Modified: llvm/trunk/lib/Target/SystemZ/SystemZTargetMachine.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZTargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZTargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/SystemZ/SystemZTargetMachine.cpp (original)<br>
+++ llvm/trunk/lib/Target/SystemZ/SystemZTargetMachine.cpp Fri Jan  3 13:21:54 2014<br>
@@ -30,7 +30,7 @@ SystemZTargetMachine::SystemZTargetMachi<br>
     // Make sure that global data has at least 16 bits of alignment by default,<br>
     // so that we can refer to it using LARL.  We don't have any special<br>
     // requirements for stack variables though.<br>
-    DL("E-i1:8:16-i8:8:16-i64:64-f128:64-a:8:16-n32:64"),<br>
+    DL("E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-a:8:16-n32:64"),<br>
     InstrInfo(*this), TLInfo(*this), TSInfo(*this),<br>
     FrameLowering(*this, Subtarget) {<br>
   initAsmInfo();<br>
<br>
Modified: llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp (original)<br>
+++ llvm/trunk/lib/Target/TargetLoweringObjectFile.cpp Fri Jan  3 13:21:54 2014<br>
@@ -41,6 +41,7 @@ using namespace llvm;<br>
 void TargetLoweringObjectFile::Initialize(MCContext &ctx,<br>
                                           const TargetMachine &TM) {<br>
   Ctx = &ctx;<br>
+  DL = TM.getDataLayout();<br>
   InitMCObjectFileInfo(TM.getTargetTriple(),<br>
                        TM.getRelocationModel(), TM.getCodeModel(), *Ctx);<br>
 }<br>
@@ -114,9 +115,8 @@ MCSymbol *TargetLoweringObjectFile::getS<br>
   assert(!GV->hasLinkerPrivateLinkage());<br>
   assert(!GV->hasLinkerPrivateWeakLinkage());<br>
<br>
-  const MCAsmInfo *MAI = Ctx->getAsmInfo();<br>
   SmallString<60> NameStr;<br>
-  NameStr += MAI->getPrivateGlobalPrefix();<br>
+  NameStr += DL->getPrivateGlobalPrefix();<br>
   M.getNameWithPrefix(NameStr, GV);<br>
   NameStr.append(Suffix.begin(), Suffix.end());<br>
   return Ctx->GetOrCreateSymbol(NameStr.str());<br>
<br>
Modified: llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp (original)<br>
+++ llvm/trunk/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp Fri Jan  3 13:21:54 2014<br>
@@ -131,11 +131,8 @@ getNonexecutableStackSection(MCContext &<br>
 void X86MCAsmInfoMicrosoft::anchor() { }<br>
<br>
 X86MCAsmInfoMicrosoft::X86MCAsmInfoMicrosoft(const Triple &Triple) {<br>
-  if (Triple.getArch() == Triple::x86_64) {<br>
-    GlobalPrefix = '\0';<br>
+  if (Triple.getArch() == Triple::x86_64)<br>
     PrivateGlobalPrefix = ".L";<br>
-    HasMicrosoftFastStdCallMangling = false;<br>
-  }<br>
<br>
   AssemblerDialect = AsmWriterFlavor;<br>
<br>
@@ -147,11 +144,8 @@ X86MCAsmInfoMicrosoft::X86MCAsmInfoMicro<br>
 void X86MCAsmInfoGNUCOFF::anchor() { }<br>
<br>
 X86MCAsmInfoGNUCOFF::X86MCAsmInfoGNUCOFF(const Triple &Triple) {<br>
-  if (Triple.getArch() == Triple::x86_64) {<br>
-    GlobalPrefix = '\0';<br>
+  if (Triple.getArch() == Triple::x86_64)<br>
     PrivateGlobalPrefix = ".L";<br>
-    HasMicrosoftFastStdCallMangling = false;<br>
-  }<br>
<br>
   AssemblerDialect = AsmWriterFlavor;<br>
<br>
<br>
Modified: llvm/trunk/lib/Target/X86/X86MCInstLower.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86MCInstLower.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86MCInstLower.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/X86/X86MCInstLower.cpp (original)<br>
+++ llvm/trunk/lib/Target/X86/X86MCInstLower.cpp Fri Jan  3 13:21:54 2014<br>
@@ -70,6 +70,7 @@ MachineModuleInfoMachO &X86MCInstLower::<br>
 /// operand to an MCSymbol.<br>
 MCSymbol *X86MCInstLower::<br>
 GetSymbolFromOperand(const MachineOperand &MO) const {<br>
+  const DataLayout *DL = TM.getDataLayout();<br>
   assert((MO.isGlobal() || MO.isSymbol() || MO.isMBB()) && "Isn't a symbol reference");<br>
<br>
   SmallString<128> Name;<br>
@@ -91,7 +92,7 @@ GetSymbolFromOperand(const MachineOperan<br>
   }<br>
<br>
   if (!Suffix.empty())<br>
-    Name += MAI.getPrivateGlobalPrefix();<br>
+    Name += DL->getPrivateGlobalPrefix();<br>
<br>
   unsigned PrefixLen = Name.size();<br>
<br>
<br>
Modified: llvm/trunk/lib/Target/X86/X86TargetMachine.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/X86/X86TargetMachine.cpp (original)<br>
+++ llvm/trunk/lib/Target/X86/X86TargetMachine.cpp Fri Jan  3 13:21:54 2014<br>
@@ -34,6 +34,7 @@ static std::string computeDataLayout(con<br>
   // X86 is little endian<br>
   std::string Ret = "e";<br>
<br>
+  Ret += DataLayout::getManglingComponent(ST.getTargetTriple());<br>
   // X86 and x32 have 32 bit pointers.<br>
   if (ST.isTarget64BitILP32() || !ST.is64Bit())<br>
     Ret += "-p:32:32";<br>
<br>
Modified: llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp (original)<br>
+++ llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp Fri Jan  3 13:21:54 2014<br>
@@ -204,6 +204,7 @@ printInlineJT(const MachineInstr *MI, in<br>
<br>
 void XCoreAsmPrinter::printOperand(const MachineInstr *MI, int opNum,<br>
                                    raw_ostream &O) {<br>
+  const DataLayout *DL = TM.getDataLayout();<br>
   const MachineOperand &MO = MI->getOperand(opNum);<br>
   switch (MO.getType()) {<br>
   case MachineOperand::MO_Register:<br>
@@ -219,7 +220,7 @@ void XCoreAsmPrinter::printOperand(const<br>
     O << *getSymbol(MO.getGlobal());<br>
     break;<br>
   case MachineOperand::MO_ConstantPoolIndex:<br>
-    O << MAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber()<br>
+    O << DL->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber()<br>
       << '_' << MO.getIndex();<br>
     break;<br>
   case MachineOperand::MO_BlockAddress:<br>
<br>
Modified: llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp?rev=198438&r1=198437&r2=198438&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp (original)<br>
+++ llvm/trunk/lib/Target/XCore/XCoreTargetMachine.cpp Fri Jan  3 13:21:54 2014<br>
@@ -27,7 +27,7 @@ XCoreTargetMachine::XCoreTargetMachine(c<br>
                                        CodeGenOpt::Level OL)<br>
   : LLVMTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL),<br>
     Subtarget(TT, CPU, FS),<br>
-    DL("e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:32-f64:32-a:0:32-n32"),<br>
+    DL("e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:32-f64:32-a:0:32-n32"),<br>
     InstrInfo(),<br>
     FrameLowering(Subtarget),<br>
     TLInfo(*this),<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>Saleem Abdulrasool<br>compnerd (at) compnerd (dot) org
</div></div>