Index: lib/Basic/Targets.cpp |
diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp |
index 2709d8ee2c20a92b371e20bbc6a269fc18b01e57..6b920e7593ad161c94157c44a521709357eb8741 100644 |
--- a/lib/Basic/Targets.cpp |
+++ b/lib/Basic/Targets.cpp |
@@ -3529,34 +3529,6 @@ class ARMTargetInfo : public TargetInfo { |
static const Builtin::Info BuiltinInfo[]; |
- static bool shouldUseInlineAtomic(const llvm::Triple &T) { |
- // On linux, binaries targeting old cpus call functions in libgcc to |
- // perform atomic operations. The implementation in libgcc then calls into |
- // the kernel which on armv6 and newer uses ldrex and strex. The net result |
- // is that if we assume the kernel is at least as recent as the hardware, |
- // it is safe to use atomic instructions on armv6 and newer. |
- if (T.getOS() != llvm::Triple::Linux) |
- return false; |
- StringRef ArchName = T.getArchName(); |
- if (T.getArch() == llvm::Triple::arm) { |
- if (!ArchName.startswith("armv")) |
- return false; |
- StringRef VersionStr = ArchName.substr(4); |
- unsigned Version; |
- if (VersionStr.getAsInteger(10, Version)) |
- return false; |
- return Version >= 6; |
- } |
- assert(T.getArch() == llvm::Triple::thumb); |
- if (!ArchName.startswith("thumbv")) |
- return false; |
- StringRef VersionStr = ArchName.substr(6); |
- unsigned Version; |
- if (VersionStr.getAsInteger(10, Version)) |
- return false; |
- return Version >= 7; |
- } |
- |
public: |
ARMTargetInfo(const std::string &TripleStr) |
: TargetInfo(TripleStr), ABI("aapcs-linux"), CPU("arm1136j-s"), IsAAPCS(true) |
@@ -3589,9 +3561,8 @@ public: |
TheCXXABI.set(TargetCXXABI::GenericARM); |
// ARM has atomics up to 8 bytes |
+ // FIXME: Set MaxAtomicInlineWidth if we have the feature v6e |
MaxAtomicPromoteWidth = 64; |
- if (shouldUseInlineAtomic(getTriple())) |
- MaxAtomicInlineWidth = 64; |
// Do force alignment of members that follow zero length bitfields. If |
// the alignment of the zero-length bitfield is greater than the member |