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
44inline mlir::acc::DeviceType decodeDeviceType(const IdentifierInfo *ii) {
45 / '*' case leaves no identifier-info, just a nullptr.
46 if (!ii)
47 return mlir::acc::DeviceType::Star;
48 return llvm::StringSwitch<mlir::acc::DeviceType>(ii->getName())
49 .CaseLower("default", mlir::acc::DeviceType::Default)
50 .CaseLower("host", mlir::acc::DeviceType::Host)
51 .CaseLower("multicore", mlir::acc::DeviceType::Multicore)
52 .CasesLower({"nvidia", "acc_device_nvidia"},
53 mlir::acc::DeviceType::Nvidia)
54 .CaseLower("radeon", mlir::acc::DeviceType::Radeon);
55}
56} / namespace clang::CIRGen
This file defines OpenACC nodes for declarative directives.
One of these records is kept for each identifier that is lexed.
StringRef getName() const
Return the actual identifier string.
mlir::acc::DeviceType decodeDeviceType(const IdentifierInfo *ii)
mlir::acc::DataClauseModifier convertOpenACCModifiers(OpenACCModifierKind modifiers)
OpenACCModifierKind
bool isOpenACCModifierBitSet(OpenACCModifierKind List, OpenACCModifierKind Bit)

Follow Lee on X/Twitter - Father, Husband, Serial builder creating AI, crypto, games & web tools. We are friends :) AI Will Come To Life!

Check out: eBank.nz (Art Generator) | Netwrck.com (AI Tools) | Text-Generator.io (AI API) | BitBank.nz (Crypto AI) | ReadingTime (Kids Reading) | RewordGame | BigMultiplayerChess | WebFiddle | How.nz | Helix AI Assistant