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