<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>