Index: lib/Basic/Targets.cpp |
diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp |
index d34bcfebdfe0f57f5a3746f824c9cf1c4116b369..fe4d5334492960bacd430d31cfd0689646ad01b3 100644 |
--- a/lib/Basic/Targets.cpp |
+++ b/lib/Basic/Targets.cpp |
@@ -273,48 +273,6 @@ public: |
} |
}; |
-// @LOCALMOD-START Emscripten |
-// Emscripten target |
-template <typename Target> |
-class EmscriptenTargetInfo : public OSTargetInfo<Target> { |
-protected: |
- void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, |
- MacroBuilder &Builder) const override { |
- // A macro for the platform. |
- Builder.defineMacro("__EMSCRIPTEN__"); |
- // Earlier versions of Emscripten defined this, so we continue to define it |
- // for compatibility, for now. Users should ideally prefer __EMSCRIPTEN__. |
- Builder.defineMacro("EMSCRIPTEN"); |
- // A common platform macro. |
- if (Opts.POSIXThreads) |
- Builder.defineMacro("_REENTRANT"); |
- // Follow g++ convention and predefine _GNU_SOURCE for C++. |
- if (Opts.CPlusPlus) |
- Builder.defineMacro("_GNU_SOURCE"); |
- |
- // Emscripten's software environment and the asm.js runtime aren't really |
- // Unix per se, but they're perhaps more Unix-like than what software |
- // expects when "unix" is *not* defined. |
- DefineStd(Builder, "unix", Opts); |
- } |
- |
-public: |
- explicit EmscriptenTargetInfo(const llvm::Triple &Triple) |
- : OSTargetInfo<Target>(Triple) { |
- // Emcripten currently does prepend a prefix to user labels, but this is |
- // handled outside of clang. TODO: Handling this within clang may be |
- // beneficial. |
- this->UserLabelPrefix = ""; |
- this->MaxAtomicPromoteWidth = this->MaxAtomicInlineWidth = 32; |
- |
- // Emscripten uses the Itanium ABI mostly, but it uses ARM-style pointers |
- // to member functions so that it can avoid having to align function |
- // addresses. |
- this->TheCXXABI.set(TargetCXXABI::Emscripten); |
- } |
-}; |
-// @LOCALMOD-END Emscripten |
- |
// FreeBSD Target |
template<typename Target> |
class FreeBSDTargetInfo : public OSTargetInfo<Target> { |
@@ -6467,72 +6425,6 @@ public: |
} |
}; |
-// @LOCALMOD-START Emscripten |
-namespace { |
-class AsmJSTargetInfo : public TargetInfo { |
-public: |
- explicit AsmJSTargetInfo(const llvm::Triple &T) : TargetInfo(T) { |
- BigEndian = false; |
- NoAsmVariants = true; |
- LongAlign = LongWidth = 32; |
- PointerAlign = PointerWidth = 32; |
- IntMaxType = Int64Type = TargetInfo::SignedLongLong; |
- DoubleAlign = 64; |
- LongDoubleWidth = LongDoubleAlign = 64; |
- SizeType = TargetInfo::UnsignedInt; |
- PtrDiffType = TargetInfo::SignedInt; |
- IntPtrType = TargetInfo::SignedInt; |
- RegParmMax = 0; // Disallow regparm |
- |
- // Set the native integer widths set to just i32, since that's currently the |
- // only integer type we can do arithmetic on without masking or splitting. |
- // |
- // Set the required alignment for 128-bit vectors to just 4 bytes, based on |
- // the direction suggested here: |
- // https://bugzilla.mozilla.org/show_bug.cgi?id=904913#c21 |
- // We can still set the preferred alignment to 16 bytes though. |
- // |
- // Set the natural stack alignment to 16 bytes to accomodate 128-bit aligned |
- // vectors. |
- DescriptionString = "e-p:32:32-i64:64-v128:32:128-n32-S128"; |
- } |
- |
- void getDefaultFeatures(llvm::StringMap<bool> &Features) const override {} |
- void getTargetDefines(const LangOptions &Opts, |
- MacroBuilder &Builder) const override { |
- defineCPUMacros(Builder, "asmjs", /*Tuning=*/false); |
- } |
- void getTargetBuiltins(const Builtin::Info *&Records, |
- unsigned &NumRecords) const override {} |
- BuiltinVaListKind getBuiltinVaListKind() const override { |
- // Reuse PNaCl's va_list lowering. |
- return TargetInfo::PNaClABIBuiltinVaList; |
- } |
- void getGCCRegNames(const char *const *&Names, |
- unsigned &NumNames) const override { |
- Names = nullptr; |
- NumNames = 0; |
- } |
- void getGCCRegAliases(const GCCRegAlias *&Aliases, |
- unsigned &NumAliases) const override { |
- Aliases = nullptr; |
- NumAliases = 0; |
- } |
- bool validateAsmConstraint(const char *&Name, |
- TargetInfo::ConstraintInfo &Info) const override { |
- return false; |
- } |
- const char *getClobbers() const override { return ""; } |
- bool isCLZForZeroUndef() const override { |
- // Today we do clz in software, so we just do the right thing. With ES6, |
- // we'll get Math.clz32, which is to be defined to do the right thing: |
- // http://esdiscuss.org/topic/rename-number-prototype-clz-to-math-clz#content-36 |
- return false; |
- } |
-}; |
-} // end anonymous namespace. |
-// @LOCALMOD-END Emscripten |
- |
class PNaClTargetInfo : public TargetInfo { |
public: |
PNaClTargetInfo(const llvm::Triple &Triple) : TargetInfo(Triple) { |
@@ -7013,16 +6905,6 @@ static TargetInfo *AllocateTarget(const llvm::Triple &Triple) { |
return new Mips64ELTargetInfo(Triple); |
} |
- // @LOCALMOD-START Emscripten |
- case llvm::Triple::asmjs: |
- switch (os) { |
- case llvm::Triple::Emscripten: |
- return new EmscriptenTargetInfo<AsmJSTargetInfo>(Triple); |
- default: |
- return nullptr; |
- } |
- // @LOCALMOD-END Emscripten |
- |
case llvm::Triple::le32: |
switch (os) { |
case llvm::Triple::NaCl: |