clang 22.0.0git
CIRGenOpenACCHelpers.h
Go to the documentation of this file.
1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This contains helpers for OpenACC emission that don't need to be in
10// CIRGenModule, but can't live in a single .cpp file.
11//
12//===----------------------------------------------------------------------===//
13#include "mlir/Dialect/OpenACC/OpenACC.h"
15
16namespace clang::CIRGen {
17inline mlir::acc::DataClauseModifier
19 using namespace mlir::acc;
20 static_assert(static_cast<int>(OpenACCModifierKind::Zero) ==
21 static_cast<int>(DataClauseModifier::zero) &&
22 static_cast<int>(OpenACCModifierKind::Readonly) ==
23 static_cast<int>(DataClauseModifier::readonly) &&
24 static_cast<int>(OpenACCModifierKind::AlwaysIn) ==
25 static_cast<int>(DataClauseModifier::alwaysin) &&
26 static_cast<int>(OpenACCModifierKind::AlwaysOut) ==
27 static_cast<int>(DataClauseModifier::alwaysout) &&
28 static_cast<int>(OpenACCModifierKind::Capture) ==
29 static_cast<int>(DataClauseModifier::capture));
30
31 DataClauseModifier mlirModifiers{};
32
33 // The MLIR representation of this represents `always` as `alwaysin` +
34 // `alwaysout`. So do a small fixup here.
36 mlirModifiers = mlirModifiers | DataClauseModifier::always;
38 }
39
40 mlirModifiers = mlirModifiers | static_cast<DataClauseModifier>(modifiers);
41 return mlirModifiers;
42}
43} // namespace clang::CIRGen
This file defines OpenACC nodes for declarative directives.
mlir::acc::DataClauseModifier convertOpenACCModifiers(OpenACCModifierKind modifiers)
OpenACCModifierKind
bool isOpenACCModifierBitSet(OpenACCModifierKind List, OpenACCModifierKind Bit)