Add a thread-model knob for lowering atomics on baremetal & single threaded systems
[oota-llvm.git] / lib / Target / ARM / ARMTargetMachine.cpp
index d85194b75ecb9507453a6d6ee7d35b673f996419..fc164ada35f6be3984bc976f4bac7fe314e89f6f 100644 (file)
@@ -158,7 +158,10 @@ TargetPassConfig *ARMBaseTargetMachine::createPassConfig(PassManagerBase &PM) {
 }
 
 void ARMPassConfig::addIRPasses() {
-  addPass(createAtomicExpandLoadLinkedPass(TM));
+  if (TM->Options.ThreadModel == ThreadModel::Single)
+    addPass(createLowerAtomicPass());
+  else
+    addPass(createAtomicExpandLoadLinkedPass(TM));
 
   // Cmpxchg instructions are often used with a subsequent comparison to
   // determine whether it succeeded. We can exploit existing control-flow in