clang: lib/Basic/OpenCLOptions.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
12
14
15
17 {"__opencl_c_read_write_images", "__opencl_c_images"},
18 {"__opencl_c_3d_image_writes", "__opencl_c_images"},
19 {"__opencl_c_pipes", "__opencl_c_generic_address_space"},
20 {"__opencl_c_device_enqueue", "__opencl_c_generic_address_space"},
21 {"__opencl_c_device_enqueue", "__opencl_c_program_scope_global_variables"}};
22
23
25 {"cl_khr_fp64", "__opencl_c_fp64"},
26 {"cl_khr_3d_image_writes", "__opencl_c_3d_image_writes"}};
27
29 return OptMap.contains(Ext);
30}
31
35 return false;
36
37 auto &OptInfo = OptMap.find(Ext)->getValue();
38 if (OptInfo.isCoreIn(LO) || OptInfo.isOptionalCoreIn(LO))
40
41 return isEnabled(Ext);
42}
43
44bool OpenCLOptions::isEnabled(llvm::StringRef Ext) const {
45 auto I = OptMap.find(Ext);
46 return I != OptMap.end() && I->getValue().Enabled;
47}
48
50 auto E = OptMap.find(Ext);
51 return E != OptMap.end() && E->second.WithPragma;
52}
53
56 auto I = OptMap.find(Ext);
57 return I != OptMap.end() && I->getValue().Supported &&
58 I->getValue().isAvailableIn(LO);
59}
60
63 auto I = OptMap.find(Ext);
64 return I != OptMap.end() && I->getValue().Supported &&
65 I->getValue().isCoreIn(LO);
66}
67
70 auto I = OptMap.find(Ext);
71 return I != OptMap.end() && I->getValue().Supported &&
72 I->getValue().isOptionalCoreIn(LO);
73}
74
79
82 auto I = OptMap.find(Ext);
83 return I != OptMap.end() && I->getValue().Supported &&
84 I->getValue().isAvailableIn(LO) &&
86}
87
89 OptMap[Ext].Enabled = V;
90}
91
93 OptMap[Ext].WithPragma = V;
94}
95
97 assert(!Ext.empty() && "Extension is empty.");
98 assert(Ext[0] != '+' && Ext[0] != '-');
99 OptMap[Ext].Supported = V;
100}
101
103#define OPENCL_GENERIC_EXTENSION(Ext, ...) \
104 OptMap.insert_or_assign(#Ext, OpenCLOptionInfo{__VA_ARGS__});
105#include "clang/Basic/OpenCLExtensions.def"
106}
107
110 for (const auto &F : FeaturesMap) {
111 const auto &Name = F.getKey();
112 if (F.getValue() && isKnown(Name) && OptMap[Name].isAvailableIn(Opts))
114 }
115}
116
118 for (auto &Opt : OptMap)
119 Opt.getValue().Enabled = false;
120}
121
125
126 bool IsValid = true;
128 auto Feature = FeaturePair.first;
129 auto Dep = FeaturePair.second;
132 IsValid = false;
133 Diags.Report(diag::err_opencl_feature_requires) << Feature << Dep;
134 }
135 }
136 return IsValid;
137}
138
142
143 bool IsValid = true;
147 IsValid = false;
148 Diags.Report(diag::err_opencl_extension_and_feature_differs)
149 << ExtAndFeat.first << ExtAndFeat.second;
150 }
151 return IsValid;
152}
153
154}
Defines the Diagnostic-related interfaces.
Defines the clang::OpenCLOptions class.
Concrete class used by the front-end to report problems and issues.
DiagnosticBuilder Report(SourceLocation Loc, unsigned DiagID)
Issue the message to the client.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
bool isAvailableOption(llvm::StringRef Ext, const LangOptions &LO) const
Definition OpenCLOptions.cpp:32
static bool diagnoseUnsupportedFeatureDependencies(const TargetInfo &TI, DiagnosticsEngine &Diags)
Definition OpenCLOptions.cpp:122
bool isSupportedExtension(llvm::StringRef Ext, const LangOptions &LO) const
Definition OpenCLOptions.cpp:80
void enable(llvm::StringRef Ext, bool V=true)
Definition OpenCLOptions.cpp:88
bool isWithPragma(llvm::StringRef Ext) const
Definition OpenCLOptions.cpp:49
OpenCLOptions()
Definition OpenCLOptions.cpp:102
bool isSupportedCore(llvm::StringRef Ext, const LangOptions &LO) const
Definition OpenCLOptions.cpp:61
static bool diagnoseFeatureExtensionDifferences(const TargetInfo &TI, DiagnosticsEngine &Diags)
Definition OpenCLOptions.cpp:139
bool isSupportedCoreOrOptionalCore(llvm::StringRef Ext, const LangOptions &LO) const
Definition OpenCLOptions.cpp:75
bool isSupportedOptionalCore(llvm::StringRef Ext, const LangOptions &LO) const
Definition OpenCLOptions.cpp:68
void addSupport(const llvm::StringMap< bool > &FeaturesMap, const LangOptions &Opts)
Definition OpenCLOptions.cpp:108
void disableAll()
Definition OpenCLOptions.cpp:117
bool isSupported(llvm::StringRef Ext, const LangOptions &LO) const
Definition OpenCLOptions.cpp:54
void acceptsPragma(llvm::StringRef Ext, bool V=true)
Definition OpenCLOptions.cpp:92
void support(llvm::StringRef Ext, bool V=true)
Enable or disable support for OpenCL extensions.
Definition OpenCLOptions.cpp:96
bool isKnown(llvm::StringRef Ext) const
Definition OpenCLOptions.cpp:28
Exposes information about the current target.
virtual bool hasFeatureEnabled(const llvm::StringMap< bool > &Features, StringRef Name) const
Check if target has a given feature enabled.
llvm::StringMap< bool > & getSupportedOpenCLOpts()
Get supported OpenCL extensions and optional core features.
Defines the clang::TargetInfo interface.
The JSON file list parser is used to communicate input to InstallAPI.
static const std::pair< StringRef, StringRef > FeatureExtensionMap[]
Definition OpenCLOptions.cpp:24
static const std::pair< StringRef, StringRef > DependentFeaturesList[]
Definition OpenCLOptions.cpp:16