[clang] 0c623ab - [Clang][OpenMP] Only check value if the expression is not instantiation dependent

Shilei Tian via cfe-commits cfe-commits at lists.llvm.org
Wed Oct 5 05:45:04 PDT 2022


Author: Shilei Tian
Date: 2022-10-05T08:44:56-04:00
New Revision: 0c623ab1bf2eec76d94b79c147983b24d89944be

URL: https://github.com/llvm/llvm-project/commit/0c623ab1bf2eec76d94b79c147983b24d89944be
DIFF: https://github.com/llvm/llvm-project/commit/0c623ab1bf2eec76d94b79c147983b24d89944be.diff

LOG: [Clang][OpenMP] Only check value if the expression is not instantiation dependent

Currently the following case fails:
```
template<typename Ty>
Ty foo(Ty *addr, Ty val) {
  Ty v;
#pragma omp atomic compare capture
  {
    v = *addr;
    if (*addr > val)
      *addr = val;
  }
  return v;
}
```

The compiler complains `addr` is not a lvalue. That's because when an expression
is instantiation dependent, we cannot tell if it is lvalue or not.

Reviewed By: ABataev

Differential Revision: https://reviews.llvm.org/D135224

Added: 
    

Modified: 
    clang/lib/Sema/SemaOpenMP.cpp
    clang/test/OpenMP/atomic_ast_print.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index c53253243ab91..66da2e17c3f05 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -11577,6 +11577,9 @@ class OpenMPAtomicCompareChecker {
 
   static bool CheckValue(const Expr *E, ErrorInfoTy &ErrorInfo,
                          bool ShouldBeLValue, bool ShouldBeInteger = false) {
+    if (E->isInstantiationDependent())
+      return true;
+
     if (ShouldBeLValue && !E->isLValue()) {
       ErrorInfo.Error = ErrorTy::XNotLValue;
       ErrorInfo.ErrorLoc = ErrorInfo.NoteLoc = E->getExprLoc();
@@ -11584,25 +11587,23 @@ class OpenMPAtomicCompareChecker {
       return false;
     }
 
-    if (!E->isInstantiationDependent()) {
-      QualType QTy = E->getType();
-      if (!QTy->isScalarType()) {
-        ErrorInfo.Error = ErrorTy::NotScalar;
-        ErrorInfo.ErrorLoc = ErrorInfo.NoteLoc = E->getExprLoc();
-        ErrorInfo.ErrorRange = ErrorInfo.NoteRange = E->getSourceRange();
-        return false;
-      }
-      if (ShouldBeInteger && !QTy->isIntegerType()) {
-        ErrorInfo.Error = ErrorTy::NotInteger;
-        ErrorInfo.ErrorLoc = ErrorInfo.NoteLoc = E->getExprLoc();
-        ErrorInfo.ErrorRange = ErrorInfo.NoteRange = E->getSourceRange();
-        return false;
-      }
+    QualType QTy = E->getType();
+    if (!QTy->isScalarType()) {
+      ErrorInfo.Error = ErrorTy::NotScalar;
+      ErrorInfo.ErrorLoc = ErrorInfo.NoteLoc = E->getExprLoc();
+      ErrorInfo.ErrorRange = ErrorInfo.NoteRange = E->getSourceRange();
+      return false;
+    }
+    if (ShouldBeInteger && !QTy->isIntegerType()) {
+      ErrorInfo.Error = ErrorTy::NotInteger;
+      ErrorInfo.ErrorLoc = ErrorInfo.NoteLoc = E->getExprLoc();
+      ErrorInfo.ErrorRange = ErrorInfo.NoteRange = E->getSourceRange();
+      return false;
     }
 
     return true;
   }
-};
+  };
 
 bool OpenMPAtomicCompareChecker::checkCondUpdateStmt(IfStmt *S,
                                                      ErrorInfoTy &ErrorInfo) {

diff  --git a/clang/test/OpenMP/atomic_ast_print.cpp b/clang/test/OpenMP/atomic_ast_print.cpp
index 201f62ab2117e..89eb3651cd6cc 100644
--- a/clang/test/OpenMP/atomic_ast_print.cpp
+++ b/clang/test/OpenMP/atomic_ast_print.cpp
@@ -1433,4 +1433,4987 @@ int main(int argc, char **argv) {
   return foo(a);
 }
 
+#ifdef OMP51
+
+template <typename Ty> Ty ffoo(Ty *x, Ty e, Ty d) {
+  Ty v;
+  bool r;
+
+#pragma omp atomic compare capture
+  {
+    v = *x;
+    if (*x > e)
+      *x = e;
+  }
+#pragma omp atomic compare capture
+  {
+    v = *x;
+    if (*x < e)
+      *x = e;
+  }
+#pragma omp atomic compare capture
+  {
+    v = *x;
+    if (*x == e)
+      *x = d;
+  }
+#pragma omp atomic compare capture
+  {
+    if (*x > e)
+      *x = e;
+    v = *x;
+  }
+#pragma omp atomic compare capture
+  {
+    if (*x < e)
+      *x = e;
+    v = *x;
+  }
+#pragma omp atomic compare capture
+  {
+    if (*x == e)
+      *x = d;
+    v = *x;
+  }
+#pragma omp atomic compare capture
+  {
+    if (*x == e)
+      *x = d;
+    else
+      v = *x;
+  }
+#pragma omp atomic compare capture
+  {
+    r = *x == e;
+    if (r)
+      *x = d;
+  }
+#pragma omp atomic compare capture
+  {
+    r = *x == e;
+    if (r)
+      *x = d;
+    else
+      v = *x;
+  }
+
+#pragma omp atomic compare capture acq_rel
+  {
+    v = *x;
+    if (*x > e)
+      *x = e;
+  }
+#pragma omp atomic compare capture acq_rel
+  {
+    v = *x;
+    if (*x < e)
+      *x = e;
+  }
+#pragma omp atomic compare capture acq_rel
+  {
+    v = *x;
+    if (*x == e)
+      *x = d;
+  }
+#pragma omp atomic compare capture acq_rel
+  {
+    if (*x > e)
+      *x = e;
+    v = *x;
+  }
+#pragma omp atomic compare capture acq_rel
+  {
+    if (*x < e)
+      *x = e;
+    v = *x;
+  }
+#pragma omp atomic compare capture acq_rel
+  {
+    if (*x == e)
+      *x = d;
+    v = *x;
+  }
+#pragma omp atomic compare capture acq_rel
+  {
+    if (*x == e)
+      *x = d;
+    else
+      v = *x;
+  }
+#pragma omp atomic compare capture acq_rel
+  {
+    r = *x == e;
+    if (r)
+      *x = d;
+  }
+#pragma omp atomic compare capture acq_rel
+  {
+    r = *x == e;
+    if (r)
+      *x = d;
+    else
+      v = *x;
+  }
+
+#pragma omp atomic compare capture acquire
+  {
+    v = *x;
+    if (*x > e)
+      *x = e;
+  }
+#pragma omp atomic compare capture acquire
+  {
+    v = *x;
+    if (*x < e)
+      *x = e;
+  }
+#pragma omp atomic compare capture acquire
+  {
+    v = *x;
+    if (*x == e)
+      *x = d;
+  }
+#pragma omp atomic compare capture acquire
+  {
+    if (*x > e)
+      *x = e;
+    v = *x;
+  }
+#pragma omp atomic compare capture acquire
+  {
+    if (*x < e)
+      *x = e;
+    v = *x;
+  }
+#pragma omp atomic compare capture acquire
+  {
+    if (*x == e)
+      *x = d;
+    v = *x;
+  }
+#pragma omp atomic compare capture acquire
+  {
+    if (*x == e)
+      *x = d;
+    else
+      v = *x;
+  }
+#pragma omp atomic compare capture acquire
+  {
+    r = *x == e;
+    if (r)
+      *x = d;
+  }
+#pragma omp atomic compare capture acquire
+  {
+    r = *x == e;
+    if (r)
+      *x = d;
+    else
+      v = *x;
+  }
+
+#pragma omp atomic compare capture relaxed
+  {
+    v = *x;
+    if (*x > e)
+      *x = e;
+  }
+#pragma omp atomic compare capture relaxed
+  {
+    v = *x;
+    if (*x < e)
+      *x = e;
+  }
+#pragma omp atomic compare capture relaxed
+  {
+    v = *x;
+    if (*x == e)
+      *x = d;
+  }
+#pragma omp atomic compare capture relaxed
+  {
+    if (*x > e)
+      *x = e;
+    v = *x;
+  }
+#pragma omp atomic compare capture relaxed
+  {
+    if (*x < e)
+      *x = e;
+    v = *x;
+  }
+#pragma omp atomic compare capture relaxed
+  {
+    if (*x == e)
+      *x = d;
+    v = *x;
+  }
+#pragma omp atomic compare capture relaxed
+  {
+    if (*x == e)
+      *x = d;
+    else
+      v = *x;
+  }
+#pragma omp atomic compare capture relaxed
+  {
+    r = *x == e;
+    if (r)
+      *x = d;
+  }
+#pragma omp atomic compare capture relaxed
+  {
+    r = *x == e;
+    if (r)
+      *x = d;
+    else
+      v = *x;
+  }
+
+#pragma omp atomic compare capture release
+  {
+    v = *x;
+    if (*x > e)
+      *x = e;
+  }
+#pragma omp atomic compare capture release
+  {
+    v = *x;
+    if (*x < e)
+      *x = e;
+  }
+#pragma omp atomic compare capture release
+  {
+    v = *x;
+    if (*x == e)
+      *x = d;
+  }
+#pragma omp atomic compare capture release
+  {
+    if (*x > e)
+      *x = e;
+    v = *x;
+  }
+#pragma omp atomic compare capture release
+  {
+    if (*x < e)
+      *x = e;
+    v = *x;
+  }
+#pragma omp atomic compare capture release
+  {
+    if (*x == e)
+      *x = d;
+    v = *x;
+  }
+#pragma omp atomic compare capture release
+  {
+    if (*x == e)
+      *x = d;
+    else
+      v = *x;
+  }
+#pragma omp atomic compare capture release
+  {
+    r = *x == e;
+    if (r)
+      *x = d;
+  }
+#pragma omp atomic compare capture release
+  {
+    r = *x == e;
+    if (r)
+      *x = d;
+    else
+      v = *x;
+  }
+
+#pragma omp atomic compare capture seq_cst
+  {
+    v = *x;
+    if (*x > e)
+      *x = e;
+  }
+#pragma omp atomic compare capture seq_cst
+  {
+    v = *x;
+    if (*x < e)
+      *x = e;
+  }
+#pragma omp atomic compare capture seq_cst
+  {
+    v = *x;
+    if (*x == e)
+      *x = d;
+  }
+#pragma omp atomic compare capture seq_cst
+  {
+    if (*x > e)
+      *x = e;
+    v = *x;
+  }
+#pragma omp atomic compare capture seq_cst
+  {
+    if (*x < e)
+      *x = e;
+    v = *x;
+  }
+#pragma omp atomic compare capture seq_cst
+  {
+    if (*x == e)
+      *x = d;
+    v = *x;
+  }
+#pragma omp atomic compare capture seq_cst
+  {
+    if (*x == e)
+      *x = d;
+    else
+      v = *x;
+  }
+#pragma omp atomic compare capture seq_cst
+  {
+    r = *x == e;
+    if (r)
+      *x = d;
+  }
+#pragma omp atomic compare capture seq_cst
+  {
+    r = *x == e;
+    if (r)
+      *x = d;
+    else
+      v = *x;
+  }
+
+  return v;
+}
+
+void bbaarr() {
+  {
+    char x, e, d;
+    ffoo(&x, e, d);
+  }
+
+  {
+    unsigned char x, e, d;
+    ffoo(&x, e, d);
+  }
+
+  {
+    short x, e, d;
+    ffoo(&x, e, d);
+  }
+
+  {
+    unsigned short x, e, d;
+    ffoo(&x, e, d);
+  }
+
+  {
+    int x, e, d;
+    ffoo(&x, e, d);
+  }
+
+  {
+    unsigned int x, e, d;
+    ffoo(&x, e, d);
+  }
+
+  {
+    long x, e, d;
+    ffoo(&x, e, d);
+  }
+
+  {
+    unsigned long x, e, d;
+    ffoo(&x, e, d);
+  }
+
+  {
+    long long x, e, d;
+    ffoo(&x, e, d);
+  }
+
+  {
+    unsigned long long x, e, d;
+    ffoo(&x, e, d);
+  }
+
+  {
+    float x, e, d;
+    ffoo(&x, e, d);
+  }
+
+  {
+    double x, e, d;
+    ffoo(&x, e, d);
+  }
+}
+
+// CHECK-51: template <typename Ty> Ty ffoo(Ty *x, Ty e, Ty d) {
+// CHECK-51-NEXT: Ty v;
+// CHECK-51-NEXT: bool r;
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: return v;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: template<> char ffoo<char>(char *x, char e, char d) {
+// CHECK-51-NEXT: char v;
+// CHECK-51-NEXT: bool r;
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: return v;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: template<> unsigned char ffoo<unsigned char>(unsigned char *x, unsigned char e, unsigned char d) {
+// CHECK-51-NEXT: unsigned char v;
+// CHECK-51-NEXT: bool r;
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: return v;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: template<> short ffoo<short>(short *x, short e, short d) {
+// CHECK-51-NEXT: short v;
+// CHECK-51-NEXT: bool r;
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: return v;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: template<> unsigned short ffoo<unsigned short>(unsigned short *x, unsigned short e, unsigned short d) {
+// CHECK-51-NEXT: unsigned short v;
+// CHECK-51-NEXT: bool r;
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: return v;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: template<> int ffoo<int>(int *x, int e, int d) {
+// CHECK-51-NEXT: int v;
+// CHECK-51-NEXT: bool r;
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: return v;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: template<> unsigned int ffoo<unsigned int>(unsigned int *x, unsigned int e, unsigned int d) {
+// CHECK-51-NEXT: unsigned int v;
+// CHECK-51-NEXT: bool r;
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: return v;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: template<> long ffoo<long>(long *x, long e, long d) {
+// CHECK-51-NEXT: long v;
+// CHECK-51-NEXT: bool r;
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: return v;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: template<> unsigned long ffoo<unsigned long>(unsigned long *x, unsigned long e, unsigned long d) {
+// CHECK-51-NEXT: unsigned long v;
+// CHECK-51-NEXT: bool r;
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: return v;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: template<> long long ffoo<long long>(long long *x, long long e, long long d) {
+// CHECK-51-NEXT: long long v;
+// CHECK-51-NEXT: bool r;
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: return v;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: template<> unsigned long long ffoo<unsigned long long>(unsigned long long *x, unsigned long long e, unsigned long long d) {
+// CHECK-51-NEXT: unsigned long long v;
+// CHECK-51-NEXT: bool r;
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: return v;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: template<> float ffoo<float>(float *x, float e, float d) {
+// CHECK-51-NEXT: float v;
+// CHECK-51-NEXT: bool r;
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: return v;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: template<> double ffoo<double>(double *x, double e, double d) {
+// CHECK-51-NEXT: double v;
+// CHECK-51-NEXT: bool r;
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acq_rel
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture acquire
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture relaxed
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture release
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x > e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x < e)
+// CHECK-51-NEXT: *x = e;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: if (*x == e)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: #pragma omp atomic compare capture seq_cst
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: r = *x == e;
+// CHECK-51-NEXT: if (r)
+// CHECK-51-NEXT: *x = d;
+// CHECK-51-NEXT: else
+// CHECK-51-NEXT: v = *x;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: return v;
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: void bbaarr() {
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: char x, e, d;
+// CHECK-51-NEXT: ffoo(&x, e, d);
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: unsigned char x, e, d;
+// CHECK-51-NEXT: ffoo(&x, e, d);
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: short x, e, d;
+// CHECK-51-NEXT: ffoo(&x, e, d);
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: unsigned short x, e, d;
+// CHECK-51-NEXT: ffoo(&x, e, d);
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: int x, e, d;
+// CHECK-51-NEXT: ffoo(&x, e, d);
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: unsigned int x, e, d;
+// CHECK-51-NEXT: ffoo(&x, e, d);
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: long x, e, d;
+// CHECK-51-NEXT: ffoo(&x, e, d);
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: unsigned long x, e, d;
+// CHECK-51-NEXT: ffoo(&x, e, d);
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: long long x, e, d;
+// CHECK-51-NEXT: ffoo(&x, e, d);
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: unsigned long long x, e, d;
+// CHECK-51-NEXT: ffoo(&x, e, d);
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: float x, e, d;
+// CHECK-51-NEXT: ffoo(&x, e, d);
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: {
+// CHECK-51-NEXT: double x, e, d;
+// CHECK-51-NEXT: ffoo(&x, e, d);
+// CHECK-51-NEXT: }
+// CHECK-51-NEXT: }
+
+#endif
+
 #endif


        


More information about the cfe-commits mailing list