By the way, are you accidentally violating:

<quote>
The initial state of the compiler is as if the directive
#pragma OPENCL EXTENSION all : disable
was issued, telling the compiler that all error and warning reporting must be 
done according to this specification, ignoring any extensions.
</quote>

That from just before the text quoted below.

Jeroen

> On 31 May 2016, at 22:30, Jeroen Ketema <j.ket...@imperial.ac.uk> wrote:
> 
> 
> Hi Sam,
> 
> Fair enough. However, if I read your quote correctly, then there is 
> absolutely no need to define a cl_khr_icd, pragma, as ICD in no way affects 
> the language. Why do you define one anyway?
> 
> The following also hasn’t been cleared up yet:
> 
> <quote>
> * If I understand the patch correctly, it allows me to enable extensions for 
> targets that do not support it. There does not seem a check against the 
> initially enabled extensions, just a check for what is or isn't supported in 
> a particular version of OpenCL. This means I can now, e.g., enable sharing 
> with Direct3D 11 for the nvptx target even though this target does not 
> support this functionality.
> </quote>
> 
> Could you please clarify?
> 
> Thanks,
> 
> Jeroen
> 
>> On 31 May 2016, at 21:29, Liu, Yaxun (Sam) <yaxun....@amd.com> wrote:
>> 
>> Hi Jeroen,
>> 
>> OpenCL spec v1.1 s9.1 says
>> 
>> Every extension which affects the OpenCL language semantics, syntax or adds 
>> built-in functions
>> to the language must create a preprocessor #define that matches the 
>> extension name string.
>> This #define would be available in the language if and only if the extension 
>> is supported on a
>> given implementation.
>> 
>> The spec does not say pragma enabling/disabling an extension will 
>> define/undefined the macro.
>> 
>> Also before this commit, Clang did not define/undefine the macro based on 
>> pragma either.
>> 
>> You could define/undefined your own macro to indicate an extension is 
>> enabled/disabled then use it to condition your code.
>> 
>> Thanks.
>> 
>> Sam
>> 
>> -----Original Message-----
>> From: Jeroen Ketema [mailto:j.ket...@imperial.ac.uk] 
>> Sent: Monday, May 30, 2016 10:08 AM
>> To: Anastasia Stulova <anastasia.stul...@arm.com>
>> Cc: Liu, Yaxun (Sam) <yaxun....@amd.com>; Clang Commits 
>> <cfe-commits@lists.llvm.org>; nd <n...@arm.com>
>> Subject: Re: r269670 - [OpenCL] Add supported OpenCL extensions to target 
>> info.
>> 
>> 
>> Hi Anastasia,
>> 
>> My apologies for my slow reply. My main issue was that the defaults have 
>> changed, which is somewhat annoying. However, digging deeper into this I'm 
>> noticing two serious problems:
>> 
>> * When I do:
>> 
>> #pragma OPENCL EXTENSION cl_khr_fp16 : disable
>> 
>> the cl_khr_fp16 macro stays defined in code I compile down to the SPIR 
>> target, which means I cannot do conditional compilation based on which 
>> extensions are enabled/disabled. This means I now need to start pulling 
>> additional manual tricks to do conditional compilation of half precision 
>> code.
>> 
>> [Sam] Before this change, clang did not define/undefine cl_khr_fp16 based on 
>> pragma. How could your code work?
>> 
>> * If I understand the patch correctly, it allows me to enable extensions for 
>> targets that do not support it. There does not seem a check against the 
>> initially enabled extensions, just a check for what is or isn't supported in 
>> a particular version of OpenCL. This means I can now, e.g., enable sharing 
>> with Direct3D 11 for the nvptx target even though this target does not 
>> support this functionality.
>> 
>> On top of the above, I do not understand why this patch introduces code for 
>> extensions like ICD, which is an OpenCL API concept and not a OpenCL C 
>> concept.
>> [Sam] The spec requires 
>> 
>> Jeroen
>> 
>>> On 20 May 2016, at 21:01, Anastasia Stulova <anastasia.stul...@arm.com> 
>>> wrote:
>>> 
>>> Thanks Sam!
>>> 
>>> @Jeroen, could you give us more details about your problem.
>>> 
>>> Anastasia
>>> 
>>> -----Original Message-----
>>> From: Liu, Yaxun (Sam) [mailto:yaxun....@amd.com]
>>> Sent: 20 May 2016 20:52
>>> To: Anastasia Stulova; Jeroen Ketema
>>> Cc: Clang Commits; nd
>>> Subject: RE: r269670 - [OpenCL] Add supported OpenCL extensions to target 
>>> info.
>>> 
>>> I think this feature can be implemented by keeping a record of enabled 
>>> OpenCL extensions by user's program.
>>> 
>>> For optional core feature cl_khr_fp64, we just need to detect if double 
>>> type is used by user's program.
>>> 
>>> Sam
>>> 
>>> -----Original Message-----
>>> From: Liu, Yaxun (Sam)
>>> Sent: Friday, May 20, 2016 3:45 PM
>>> To: 'Anastasia Stulova' <anastasia.stul...@arm.com>; Jeroen Ketema 
>>> <j.ket...@imperial.ac.uk>
>>> Cc: Clang Commits <cfe-commits@lists.llvm.org>; nd <n...@arm.com>
>>> Subject: RE: r269670 - [OpenCL] Add supported OpenCL extensions to target 
>>> info.
>>> 
>>> Currently Clang does not emit opencl.used.extensions metadata, so the issue 
>>> mentioned does not exist.
>>> 
>>> Also extensions supported by a target and extensions used by an OpenCL 
>>> program is different concept.
>>> 
>>> I'd say Clang currently miss a feature to detect used extensions and emit 
>>> the metadata.
>>> 
>>> Sam
>>> 
>>> -----Original Message-----
>>> From: Anastasia Stulova [mailto:anastasia.stul...@arm.com]
>>> Sent: Friday, May 20, 2016 3:23 PM
>>> To: Liu, Yaxun (Sam) <yaxun....@amd.com>; Jeroen Ketema 
>>> <j.ket...@imperial.ac.uk>
>>> Cc: Clang Commits <cfe-commits@lists.llvm.org>; nd <n...@arm.com>
>>> Subject: Re: r269670 - [OpenCL] Add supported OpenCL extensions to target 
>>> info.
>>> 
>>> Hi Sam,
>>> 
>>> Has this been addressed?
>>> 
>>> @Jeroen, as far as I am aware adding supported extensions is completely new 
>>> to Clang and shouldn't be braking any existing functionality that are 
>>> related to that. Could you elaborate on the problem. Would creating new 
>>> Clang target help? Otherwise, do you have any other proposal for the 
>>> solution?
>>> 
>>> Thanks,
>>> Anastasia
>>> 
>>> 
>>> ________________________________________
>>> From: cfe-commits <cfe-commits-boun...@lists.llvm.org> on behalf of 
>>> Jeroen Ketema via cfe-commits <cfe-commits@lists.llvm.org>
>>> Sent: 17 May 2016 12:49
>>> To: Yaxun Liu via cfe-commits
>>> Subject: Re: r269670 - [OpenCL] Add supported OpenCL extensions to target 
>>> info.
>>> 
>>> Hi,
>>> 
>>> The below commit enables all OpenCL extensions for the SPIR target by 
>>> default. This incorrect, as SPIR allows you to specify which extensions are 
>>> enabled/disabled its metadata. This means that any SPIR generated by Clang 
>>> may now be rejected by specific OpenCL platforms, because they might not 
>>> support all extensions.
>>> 
>>> If possible I would like to see this commit reverted until that problem has 
>>> been addressed.
>>> 
>>> Regards,
>>> 
>>> Jeroen
>>> 
>>>> On 16 May 2016, at 18:06, Yaxun Liu via cfe-commits <cfe-commits at 
>>>> lists.llvm.org> wrote:
>>>> 
>>>> Author: yaxunl
>>>> Date: Mon May 16 12:06:34 2016
>>>> New Revision: 269670
>>>> 
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=269670&view=rev
>>>> Log:
>>>> [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.
>>>> 
>>>> Re-commit after fixing build error due to missing override attribute.
>>>> 
>>>> Differential Revision: http://reviews.llvm.org/D19484
>>>> 
>>>> Added:
>>>> cfe/trunk/include/clang/Basic/OpenCLOptions.h
>>>> cfe/trunk/test/SemaOpenCL/extensions.cl
>>>> Removed:
>>>> cfe/trunk/test/SemaOpenCL/extension-fp64-cl1.1.cl
>>>> cfe/trunk/test/SemaOpenCL/extension-fp64.cl
>>>> cfe/trunk/test/SemaOpenCL/optional-core-fp64-cl1.2.cl
>>>> cfe/trunk/test/SemaOpenCL/optional-core-fp64-cl2.0.cl
>>>> Modified:
>>>> cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
>>>> cfe/trunk/include/clang/Basic/LangOptions.h
>>>> cfe/trunk/include/clang/Basic/OpenCLExtensions.def
>>>> cfe/trunk/include/clang/Basic/TargetInfo.h
>>>> cfe/trunk/include/clang/Basic/TargetOptions.h
>>>> cfe/trunk/lib/Basic/Targets.cpp
>>>> cfe/trunk/lib/Frontend/InitPreprocessor.cpp
>>>> cfe/trunk/lib/Parse/ParsePragma.cpp
>>>> cfe/trunk/lib/Sema/Sema.cpp
>>>> cfe/trunk/test/CodeGenOpenCL/builtins-r600.cl
>>>> cfe/trunk/test/CodeGenOpenCL/fpmath.cl
>>>> cfe/trunk/test/CodeGenOpenCL/half.cl
>>>> cfe/trunk/test/Lexer/opencl-half-literal.cl
>>>> cfe/trunk/test/Misc/languageOptsOpenCL.cl
>>>> cfe/trunk/test/PCH/opencl-extensions.cl
>>>> cfe/trunk/test/Parser/opencl-astype.cl
>>>> cfe/trunk/test/Parser/opencl-atomics-cl20.cl
>>>> cfe/trunk/test/Parser/opencl-pragma.cl
>>>> cfe/trunk/test/Parser/opencl-storage-class.cl
>>>> cfe/trunk/test/SemaOpenCL/half.cl
>>>> cfe/trunk/test/SemaOpenCL/invalid-kernel-parameters.cl
>>>> cfe/trunk/test/SemaOpenCL/invalid-logical-ops-1.2.cl
>>>> 
>>>> Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Dia
>>>> g nosticParseKinds.td?rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original)
>>>> +++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Mon May 16
>>>> +++ 12:06:34 2016
>>>> @@ -926,6 +926,10 @@ def warn_pragma_expected_enable_disable
>>>> "expected 'enable' or 'disable' - ignoring">, 
>>>> InGroup<IgnoredPragmas>; def warn_pragma_unknown_extension : Warning< 
>>>> "unknown OpenCL extension %0 - ignoring">, InGroup<IgnoredPragmas>;
>>>> +def warn_pragma_unsupported_extension : Warning<
>>>> +  "unsupported OpenCL extension %0 - ignoring">, 
>>>> +InGroup<IgnoredPragmas>; def warn_pragma_extension_is_core : 
>>>> +Warning<
>>>> +  "OpenCL extension %0 is core feature or supported optional core 
>>>> +feature - ignoring">, InGroup<IgnoredPragmas>;
>>>> 
>>>> // OpenCL errors.
>>>> def err_opencl_taking_function_address_parser : Error<
>>>> 
>>>> Modified: cfe/trunk/include/clang/Basic/LangOptions.h
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Lan
>>>> g Options.h?rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/include/clang/Basic/LangOptions.h (original)
>>>> +++ cfe/trunk/include/clang/Basic/LangOptions.h Mon May 16 12:06:34
>>>> +++ 2016
>>>> @@ -160,18 +160,6 @@ public:
>>>> fp_contract(LangOpts.DefaultFPContract) {} };
>>>> 
>>>> -/// \brief OpenCL volatile options
>>>> -class OpenCLOptions {
>>>> -public:
>>>> -#define OPENCLEXT(nm)  unsigned nm : 1; -#include 
>>>> "clang/Basic/OpenCLExtensions.def"
>>>> -
>>>> -  OpenCLOptions() {
>>>> -#define OPENCLEXT(nm)   nm = 0;
>>>> -#include "clang/Basic/OpenCLExtensions.def"
>>>> -  }
>>>> -};
>>>> -
>>>> /// \brief Describes the kind of translation unit being processed.
>>>> enum TranslationUnitKind {
>>>> /// \brief The translation unit is a complete translation unit.
>>>> 
>>>> Modified: cfe/trunk/include/clang/Basic/OpenCLExtensions.def
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Ope
>>>> n CLExtensions.def?rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/include/clang/Basic/OpenCLExtensions.def (original)
>>>> +++ cfe/trunk/include/clang/Basic/OpenCLExtensions.def Mon May 16
>>>> +++ 12:06:34 2016
>>>> @@ -11,25 +11,67 @@
>>>> //
>>>> //===----------------------------------------------------------------
>>>> -
>>>> -----===//
>>>> 
>>>> +// Macro OPENCLEXT or OPENCLEXT_INTERNAL can be defined to enumerate 
>>>> +the // OpenCL extensions listed in this file.
>>>> +//
>>>> +// If the extensions are to be enumerated without the supported 
>>>> +OpenCL version, // define OPENCLEXT(ext) where ext is the name of the 
>>>> extension.
>>>> +//
>>>> +// If the extensions are to be enumerated with supported OpenCL 
>>>> +version, // define OPENCLEXT_INTERNAL(ext, avail, core) where
>>>> +//   ext - name of the extension or optional core feature.
>>>> +//   avail - minimum OpenCL version supporting it.
>>>> +//   core - minimum OpenCL version when the extension becomes optional 
>>>> core
>>>> +//          feature or core feature. ~0U indicates not a core feature or 
>>>> an
>>>> +//          optional core feature.
>>>> +
>>>> +#ifndef OPENCLEXT_INTERNAL
>>>> +#ifndef OPENCLEXT
>>>> +#pragma error "macro OPENCLEXT or OPENCLEXT_INTERNAL is required"
>>>> +#else
>>>> +#define OPENCLEXT_INTERNAL(ext, ...) OPENCLEXT(ext) #endif // 
>>>> +OPENCLEXT #endif // OPENCLEXT_INTERNAL
>>>> +
>>>> +// OpenCL 1.0.
>>>> +OPENCLEXT_INTERNAL(cl_khr_3d_image_writes, 100, 120) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_byte_addressable_store, 100, 110) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_fp16, 100, ~0U) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_fp64, 100, 120) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_global_int32_base_atomics, 100, 110) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_global_int32_extended_atomics, 100, 110) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_gl_sharing, 100, ~0U) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_icd, 100, ~0U) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_local_int32_base_atomics, 100, 110) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_local_int32_extended_atomics, 100, 110)
>>>> +
>>>> // OpenCL 1.1.
>>>> -OPENCLEXT(cl_khr_fp64)
>>>> -OPENCLEXT(cl_khr_int64_base_atomics)
>>>> -OPENCLEXT(cl_khr_int64_extended_atomics)
>>>> -OPENCLEXT(cl_khr_fp16)
>>>> -OPENCLEXT(cl_khr_gl_sharing)
>>>> -OPENCLEXT(cl_khr_gl_event)
>>>> -OPENCLEXT(cl_khr_d3d10_sharing)
>>>> -OPENCLEXT(cl_khr_global_int32_base_atomics)
>>>> -OPENCLEXT(cl_khr_global_int32_extended_atomics)
>>>> -OPENCLEXT(cl_khr_local_int32_base_atomics)
>>>> -OPENCLEXT(cl_khr_local_int32_extended_atomics)
>>>> -OPENCLEXT(cl_khr_byte_addressable_store)
>>>> -OPENCLEXT(cl_khr_3d_image_writes)
>>>> +OPENCLEXT_INTERNAL(cl_khr_d3d10_sharing, 110, ~0U) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_gl_event, 110, ~0U) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_int64_base_atomics, 110, ~0U) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_int64_extended_atomics, 110, ~0U)
>>>> +
>>>> +// OpenCL 1.2.
>>>> +OPENCLEXT_INTERNAL(cl_khr_d3d11_sharing, 120, ~0U) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_depth_images, 120, ~0U) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_dx9_media_sharing, 120, ~0U) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_gl_depth_images, 120, ~0U) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_spir, 120, ~0U)
>>>> 
>>>> -// OpenCL 2.0
>>>> -OPENCLEXT(cl_khr_gl_msaa_sharing)
>>>> +// OpenCL 2.0.
>>>> +OPENCLEXT_INTERNAL(cl_khr_egl_event, 200, ~0U) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_egl_image, 200, ~0U) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_gl_msaa_sharing, 200, ~0U) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_initialize_memory, 200, ~0U) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_srgb_image_writes, 200, ~0U) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_subgroups, 200, ~0U) 
>>>> +OPENCLEXT_INTERNAL(cl_khr_terminate_context, 200, ~0U)
>>>> 
>>>> // Clang Extensions.
>>>> -OPENCLEXT(cl_clang_storage_class_specifiers)
>>>> +OPENCLEXT_INTERNAL(cl_clang_storage_class_specifiers, 100, ~0U)
>>>> +
>>>> +#undef OPENCLEXT_INTERNAL
>>>> 
>>>> +#ifdef OPENCLEXT
>>>> #undef OPENCLEXT
>>>> +#endif
>>>> 
>>>> Added: cfe/trunk/include/clang/Basic/OpenCLOptions.h
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Ope
>>>> n
>>>> CLOptions.h?rev=269670&view=auto
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/include/clang/Basic/OpenCLOptions.h (added)
>>>> +++ cfe/trunk/include/clang/Basic/OpenCLOptions.h Mon May 16 12:06:34
>>>> +++ 2016
>>>> @@ -0,0 +1,68 @@
>>>> +//===--- OpenCLOptions.h ----------------------------------------*-
>>>> +C++ -*-===// //
>>>> +//                     The LLVM Compiler Infrastructure
>>>> +//
>>>> +// This file is distributed under the University of Illinois Open 
>>>> +Source // License. See LICENSE.TXT for details.
>>>> +//
>>>> +//===---------------------------------------------------------------
>>>> +-
>>>> +------===//
>>>> +///
>>>> +/// \file
>>>> +/// \brief Defines the clang::OpenCLOptions class.
>>>> +///
>>>> +//===---------------------------------------------------------------
>>>> +-
>>>> +------===//
>>>> +
>>>> +#ifndef LLVM_CLANG_BASIC_OPENCLOPTIONS_H #define 
>>>> +LLVM_CLANG_BASIC_OPENCLOPTIONS_H
>>>> +
>>>> +#include <string>
>>>> +#include <vector>
>>>> +
>>>> +namespace clang {
>>>> +
>>>> +/// \brief OpenCL supported extensions and optional core features 
>>>> +class OpenCLOptions {
>>>> +public:
>>>> +#define OPENCLEXT(nm) unsigned nm : 1; #include 
>>>> +"clang/Basic/OpenCLExtensions.def"
>>>> +
>>>> +  OpenCLOptions() {
>>>> +#define OPENCLEXT(nm)   nm = 0;
>>>> +#include "clang/Basic/OpenCLExtensions.def"
>>>> +  }
>>>> +
>>>> +  // Enable all options.
>>>> +  void setAll() {
>>>> +#define OPENCLEXT(nm)   nm = 1;
>>>> +#include "clang/Basic/OpenCLExtensions.def"
>>>> +  }
>>>> +
>>>> +  // Is supported with OpenCL version \p OCLVer.
>>>> +#define OPENCLEXT_INTERNAL(Ext, Avail, ...) \
>>>> +  bool is_##Ext##_supported(unsigned OCLVer) const { \
>>>> +    return Ext && OCLVer >= Avail; \
>>>> +  }
>>>> +#include "clang/Basic/OpenCLExtensions.def"
>>>> +
>>>> +
>>>> +  // Is supported OpenCL extension with OpenCL version \p OCLVer.
>>>> +  // For supported optional core feature, return false.
>>>> +#define OPENCLEXT_INTERNAL(Ext, Avail, Core) \
>>>> +  bool is_##Ext##_supported_extension(unsigned CLVer) const { \
>>>> +    return is_##Ext##_supported(CLVer) && (Core == ~0U || CLVer < 
>>>> +Core); \
>>>> +  }
>>>> +#include "clang/Basic/OpenCLExtensions.def"
>>>> +
>>>> +  // Is supported OpenCL core features with OpenCL version \p OCLVer.
>>>> +  // For supported extension, return false.
>>>> +#define OPENCLEXT_INTERNAL(Ext, Avail, Core) \
>>>> +  bool is_##Ext##_supported_core(unsigned CLVer) const { \
>>>> +    return is_##Ext##_supported(CLVer) && Core != ~0U && CLVer >= 
>>>> +Core; \
>>>> +  }
>>>> +#include "clang/Basic/OpenCLExtensions.def"
>>>> +
>>>> +};
>>>> +
>>>> +}  // end namespace clang
>>>> +
>>>> +#endif
>>>> 
>>>> Modified: cfe/trunk/include/clang/Basic/TargetInfo.h
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Tar
>>>> g etInfo.h?rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/include/clang/Basic/TargetInfo.h (original)
>>>> +++ cfe/trunk/include/clang/Basic/TargetInfo.h Mon May 16 12:06:34
>>>> +++ 2016
>>>> @@ -969,6 +969,19 @@ public:
>>>> /// \brief Whether target allows to overalign ABI-specified prefered 
>>>> alignment  virtual bool allowsLargerPreferedTypeAlignment() const { 
>>>> return true; }
>>>> 
>>>> +  /// \brief Set supported OpenCL extensions and optional core features.
>>>> +  virtual void setSupportedOpenCLOpts() {}
>>>> +
>>>> +  /// \brief Get supported OpenCL extensions and optional core features.
>>>> +  OpenCLOptions &getSupportedOpenCLOpts() {
>>>> +    return getTargetOpts().SupportedOpenCLOptions;
>>>> +  }
>>>> +
>>>> +  /// \brief Get const supported OpenCL extensions and optional core 
>>>> features.
>>>> +  const OpenCLOptions &getSupportedOpenCLOpts() const {
>>>> +      return getTargetOpts().SupportedOpenCLOptions;
>>>> +  }
>>>> +
>>>> protected:
>>>> virtual uint64_t getPointerWidthV(unsigned AddrSpace) const {
>>>> return PointerWidth;
>>>> 
>>>> Modified: cfe/trunk/include/clang/Basic/TargetOptions.h
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Tar
>>>> g etOptions.h?rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/include/clang/Basic/TargetOptions.h (original)
>>>> +++ cfe/trunk/include/clang/Basic/TargetOptions.h Mon May 16 12:06:34
>>>> +++ 2016
>>>> @@ -17,6 +17,7 @@
>>>> 
>>>> #include <string>
>>>> #include <vector>
>>>> +#include "clang/Basic/OpenCLOptions.h"
>>>> 
>>>> namespace clang {
>>>> 
>>>> @@ -54,6 +55,9 @@ public:
>>>> std::vector<std::string> Features;
>>>> 
>>>> std::vector<std::string> Reciprocals;
>>>> +
>>>> +  /// Supported OpenCL extensions and optional core features.
>>>> +  OpenCLOptions SupportedOpenCLOptions;
>>>> };
>>>> 
>>>> }  // end namespace clang
>>>> 
>>>> Modified: cfe/trunk/lib/Basic/Targets.cpp
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?r
>>>> e v=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/lib/Basic/Targets.cpp (original)
>>>> +++ cfe/trunk/lib/Basic/Targets.cpp Mon May 16 12:06:34 2016
>>>> @@ -1999,17 +1999,6 @@ public:
>>>>   Builder.defineMacro("__HAS_FMAF__");
>>>> if (hasLDEXPF)
>>>>   Builder.defineMacro("__HAS_LDEXPF__");
>>>> -    if (hasFP64 && Opts.OpenCL)
>>>> -      Builder.defineMacro("cl_khr_fp64");
>>>> -    if (Opts.OpenCL) {
>>>> -      if (GPU >= GK_NORTHERN_ISLANDS) {
>>>> -        Builder.defineMacro("cl_khr_byte_addressable_store");
>>>> -        Builder.defineMacro("cl_khr_global_int32_base_atomics");
>>>> -        Builder.defineMacro("cl_khr_global_int32_extended_atomics");
>>>> -        Builder.defineMacro("cl_khr_local_int32_base_atomics");
>>>> -        Builder.defineMacro("cl_khr_local_int32_extended_atomics");
>>>> -      }
>>>> -    }
>>>> }
>>>> 
>>>> BuiltinVaListKind getBuiltinVaListKind() const override { @@ -2097,6
>>>> +2086,31 @@ public:
>>>> 
>>>> return true;
>>>> }
>>>> +
>>>> +   void setSupportedOpenCLOpts() override {
>>>> +     auto &Opts = getSupportedOpenCLOpts();
>>>> +     Opts.cl_clang_storage_class_specifiers = 1;
>>>> +     Opts.cl_khr_gl_sharing = 1;
>>>> +     Opts.cl_khr_gl_event = 1;
>>>> +     Opts.cl_khr_d3d10_sharing = 1;
>>>> +     Opts.cl_khr_subgroups = 1;
>>>> +
>>>> +     if (hasFP64)
>>>> +       Opts.cl_khr_fp64 = 1;
>>>> +     if (GPU >= GK_NORTHERN_ISLANDS) {
>>>> +       Opts.cl_khr_byte_addressable_store = 1;
>>>> +       Opts.cl_khr_global_int32_base_atomics = 1;
>>>> +       Opts.cl_khr_global_int32_extended_atomics = 1;
>>>> +       Opts.cl_khr_local_int32_base_atomics = 1;
>>>> +       Opts.cl_khr_local_int32_extended_atomics = 1;
>>>> +     }
>>>> +     if (GPU >= GK_SOUTHERN_ISLANDS)
>>>> +       Opts.cl_khr_fp16 = 1;
>>>> +       Opts.cl_khr_int64_base_atomics = 1;
>>>> +       Opts.cl_khr_int64_extended_atomics = 1;
>>>> +       Opts.cl_khr_3d_image_writes = 1;
>>>> +       Opts.cl_khr_gl_msaa_sharing = 1;  }
>>>> };
>>>> 
>>>> const Builtin::Info AMDGPUTargetInfo::BuiltinInfo[] = { @@ -2716,6
>>>> +2730,10 @@ public:
>>>> bool hasSjLjLowering() const override {
>>>> return true;
>>>> }
>>>> +
>>>> +  void setSupportedOpenCLOpts() override {
>>>> +    getSupportedOpenCLOpts().setAll();
>>>> +  }
>>>> };
>>>> 
>>>> bool X86TargetInfo::setFPMath(StringRef Name) { @@ -7858,6 +7876,12 
>>>> @@
>>>> public:
>>>> CallingConv getDefaultCallingConv(CallingConvMethodType MT) const override 
>>>> {
>>>> return CC_SpirFunction;
>>>> }
>>>> +
>>>> +  void setSupportedOpenCLOpts() override {
>>>> +    // Assume all OpenCL extensions and optional core features are 
>>>> supported
>>>> +    // for SPIR since it is a generic target.
>>>> +    getSupportedOpenCLOpts().setAll();
>>>> +  }
>>>> };
>>>> 
>>>> class SPIR32TargetInfo : public SPIRTargetInfo { @@ -8458,5 +8482,7 
>>>> @@ TargetInfo::CreateTargetInfo(Diagnostics
>>>> if (!Target->handleTargetFeatures(Opts->Features, Diags))
>>>> return nullptr;
>>>> 
>>>> +  Target->setSupportedOpenCLOpts();
>>>> +
>>>> return Target.release();
>>>> }
>>>> 
>>>> Modified: cfe/trunk/lib/Frontend/InitPreprocessor.cpp
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitPrepro
>>>> c essor.cpp?rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/lib/Frontend/InitPreprocessor.cpp (original)
>>>> +++ cfe/trunk/lib/Frontend/InitPreprocessor.cpp Mon May 16 12:06:34
>>>> +++ 2016
>>>> @@ -938,6 +938,15 @@ static void InitializePredefinedMacros(c
>>>> Builder.defineMacro("__CUDA_ARCH__");
>>>> }
>>>> 
>>>> +  // OpenCL definitions.
>>>> +  if (LangOpts.OpenCL) {
>>>> +#define OPENCLEXT(Ext) \
>>>> +    if (TI.getSupportedOpenCLOpts().is_##Ext##_supported( \
>>>> +        LangOpts.OpenCLVersion)) \
>>>> +      Builder.defineMacro(#Ext);
>>>> +#include "clang/Basic/OpenCLExtensions.def"
>>>> +  }
>>>> +
>>>> // Get other target #defines.
>>>> TI.getTargetDefines(LangOpts, Builder); }
>>>> 
>>>> Modified: cfe/trunk/lib/Parse/ParsePragma.cpp
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParsePragma.c
>>>> p p?rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/lib/Parse/ParsePragma.cpp (original)
>>>> +++ cfe/trunk/lib/Parse/ParsePragma.cpp Mon May 16 12:06:34 2016
>>>> @@ -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;
>>>> 
>>>> Modified: cfe/trunk/lib/Sema/Sema.cpp
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Sema.cpp?rev=2
>>>> 6
>>>> 9670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/lib/Sema/Sema.cpp (original)
>>>> +++ cfe/trunk/lib/Sema/Sema.cpp Mon May 16 12:06:34 2016
>>>> @@ -207,8 +207,14 @@ void Sema::Initialize() {
>>>> addImplicitTypedef("size_t", Context.getSizeType());  }
>>>> 
>>>> -  // Initialize predefined OpenCL types.
>>>> +  // Initialize predefined OpenCL types and supported optional core 
>>>> features.
>>>> if (getLangOpts().OpenCL) {
>>>> +#define OPENCLEXT(Ext) \
>>>> +     if 
>>>> (Context.getTargetInfo().getSupportedOpenCLOpts().is_##Ext##_supported_core(
>>>>  \
>>>> +         getLangOpts().OpenCLVersion)) \
>>>> +       getOpenCLOptions().Ext = 1;
>>>> +#include "clang/Basic/OpenCLExtensions.def"
>>>> +
>>>> addImplicitTypedef("sampler_t", Context.OCLSamplerTy);
>>>> addImplicitTypedef("event_t", Context.OCLEventTy);
>>>> if (getLangOpts().OpenCLVersion >= 200) {
>>>> 
>>>> Modified: cfe/trunk/test/CodeGenOpenCL/builtins-r600.cl
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCL/buil
>>>> t ins-r600.cl?rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/test/CodeGenOpenCL/builtins-r600.cl (original)
>>>> +++ cfe/trunk/test/CodeGenOpenCL/builtins-r600.cl Mon May 16 12:06:34
>>>> +++ 2016
>>>> @@ -1,5 +1,5 @@
>>>> // REQUIRES: amdgpu-registered-target -// RUN: %clang_cc1 -triple 
>>>> r600-unknown-unknown -S -emit-llvm -o - %s
>>>> | FileCheck %s
>>>> +// RUN: %clang_cc1 -triple r600-unknown-unknown -target-cpu rv670 -S 
>>>> +-emit-llvm -o - %s | FileCheck %s
>>>> 
>>>> #pragma OPENCL EXTENSION cl_khr_fp64 : enable
>>>> 
>>>> 
>>>> Modified: cfe/trunk/test/CodeGenOpenCL/fpmath.cl
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCL/fpma
>>>> t h.cl?rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/test/CodeGenOpenCL/fpmath.cl (original)
>>>> +++ cfe/trunk/test/CodeGenOpenCL/fpmath.cl Mon May 16 12:06:34 2016
>>>> @@ -1,4 +1,4 @@
>>>> -// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
>>>> +// RUN: %clang_cc1 %s -emit-llvm -o - -triple spir-unknown-unknown | 
>>>> +FileCheck %s
>>>> 
>>>> typedef __attribute__(( ext_vector_type(4) )) float float4;
>>>> 
>>>> 
>>>> Modified: cfe/trunk/test/CodeGenOpenCL/half.cl
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCL/half.
>>>> cl?rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/test/CodeGenOpenCL/half.cl (original)
>>>> +++ cfe/trunk/test/CodeGenOpenCL/half.cl Mon May 16 12:06:34 2016
>>>> @@ -1,4 +1,4 @@
>>>> -// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
>>>> +// RUN: %clang_cc1 %s -emit-llvm -o - -triple spir-unknown-unknown | 
>>>> +FileCheck %s
>>>> 
>>>> #pragma OPENCL EXTENSION cl_khr_fp16 : enable
>>>> 
>>>> 
>>>> Modified: cfe/trunk/test/Lexer/opencl-half-literal.cl
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/opencl-half-
>>>> l iteral.cl?rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/test/Lexer/opencl-half-literal.cl (original)
>>>> +++ cfe/trunk/test/Lexer/opencl-half-literal.cl Mon May 16 12:06:34
>>>> +++ 2016
>>>> @@ -1,4 +1,4 @@
>>>> -// RUN: %clang_cc1 %s -fsyntax-only -verify
>>>> +// RUN: %clang_cc1 %s -fsyntax-only -verify -triple 
>>>> +spir-unknown-unknown
>>>> 
>>>> #pragma OPENCL EXTENSION cl_khr_fp16 : enable
>>>> 
>>>> 
>>>> Modified: cfe/trunk/test/Misc/languageOptsOpenCL.cl
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Misc/languageOptsO
>>>> p enCL.cl?rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/test/Misc/languageOptsOpenCL.cl (original)
>>>> +++ cfe/trunk/test/Misc/languageOptsOpenCL.cl Mon May 16 12:06:34 
>>>> +++ 2016
>>>> @@ -1,4 +1,4 @@
>>>> -// RUN: %clang_cc1 -x cl %s -verify
>>>> +// RUN: %clang_cc1 -x cl %s -verify -triple spir-unknown-unknown
>>>> // expected-no-diagnostics
>>>> 
>>>> // Test the forced language options for OpenCL are set correctly.
>>>> 
>>>> Modified: cfe/trunk/test/PCH/opencl-extensions.cl
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/PCH/opencl-extensi
>>>> o ns.cl?rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/test/PCH/opencl-extensions.cl (original)
>>>> +++ cfe/trunk/test/PCH/opencl-extensions.cl Mon May 16 12:06:34 2016
>>>> @@ -1,5 +1,5 @@
>>>> -// RUN: %clang_cc1 -emit-pch -o %t %s -// RUN: %clang_cc1 
>>>> -include-pch %t -fsyntax-only %s
>>>> +// RUN: %clang_cc1 -emit-pch -o %t %s -triple spir-unknown-unknown 
>>>> +//
>>>> +RUN: %clang_cc1 -include-pch %t -fsyntax-only %s  -triple 
>>>> +spir-unknown-unknown
>>>> 
>>>> #ifndef HEADER
>>>> #define HEADER
>>>> 
>>>> Modified: cfe/trunk/test/Parser/opencl-astype.cl
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/opencl-asty
>>>> p e.cl?rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/test/Parser/opencl-astype.cl (original)
>>>> +++ cfe/trunk/test/Parser/opencl-astype.cl Mon May 16 12:06:34 2016
>>>> @@ -1,4 +1,4 @@
>>>> -// RUN: %clang_cc1 -fsyntax-only -verify %s
>>>> +// RUN: %clang_cc1 -fsyntax-only -verify %s -triple 
>>>> +spir-unknown-unknown
>>>> #pragma OPENCL EXTENSION cl_khr_fp64 : enable
>>>> 
>>>> void test_astype() {
>>>> 
>>>> Modified: cfe/trunk/test/Parser/opencl-atomics-cl20.cl
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/opencl-atom
>>>> i cs-cl20.cl?rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/test/Parser/opencl-atomics-cl20.cl (original)
>>>> +++ cfe/trunk/test/Parser/opencl-atomics-cl20.cl Mon May 16 12:06:34
>>>> +++ 2016
>>>> @@ -1,11 +1,14 @@
>>>> -// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -// RUN: 
>>>> %clang_cc1 %s -verify  -fsyntax-only -cl-std=CL2.0 -DCL20 -// RUN: 
>>>> %clang_cc1 %s -verify  -fsyntax-only -cl-std=CL2.0 -DCL20 -DEXT
>>>> +// RUN: %clang_cc1 %s -triple spir-unknown-unknown -verify -pedantic 
>>>> +-fsyntax-only // RUN: %clang_cc1 %s -triple spir-unknown-unknown 
>>>> +-verify -fsyntax-only -cl-std=CL2.0 -DCL20 // RUN: %clang_cc1 %s 
>>>> +-triple spir-unknown-unknown -verify -fsyntax-only -cl-std=CL2.0
>>>> +-DCL20 -DEXT
>>>> 
>>>> #ifdef EXT
>>>> #pragma OPENCL EXTENSION cl_khr_int64_base_atomics:enable #pragma 
>>>> OPENCL EXTENSION cl_khr_int64_extended_atomics:enable
>>>> #pragma OPENCL EXTENSION cl_khr_fp64:enable
>>>> +#if __OPENCL_C_VERSION__ >= CL_VERSION_1_2 // expected-warning at 
>>>> +-2{{OpenCL extension 'cl_khr_fp64' is core feature or supported 
>>>> +optional core feature - ignoring}} #endif
>>>> #endif
>>>> 
>>>> void atomic_types_test() {
>>>> @@ -44,15 +47,14 @@ void atomic_types_test() { // expected-error at
>>>> -28 {{use of type 'atomic_ulong' (aka '_Atomic(unsigned long)') 
>>>> requires cl_khr_int64_extended_atomics extension to be enabled}} // 
>>>> expected-error at -27 {{use of type 'atomic_double' (aka
>>>> '_Atomic(double)') requires cl_khr_int64_base_atomics extension to be 
>>>> enabled}} // expected-error at -28 {{use of type 'atomic_double' (aka
>>>> '_Atomic(double)') requires cl_khr_int64_extended_atomics extension 
>>>> to be enabled}} -// expected-error at -29 {{use of type 'atomic_double'
>>>> (aka '_Atomic(double)') requires cl_khr_fp64 extension to be 
>>>> enabled}} -// expected-error-re at -28 {{use of type 
>>>> 'atomic_intptr_t' (aka
>>>> '_Atomic({{.+}})') requires cl_khr_int64_base_atomics extension to be 
>>>> enabled}} -// expected-error-re at -29 {{use of type 'atomic_intptr_t'
>>>> (aka '_Atomic({{.+}})') requires cl_khr_int64_extended_atomics 
>>>> extension to be enabled}} -// expected-error-re at -29 {{use of type 
>>>> 'atomic_uintptr_t' (aka '_Atomic({{.+}})') requires 
>>>> cl_khr_int64_base_atomics extension to be enabled}} -// 
>>>> expected-error-re at -30 {{use of type 'atomic_uintptr_t' (aka
>>>> '_Atomic({{.+}})') requires cl_khr_int64_extended_atomics extension 
>>>> to be enabled}} -// expected-error-re at -30 {{use of type 
>>>> 'atomic_size_t' (aka '_Atomic({{.+}})') requires 
>>>> cl_khr_int64_base_atomics extension to be enabled}} -// 
>>>> expected-error-re at -31 {{use of type 'atomic_size_t' (aka
>>>> '_Atomic({{.+}})') requires cl_khr_int64_extended_atomics extension 
>>>> to be enabled}} -// expected-error-re at -31 {{use of type 
>>>> 'atomic_ptrdiff_t' (aka '_Atomic({{.+}})') requires 
>>>> cl_khr_int64_base_atomics extension to be enabled}} -// 
>>>> expected-error-re at -32 {{use of type 'atomic_ptrdiff_t' (aka
>>>> '_Atomic({{.+}})') requires cl_khr_int64_extended_atomics extension 
>>>> to be enabled}}
>>>> +// expected-error-re at -27 {{use of type 'atomic_intptr_t' (aka
>>>> +'_Atomic({{.+}})') requires cl_khr_int64_base_atomics extension to 
>>>> +be enabled}} // expected-error-re at -28 {{use of type 'atomic_intptr_t'
>>>> +(aka '_Atomic({{.+}})') requires cl_khr_int64_extended_atomics 
>>>> +extension to be enabled}} // expected-error-re at -28 {{use of type 
>>>> +'atomic_uintptr_t' (aka '_Atomic({{.+}})') requires 
>>>> +cl_khr_int64_base_atomics extension to be enabled}} // 
>>>> +expected-error-re at -29 {{use of type 'atomic_uintptr_t' (aka
>>>> +'_Atomic({{.+}})') requires cl_khr_int64_extended_atomics extension 
>>>> +to be enabled}} // expected-error-re at -29 {{use of type 
>>>> +'atomic_size_t' (aka '_Atomic({{.+}})') requires 
>>>> +cl_khr_int64_base_atomics extension to be enabled}} // 
>>>> +expected-error-re at -30 {{use of type 'atomic_size_t' (aka
>>>> +'_Atomic({{.+}})') requires cl_khr_int64_extended_atomics extension 
>>>> +to be enabled}} // expected-error-re at -30 {{use of type 
>>>> +'atomic_ptrdiff_t' (aka '_Atomic({{.+}})') requires 
>>>> +cl_khr_int64_base_atomics extension to be enabled}} // 
>>>> +expected-error-re at -31 {{use of type 'atomic_ptrdiff_t' (aka
>>>> +'_Atomic({{.+}})') requires cl_khr_int64_extended_atomics extension 
>>>> +to be enabled}}
>>>> #endif
>>>> 
>>>> #ifdef CL20
>>>> 
>>>> Modified: cfe/trunk/test/Parser/opencl-pragma.cl
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/opencl-prag
>>>> m a.cl?rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/test/Parser/opencl-pragma.cl (original)
>>>> +++ cfe/trunk/test/Parser/opencl-pragma.cl Mon May 16 12:06:34 2016
>>>> @@ -1,4 +1,4 @@
>>>> -// RUN: %clang_cc1 %s -verify -pedantic -Wno-empty-translation-unit 
>>>> -fsyntax-only
>>>> +// RUN: %clang_cc1 %s -verify -pedantic -Wno-empty-translation-unit 
>>>> +-fsyntax-only -triple spir-unknown-unknown
>>>> 
>>>> #pragma OPENCL EXTENSION cl_khr_fp16 : enable
>>>> 
>>>> 
>>>> Modified: cfe/trunk/test/Parser/opencl-storage-class.cl
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/opencl-stor
>>>> a ge-class.cl?rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/test/Parser/opencl-storage-class.cl (original)
>>>> +++ cfe/trunk/test/Parser/opencl-storage-class.cl Mon May 16 12:06:34
>>>> +++ 2016
>>>> @@ -1,4 +1,4 @@
>>>> -// RUN: %clang_cc1 %s -verify -fsyntax-only
>>>> +// RUN: %clang_cc1 %s -verify -fsyntax-only -triple 
>>>> +spir-unknown-unknown
>>>> 
>>>> void test_storage_class_specs()
>>>> {
>>>> 
>>>> Removed: cfe/trunk/test/SemaOpenCL/extension-fp64-cl1.1.cl
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaOpenCL/extensi
>>>> o
>>>> n-fp64-cl1.1.cl?rev=269669&view=auto
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/test/SemaOpenCL/extension-fp64-cl1.1.cl (original)
>>>> +++ cfe/trunk/test/SemaOpenCL/extension-fp64-cl1.1.cl (removed)
>>>> @@ -1,19 +0,0 @@
>>>> -// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -cl-std=CL1.1
>>>> -
>>>> -void f1(double da) { // expected-error {{type 'double' requires
>>>> cl_khr_fp64 extension}}
>>>> -  double d; // expected-error {{type 'double' requires cl_khr_fp64 
>>>> extension}}
>>>> -  (void) 1.0; // expected-warning {{double precision constant 
>>>> requires cl_khr_fp64}} -}
>>>> -
>>>> -#pragma OPENCL EXTENSION cl_khr_fp64 : enable
>>>> -
>>>> -void f2(void) {
>>>> -  double d;
>>>> -  (void) 1.0;
>>>> -}
>>>> -
>>>> -#pragma OPENCL EXTENSION cl_khr_fp64 : disable
>>>> -
>>>> -void f3(void) {
>>>> -  double d; // expected-error {{type 'double' requires cl_khr_fp64 
>>>> extension}} -}
>>>> 
>>>> Removed: cfe/trunk/test/SemaOpenCL/extension-fp64.cl
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaOpenCL/extensi
>>>> o
>>>> n-fp64.cl?rev=269669&view=auto
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/test/SemaOpenCL/extension-fp64.cl (original)
>>>> +++ cfe/trunk/test/SemaOpenCL/extension-fp64.cl (removed)
>>>> @@ -1,19 +0,0 @@
>>>> -// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only
>>>> -
>>>> -void f1(double da) { // expected-error {{type 'double' requires
>>>> cl_khr_fp64 extension}}
>>>> -  double d; // expected-error {{type 'double' requires cl_khr_fp64 
>>>> extension}}
>>>> -  (void) 1.0; // expected-warning {{double precision constant 
>>>> requires cl_khr_fp64}} -}
>>>> -
>>>> -#pragma OPENCL EXTENSION cl_khr_fp64 : enable
>>>> -
>>>> -void f2(void) {
>>>> -  double d;
>>>> -  (void) 1.0;
>>>> -}
>>>> -
>>>> -#pragma OPENCL EXTENSION cl_khr_fp64 : disable
>>>> -
>>>> -void f3(void) {
>>>> -  double d; // expected-error {{type 'double' requires cl_khr_fp64 
>>>> extension}} -}
>>>> 
>>>> Added: cfe/trunk/test/SemaOpenCL/extensions.cl
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaOpenCL/extensi
>>>> o
>>>> ns.cl?rev=269670&view=auto
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/test/SemaOpenCL/extensions.cl (added)
>>>> +++ cfe/trunk/test/SemaOpenCL/extensions.cl Mon May 16 12:06:34 2016
>>>> @@ -0,0 +1,36 @@
>>>> +// RUN: %clang_cc1 %s -triple spir-unknown-unknown -verify -pedantic 
>>>> +-fsyntax-only // RUN: %clang_cc1 %s -triple spir-unknown-unknown 
>>>> +-verify -pedantic -fsyntax-only -cl-std=CL1.1
>>>> +
>>>> +// Test with a target not supporting fp64.
>>>> +// RUN: %clang_cc1 %s -triple r600-unknown-unknown -target-cpu r600 
>>>> +-verify -pedantic -fsyntax-only -DNOFP64
>>>> +
>>>> +void f1(double da) { // expected-error {{type 'double' requires
>>>> +cl_khr_fp64 extension}}
>>>> +  double d; // expected-error {{type 'double' requires cl_khr_fp64 
>>>> +extension}}
>>>> +  (void) 1.0; // expected-warning {{double precision constant 
>>>> +requires cl_khr_fp64}} }
>>>> +
>>>> +#pragma OPENCL EXTENSION cl_khr_fp64 : enable #ifdef NOFP64 // 
>>>> +expected-warning at -2{{unsupported OpenCL extension 'cl_khr_fp64' - 
>>>> +ignoring}} #endif
>>>> +
>>>> +void f2(void) {
>>>> +  double d;
>>>> +#ifdef NOFP64
>>>> +// expected-error at -2{{use of type 'double' requires cl_khr_fp64 
>>>> +extension to be enabled}} #endif
>>>> +
>>>> +  (void) 1.0;
>>>> +#ifdef NOFP64
>>>> +// expected-warning at -2{{double precision constant requires 
>>>> +cl_khr_fp64, casting to single precision}} #endif }
>>>> +
>>>> +#pragma OPENCL EXTENSION cl_khr_fp64 : disable #ifdef NOFP64 // 
>>>> +expected-warning at -2{{unsupported OpenCL extension 'cl_khr_fp64' - 
>>>> +ignoring}} #endif
>>>> +
>>>> +void f3(void) {
>>>> +  double d; // expected-error {{type 'double' requires cl_khr_fp64 
>>>> +extension}} }
>>>> 
>>>> Modified: cfe/trunk/test/SemaOpenCL/half.cl
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaOpenCL/half.cl?
>>>> rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/test/SemaOpenCL/half.cl (original)
>>>> +++ cfe/trunk/test/SemaOpenCL/half.cl Mon May 16 12:06:34 2016
>>>> @@ -1,4 +1,4 @@
>>>> -// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only 
>>>> -Wno-unused-value
>>>> +// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only 
>>>> +-Wno-unused-value -triple spir-unknown-unknown
>>>> 
>>>> #pragma OPENCL EXTENSION cl_khr_fp16 : disable constant float f = 
>>>> 1.0h; // expected-error{{half precision constant requires 
>>>> cl_khr_fp16}}
>>>> 
>>>> Modified: cfe/trunk/test/SemaOpenCL/invalid-kernel-parameters.cl
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaOpenCL/invalid
>>>> - kernel-parameters.cl?rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/test/SemaOpenCL/invalid-kernel-parameters.cl (original)
>>>> +++ cfe/trunk/test/SemaOpenCL/invalid-kernel-parameters.cl Mon May 16
>>>> +++ 12:06:34 2016
>>>> @@ -1,4 +1,4 @@
>>>> -// RUN: %clang_cc1 -fsyntax-only -verify %s
>>>> +// RUN: %clang_cc1 -fsyntax-only -verify %s -triple 
>>>> +spir-unknown-unknown
>>>> 
>>>> #pragma OPENCL EXTENSION cl_khr_fp16 : enable
>>>> 
>>>> 
>>>> Modified: cfe/trunk/test/SemaOpenCL/invalid-logical-ops-1.2.cl
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaOpenCL/invalid
>>>> - logical-ops-1.2.cl?rev=269670&r1=269669&r2=269670&view=diff
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/test/SemaOpenCL/invalid-logical-ops-1.2.cl (original)
>>>> +++ cfe/trunk/test/SemaOpenCL/invalid-logical-ops-1.2.cl Mon May 16
>>>> +++ 12:06:34 2016
>>>> @@ -1,6 +1,7 @@
>>>> // RUN: %clang_cc1 %s -verify -cl-std=CL1.2 -triple 
>>>> x86_64-unknown-linux-gnu
>>>> 
>>>> -#pragma OPENCL EXTENSION cl_khr_fp64 : enable
>>>> +#pragma OPENCL EXTENSION cl_khr_fp64 : enable // 
>>>> +expected-warning{{OpenCL extension 'cl_khr_fp64' is core feature or 
>>>> +supported optional core feature - ignoring}}
>>>> +
>>>> typedef __attribute__((ext_vector_type(4))) float float4; typedef
>>>> __attribute__((ext_vector_type(4))) double double4; typedef
>>>> __attribute__((ext_vector_type(4))) int int4;
>>>> 
>>>> Removed: cfe/trunk/test/SemaOpenCL/optional-core-fp64-cl1.2.cl
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaOpenCL/optiona
>>>> l -core-fp64-cl1.2.cl?rev=269669&view=auto
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/test/SemaOpenCL/optional-core-fp64-cl1.2.cl (original)
>>>> +++ cfe/trunk/test/SemaOpenCL/optional-core-fp64-cl1.2.cl (removed)
>>>> @@ -1,20 +0,0 @@
>>>> -// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -cl-std=CL1.2 
>>>> -// expected-no-diagnostics
>>>> -
>>>> -void f1(double da) {
>>>> -  double d;
>>>> -  (void) 1.0;
>>>> -}
>>>> -
>>>> -#pragma OPENCL EXTENSION cl_khr_fp64 : enable
>>>> -
>>>> -void f2(void) {
>>>> -  double d;
>>>> -  (void) 1.0;
>>>> -}
>>>> -
>>>> -#pragma OPENCL EXTENSION cl_khr_fp64 : disable
>>>> -
>>>> -void f3(void) {
>>>> -  double d;
>>>> -}
>>>> 
>>>> Removed: cfe/trunk/test/SemaOpenCL/optional-core-fp64-cl2.0.cl
>>>> URL: 
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaOpenCL/optiona
>>>> l -core-fp64-cl2.0.cl?rev=269669&view=auto
>>>> =====================================================================
>>>> =
>>>> ========
>>>> --- cfe/trunk/test/SemaOpenCL/optional-core-fp64-cl2.0.cl (original)
>>>> +++ cfe/trunk/test/SemaOpenCL/optional-core-fp64-cl2.0.cl (removed)
>>>> @@ -1,20 +0,0 @@
>>>> -// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -cl-std=CL2.0 
>>>> -// expected-no-diagnostics
>>>> -
>>>> -void f1(double da) {
>>>> -  double d;
>>>> -  (void) 1.0;
>>>> -}
>>>> -
>>>> -#pragma OPENCL EXTENSION cl_khr_fp64 : enable
>>>> -
>>>> -void f2(void) {
>>>> -  double d;
>>>> -  (void) 1.0;
>>>> -}
>>>> -
>>>> -#pragma OPENCL EXTENSION cl_khr_fp64 : disable
>>>> -
>>>> -void f3(void) {
>>>> -  double d;
>>>> -}
>>> 
>>> _______________________________________________
>>> cfe-commits mailing list
>>> cfe-commits@lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>> 
>> 
> 

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to