Hi,

I noticed a change from clang 3.8 to 3.9, that it disabled all OpenCL extension 
pragmas per default.
This broke pocl on e.g. ARM for LLVM 3.9 
(https://github.com/pocl/pocl/issues/409).

Example:
$ echo "#pragma OPENCL EXTENSION cl_khr_icd: enable" > hello.cl
$ clang  -emit-llvm -x cl -o tmp.bc -c hello.cl

works fine, but:
$ clang  -emit-llvm -x cl -o tmp.bc -c hello.cl 
--target=armv7-unknown-linux-gnueabihf
hello.cl:1:26: warning: unsupported OpenCL extension 'cl_khr_icd' - ignoring 
[-Wignored-pragmas]
#pragma OPENCL EXTENSION cl_khr_icd: enable
                          ^
1 warning generated.


Attached is a patch that enables OpenCL extensions for all targets per default, 
and then sets the
status quo of supported extensions for those targets that currently customize 
their settings (i.e.
NVPTX and AMDGPU).
Most generic CPUs can handle all OpenCL extensions just fine.

Please keep me as CC, I am not subscribed to the list.
thanks,
kalle

diff --git a/include/clang/Basic/TargetInfo.h b/include/clang/Basic/TargetInfo.h
index 208f8e8..8b5c38e 100644
--- a/include/clang/Basic/TargetInfo.h
+++ b/include/clang/Basic/TargetInfo.h
@@ -1008,7 +1008,9 @@ public:
   virtual bool allowsLargerPreferedTypeAlignment() const { return true; }
 
   /// \brief Set supported OpenCL extensions and optional core features.
-  virtual void setSupportedOpenCLOpts() {}
+  virtual void setSupportedOpenCLOpts() {
+    getSupportedOpenCLOpts().supportAll();
+  }
 
   /// \brief Set supported OpenCL extensions as written on command line
   virtual void setOpenCLExtensionOpts() {
diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp
index 89e3f3e..212ab99 100644
--- a/lib/Basic/Targets.cpp
+++ b/lib/Basic/Targets.cpp
@@ -1951,6 +1951,7 @@ public:
   }
   void setSupportedOpenCLOpts() override {
     auto &Opts = getSupportedOpenCLOpts();
+    Opts.supportAll(false);
     Opts.support("cl_clang_storage_class_specifiers");
     Opts.support("cl_khr_gl_sharing");
     Opts.support("cl_khr_icd");
@@ -2220,6 +2221,7 @@ public:
 
   void setSupportedOpenCLOpts() override {
     auto &Opts = getSupportedOpenCLOpts();
+    Opts.supportAll(false);
     Opts.support("cl_clang_storage_class_specifiers");
     Opts.support("cl_khr_icd");
 
@@ -2984,10 +2986,6 @@ public:
   bool hasSjLjLowering() const override {
     return true;
   }
-
-  void setSupportedOpenCLOpts() override {
-    getSupportedOpenCLOpts().supportAll();
-  }
 };
 
 bool X86TargetInfo::setFPMath(StringRef Name) {
@@ -8270,12 +8268,6 @@ 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().supportAll();
-  }
 };
 
 class SPIR32TargetInfo : public SPIRTargetInfo {

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

Reply via email to