44 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8//9// This contains helpers for OpenACC emission that don't need to be in10// CIRGenModule, but can't live in a single .cpp file.11//12//===----------------------------------------------------------------------===//13#include "mlir/Dialect/OpenACC/OpenACC.h"14#include "clang/AST/DeclOpenACC.h"15 16namespace clang::CIRGen {17inline mlir::acc::DataClauseModifier18convertOpenACCModifiers(OpenACCModifierKind modifiers) {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.35 if (isOpenACCModifierBitSet(modifiers, OpenACCModifierKind::Always)) {36 mlirModifiers = mlirModifiers | DataClauseModifier::always;37 modifiers &= ~OpenACCModifierKind::Always;38 }39 40 mlirModifiers = mlirModifiers | static_cast<DataClauseModifier>(modifiers);41 return mlirModifiers;42}43} // namespace clang::CIRGen44