r269670 - [OpenCL] Add supported OpenCL extensions to target info.
Liu, Yaxun (Sam) via cfe-commits
cfe-commits at lists.llvm.org
Thu Jun 2 13:53:08 PDT 2016
Sorry for the delay.
In ParsePragma.cpp:
void Parser::HandlePragmaOpenCLExtension() {
assert(Tok.is(tok::annot_pragma_opencl_extension));
OpenCLExtData data =
OpenCLExtData::getFromOpaqueValue(Tok.getAnnotationValue());
unsigned state = data.getInt();
IdentifierInfo *ename = data.getPointer();
SourceLocation NameLoc = Tok.getLocation();
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) \
if (Supp.is_##nm##_supported_extension(CLVer)) \
f.nm = 0;
#include "clang/Basic/OpenCLExtensions.def"
}
#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;
return;
}
}
Whether an extension is supported is represented by getTargetInfo().getSupportedOpenCLOpts(), which does not change with pragma.
Whether an extension is enabled is reprented by Actions.getOpenCLOptions(), which changes with pragma.
test/SemaOpenCL/extensions.cl contains examples of unsupported extensions.
Sam
-----Original Message-----
From: Jeroen Ketema [mailto:j.ketema at imperial.ac.uk]
Sent: Tuesday, May 31, 2016 6:07 PM
To: Liu, Yaxun (Sam) <Yaxun.Liu at amd.com>
Cc: Anastasia Stulova <Anastasia.Stulova at arm.com>; Clang Commits <cfe-commits at lists.llvm.org>; nd <nd at arm.com>
Subject: Re: r269670 - [OpenCL] Add supported OpenCL extensions to target info.
Hi Sam,
> This commit does not change the initial state of the extensions. An extension is supported is not the same as enabled. At the beginning all extensions are disabled.
I do not see this reflected in the code at all. Could you please:
a. Point me to the location where this distinction is made.
b. Convince me that I cannot enable an extension for a target if that target does not support the extension?
Jeroen
More information about the cfe-commits
mailing list