@@ -1040,6 +1040,18 @@ let Extension = FuncExtOpenCLCxx in {
1040
1040
}
1041
1041
}
1042
1042
1043
+ // An atomic builtin with 2 additional _explicit variants.
1044
+ multiclass BuiltinAtomicExplicit<string Name, list<Type> Types> {
1045
+ // Without explicit MemoryOrder or MemoryScope.
1046
+ def : Builtin<Name, Types>;
1047
+
1048
+ // With an explicit MemoryOrder argument.
1049
+ def : Builtin<Name # "_explicit", !listconcat(Types, [MemoryOrder])>;
1050
+
1051
+ // With explicit MemoryOrder and MemoryScope arguments.
1052
+ def : Builtin<Name # "_explicit", !listconcat(Types, [MemoryOrder, MemoryScope])>;
1053
+ }
1054
+
1043
1055
// OpenCL v2.0 s6.13.11 - Atomic Functions.
1044
1056
let MinVersion = CL20 in {
1045
1057
def : Builtin<"atomic_work_item_fence", [Void, MemFenceFlags, MemoryOrder, MemoryScope]>;
@@ -1049,24 +1061,12 @@ let MinVersion = CL20 in {
1049
1061
[AtomicFloat, Float], [AtomicDouble, Double]] in {
1050
1062
def : Builtin<"atomic_init",
1051
1063
[Void, PointerType<VolatileType<TypePair[0]>, GenericAS>, TypePair[1]]>;
1052
- def : Builtin <"atomic_store",
1064
+ defm : BuiltinAtomicExplicit <"atomic_store",
1053
1065
[Void, PointerType<VolatileType<TypePair[0]>, GenericAS>, TypePair[1]]>;
1054
- def : Builtin<"atomic_store_explicit",
1055
- [Void, PointerType<VolatileType<TypePair[0]>, GenericAS>, TypePair[1], MemoryOrder]>;
1056
- def : Builtin<"atomic_store_explicit",
1057
- [Void, PointerType<VolatileType<TypePair[0]>, GenericAS>, TypePair[1], MemoryOrder, MemoryScope]>;
1058
- def : Builtin<"atomic_load",
1066
+ defm : BuiltinAtomicExplicit<"atomic_load",
1059
1067
[TypePair[1], PointerType<VolatileType<TypePair[0]>, GenericAS>]>;
1060
- def : Builtin<"atomic_load_explicit",
1061
- [TypePair[1], PointerType<VolatileType<TypePair[0]>, GenericAS>, MemoryOrder]>;
1062
- def : Builtin<"atomic_load_explicit",
1063
- [TypePair[1], PointerType<VolatileType<TypePair[0]>, GenericAS>, MemoryOrder, MemoryScope]>;
1064
- def : Builtin<"atomic_exchange",
1068
+ defm : BuiltinAtomicExplicit<"atomic_exchange",
1065
1069
[TypePair[1], PointerType<VolatileType<TypePair[0]>, GenericAS>, TypePair[1]]>;
1066
- def : Builtin<"atomic_exchange_explicit",
1067
- [TypePair[1], PointerType<VolatileType<TypePair[0]>, GenericAS>, TypePair[1], MemoryOrder]>;
1068
- def : Builtin<"atomic_exchange_explicit",
1069
- [TypePair[1], PointerType<VolatileType<TypePair[0]>, GenericAS>, TypePair[1], MemoryOrder, MemoryScope]>;
1070
1070
foreach Variant = ["weak", "strong"] in {
1071
1071
def : Builtin<"atomic_compare_exchange_" # Variant,
1072
1072
[Bool, PointerType<VolatileType<TypePair[0]>, GenericAS>,
@@ -1084,249 +1084,125 @@ let MinVersion = CL20 in {
1084
1084
[AtomicLong, Long, Long], [AtomicULong, ULong, ULong],
1085
1085
[AtomicUIntPtr, UIntPtr, PtrDiff]] in {
1086
1086
foreach ModOp = ["add", "sub"] in {
1087
- def : Builtin <"atomic_fetch_" # ModOp,
1087
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1088
1088
[TypePair[1], PointerType<VolatileType<TypePair[0]>, GenericAS>, TypePair[2]]>;
1089
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1090
- [TypePair[1], PointerType<VolatileType<TypePair[0]>, GenericAS>, TypePair[2], MemoryOrder]>;
1091
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1092
- [TypePair[1], PointerType<VolatileType<TypePair[0]>, GenericAS>, TypePair[2], MemoryOrder, MemoryScope]>;
1093
1089
}
1094
1090
}
1095
1091
foreach TypePair = [[AtomicInt, Int, Int], [AtomicUInt, UInt, UInt],
1096
1092
[AtomicLong, Long, Long], [AtomicULong, ULong, ULong]] in {
1097
1093
foreach ModOp = ["or", "xor", "and", "min", "max"] in {
1098
- def : Builtin <"atomic_fetch_" # ModOp,
1094
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1099
1095
[TypePair[1], PointerType<VolatileType<TypePair[0]>, GenericAS>, TypePair[2]]>;
1100
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1101
- [TypePair[1], PointerType<VolatileType<TypePair[0]>, GenericAS>, TypePair[2], MemoryOrder]>;
1102
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1103
- [TypePair[1], PointerType<VolatileType<TypePair[0]>, GenericAS>, TypePair[2], MemoryOrder, MemoryScope]>;
1104
1096
}
1105
1097
}
1106
1098
1107
- def : Builtin <"atomic_flag_clear",
1099
+ defm : BuiltinAtomicExplicit <"atomic_flag_clear",
1108
1100
[Void, PointerType<VolatileType<AtomicFlag>, GenericAS>]>;
1109
- def : Builtin<"atomic_flag_clear_explicit",
1110
- [Void, PointerType<VolatileType<AtomicFlag>, GenericAS>, MemoryOrder]>;
1111
- def : Builtin<"atomic_flag_clear_explicit",
1112
- [Void, PointerType<VolatileType<AtomicFlag>, GenericAS>, MemoryOrder, MemoryScope]>;
1113
1101
1114
- def : Builtin <"atomic_flag_test_and_set",
1102
+ defm : BuiltinAtomicExplicit <"atomic_flag_test_and_set",
1115
1103
[Bool, PointerType<VolatileType<AtomicFlag>, GenericAS>]>;
1116
- def : Builtin<"atomic_flag_test_and_set_explicit",
1117
- [Bool, PointerType<VolatileType<AtomicFlag>, GenericAS>, MemoryOrder]>;
1118
- def : Builtin<"atomic_flag_test_and_set_explicit",
1119
- [Bool, PointerType<VolatileType<AtomicFlag>, GenericAS>, MemoryOrder, MemoryScope]>;
1120
1104
}
1121
1105
1122
1106
// The functionality added by cl_ext_float_atomics extension
1123
1107
let MinVersion = CL20 in {
1124
1108
let Extension = FuncExtFloatAtomicsFp16GlobalLoadStore in {
1125
- def : Builtin <"atomic_store",
1109
+ defm : BuiltinAtomicExplicit <"atomic_store",
1126
1110
[Void, PointerType<VolatileType<AtomicHalf>, GlobalAS>, AtomicHalf]>;
1127
- def : Builtin<"atomic_store_explicit",
1128
- [Void, PointerType<VolatileType<AtomicHalf>, GlobalAS>, AtomicHalf, MemoryOrder]>;
1129
- def : Builtin<"atomic_store_explicit",
1130
- [Void, PointerType<VolatileType<AtomicHalf>, GlobalAS>, AtomicHalf, MemoryOrder, MemoryScope]>;
1131
- def : Builtin<"atomic_load",
1111
+ defm : BuiltinAtomicExplicit<"atomic_load",
1132
1112
[Half, PointerType<VolatileType<AtomicHalf>, GlobalAS>]>;
1133
- def : Builtin<"atomic_load_explicit",
1134
- [Half, PointerType<VolatileType<AtomicHalf>, GlobalAS>, MemoryOrder]>;
1135
- def : Builtin<"atomic_load_explicit",
1136
- [Half, PointerType<VolatileType<AtomicHalf>, GlobalAS>, MemoryOrder, MemoryScope]>;
1137
- def : Builtin<"atomic_exchange",
1113
+ defm : BuiltinAtomicExplicit<"atomic_exchange",
1138
1114
[Half, PointerType<VolatileType<AtomicHalf>, GlobalAS>, Half]>;
1139
- def : Builtin<"atomic_exchange_explicit",
1140
- [Half, PointerType<VolatileType<AtomicHalf>, GlobalAS>, Half, MemoryOrder]>;
1141
- def : Builtin<"atomic_exchange_explicit",
1142
- [Half, PointerType<VolatileType<AtomicHalf>, GlobalAS>, Half, MemoryOrder, MemoryScope]>;
1143
1115
}
1144
1116
let Extension = FuncExtFloatAtomicsFp16LocalLoadStore in {
1145
- def : Builtin <"atomic_store",
1117
+ defm : BuiltinAtomicExplicit <"atomic_store",
1146
1118
[Void, PointerType<VolatileType<AtomicHalf>, LocalAS>, AtomicHalf]>;
1147
- def : Builtin<"atomic_store_explicit",
1148
- [Void, PointerType<VolatileType<AtomicHalf>, LocalAS>, AtomicHalf, MemoryOrder]>;
1149
- def : Builtin<"atomic_store_explicit",
1150
- [Void, PointerType<VolatileType<AtomicHalf>, LocalAS>, AtomicHalf, MemoryOrder, MemoryScope]>;
1151
- def : Builtin<"atomic_load",
1119
+ defm : BuiltinAtomicExplicit<"atomic_load",
1152
1120
[Half, PointerType<VolatileType<AtomicHalf>, LocalAS>]>;
1153
- def : Builtin<"atomic_load_explicit",
1154
- [Half, PointerType<VolatileType<AtomicHalf>, LocalAS>, MemoryOrder]>;
1155
- def : Builtin<"atomic_load_explicit",
1156
- [Half, PointerType<VolatileType<AtomicHalf>, LocalAS>, MemoryOrder, MemoryScope]>;
1157
- def : Builtin<"atomic_exchange",
1121
+ defm : BuiltinAtomicExplicit<"atomic_exchange",
1158
1122
[Half, PointerType<VolatileType<AtomicHalf>, LocalAS>, Half]>;
1159
- def : Builtin<"atomic_exchange_explicit",
1160
- [Half, PointerType<VolatileType<AtomicHalf>, LocalAS>, Half, MemoryOrder]>;
1161
- def : Builtin<"atomic_exchange_explicit",
1162
- [Half, PointerType<VolatileType<AtomicHalf>, LocalAS>, Half, MemoryOrder, MemoryScope]>;
1163
1123
}
1164
1124
let Extension = FuncExtFloatAtomicsFp16GenericLoadStore in {
1165
- def : Builtin <"atomic_store",
1125
+ defm : BuiltinAtomicExplicit <"atomic_store",
1166
1126
[Void, PointerType<VolatileType<AtomicHalf>, GenericAS>, AtomicHalf]>;
1167
- def : Builtin<"atomic_store_explicit",
1168
- [Void, PointerType<VolatileType<AtomicHalf>, GenericAS>, AtomicHalf, MemoryOrder]>;
1169
- def : Builtin<"atomic_store_explicit",
1170
- [Void, PointerType<VolatileType<AtomicHalf>, GenericAS>, AtomicHalf, MemoryOrder, MemoryScope]>;
1171
- def : Builtin<"atomic_load",
1127
+ defm : BuiltinAtomicExplicit<"atomic_load",
1172
1128
[Half, PointerType<VolatileType<AtomicHalf>, GenericAS>]>;
1173
- def : Builtin<"atomic_load_explicit",
1174
- [Half, PointerType<VolatileType<AtomicHalf>, GenericAS>, MemoryOrder]>;
1175
- def : Builtin<"atomic_load_explicit",
1176
- [Half, PointerType<VolatileType<AtomicHalf>, GenericAS>, MemoryOrder, MemoryScope]>;
1177
- def : Builtin<"atomic_exchange",
1129
+ defm : BuiltinAtomicExplicit<"atomic_exchange",
1178
1130
[Half, PointerType<VolatileType<AtomicHalf>, GenericAS>, Half]>;
1179
- def : Builtin<"atomic_exchange_explicit",
1180
- [Half, PointerType<VolatileType<AtomicHalf>, GenericAS>, Half, MemoryOrder]>;
1181
- def : Builtin<"atomic_exchange_explicit",
1182
- [Half, PointerType<VolatileType<AtomicHalf>, GenericAS>, Half, MemoryOrder, MemoryScope]>;
1183
1131
}
1184
1132
foreach ModOp = ["add", "sub"] in {
1185
1133
let Extension = FuncExtFloatAtomicsFp16GlobalAdd in {
1186
- def : Builtin <"atomic_fetch_" # ModOp,
1134
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1187
1135
[Half, PointerType<VolatileType<AtomicFloat>, GlobalAS>, Half]>;
1188
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1189
- [Half, PointerType<VolatileType<AtomicFloat>, GlobalAS>, Half, MemoryOrder]>;
1190
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1191
- [Half, PointerType<VolatileType<AtomicFloat>, GlobalAS>, Half, MemoryOrder, MemoryScope]>;
1192
1136
}
1193
1137
let Extension = FuncExtFloatAtomicsFp32GlobalAdd in {
1194
- def : Builtin <"atomic_fetch_" # ModOp,
1138
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1195
1139
[Float, PointerType<VolatileType<AtomicFloat>, GlobalAS>, Float]>;
1196
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1197
- [Float, PointerType<VolatileType<AtomicFloat>, GlobalAS>, Float, MemoryOrder]>;
1198
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1199
- [Float, PointerType<VolatileType<AtomicFloat>, GlobalAS>, Float, MemoryOrder, MemoryScope]>;
1200
1140
}
1201
1141
let Extension = FuncExtFloatAtomicsFp64GlobalAdd in {
1202
- def : Builtin <"atomic_fetch_" # ModOp,
1142
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1203
1143
[Double, PointerType<VolatileType<AtomicDouble>, GlobalAS>, Double]>;
1204
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1205
- [Double, PointerType<VolatileType<AtomicDouble>, GlobalAS>, Double, MemoryOrder]>;
1206
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1207
- [Double, PointerType<VolatileType<AtomicDouble>, GlobalAS>, Double, MemoryOrder, MemoryScope]>;
1208
1144
}
1209
1145
let Extension = FuncExtFloatAtomicsFp16LocalAdd in {
1210
- def : Builtin <"atomic_fetch_" # ModOp,
1146
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1211
1147
[Half, PointerType<VolatileType<AtomicFloat>, LocalAS>, Half]>;
1212
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1213
- [Half, PointerType<VolatileType<AtomicFloat>, LocalAS>, Half, MemoryOrder]>;
1214
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1215
- [Half, PointerType<VolatileType<AtomicFloat>, LocalAS>, Half, MemoryOrder, MemoryScope]>;
1216
1148
}
1217
1149
let Extension = FuncExtFloatAtomicsFp32LocalAdd in {
1218
- def : Builtin <"atomic_fetch_" # ModOp,
1150
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1219
1151
[Float, PointerType<VolatileType<AtomicFloat>, LocalAS>, Float]>;
1220
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1221
- [Float, PointerType<VolatileType<AtomicFloat>, LocalAS>, Float, MemoryOrder]>;
1222
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1223
- [Float, PointerType<VolatileType<AtomicFloat>, LocalAS>, Float, MemoryOrder, MemoryScope]>;
1224
1152
}
1225
1153
let Extension = FuncExtFloatAtomicsFp64LocalAdd in {
1226
- def : Builtin <"atomic_fetch_" # ModOp,
1154
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1227
1155
[Double, PointerType<VolatileType<AtomicDouble>, LocalAS>, Double]>;
1228
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1229
- [Double, PointerType<VolatileType<AtomicDouble>, LocalAS>, Double, MemoryOrder]>;
1230
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1231
- [Double, PointerType<VolatileType<AtomicDouble>, LocalAS>, Double, MemoryOrder, MemoryScope]>;
1232
1156
}
1233
1157
let Extension = FuncExtFloatAtomicsFp16GenericAdd in {
1234
- def : Builtin <"atomic_fetch_" # ModOp,
1158
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1235
1159
[Half, PointerType<VolatileType<AtomicFloat>, GenericAS>, Half]>;
1236
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1237
- [Half, PointerType<VolatileType<AtomicFloat>, GenericAS>, Half, MemoryOrder]>;
1238
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1239
- [Half, PointerType<VolatileType<AtomicFloat>, GenericAS>, Half, MemoryOrder, MemoryScope]>;
1240
1160
}
1241
1161
let Extension = FuncExtFloatAtomicsFp32GenericAdd in {
1242
- def : Builtin <"atomic_fetch_" # ModOp,
1162
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1243
1163
[Float, PointerType<VolatileType<AtomicFloat>, GenericAS>, Float]>;
1244
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1245
- [Float, PointerType<VolatileType<AtomicFloat>, GenericAS>, Float, MemoryOrder]>;
1246
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1247
- [Float, PointerType<VolatileType<AtomicFloat>, GenericAS>, Float, MemoryOrder, MemoryScope]>;
1248
1164
}
1249
1165
let Extension = FuncExtFloatAtomicsFp64GenericAdd in {
1250
- def : Builtin <"atomic_fetch_" # ModOp,
1166
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1251
1167
[Double, PointerType<VolatileType<AtomicDouble>, GenericAS>, Double]>;
1252
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1253
- [Double, PointerType<VolatileType<AtomicDouble>, GenericAS>, Double, MemoryOrder]>;
1254
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1255
- [Double, PointerType<VolatileType<AtomicDouble>, GenericAS>, Double, MemoryOrder, MemoryScope]>;
1256
1168
}
1257
1169
}
1258
1170
foreach ModOp = ["min", "max"] in {
1259
1171
let Extension = FuncExtFloatAtomicsFp16GlobalMinMax in {
1260
- def : Builtin <"atomic_fetch_" # ModOp,
1172
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1261
1173
[Half, PointerType<VolatileType<AtomicHalf>, GlobalAS>, Half]>;
1262
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1263
- [Half, PointerType<VolatileType<AtomicHalf>, GlobalAS>, Half, MemoryOrder]>;
1264
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1265
- [Half, PointerType<VolatileType<AtomicHalf>, GlobalAS>, Half, MemoryOrder, MemoryScope]>;
1266
1174
}
1267
1175
let Extension = FuncExtFloatAtomicsFp32GlobalMinMax in {
1268
- def : Builtin <"atomic_fetch_" # ModOp,
1176
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1269
1177
[Float, PointerType<VolatileType<AtomicFloat>, GlobalAS>, Float]>;
1270
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1271
- [Float, PointerType<VolatileType<AtomicFloat>, GlobalAS>, Float, MemoryOrder]>;
1272
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1273
- [Float, PointerType<VolatileType<AtomicFloat>, GlobalAS>, Float, MemoryOrder, MemoryScope]>;
1274
1178
}
1275
1179
let Extension = FuncExtFloatAtomicsFp64GlobalMinMax in {
1276
- def : Builtin <"atomic_fetch_" # ModOp,
1180
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1277
1181
[Double, PointerType<VolatileType<AtomicDouble>, GlobalAS>, Double]>;
1278
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1279
- [Double, PointerType<VolatileType<AtomicDouble>, GlobalAS>, Double, MemoryOrder]>;
1280
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1281
- [Double, PointerType<VolatileType<AtomicDouble>, GlobalAS>, Double, MemoryOrder, MemoryScope]>;
1282
1182
}
1283
1183
let Extension = FuncExtFloatAtomicsFp16LocalMinMax in {
1284
- def : Builtin <"atomic_fetch_" # ModOp,
1184
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1285
1185
[Half, PointerType<VolatileType<AtomicHalf>, LocalAS>, Half]>;
1286
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1287
- [Half, PointerType<VolatileType<AtomicHalf>, LocalAS>, Half, MemoryOrder]>;
1288
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1289
- [Half, PointerType<VolatileType<AtomicHalf>, LocalAS>, Half, MemoryOrder, MemoryScope]>;
1290
1186
}
1291
1187
let Extension = FuncExtFloatAtomicsFp32LocalMinMax in {
1292
- def : Builtin <"atomic_fetch_" # ModOp,
1188
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1293
1189
[Float, PointerType<VolatileType<AtomicFloat>, LocalAS>, Float]>;
1294
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1295
- [Float, PointerType<VolatileType<AtomicFloat>, LocalAS>, Float, MemoryOrder]>;
1296
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1297
- [Float, PointerType<VolatileType<AtomicFloat>, LocalAS>, Float, MemoryOrder, MemoryScope]>;
1298
1190
}
1299
1191
let Extension = FuncExtFloatAtomicsFp64LocalMinMax in {
1300
- def : Builtin <"atomic_fetch_" # ModOp,
1192
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1301
1193
[Double, PointerType<VolatileType<AtomicDouble>, LocalAS>, Double]>;
1302
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1303
- [Double, PointerType<VolatileType<AtomicDouble>, LocalAS>, Double, MemoryOrder]>;
1304
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1305
- [Double, PointerType<VolatileType<AtomicDouble>, LocalAS>, Double, MemoryOrder, MemoryScope]>;
1306
1194
}
1307
1195
let Extension = FuncExtFloatAtomicsFp16GenericMinMax in {
1308
- def : Builtin <"atomic_fetch_" # ModOp,
1196
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1309
1197
[Half, PointerType<VolatileType<AtomicHalf>, GenericAS>, Half]>;
1310
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1311
- [Half, PointerType<VolatileType<AtomicHalf>, GenericAS>, Half, MemoryOrder]>;
1312
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1313
- [Half, PointerType<VolatileType<AtomicHalf>, GenericAS>, Half, MemoryOrder, MemoryScope]>;
1314
1198
}
1315
1199
let Extension = FuncExtFloatAtomicsFp32GenericMinMax in {
1316
- def : Builtin <"atomic_fetch_" # ModOp,
1200
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1317
1201
[Float, PointerType<VolatileType<AtomicFloat>, GenericAS>, Float]>;
1318
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1319
- [Float, PointerType<VolatileType<AtomicFloat>, GenericAS>, Float, MemoryOrder]>;
1320
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1321
- [Float, PointerType<VolatileType<AtomicFloat>, GenericAS>, Float, MemoryOrder, MemoryScope]>;
1322
1202
}
1323
1203
let Extension = FuncExtFloatAtomicsFp64GenericMinMax in {
1324
- def : Builtin <"atomic_fetch_" # ModOp,
1204
+ defm : BuiltinAtomicExplicit <"atomic_fetch_" # ModOp,
1325
1205
[Double, PointerType<VolatileType<AtomicDouble>, GenericAS>, Double]>;
1326
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1327
- [Double, PointerType<VolatileType<AtomicDouble>, GenericAS>, Double, MemoryOrder]>;
1328
- def : Builtin<"atomic_fetch_" # ModOp # "_explicit",
1329
- [Double, PointerType<VolatileType<AtomicDouble>, GenericAS>, Double, MemoryOrder, MemoryScope]>;
1330
1206
}
1331
1207
}
1332
1208
}
0 commit comments