Ensures non-acquire RMWs are transformed to acquire RMWs relaxed-loads-to-acquire
authorPeizhao Ou <peizhaoo@uci.edu>
Tue, 17 Jul 2018 19:07:00 +0000 (12:07 -0700)
committerPeizhao Ou <peizhaoo@uci.edu>
Tue, 17 Jul 2018 19:07:00 +0000 (12:07 -0700)
lib/CodeGen/AtomicExpandPass.cpp

index 6152055a5bce8b8523534392ad1850a2444fad1b..8665551bb75ef5037724732c35f2e3c744e9c272 100644 (file)
@@ -131,6 +131,15 @@ bool AtomicExpand::runOnFunction(Function &F) {
           }
           break;
         }
+        case Instruction::AtomicRMW: {
+          auto* RMW = dyn_cast<AtomicRMWInst>(&*I);
+          if (RMW->getOrdering() == Monotonic) {
+            RMW->setOrdering(Acquire);
+          } else if (RMW->getOrdering() == Release) {
+            RMW->setOrdering(AcquireRelease);
+          }
+          break;
+        }
         default: {
           break;
         }