summaryrefslogtreecommitdiff
path: root/lib/Target/ARM/ARMBaseRegisterInfo.cpp
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2012-08-27 23:58:52 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2012-08-27 23:58:52 +0000
commitdd364419ee64cd5bb234af006ce0cb285e4a84ca (patch)
tree39b3a87aca20346bf316390cb68c42812ce683ab /lib/Target/ARM/ARMBaseRegisterInfo.cpp
parent94a935f072452d00207b1e8c1da75c31bb2a5f9b (diff)
downloadllvm-dd364419ee64cd5bb234af006ce0cb285e4a84ca.tar.gz
llvm-dd364419ee64cd5bb234af006ce0cb285e4a84ca.tar.bz2
llvm-dd364419ee64cd5bb234af006ce0cb285e4a84ca.tar.xz
Add ATOMIC_LDR* pseudo-instructions to model atomic_load on ARM.
It is not safe to use normal LDR instructions because they may be reordered by the scheduler. The ATOMIC_LDR pseudos have a mayStore flag that prevents reordering. Atomic loads are also prevented from participating in rematerialization and load folding. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162713 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/ARMBaseRegisterInfo.cpp')
-rw-r--r--lib/Target/ARM/ARMBaseRegisterInfo.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/Target/ARM/ARMBaseRegisterInfo.cpp b/lib/Target/ARM/ARMBaseRegisterInfo.cpp
index 9deb96ea9e..828e7d4e95 100644
--- a/lib/Target/ARM/ARMBaseRegisterInfo.cpp
+++ b/lib/Target/ARM/ARMBaseRegisterInfo.cpp
@@ -870,10 +870,14 @@ needsFrameBaseReg(MachineInstr *MI, int64_t Offset) const {
// return false for everything else.
unsigned Opc = MI->getOpcode();
switch (Opc) {
- case ARM::LDRi12: case ARM::LDRH: case ARM::LDRBi12:
+ case ARM::LDRi12: case ARM::ATOMIC_LDRi12:
+ case ARM::LDRH: case ARM::ATOMIC_LDRH:
+ case ARM::LDRBi12: case ARM::ATOMIC_LDRBi12:
case ARM::STRi12: case ARM::STRH: case ARM::STRBi12:
- case ARM::t2LDRi12: case ARM::t2LDRi8:
- case ARM::t2STRi12: case ARM::t2STRi8:
+ case ARM::t2LDRi12: case ARM::ATOMIC_t2LDRi12:
+ case ARM::t2LDRi8: case ARM::ATOMIC_t2LDRi8:
+ case ARM::t2STRi12:
+ case ARM::t2STRi8:
case ARM::VLDRS: case ARM::VLDRD:
case ARM::VSTRS: case ARM::VSTRD:
case ARM::tSTRspi: case ARM::tLDRspi: