Author: Sven van Haastregt
Date: 2022-02-10T09:43:32Z
New Revision: 8d37043520f57e63e032c9d0ba4cba8701a3cd35

URL: 
https://github.com/llvm/llvm-project/commit/8d37043520f57e63e032c9d0ba4cba8701a3cd35
DIFF: 
https://github.com/llvm/llvm-project/commit/8d37043520f57e63e032c9d0ba4cba8701a3cd35.diff

LOG: [OpenCL] Refactor cl_ext_float_atomics declarations; NFC

Reduce the amount of repetition in the declarations by leveraging more
TableGen constructs.  This is in preparation for adding the OpenCL 3.0
atomics feature optionality.

Added: 
    

Modified: 
    clang/lib/Sema/OpenCLBuiltins.td

Removed: 
    


################################################################################
diff  --git a/clang/lib/Sema/OpenCLBuiltins.td 
b/clang/lib/Sema/OpenCLBuiltins.td
index 60a05f95fbec8..4d36df352d5ec 100644
--- a/clang/lib/Sema/OpenCLBuiltins.td
+++ b/clang/lib/Sema/OpenCLBuiltins.td
@@ -90,27 +90,27 @@ def FuncExtOpenCLCNamedAddressSpaceBuiltins : 
FunctionExtension<"__opencl_c_name
 def FuncExtOpenCLCPipes                  : 
FunctionExtension<"__opencl_c_pipes">;
 def FuncExtOpenCLCWGCollectiveFunctions  : 
FunctionExtension<"__opencl_c_work_group_collective_functions">;
 def FuncExtOpenCLCReadWriteImages        : 
