@@ -90,27 +90,27 @@ def FuncExtOpenCLCNamedAddressSpaceBuiltins : FunctionExtension<"__opencl_c_name
90
90
def FuncExtOpenCLCPipes : FunctionExtension<"__opencl_c_pipes">;
91
91
def FuncExtOpenCLCWGCollectiveFunctions : FunctionExtension<"__opencl_c_work_group_collective_functions">;
92
92
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">;
114
114
115
115
// Not a real extension, but a workaround to add C++ for OpenCL specific builtins.
116
116
def FuncExtOpenCLCxx : FunctionExtension<"__cplusplus">;
@@ -1111,104 +1111,42 @@ let MinVersion = CL20 in {
1111
1111
1112
1112
// The functionality added by cl_ext_float_atomics extension
1113
1113
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]>;
1170
1122
}
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
+ }
1208
1136
}
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
+ }
1212
1150
}
1213
1151
}
1214
1152
}
0 commit comments