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/DiagnosticParseKinds.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/LangOptions.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/OpenCLExtensions.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/OpenCLOptions.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/TargetInfo.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/TargetOptions.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?rev=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/InitPreprocessor.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.cpp?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=269670&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/builtins-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/fpmath.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-literal.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/languageOptsOpenCL.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-extensions.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-astype.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-atomics-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-pragma.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-storage-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/extension-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/extension-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/extensions.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/optional-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/optional-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