diff options
| author | Yaxun Liu <Yaxun.Liu@amd.com> | 2016-05-13 15:44:37 +0000 |
|---|---|---|
| committer | Yaxun Liu <Yaxun.Liu@amd.com> | 2016-05-13 15:44:37 +0000 |
| commit | 64936ce91dba4fe91655629ce1a25895f2af6f51 (patch) | |
| tree | 193e74b8eb9cbefed8552d6d4ba102e062e737b0 /clang/lib/Parse | |
| parent | 57cdcb07d69cddb702ca4a428eb5c6bdb2fa0a88 (diff) | |
| download | bcm5719-llvm-64936ce91dba4fe91655629ce1a25895f2af6f51.tar.gz bcm5719-llvm-64936ce91dba4fe91655629ce1a25895f2af6f51.zip | |
[OpenCL] Add supported OpenCL extensions to target info.
Add supported OpenCL extensions to target info. It serves as default values to save the users of the burden setting each supported extensions and optional core features in command line.
Differential Revision: http://reviews.llvm.org/D19484
llvm-svn: 269431
Diffstat (limited to 'clang/lib/Parse')
| -rw-r--r-- | clang/lib/Parse/ParsePragma.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/clang/lib/Parse/ParsePragma.cpp b/clang/lib/Parse/ParsePragma.cpp index 6024a622108..9e9a749bb98 100644 --- a/clang/lib/Parse/ParsePragma.cpp +++ b/clang/lib/Parse/ParsePragma.cpp @@ -468,14 +468,24 @@ void Parser::HandlePragmaOpenCLExtension() { ConsumeToken(); // The annotation token. OpenCLOptions &f = Actions.getOpenCLOptions(); + auto CLVer = getLangOpts().OpenCLVersion; + auto &Supp = getTargetInfo().getSupportedOpenCLOpts(); // OpenCL 1.1 9.1: "The all variant sets the behavior for all extensions, // overriding all previously issued extension directives, but only if the // behavior is set to disable." if (state == 0 && ename->isStr("all")) { -#define OPENCLEXT(nm) f.nm = 0; +#define OPENCLEXT(nm) \ + if (Supp.is_##nm##_supported_extension(CLVer)) \ + f.nm = 0; #include "clang/Basic/OpenCLExtensions.def" } -#define OPENCLEXT(nm) else if (ename->isStr(#nm)) { f.nm = state; } +#define OPENCLEXT(nm) else if (ename->isStr(#nm)) \ + if (Supp.is_##nm##_supported_extension(CLVer)) \ + f.nm = state; \ + else if (Supp.is_##nm##_supported_core(CLVer)) \ + PP.Diag(NameLoc, diag::warn_pragma_extension_is_core) << ename; \ + else \ + PP.Diag(NameLoc, diag::warn_pragma_unsupported_extension) << ename; #include "clang/Basic/OpenCLExtensions.def" else { PP.Diag(NameLoc, diag::warn_pragma_unknown_extension) << ename; |

