[ImplicitNullChecks] Support unordered atomic accesses

Update the INC pass to allow folding unordered atomics.  This is the first optimization unblocked by the changes landed from D57601.

llvm-svn: 356006
diff --git a/llvm/lib/CodeGen/ImplicitNullChecks.cpp b/llvm/lib/CodeGen/ImplicitNullChecks.cpp
index 75f4eef..6811031 100644
--- a/llvm/lib/CodeGen/ImplicitNullChecks.cpp
+++ b/llvm/lib/CodeGen/ImplicitNullChecks.cpp
@@ -235,11 +235,8 @@
   assert(!llvm::any_of(MI->operands(), IsRegMask) &&
          "Calls were filtered out above!");
 
-  // TODO: This should be isUnordered (see D57601) once test cases are written
-  // demonstrating that.
-  auto IsSimple = [](MachineMemOperand *MMO) {
-    return !MMO->isVolatile() && !MMO->isAtomic(); };
-  return llvm::all_of(MI->memoperands(), IsSimple);
+  auto IsUnordered = [](MachineMemOperand *MMO) { return MMO->isUnordered(); };
+  return llvm::all_of(MI->memoperands(), IsUnordered);
 }
 
 ImplicitNullChecks::DependenceResult