Just add a fixme about a possibly faster implementation of some atomic loads on some...
authorRobin Morisset <morisset@google.com>
Tue, 23 Sep 2014 18:33:21 +0000 (18:33 +0000)
committerRobin Morisset <morisset@google.com>
Tue, 23 Sep 2014 18:33:21 +0000 (18:33 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218326 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMISelLowering.cpp

index ca6b614ce2ea7a3b489c3c6df8de77e46d42615c..97b62264462d6a1b53f532e01d5e9f4736963c18 100644 (file)
@@ -11086,6 +11086,9 @@ bool ARMTargetLowering::shouldExpandAtomicStoreInIR(StoreInst *SI) const {
 // are doomed anyway, so defer to the default libcall and blame the OS when
 // things go wrong. Cortex M doesn't have ldrexd/strexd though, so don't emit
 // anything for those.
+// FIXME: ldrd and strd are atomic if the CPU has LPAE (e.g. A15 has that
+// guarantee, see DDI0406C ARM architecture reference manual,
+// sections A8.8.72-74 LDRD)
 bool ARMTargetLowering::shouldExpandAtomicLoadInIR(LoadInst *LI) const {
   unsigned Size = LI->getType()->getPrimitiveSizeInBits();
   return (Size == 64) && !Subtarget->isMClass();