]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/clang/include/clang/Basic/OpenCLOptions.h
Merge ^/head r308870 through r309105.
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / clang / include / clang / Basic / OpenCLOptions.h
1 //===--- OpenCLOptions.h ----------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 ///
10 /// \file
11 /// \brief Defines the clang::OpenCLOptions class.
12 ///
13 //===----------------------------------------------------------------------===//
14
15 #ifndef LLVM_CLANG_BASIC_OPENCLOPTIONS_H
16 #define LLVM_CLANG_BASIC_OPENCLOPTIONS_H
17
18 #include <string>
19 #include <vector>
20
21 namespace clang {
22
23 /// \brief OpenCL supported extensions and optional core features
24 class OpenCLOptions {
25 public:
26 #define OPENCLEXT(nm) unsigned nm : 1;
27 #include "clang/Basic/OpenCLExtensions.def"
28
29   OpenCLOptions() {
30 #define OPENCLEXT(nm)   nm = 0;
31 #include "clang/Basic/OpenCLExtensions.def"
32   }
33
34   // Enable all options.
35   void setAll() {
36 #define OPENCLEXT(nm)   nm = 1;
37 #include "clang/Basic/OpenCLExtensions.def"
38   }
39
40   // Is supported with OpenCL version \p OCLVer.
41 #define OPENCLEXT_INTERNAL(Ext, Avail, ...) \
42   bool is_##Ext##_supported(unsigned OCLVer) const { \
43     return Ext && OCLVer >= Avail; \
44   }
45 #include "clang/Basic/OpenCLExtensions.def"
46
47
48   // Is supported OpenCL extension with OpenCL version \p OCLVer.
49   // For supported optional core feature, return false.
50 #define OPENCLEXT_INTERNAL(Ext, Avail, Core) \
51   bool is_##Ext##_supported_extension(unsigned CLVer) const { \
52     return is_##Ext##_supported(CLVer) && (Core == ~0U || CLVer < Core); \
53   }
54 #include "clang/Basic/OpenCLExtensions.def"
55
56   // Is supported OpenCL core features with OpenCL version \p OCLVer.
57   // For supported extension, return false.
58 #define OPENCLEXT_INTERNAL(Ext, Avail, Core) \
59   bool is_##Ext##_supported_core(unsigned CLVer) const { \
60     return is_##Ext##_supported(CLVer) && Core != ~0U && CLVer >= Core; \
61   }
62 #include "clang/Basic/OpenCLExtensions.def"
63
64 };
65
66 }  // end namespace clang
67
68 #endif