FunctionExtension<"__opencl_c_read_write_images">;
-def FuncExtFloatAtomicsFp16GlobalLoadStore  : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp16_global_atomic_load_store">;
-def FuncExtFloatAtomicsFp16LocalLoadStore   : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp16_local_atomic_load_store">;
-def FuncExtFloatAtomicsFp16GenericLoadStore : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp16_global_atomic_load_store 
__opencl_c_ext_fp16_local_atomic_load_store">;
-def FuncExtFloatAtomicsFp16GlobalAdd     : 
FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_global_atomic_add">;
-def FuncExtFloatAtomicsFp32GlobalAdd     : 
FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp32_global_atomic_add">;
-def FuncExtFloatAtomicsFp64GlobalAdd     : 
FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp64_global_atomic_add">;
-def FuncExtFloatAtomicsFp16LocalAdd      : 
FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_local_atomic_add">;
-def FuncExtFloatAtomicsFp32LocalAdd      : 
FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp32_local_atomic_add">;
-def FuncExtFloatAtomicsFp64LocalAdd      : 
FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp64_local_atomic_add">;
-def FuncExtFloatAtomicsFp16GenericAdd    : 
FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_local_atomic_add 
__opencl_c_ext_fp16_global_atomic_add">;
-def FuncExtFloatAtomicsFp32GenericAdd    : 
FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp32_local_atomic_add 
__opencl_c_ext_fp32_global_atomic_add">;
-def FuncExtFloatAtomicsFp64GenericAdd    : 
FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp64_local_atomic_add 
__opencl_c_ext_fp64_global_atomic_add">;
-def FuncExtFloatAtomicsFp16GlobalMinMax  : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp16_global_atomic_min_max">;
-def FuncExtFloatAtomicsFp32GlobalMinMax  : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp32_global_atomic_min_max">;
-def FuncExtFloatAtomicsFp64GlobalMinMax  : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp64_global_atomic_min_max">;
-def FuncExtFloatAtomicsFp16LocalMinMax   : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp16_local_atomic_min_max">;
-def FuncExtFloatAtomicsFp32LocalMinMax   : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp32_local_atomic_min_max">;
-def FuncExtFloatAtomicsFp64LocalMinMax   : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp64_local_atomic_min_max">;
-def FuncExtFloatAtomicsFp16GenericMinMax : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp16_local_atomic_min_max 
__opencl_c_ext_fp16_global_atomic_min_max">;
-def FuncExtFloatAtomicsFp32GenericMinMax : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp32_local_atomic_min_max 
__opencl_c_ext_fp32_global_atomic_min_max">;
-def FuncExtFloatAtomicsFp64GenericMinMax : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp64_local_atomic_min_max 
__opencl_c_ext_fp64_global_atomic_min_max">;
+def FuncExtFloatAtomicsFp16GlobalASLoadStore  : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp16_global_atomic_load_store">;
+def FuncExtFloatAtomicsFp16LocalASLoadStore   : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp16_local_atomic_load_store">;
+def FuncExtFloatAtomicsFp16GenericASLoadStore : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp16_global_atomic_load_store 
__opencl_c_ext_fp16_local_atomic_load_store">;
+def FuncExtFloatAtomicsFp16GlobalASAdd        : 
FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_global_atomic_add">;
+def FuncExtFloatAtomicsFp32GlobalASAdd        : 
FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp32_global_atomic_add">;
+def FuncExtFloatAtomicsFp64GlobalASAdd        : 
FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp64_global_atomic_add">;
+def FuncExtFloatAtomicsFp16LocalASAdd         : 
FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_local_atomic_add">;
+def FuncExtFloatAtomicsFp32LocalASAdd         : 
FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp32_local_atomic_add">;
+def FuncExtFloatAtomicsFp64LocalASAdd         : 
FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp64_local_atomic_add">;
+def FuncExtFloatAtomicsFp16GenericASAdd       : 
FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_local_atomic_add 
__opencl_c_ext_fp16_global_atomic_add">;
+def FuncExtFloatAtomicsFp32GenericASAdd       : 
FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp32_local_atomic_add 
__opencl_c_ext_fp32_global_atomic_add">;
+def FuncExtFloatAtomicsFp64GenericASAdd       : 
FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp64_local_atomic_add 
__opencl_c_ext_fp64_global_atomic_add">;
+def FuncExtFloatAtomicsFp16GlobalASMinMax     : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp16_global_atomic_min_max">;
+def FuncExtFloatAtomicsFp32GlobalASMinMax     : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp32_global_atomic_min_max">;
+def FuncExtFloatAtomicsFp64GlobalASMinMax     : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp64_global_atomic_min_max">;
+def FuncExtFloatAtomicsFp16LocalASMinMax      : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp16_local_atomic_min_max">;
+def FuncExtFloatAtomicsFp32LocalASMinMax      : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp32_local_atomic_min_max">;
+def FuncExtFloatAtomicsFp64LocalASMinMax      : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp64_local_atomic_min_max">;
+def FuncExtFloatAtomicsFp16GenericASMinMax    : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp16_local_atomic_min_max 
__opencl_c_ext_fp16_global_atomic_min_max">;
+def FuncExtFloatAtomicsFp32GenericASMinMax    : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp32_local_atomic_min_max 
__opencl_c_ext_fp32_global_atomic_min_max">;
+def FuncExtFloatAtomicsFp64GenericASMinMax    : 
FunctionExtension<"cl_ext_float_atomics 
__opencl_c_ext_fp64_local_atomic_min_max 
__opencl_c_ext_fp64_global_atomic_min_max">;
 
 // Not a real extension, but a workaround to add C++ for OpenCL specific 
builtins.
 def FuncExtOpenCLCxx                     : FunctionExtension<"__cplusplus">;
