clang 22.0.0git
AddressSpaces.h
Go to the documentation of this file.
1//===- AddressSpaces.h - Language-specific address spaces -------*- C++ -*-===//
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/// \file
10/// Provides definitions for the various language-specific address
11/// spaces.
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef LLVM_CLANG_BASIC_ADDRESSSPACES_H
16#define LLVM_CLANG_BASIC_ADDRESSSPACES_H
17
18#include <cassert>
19
20namespace clang {
21
22/// Defines the address space values used by the address space qualifier
23/// of QualType.
24///
25enum class LangAS : unsigned {
26 // The default value 0 is the value used in QualType for the situation
27 // where there is no address space qualifier.
29
30 // OpenCL specific address spaces.
31 // In OpenCL each l-value must have certain non-default address space, each
32 // r-value must have no address space (i.e. the default address space). The
33 // pointee of a pointer must have non-default address space.
41
42 // CUDA specific address spaces.
46
47 // SYCL specific address spaces.
53
54 // Pointer size and extension address spaces.
58
59 // HLSL specific address spaces.
65
66 // Wasm specific address spaces.
68
69 // This denotes the count of language-specific address spaces and also
70 // the offset added to the target-specific address spaces, which are usually
71 // specified by address space attributes __attribute__(address_space(n))).
73};
74
75/// The type of a lookup table which maps from language-specific address spaces
76/// to target-specific ones.
78
79/// \return whether \p AS is a target-specific address space rather than a
80/// clang AST address space
82 return (unsigned)AS >= (unsigned)LangAS::FirstTargetAddressSpace;
83}
84
85inline unsigned toTargetAddressSpace(LangAS AS) {
86 assert(isTargetAddressSpace(AS));
87 return (unsigned)AS - (unsigned)LangAS::FirstTargetAddressSpace;
88}
89
90inline LangAS getLangASFromTargetAS(unsigned TargetAS) {
91 return static_cast<LangAS>((TargetAS) +
93}
94
96 return (AS == LangAS::ptr32_sptr || AS == LangAS::ptr32_uptr ||
97 AS == LangAS::ptr64);
98}
99
100} // namespace clang
101
102#endif // LLVM_CLANG_BASIC_ADDRESSSPACES_H
The JSON file list parser is used to communicate input to InstallAPI.
bool isTargetAddressSpace(LangAS AS)
unsigned toTargetAddressSpace(LangAS AS)
LangAS
Defines the address space values used by the address space qualifier of QualType.
bool isPtrSizeAddressSpace(LangAS AS)
LangAS getLangASFromTargetAS(unsigned TargetAS)
unsigned[(unsigned) LangAS::FirstTargetAddressSpace] LangASMap
The type of a lookup table which maps from language-specific address spaces to target-specific ones.