Author: Wenju He
Date: 2026-01-15T07:59:26+08:00
New Revision: 882560eb5193c19ddd2d0ab7c2d034bcfbebba42

URL: 
https://github.com/llvm/llvm-project/commit/882560eb5193c19ddd2d0ab7c2d034bcfbebba42
DIFF: 
https://github.com/llvm/llvm-project/commit/882560eb5193c19ddd2d0ab7c2d034bcfbebba42.diff

LOG: [OpenCL] Add missing mipmap read_write image builtins to OpenCLBuiltins.td 
(#175748)

This issue was discovered while writing tests for #175120.

Added: 
    

Modified: 
    clang/lib/Sema/OpenCLBuiltins.td
    clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl

Removed: 
    


################################################################################
diff  --git a/clang/lib/Sema/OpenCLBuiltins.td 
b/clang/lib/Sema/OpenCLBuiltins.td
index fe86d42dac4db..1e856e18b1a11 100644
--- a/clang/lib/Sema/OpenCLBuiltins.td
+++ b/clang/lib/Sema/OpenCLBuiltins.td
@@ -1528,7 +1528,7 @@ let Extension = FuncExtOpenCLCDeviceEnqueue in {
 // OpenCL Extension v2.0 s9.18 - Mipmaps
 let Extension = FuncExtKhrMipmapImage in {
   // Added to section 6.13.14.2.
-  foreach aQual = ["RO"] in {
+  foreach aQual = ["RO", "RW"] in {
     foreach imgTy = [Image2d] in {
       foreach name = ["read_imagef"] in {
         def : Builtin<name, [VectorType<Float, 4>, ImageType<imgTy, aQual>, 
Sampler, VectorType<Float, 2>, Float], Attr.Pure>;
@@ -1630,7 +1630,7 @@ let Extension = FuncExtKhrMipmapImage in {
 // Write functions are enabled using a separate extension.
 let Extension = FuncExtKhrMipmapImageWrites in {
   // Added to section 6.13.14.4.
-  foreach aQual = ["WO"] in {
+  foreach aQual = ["WO", "RW"] in {
     foreach imgTy = [Image2d] in {
       def : Builtin<"write_imagef", [Void, ImageType<imgTy, aQual>, 
VectorType<Int, 2>, Int, VectorType<Float, 4>]>;
       def : Builtin<"write_imagei", [Void, ImageType<imgTy, aQual>, 
VectorType<Int, 2>, Int, VectorType<Int, 4>]>;

diff  --git a/clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl 
b/clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl
index bf943a400320c..8e0f8afcca985 100644
--- a/clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl
+++ b/clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl
@@ -50,6 +50,7 @@ typedef char char2 __attribute__((ext_vector_type(2)));
 typedef char char4 __attribute__((ext_vector_type(4)));
 typedef uchar uchar4 __attribute__((ext_vector_type(4)));
 typedef uchar uchar16 __attribute__((ext_vector_type(16)));
+typedef float float2 __attribute__((ext_vector_type(2)));
 typedef float float4 __attribute__((ext_vector_type(4)));
 typedef float float16 __attribute__((ext_vector_type(16)));
 typedef half half4 __attribute__((ext_vector_type(4)));
@@ -304,6 +305,62 @@ kernel void basic_image_writeonly(write_only 
image1d_buffer_t image_write_only_i
 #endif
 }
 
+kernel void basic_image_readwrite_depth(read_write image2d_depth_t 
image_read_write_image2d_depth) {
+#if __OPENCL_C_VERSION__ < CL_VERSION_2_0 && !defined(__OPENCL_CPP_VERSION__)
+  // expected-error@-2{{access qualifier 'read_write' cannot be used for 
'__read_write image2d_depth_t' prior to OpenCL C version 2.0 or in version 3.0 
and without __opencl_c_read_write_images feature}}
+#endif
+  int2 i2;
+  float f;
+  float2 f2;
+  sampler_t sampler;
+  float resf;
+
+  resf = read_imagef(image_read_write_image2d_depth, i2);
+  resf = read_imagef(image_read_write_image2d_depth, sampler, f2, f);
+  resf = read_imagef(image_read_write_image2d_depth, sampler, f2, f2, f2);
+}
+
+kernel void basic_image_readwrite_array_depth(read_write image2d_array_depth_t 
image_read_write_image2d_array_depth) {
+#if __OPENCL_C_VERSION__ < CL_VERSION_2_0 && !defined(__OPENCL_CPP_VERSION__)
+  // expected-error@-2{{access qualifier 'read_write' cannot be used for 
'__read_write image2d_array_depth_t' prior to OpenCL C version 2.0 or in 
version 3.0 and without __opencl_c_read_write_images feature}}
+#endif
+  int4 i4;
+  float f;
+  float2 f2;
+  float4 f4;
+  sampler_t sampler;
+  float resf;
+
+  resf = read_imagef(image_read_write_image2d_array_depth, i4);
+  resf = read_imagef(image_read_write_image2d_array_depth, sampler, f4, f);
+  resf = read_imagef(image_read_write_image2d_array_depth, sampler, f4, f2, 
f2);
+}
+
+kernel void basic_image_write_readwrite_depth(read_write image2d_depth_t 
image_read_write_image2d_depth) {
+#if __OPENCL_C_VERSION__ < CL_VERSION_2_0 && !defined(__OPENCL_CPP_VERSION__)
+  // expected-error@-2{{access qualifier 'read_write' cannot be used for 
'__read_write image2d_depth_t' prior to OpenCL C version 2.0 or in version 3.0 
and without __opencl_c_read_write_images feature}}
+#endif
+  int i;
+  int2 i2;
+  float f;
+
+  write_imagef(image_read_write_image2d_depth, i2, f);
+  write_imagef(image_read_write_image2d_depth, i2, i, f);
+}
+
+kernel void basic_image_write_readwrite_array_depth(read_write 
image2d_array_depth_t image_read_write_image2d_array_depth) {
+#if __OPENCL_C_VERSION__ < CL_VERSION_2_0 && !defined(__OPENCL_CPP_VERSION__)
+  // expected-error@-2{{access qualifier 'read_write' cannot be used for 
'__read_write image2d_array_depth_t' prior to OpenCL C version 2.0 or in 
version 3.0 and without __opencl_c_read_write_images feature}}
+#endif
+  int i;
+  int4 i4;
+  float f;
+  float resf;
+
+  write_imagef(image_read_write_image2d_array_depth, i4, f);
+  write_imagef(image_read_write_image2d_array_depth, i4, i, f);
+}
+
 kernel void basic_subgroup(global uint *out) {
   out[0] = get_sub_group_size();
 #if __OPENCL_C_VERSION__ <= CL_VERSION_1_2 && !defined(__OPENCL_CPP_VERSION__)


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to