@@ -1111,104 +1111,42 @@ let MinVersion = CL20 in {
 
 // The functionality added by cl_ext_float_atomics extension
 let MinVersion = CL20 in {
-  let Extension = FuncExtFloatAtomicsFp16GlobalLoadStore in {
-    defm : BuiltinAtomicExplicit<"atomic_store",
-        [Void, PointerType<VolatileType<AtomicHalf>, GlobalAS>, AtomicHalf]>;
-    defm : BuiltinAtomicExplicit<"atomic_load",
-        [Half, PointerType<VolatileType<AtomicHalf>, GlobalAS>]>;
-    defm : BuiltinAtomicExplicit<"atomic_exchange",
-        [Half, PointerType<VolatileType<AtomicHalf>, GlobalAS>, Half]>;
-  }
-  let Extension = FuncExtFloatAtomicsFp16LocalLoadStore in {
-    defm : BuiltinAtomicExplicit<"atomic_store",
-        [Void, PointerType<VolatileType<AtomicHalf>, LocalAS>, AtomicHalf]>;
-    defm : BuiltinAtomicExplicit<"atomic_load",
-        [Half, PointerType<VolatileType<AtomicHalf>, LocalAS>]>;
-    defm : BuiltinAtomicExplicit<"atomic_exchange",
-        [Half, PointerType<VolatileType<AtomicHalf>, LocalAS>, Half]>;
-  }
-  let Extension = FuncExtFloatAtomicsFp16GenericLoadStore in {
-    defm : BuiltinAtomicExplicit<"atomic_store",
-        [Void, PointerType<VolatileType<AtomicHalf>, GenericAS>, AtomicHalf]>;
-    defm : BuiltinAtomicExplicit<"atomic_load",
-        [Half, PointerType<VolatileType<AtomicHalf>, GenericAS>]>;
-    defm : BuiltinAtomicExplicit<"atomic_exchange",
-        [Half, PointerType<VolatileType<AtomicHalf>, GenericAS>, Half]>;
-  }
-  foreach ModOp = ["add", "sub"] in {
-    let Extension = FuncExtFloatAtomicsFp16GlobalAdd in {
-      defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
-          [Half, PointerType<VolatileType<AtomicHalf>, GlobalAS>, Half]>;
-    }
-    let Extension = FuncExtFloatAtomicsFp32GlobalAdd in {
-      defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
-          [Float, PointerType<VolatileType<AtomicFloat>, GlobalAS>, Float]>;
-    }
-    let Extension = FuncExtFloatAtomicsFp64GlobalAdd in {
-      defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
-          [Double, PointerType<VolatileType<AtomicDouble>, GlobalAS>, Double]>;
-    }
-    let Extension = FuncExtFloatAtomicsFp16LocalAdd in {
-      defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
-          [Half, PointerType<VolatileType<AtomicHalf>, LocalAS>, Half]>;
-    }
-    let Extension = FuncExtFloatAtomicsFp32LocalAdd in {
-      defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
-          [Float, PointerType<VolatileType<AtomicFloat>, LocalAS>, Float]>;
-    }
-    let Extension = FuncExtFloatAtomicsFp64LocalAdd in {
-      defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
-          [Double, PointerType<VolatileType<AtomicDouble>, LocalAS>, Double]>;
-    }
-    let Extension = FuncExtFloatAtomicsFp16GenericAdd in {
-      defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
-          [Half, PointerType<VolatileType<AtomicHalf>, GenericAS>, Half]>;
-    }
-    let Extension = FuncExtFloatAtomicsFp32GenericAdd in {
-      defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
-          [Float, PointerType<VolatileType<AtomicFloat>, GenericAS>, Float]>;
+  foreach addrspace = [GlobalAS, LocalAS, GenericAS] in {
+    let Extension = !cast<FunctionExtension>("FuncExtFloatAtomicsFp16" # 
addrspace # "LoadStore") in {
+      defm : BuiltinAtomicExplicit<"atomic_store",
+          [Void, PointerType<VolatileType<AtomicHalf>, addrspace>, 
AtomicHalf]>;
+      defm : BuiltinAtomicExplicit<"atomic_load",
+          [Half, PointerType<VolatileType<AtomicHalf>, addrspace>]>;
+      defm : BuiltinAtomicExplicit<"atomic_exchange",
+          [Half, PointerType<VolatileType<AtomicHalf>, addrspace>, Half]>;
     }
-    let Extension = FuncExtFloatAtomicsFp64GenericAdd in {
-      defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
-          [Double, PointerType<VolatileType<AtomicDouble>, GenericAS>, 
Double]>;
-    }
-  }
-  foreach ModOp = ["min", "max"] in {
-    let Extension = FuncExtFloatAtomicsFp16GlobalMinMax in {
-      defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
-          [Half, PointerType<VolatileType<AtomicHalf>, GlobalAS>, Half]>;
-    }
-    let Extension = FuncExtFloatAtomicsFp32GlobalMinMax in {
-      defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
-          [Float, PointerType<VolatileType<AtomicFloat>, GlobalAS>, Float]>;
-    }
-    let Extension = FuncExtFloatAtomicsFp64GlobalMinMax in {
-      defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
-          [Double, PointerType<VolatileType<AtomicDouble>, GlobalAS>, Double]>;
-    }
-    let Extension = FuncExtFloatAtomicsFp16LocalMinMax in {
-      defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
-          [Half, PointerType<VolatileType<AtomicHalf>, LocalAS>, Half]>;
-    }
-    let Extension = FuncExtFloatAtomicsFp32LocalMinMax in {
-      defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
-          [Float, PointerType<VolatileType<AtomicFloat>, LocalAS>, Float]>;
-    }
-    let Extension = FuncExtFloatAtomicsFp64LocalMinMax in {
-      defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
-          [Double, PointerType<VolatileType<AtomicDouble>, LocalAS>, Double]>;
-    }
-    let Extension = FuncExtFloatAtomicsFp16GenericMinMax in {
-      defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
-          [Half, PointerType<VolatileType<AtomicHalf>, GenericAS>, Half]>;
-    }
-    let Extension = FuncExtFloatAtomicsFp32GenericMinMax in {
-      defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
-          [Float, PointerType<VolatileType<AtomicFloat>, GenericAS>, Float]>;
+    foreach ModOp = ["add", "sub"] in {
+      let Extension = !cast<FunctionExtension>("FuncExtFloatAtomicsFp16" # 
addrspace # "Add") in {
+        defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
+            [Half, PointerType<VolatileType<AtomicHalf>, addrspace>, Half]>;
+      }
+      let Extension = !cast<FunctionExtension>("FuncExtFloatAtomicsFp32" # 
addrspace # "Add") in {
+        defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
+            [Float, PointerType<VolatileType<AtomicFloat>, addrspace>, Float]>;
+      }
+      let Extension = !cast<FunctionExtension>("FuncExtFloatAtomicsFp64" # 
addrspace # "Add") in {
+        defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
+            [Double, PointerType<VolatileType<AtomicDouble>, addrspace>, 
Double]>;
+      }
     }
-    let Extension = FuncExtFloatAtomicsFp64GenericMinMax in {
-      defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
-          [Double, PointerType<VolatileType<AtomicDouble>, GenericAS>, 
Double]>;
+    foreach ModOp = ["min", "max"] in {
+      let Extension = !cast<FunctionExtension>("FuncExtFloatAtomicsFp16" # 
addrspace # "MinMax") in {
+        defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
+            [Half, PointerType<VolatileType<AtomicHalf>, addrspace>, Half]>;
+      }
+      let Extension = !cast<FunctionExtension>("FuncExtFloatAtomicsFp32" # 
addrspace # "MinMax") in {
+        defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
+            [Float, PointerType<VolatileType<AtomicFloat>, addrspace>, Float]>;
+      }
+      let Extension = !cast<FunctionExtension>("FuncExtFloatAtomicsFp64" # 
addrspace # "MinMax") in {
+        defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
+            [Double, PointerType<VolatileType<AtomicDouble>, addrspace>, 
Double]>;
+      }
     }
   }
 }


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

Reply via email to