Skip to content

Commit f4c48b2

Browse files
svenvhtstellar
authored andcommitted
[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. (cherry picked from commit 8d37043)
1 parent 8426097 commit f4c48b2

File tree

1 file changed

+55
-117
lines changed

1 file changed

+55
-117
lines changed

clang/lib/Sema/OpenCLBuiltins.td

Lines changed: 55 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -90,27 +90,27 @@ def FuncExtOpenCLCNamedAddressSpaceBuiltins : FunctionExtension<"__opencl_c_name
9090
def FuncExtOpenCLCPipes : FunctionExtension<"__opencl_c_pipes">;
9191
def FuncExtOpenCLCWGCollectiveFunctions : FunctionExtension<"__opencl_c_work_group_collective_functions">;
9292
def FuncExtOpenCLCReadWriteImages : FunctionExtension<"__opencl_c_read_write_images">;
93-
def FuncExtFloatAtomicsFp16GlobalLoadStore : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_global_atomic_load_store">;
94-
def FuncExtFloatAtomicsFp16LocalLoadStore : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_local_atomic_load_store">;
95-
def FuncExtFloatAtomicsFp16GenericLoadStore : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_global_atomic_load_store __opencl_c_ext_fp16_local_atomic_load_store">;
96-
def FuncExtFloatAtomicsFp16GlobalAdd : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_global_atomic_add">;
97-
def FuncExtFloatAtomicsFp32GlobalAdd : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp32_global_atomic_add">;
98-
def FuncExtFloatAtomicsFp64GlobalAdd : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp64_global_atomic_add">;
99-
def FuncExtFloatAtomicsFp16LocalAdd : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_local_atomic_add">;
100-
def FuncExtFloatAtomicsFp32LocalAdd : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp32_local_atomic_add">;
101-
def FuncExtFloatAtomicsFp64LocalAdd : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp64_local_atomic_add">;
102-
def FuncExtFloatAtomicsFp16GenericAdd : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_local_atomic_add __opencl_c_ext_fp16_global_atomic_add">;
103-
def FuncExtFloatAtomicsFp32GenericAdd : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp32_local_atomic_add __opencl_c_ext_fp32_global_atomic_add">;
104-
def FuncExtFloatAtomicsFp64GenericAdd : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp64_local_atomic_add __opencl_c_ext_fp64_global_atomic_add">;
105-
def FuncExtFloatAtomicsFp16GlobalMinMax : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_global_atomic_min_max">;
106-
def FuncExtFloatAtomicsFp32GlobalMinMax : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp32_global_atomic_min_max">;
107-
def FuncExtFloatAtomicsFp64GlobalMinMax : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp64_global_atomic_min_max">;
108-
def FuncExtFloatAtomicsFp16LocalMinMax : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_local_atomic_min_max">;
109-
def FuncExtFloatAtomicsFp32LocalMinMax : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp32_local_atomic_min_max">;
110-
def FuncExtFloatAtomicsFp64LocalMinMax : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp64_local_atomic_min_max">;
111-
def FuncExtFloatAtomicsFp16GenericMinMax : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_local_atomic_min_max __opencl_c_ext_fp16_global_atomic_min_max">;
112-
def FuncExtFloatAtomicsFp32GenericMinMax : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp32_local_atomic_min_max __opencl_c_ext_fp32_global_atomic_min_max">;
113-
def FuncExtFloatAtomicsFp64GenericMinMax : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp64_local_atomic_min_max __opencl_c_ext_fp64_global_atomic_min_max">;
93+
def FuncExtFloatAtomicsFp16GlobalASLoadStore : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_global_atomic_load_store">;
94+
def FuncExtFloatAtomicsFp16LocalASLoadStore : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_local_atomic_load_store">;
95+
def FuncExtFloatAtomicsFp16GenericASLoadStore : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_global_atomic_load_store __opencl_c_ext_fp16_local_atomic_load_store">;
96+
def FuncExtFloatAtomicsFp16GlobalASAdd : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_global_atomic_add">;
97+
def FuncExtFloatAtomicsFp32GlobalASAdd : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp32_global_atomic_add">;
98+
def FuncExtFloatAtomicsFp64GlobalASAdd : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp64_global_atomic_add">;
99+
def FuncExtFloatAtomicsFp16LocalASAdd : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_local_atomic_add">;
100+
def FuncExtFloatAtomicsFp32LocalASAdd : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp32_local_atomic_add">;
101+
def FuncExtFloatAtomicsFp64LocalASAdd : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp64_local_atomic_add">;
102+
def FuncExtFloatAtomicsFp16GenericASAdd : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_local_atomic_add __opencl_c_ext_fp16_global_atomic_add">;
103+
def FuncExtFloatAtomicsFp32GenericASAdd : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp32_local_atomic_add __opencl_c_ext_fp32_global_atomic_add">;
104+
def FuncExtFloatAtomicsFp64GenericASAdd : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp64_local_atomic_add __opencl_c_ext_fp64_global_atomic_add">;
105+
def FuncExtFloatAtomicsFp16GlobalASMinMax : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_global_atomic_min_max">;
106+
def FuncExtFloatAtomicsFp32GlobalASMinMax : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp32_global_atomic_min_max">;
107+
def FuncExtFloatAtomicsFp64GlobalASMinMax : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp64_global_atomic_min_max">;
108+
def FuncExtFloatAtomicsFp16LocalASMinMax : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_local_atomic_min_max">;
109+
def FuncExtFloatAtomicsFp32LocalASMinMax : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp32_local_atomic_min_max">;
110+
def FuncExtFloatAtomicsFp64LocalASMinMax : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp64_local_atomic_min_max">;
111+
def FuncExtFloatAtomicsFp16GenericASMinMax : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp16_local_atomic_min_max __opencl_c_ext_fp16_global_atomic_min_max">;
112+
def FuncExtFloatAtomicsFp32GenericASMinMax : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp32_local_atomic_min_max __opencl_c_ext_fp32_global_atomic_min_max">;
113+
def FuncExtFloatAtomicsFp64GenericASMinMax : FunctionExtension<"cl_ext_float_atomics __opencl_c_ext_fp64_local_atomic_min_max __opencl_c_ext_fp64_global_atomic_min_max">;
114114

115115
// Not a real extension, but a workaround to add C++ for OpenCL specific builtins.
116116
def FuncExtOpenCLCxx : FunctionExtension<"__cplusplus">;
@@ -1111,104 +1111,42 @@ let MinVersion = CL20 in {
11111111

11121112
// The functionality added by cl_ext_float_atomics extension
11131113
let MinVersion = CL20 in {
1114-
let Extension = FuncExtFloatAtomicsFp16GlobalLoadStore in {
1115-
defm : BuiltinAtomicExplicit<"atomic_store",
1116-
[Void, PointerType<VolatileType<AtomicHalf>, GlobalAS>, AtomicHalf]>;
1117-
defm : BuiltinAtomicExplicit<"atomic_load",
1118-
[Half, PointerType<VolatileType<AtomicHalf>, GlobalAS>]>;
1119-
defm : BuiltinAtomicExplicit<"atomic_exchange",
1120-
[Half, PointerType<VolatileType<AtomicHalf>, GlobalAS>, Half]>;
1121-
}
1122-
let Extension = FuncExtFloatAtomicsFp16LocalLoadStore in {
1123-
defm : BuiltinAtomicExplicit<"atomic_store",
1124-
[Void, PointerType<VolatileType<AtomicHalf>, LocalAS>, AtomicHalf]>;
1125-
defm : BuiltinAtomicExplicit<"atomic_load",
1126-
[Half, PointerType<VolatileType<AtomicHalf>, LocalAS>]>;
1127-
defm : BuiltinAtomicExplicit<"atomic_exchange",
1128-
[Half, PointerType<VolatileType<AtomicHalf>, LocalAS>, Half]>;
1129-
}
1130-
let Extension = FuncExtFloatAtomicsFp16GenericLoadStore in {
1131-
defm : BuiltinAtomicExplicit<"atomic_store",
1132-
[Void, PointerType<VolatileType<AtomicHalf>, GenericAS>, AtomicHalf]>;
1133-
defm : BuiltinAtomicExplicit<"atomic_load",
1134-
[Half, PointerType<VolatileType<AtomicHalf>, GenericAS>]>;
1135-
defm : BuiltinAtomicExplicit<"atomic_exchange",
1136-
[Half, PointerType<VolatileType<AtomicHalf>, GenericAS>, Half]>;
1137-
}
1138-
foreach ModOp = ["add", "sub"] in {
1139-
let Extension = FuncExtFloatAtomicsFp16GlobalAdd in {
1140-
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1141-
[Half, PointerType<VolatileType<AtomicHalf>, GlobalAS>, Half]>;
1142-
}
1143-
let Extension = FuncExtFloatAtomicsFp32GlobalAdd in {
1144-
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1145-
[Float, PointerType<VolatileType<AtomicFloat>, GlobalAS>, Float]>;
1146-
}
1147-
let Extension = FuncExtFloatAtomicsFp64GlobalAdd in {
1148-
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1149-
[Double, PointerType<VolatileType<AtomicDouble>, GlobalAS>, Double]>;
1150-
}
1151-
let Extension = FuncExtFloatAtomicsFp16LocalAdd in {
1152-
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1153-
[Half, PointerType<VolatileType<AtomicHalf>, LocalAS>, Half]>;
1154-
}
1155-
let Extension = FuncExtFloatAtomicsFp32LocalAdd in {
1156-
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1157-
[Float, PointerType<VolatileType<AtomicFloat>, LocalAS>, Float]>;
1158-
}
1159-
let Extension = FuncExtFloatAtomicsFp64LocalAdd in {
1160-
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1161-
[Double, PointerType<VolatileType<AtomicDouble>, LocalAS>, Double]>;
1162-
}
1163-
let Extension = FuncExtFloatAtomicsFp16GenericAdd in {
1164-
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1165-
[Half, PointerType<VolatileType<AtomicHalf>, GenericAS>, Half]>;
1166-
}
1167-
let Extension = FuncExtFloatAtomicsFp32GenericAdd in {
1168-
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1169-
[Float, PointerType<VolatileType<AtomicFloat>, GenericAS>, Float]>;
1114+
foreach addrspace = [GlobalAS, LocalAS, GenericAS] in {
1115+
let Extension = !cast<FunctionExtension>("FuncExtFloatAtomicsFp16" # addrspace # "LoadStore") in {
1116+
defm : BuiltinAtomicExplicit<"atomic_store",
1117+
[Void, PointerType<VolatileType<AtomicHalf>, addrspace>, AtomicHalf]>;
1118+
defm : BuiltinAtomicExplicit<"atomic_load",
1119+
[Half, PointerType<VolatileType<AtomicHalf>, addrspace>]>;
1120+
defm : BuiltinAtomicExplicit<"atomic_exchange",
1121+
[Half, PointerType<VolatileType<AtomicHalf>, addrspace>, Half]>;
11701122
}
1171-
let Extension = FuncExtFloatAtomicsFp64GenericAdd in {
1172-
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1173-
[Double, PointerType<VolatileType<AtomicDouble>, GenericAS>, Double]>;
1174-
}
1175-
}
1176-
foreach ModOp = ["min", "max"] in {
1177-
let Extension = FuncExtFloatAtomicsFp16GlobalMinMax in {
1178-
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1179-
[Half, PointerType<VolatileType<AtomicHalf>, GlobalAS>, Half]>;
1180-
}
1181-
let Extension = FuncExtFloatAtomicsFp32GlobalMinMax in {
1182-
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1183-
[Float, PointerType<VolatileType<AtomicFloat>, GlobalAS>, Float]>;
1184-
}
1185-
let Extension = FuncExtFloatAtomicsFp64GlobalMinMax in {
1186-
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1187-
[Double, PointerType<VolatileType<AtomicDouble>, GlobalAS>, Double]>;
1188-
}
1189-
let Extension = FuncExtFloatAtomicsFp16LocalMinMax in {
1190-
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1191-
[Half, PointerType<VolatileType<AtomicHalf>, LocalAS>, Half]>;
1192-
}
1193-
let Extension = FuncExtFloatAtomicsFp32LocalMinMax in {
1194-
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1195-
[Float, PointerType<VolatileType<AtomicFloat>, LocalAS>, Float]>;
1196-
}
1197-
let Extension = FuncExtFloatAtomicsFp64LocalMinMax in {
1198-
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1199-
[Double, PointerType<VolatileType<AtomicDouble>, LocalAS>, Double]>;
1200-
}
1201-
let Extension = FuncExtFloatAtomicsFp16GenericMinMax in {
1202-
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1203-
[Half, PointerType<VolatileType<AtomicHalf>, GenericAS>, Half]>;
1204-
}
1205-
let Extension = FuncExtFloatAtomicsFp32GenericMinMax in {
1206-
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1207-
[Float, PointerType<VolatileType<AtomicFloat>, GenericAS>, Float]>;
1123+
foreach ModOp = ["add", "sub"] in {
1124+
let Extension = !cast<FunctionExtension>("FuncExtFloatAtomicsFp16" # addrspace # "Add") in {
1125+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1126+
[Half, PointerType<VolatileType<AtomicHalf>, addrspace>, Half]>;
1127+
}
1128+
let Extension = !cast<FunctionExtension>("FuncExtFloatAtomicsFp32" # addrspace # "Add") in {
1129+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1130+
[Float, PointerType<VolatileType<AtomicFloat>, addrspace>, Float]>;
1131+
}
1132+
let Extension = !cast<FunctionExtension>("FuncExtFloatAtomicsFp64" # addrspace # "Add") in {
1133+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1134+
[Double, PointerType<VolatileType<AtomicDouble>, addrspace>, Double]>;
1135+
}
12081136
}
1209-
let Extension = FuncExtFloatAtomicsFp64GenericMinMax in {
1210-
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1211-
[Double, PointerType<VolatileType<AtomicDouble>, GenericAS>, Double]>;
1137+
foreach ModOp = ["min", "max"] in {
1138+
let Extension = !cast<FunctionExtension>("FuncExtFloatAtomicsFp16" # addrspace # "MinMax") in {
1139+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1140+
[Half, PointerType<VolatileType<AtomicHalf>, addrspace>, Half]>;
1141+
}
1142+
let Extension = !cast<FunctionExtension>("FuncExtFloatAtomicsFp32" # addrspace # "MinMax") in {
1143+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1144+
[Float, PointerType<VolatileType<AtomicFloat>, addrspace>, Float]>;
1145+
}
1146+
let Extension = !cast<FunctionExtension>("FuncExtFloatAtomicsFp64" # addrspace # "MinMax") in {
1147+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
1148+
[Double, PointerType<VolatileType<AtomicDouble>, addrspace>, Double]>;
1149+
}
12121150
}
12131151
}
12141152
}

0 commit comments

Comments
 (0)