llvm-project/clang/test/AST/ast-print-openacc-routine-construct.cpp
erichkeane 1c1140c4cf [OpenACC] Enable 'device_type' for 'routine'
There is a slightly different list for routine on which clauses are
permitted after it (like the rest of the constructs), but this
implements and tests them to make sure we get them right.
2025-03-07 06:49:29 -08:00

102 lines
3.7 KiB
C++

// RUN: %clang_cc1 -fopenacc -ast-print %s -o - | FileCheck %s
auto Lambda = [](){};
// CHECK: #pragma acc routine(Lambda) worker
#pragma acc routine(Lambda) worker
int function();
// CHECK: #pragma acc routine(function) vector nohost
#pragma acc routine (function) vector nohost
// CHECK: #pragma acc routine(function) device_type(Something) seq
#pragma acc routine(function) device_type(Something) seq
// CHECK: #pragma acc routine(function) dtype(Something) seq
#pragma acc routine(function) dtype(Something) seq
namespace NS {
int NSFunc();
auto Lambda = [](){};
}
// CHECK: #pragma acc routine(NS::NSFunc) seq
#pragma acc routine(NS::NSFunc) seq
// CHECK: #pragma acc routine(NS::Lambda) nohost gang
#pragma acc routine(NS::Lambda) nohost gang
constexpr int getInt() { return 1; }
struct S {
void MemFunc();
static void StaticMemFunc();
constexpr static auto Lambda = [](){};
// CHECK: #pragma acc routine(S::MemFunc) gang(dim: 1)
#pragma acc routine(S::MemFunc) gang(dim:1)
// CHECK: #pragma acc routine(S::StaticMemFunc) gang(dim: getInt())
#pragma acc routine(S::StaticMemFunc) gang(dim:getInt())
// CHECK: #pragma acc routine(S::Lambda) worker
#pragma acc routine(S::Lambda) worker
// CHECK: #pragma acc routine(MemFunc) gang(dim: 1)
#pragma acc routine(MemFunc) gang(dim:1)
// CHECK: #pragma acc routine(StaticMemFunc) gang(dim: getInt())
#pragma acc routine(StaticMemFunc) gang(dim:getInt())
// CHECK: #pragma acc routine(Lambda) nohost worker
#pragma acc routine(Lambda) nohost worker
};
// CHECK: #pragma acc routine(S::MemFunc) gang(dim: 1)
#pragma acc routine(S::MemFunc) gang(dim:1)
// CHECK: #pragma acc routine(S::StaticMemFunc) worker
#pragma acc routine(S::StaticMemFunc) worker
// CHECK: #pragma acc routine(S::Lambda) vector
#pragma acc routine(S::Lambda) vector
template<typename T>
struct DepS {
void MemFunc();
static void StaticMemFunc();
constexpr static auto Lambda = [](){ return 1;};
// CHECK: #pragma acc routine(Lambda) gang(dim: Lambda())
#pragma acc routine(Lambda) gang(dim:Lambda())
// CHECK: #pragma acc routine(MemFunc) worker
#pragma acc routine(MemFunc) worker
// CHECK: #pragma acc routine(StaticMemFunc) seq
#pragma acc routine(StaticMemFunc) seq
// CHECK: #pragma acc routine(DepS<T>::Lambda) gang(dim: 1)
#pragma acc routine(DepS::Lambda) gang(dim:1)
// CHECK: #pragma acc routine(DepS<T>::MemFunc) gang
#pragma acc routine(DepS::MemFunc) gang
// CHECK: #pragma acc routine(DepS<T>::StaticMemFunc) worker
#pragma acc routine(DepS::StaticMemFunc) worker
// CHECK: #pragma acc routine(DepS<T>::Lambda) vector
#pragma acc routine(DepS<T>::Lambda) vector
// CHECK: #pragma acc routine(DepS<T>::MemFunc) seq nohost
#pragma acc routine(DepS<T>::MemFunc) seq nohost
// CHECK: #pragma acc routine(DepS<T>::StaticMemFunc) nohost worker
#pragma acc routine(DepS<T>::StaticMemFunc) nohost worker
// CHECK: #pragma acc routine(MemFunc) worker dtype(*)
#pragma acc routine (MemFunc) worker dtype(*)
// CHECK: #pragma acc routine(MemFunc) device_type(Lambda) vector
#pragma acc routine (MemFunc) device_type(Lambda) vector
};
// CHECK: #pragma acc routine(DepS<int>::Lambda) gang
#pragma acc routine(DepS<int>::Lambda) gang
// CHECK: #pragma acc routine(DepS<int>::MemFunc) gang(dim: 1)
#pragma acc routine(DepS<int>::MemFunc) gang(dim:1)
// CHECK: #pragma acc routine(DepS<int>::StaticMemFunc) vector
#pragma acc routine(DepS<int>::StaticMemFunc) vector
template<typename T>
void TemplFunc() {
// CHECK: #pragma acc routine(T::MemFunc) gang(dim: T::SomethingElse())
#pragma acc routine(T::MemFunc) gang(dim:T::SomethingElse())
// CHECK: #pragma acc routine(T::StaticMemFunc) worker nohost
#pragma acc routine(T::StaticMemFunc) worker nohost
// CHECK: #pragma acc routine(T::Lambda) nohost seq
#pragma acc routine(T::Lambda) nohost seq
}