diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-01-03 19:22:05 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-01-03 19:22:05 +0000 |
commit | c418ae93a8bafb0590dd8445677f9c60cb9f0224 (patch) | |
tree | 275142e239b4528f0d29651538d473281be911b6 /clang/lib/Basic/Targets.cpp | |
parent | 58873566b3718a6b2730e7d726491398766a39a4 (diff) | |
download | bcm5719-llvm-c418ae93a8bafb0590dd8445677f9c60cb9f0224.tar.gz bcm5719-llvm-c418ae93a8bafb0590dd8445677f9c60cb9f0224.zip |
Update for llvm's DataLayout including mangling information.
llvm-svn: 198439
Diffstat (limited to 'clang/lib/Basic/Targets.cpp')
-rw-r--r-- | clang/lib/Basic/Targets.cpp | 95 |
1 files changed, 57 insertions, 38 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index eb07942a799..9dcd027b996 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -485,7 +485,7 @@ public: this->UIntMaxType = TargetInfo::UnsignedLongLong; this->Int64Type = TargetInfo::SignedLongLong; this->SizeType = TargetInfo::UnsignedInt; - this->DescriptionString = "E-p:32:32-i64:64-n32:64"; + this->DescriptionString = "E-m:e-p:32:32-i64:64-n32:64"; } }; @@ -625,11 +625,11 @@ public: // RegParmMax is inherited from the underlying architecture this->LongDoubleFormat = &llvm::APFloat::IEEEdouble; if (Triple.getArch() == llvm::Triple::arm) { - this->DescriptionString = "e-p:32:32-i64:64-v128:64:128-n32-S128"; + this->DescriptionString = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S128"; } else if (Triple.getArch() == llvm::Triple::x86) { - this->DescriptionString = "e-p:32:32-i64:64-n8:16:32-S128"; + this->DescriptionString = "e-m:e-p:32:32-i64:64-n8:16:32-S128"; } else if (Triple.getArch() == llvm::Triple::x86_64) { - this->DescriptionString = "e-p:32:32-i64:64-n8:16:32:64-S128"; + this->DescriptionString = "e-m:e-p:32:32-i64:64-n8:16:32:64-S128"; } else if (Triple.getArch() == llvm::Triple::mipsel) { // Handled on mips' setDescriptionString. } else { @@ -1188,7 +1188,7 @@ namespace { class PPC32TargetInfo : public PPCTargetInfo { public: PPC32TargetInfo(const llvm::Triple &Triple) : PPCTargetInfo(Triple) { - DescriptionString = "E-p:32:32-i64:64-n32"; + DescriptionString = "E-m:e-p:32:32-i64:64-n32"; switch (getTriple().getOS()) { case llvm::Triple::Linux: @@ -1232,9 +1232,9 @@ public: if (getTriple().getOS() == llvm::Triple::FreeBSD) { LongDoubleWidth = LongDoubleAlign = 64; LongDoubleFormat = &llvm::APFloat::IEEEdouble; - DescriptionString = "E-i64:64-n32:64"; + DescriptionString = "E-m:e-i64:64-n32:64"; } else - DescriptionString = "E-i64:64-n32:64"; + DescriptionString = "E-m:e-i64:64-n32:64"; // PPC64 supports atomics up to 8 bytes. MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64; @@ -1257,7 +1257,7 @@ public: PtrDiffType = SignedInt; // for http://llvm.org/bugs/show_bug.cgi?id=15726 LongLongAlign = 32; SuitableAlign = 128; - DescriptionString = "E-p:32:32-f64:32:64-n32"; + DescriptionString = "E-m:o-p:32:32-f64:32:64-n32"; } virtual BuiltinVaListKind getBuiltinVaListKind() const { return TargetInfo::CharPtrBuiltinVaList; @@ -1271,7 +1271,7 @@ public: : DarwinTargetInfo<PPC64TargetInfo>(Triple) { HasAlignMac68kSupport = true; SuitableAlign = 128; - DescriptionString = "E-i64:64-n32:64"; + DescriptionString = "E-m:o-i64:64-n32:64"; } }; } // end anonymous namespace. @@ -2917,7 +2917,7 @@ public: LongDoubleWidth = 96; LongDoubleAlign = 32; SuitableAlign = 128; - DescriptionString = "e-p:32:32-f64:32:64-f80:32-n8:16:32-S128"; + DescriptionString = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128"; SizeType = UnsignedInt; PtrDiffType = SignedInt; IntPtrType = SignedInt; @@ -3011,7 +3011,7 @@ public: MaxVectorAlign = 256; SizeType = UnsignedLong; IntPtrType = SignedLong; - DescriptionString = "e-p:32:32-f64:32:64-f80:128-n8:16:32-S128"; + DescriptionString = "e-m:o-p:32:32-f64:32:64-f80:128-n8:16:32-S128"; HasAlignMac68kSupport = true; } @@ -3027,7 +3027,7 @@ public: TLSSupported = false; WCharType = UnsignedShort; DoubleAlign = LongLongAlign = 64; - DescriptionString = "e-p:32:32-i64:64-f80:32-n8:16:32-S32"; + DescriptionString = "e-m:c-p:32:32-i64:64-f80:32-n8:16:32-S32"; } virtual void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const { @@ -3094,7 +3094,7 @@ public: TLSSupported = false; WCharType = UnsignedShort; DoubleAlign = LongLongAlign = 64; - DescriptionString = "e-p:32:32-i64:64-f80:32-n8:16:32-S32"; + DescriptionString = "e-m:c-p:32:32-i64:64-f80:32-n8:16:32-S32"; } virtual void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const { @@ -3200,7 +3200,7 @@ public: Int64Type = SignedLong; RegParmMax = 6; - DescriptionString = "e-i64:64-f80:128-n8:16:32:64-S128"; + DescriptionString = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"; // Use fpret only for long double. RealTypeUsesObjCFPRet = (1 << TargetInfo::LongDouble); @@ -3323,6 +3323,7 @@ public: : DarwinTargetInfo<X86_64TargetInfo>(Triple) { Int64Type = SignedLongLong; MaxVectorAlign = 256; + DescriptionString = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"; } }; } // end anonymous namespace @@ -3372,7 +3373,7 @@ public: LongDoubleWidth = LongDoubleAlign = 128; PointerWidth = PointerAlign = 64; SuitableAlign = 128; - DescriptionString = "e-i64:64-i128:128-n32:64-S128"; + DescriptionString = "e-m:e-i64:64-i128:128-n32:64-S128"; WCharType = UnsignedInt; LongDoubleFormat = &llvm::APFloat::IEEEquad; @@ -3661,14 +3662,15 @@ class ARMTargetInfo : public TargetInfo { IsAAPCS = true; DoubleAlign = LongLongAlign = LongDoubleAlign = SuitableAlign = 64; + const llvm::Triple &T = getTriple(); // size_t is unsigned long on Darwin and netbsd. - if (getTriple().isOSDarwin() || getTriple().getOS() == llvm::Triple::NetBSD) + if (T.isOSDarwin() || T.getOS() == llvm::Triple::NetBSD) SizeType = UnsignedLong; else SizeType = UnsignedInt; - if (getTriple().getOS() == llvm::Triple::NetBSD) { + if (T.getOS() == llvm::Triple::NetBSD) { WCharType = SignedInt; } else { // AAPCS 7.1.1, ARM-Linux ABI 2.4: type of wchar_t is unsigned int. @@ -3682,22 +3684,32 @@ class ARMTargetInfo : public TargetInfo { if (IsThumb) { // Thumb1 add sp, #imm requires the immediate value be multiple of 4, // so set preferred for small types to 32. - DescriptionString = "e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-" - "v128:64:128-a:0:32-n32-S64"; + if (T.isOSBinFormatMachO()) + DescriptionString = "e-m:o-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-" + "v128:64:128-a:0:32-n32-S64"; + else + DescriptionString = "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:64-" + "v128:64:128-a:0:32-n32-S64"; + } else { - DescriptionString = "e-p:32:32-i64:64-v128:64:128-n32-S64"; + if (T.isOSBinFormatMachO()) + DescriptionString = "e-m:o-p:32:32-i64:64-v128:64:128-n32-S64"; + else + DescriptionString = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S64"; } // FIXME: Enumerated types are variable width in straight AAPCS. } void setABIAPCS() { + const llvm::Triple &T = getTriple(); + IsAAPCS = false; DoubleAlign = LongLongAlign = LongDoubleAlign = SuitableAlign = 32; // size_t is unsigned int on FreeBSD. - if (getTriple().getOS() == llvm::Triple::FreeBSD) + if (T.getOS() == llvm::Triple::FreeBSD) SizeType = UnsignedInt; else SizeType = UnsignedLong; @@ -3717,11 +3729,19 @@ class ARMTargetInfo : public TargetInfo { if (IsThumb) { // Thumb1 add sp, #imm requires the immediate value be multiple of 4, // so set preferred for small types to 32. - DescriptionString = "e-p:32:32-i1:8:32-i8:8:32-i16:16:32-f64:32:64" - "-v64:32:64-v128:32:128-a:0:32-n32-S32"; + if (T.isOSBinFormatMachO()) + DescriptionString = "e-m:o-p:32:32-i1:8:32-i8:8:32-i16:16:32-f64:32:64" + "-v64:32:64-v128:32:128-a:0:32-n32-S32"; + else + DescriptionString = "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-f64:32:64" + "-v64:32:64-v128:32:128-a:0:32-n32-S32"; } else { - DescriptionString = - "e-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32"; + if (T.isOSBinFormatMachO()) + DescriptionString = + "e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32"; + else + DescriptionString = + "e-m:e-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32"; } // FIXME: Override "preferred align" for double and long long. @@ -4225,7 +4245,7 @@ class HexagonTargetInfo : public TargetInfo { public: HexagonTargetInfo(const llvm::Triple &Triple) : TargetInfo(Triple) { BigEndian = false; - DescriptionString = "e-p:32:32-i1:32-i64:64-a:0-n32"; + DescriptionString = "e-m:e-p:32:32-i1:32-i64:64-a:0-n32"; // {} in inline assembly are packet specifiers, not assembly variant // specifiers. @@ -4480,7 +4500,7 @@ void SparcTargetInfo::getGCCRegAliases(const GCCRegAlias *&Aliases, class SparcV8TargetInfo : public SparcTargetInfo { public: SparcV8TargetInfo(const llvm::Triple &Triple) : SparcTargetInfo(Triple) { - DescriptionString = "E-p:32:32-i64:64-f128:64-n32-S64"; + DescriptionString = "E-m:e-p:32:32-i64:64-f128:64-n32-S64"; } virtual void getTargetDefines(const LangOptions &Opts, @@ -4495,7 +4515,7 @@ class SparcV9TargetInfo : public SparcTargetInfo { public: SparcV9TargetInfo(const llvm::Triple &Triple) : SparcTargetInfo(Triple) { // FIXME: Support Sparc quad-precision long double? - DescriptionString = "E-i64:64-n32:64-S128"; + DescriptionString = "E-m:e-i64:64-n32:64-S128"; // This is an LP64 platform. LongWidth = LongAlign = PointerWidth = PointerAlign = 64; @@ -4561,8 +4581,7 @@ namespace { LongDoubleAlign = 64; LongDoubleFormat = &llvm::APFloat::IEEEquad; MinGlobalAlign = 16; - DescriptionString = "E-i1:8:16-i8:8:16-i64:64" - "-f128:64-a:8:16-n32:64"; + DescriptionString = "E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-a:8:16-n32:64"; MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64; } virtual void getTargetDefines(const LangOptions &Opts, @@ -4670,7 +4689,7 @@ namespace { IntPtrType = SignedInt; PtrDiffType = SignedInt; SigAtomicType = SignedLong; - DescriptionString = "e-p:16:16-i32:16:32-n8:16"; + DescriptionString = "e-m:e-p:16:16-i32:16:32-n8:16"; } virtual void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const { @@ -5104,7 +5123,7 @@ public: class Mips32EBTargetInfo : public Mips32TargetInfoBase { virtual void setDescriptionString() { - DescriptionString = "E-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64"; + DescriptionString = "E-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64"; } public: @@ -5121,7 +5140,7 @@ public: class Mips32ELTargetInfo : public Mips32TargetInfoBase { virtual void setDescriptionString() { - DescriptionString = "e-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64"; + DescriptionString = "e-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64"; } public: @@ -5230,9 +5249,9 @@ public: class Mips64EBTargetInfo : public Mips64TargetInfoBase { virtual void setDescriptionString() { if (ABI == "n32") - DescriptionString = "E-p:32:32-i8:8:32-i16:16:32-i64:64-n32:64-S128"; + DescriptionString = "E-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32:64-S128"; else - DescriptionString = "E-i8:8:32-i16:16:32-i64:64-n32:64-S128"; + DescriptionString = "E-m:m-i8:8:32-i16:16:32-i64:64-n32:64-S128"; } @@ -5250,9 +5269,9 @@ public: class Mips64ELTargetInfo : public Mips64TargetInfoBase { virtual void setDescriptionString() { if (ABI == "n32") - DescriptionString = "e-p:32:32-i8:8:32-i16:16:32-i64:64-n32:64-S128"; + DescriptionString = "e-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32:64-S128"; else - DescriptionString = "e-i8:8:32-i16:16:32-i64:64-n32:64-S128"; + DescriptionString = "e-m:m-i8:8:32-i16:16:32-i64:64-n32:64-S128"; } public: Mips64ELTargetInfo(const llvm::Triple &Triple) @@ -5439,7 +5458,7 @@ public: WCharType = UnsignedChar; WIntType = UnsignedInt; UseZeroLengthBitfieldAlignment = true; - DescriptionString = "e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:32" + DescriptionString = "e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:32" "-f64:32-a:0:32-n32"; } virtual void getTargetDefines(const LangOptions &Opts, |