llvm-project/clang/test/AST/ast-print-openacc-atomic-construct.cpp
erichkeane d7724c8ea3 [OpenACC] allow 'if' clause on 'atomic' construct
This was added in OpenACC PR #511 in the 3.4 branch.  From an AST/Sema
perspective this is pretty trivial as the infrastructure for 'if'
already exists, however the atomic construct needed to be taught to take
clauses.  This patch does that and adds some testing to do so.
2025-04-02 10:03:24 -07:00

66 lines
1.5 KiB
C++

// RUN: %clang_cc1 -fopenacc -ast-print %s -o - | FileCheck %s
void foo(int v, int x) {
// CHECK: #pragma acc atomic read
// CHECK-NEXT: v = x;
#pragma acc atomic read
v = x;
// CHECK-NEXT: pragma acc atomic write
// CHECK-NEXT: v = x + 1;
#pragma acc atomic write
v = x + 1;
// CHECK-NEXT: pragma acc atomic update
// CHECK-NEXT: x++;
#pragma acc atomic update
x++;
// CHECK-NEXT: pragma acc atomic
// CHECK-NEXT: x--;
#pragma acc atomic
x--;
// CHECK-NEXT: pragma acc atomic capture
// CHECK-NEXT: v = x++;
#pragma acc atomic capture
v = x++;
// CHECK-NEXT: #pragma acc atomic capture
// CHECK-NEXT: {
// CHECK-NEXT: x--;
// CHECK-NEXT: v = x;
// CHECK-NEXT: }
#pragma acc atomic capture
{ x--; v = x; }
}
void foo2(int v, int x) {
// CHECK: #pragma acc atomic read if(v)
// CHECK-NEXT: v = x;
#pragma acc atomic read if (v)
v = x;
// CHECK-NEXT: pragma acc atomic write if(x)
// CHECK-NEXT: v = x + 1;
#pragma acc atomic write if (x)
v = x + 1;
// CHECK-NEXT: pragma acc atomic update if(true)
// CHECK-NEXT: x++;
#pragma acc atomic update if (true)
x++;
// CHECK-NEXT: pragma acc atomic if(false)
// CHECK-NEXT: x--;
#pragma acc atomic if (false)
x--;
// CHECK-NEXT: pragma acc atomic capture if(v < x)
// CHECK-NEXT: v = x++;
#pragma acc atomic capture if (v < x)
v = x++;
// CHECK-NEXT: #pragma acc atomic capture if(x > v)
// CHECK-NEXT: {
// CHECK-NEXT: x--;
// CHECK-NEXT: v = x;
// CHECK-NEXT: }
#pragma acc atomic capture if (x > v)
{ x--; v = x; }
}