Skip to content

Commit 174dffb

Browse files
svenvhtstellar
authored andcommitted
[OpenCL] Move most _explicit atomics into multiclass; NFC
This will simplify future conditionalization for OpenCL 3.0 optionality of atomic features. The only set of atomic functions not using the multiclass is atomic_compare_exchange_strong/weak, as these don't fit the common pattern due to having 2 MemoryOrder arguments. (cherry picked from commit d97a4df)
1 parent 8b3ba44 commit 174dffb

File tree

1 file changed

+46
-170
lines changed

1 file changed

+46
-170
lines changed

clang/lib/Sema/OpenCLBuiltins.td

Lines changed: 46 additions & 170 deletions
Original file line numberDiff line numberDiff line change
@@ -1040,6 +1040,18 @@ let Extension = FuncExtOpenCLCxx in {
10401040
}
10411041
}
10421042

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+
10431055
// OpenCL v2.0 s6.13.11 - Atomic Functions.
10441056
let MinVersion = CL20 in {
10451057
def : Builtin<"atomic_work_item_fence", [Void, MemFenceFlags, MemoryOrder, MemoryScope]>;
@@ -1049,24 +1061,12 @@ let MinVersion = CL20 in {
10491061
[AtomicFloat, Float], [AtomicDouble, Double]] in {
10501062
def : Builtin<"atomic_init",
10511063
[Void, PointerType<VolatileType<TypePair[0]>, GenericAS>, TypePair[1]]>;
1052-
def : Builtin<"atomic_store",
1064+
defm : BuiltinAtomicExplicit<"atomic_store",
10531065
[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",
10591067
[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",
10651069
[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]>;
10701070
foreach Variant = ["weak", "strong"] in {
10711071
def : Builtin<"atomic_compare_exchange_" # Variant,
10721072
[Bool, PointerType<VolatileType<TypePair[0]>, GenericAS>,
@@ -1084,249 +1084,125 @@ let MinVersion = CL20 in {
10841084
[AtomicLong, Long, Long], [AtomicULong, ULong, ULong],
10851085
[AtomicUIntPtr, UIntPtr, PtrDiff]] in {
10861086
foreach ModOp = ["add", "sub"] in {
1087-
def : Builtin<"atomic_fetch_" # ModOp,
1087+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
10881088
[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]>;
10931089
}
10941090
}
10951091
foreach TypePair = [[AtomicInt, Int, Int], [AtomicUInt, UInt, UInt],
10961092
[AtomicLong, Long, Long], [AtomicULong, ULong, ULong]] in {
10971093
foreach ModOp = ["or", "xor", "and", "min", "max"] in {
1098-
def : Builtin<"atomic_fetch_" # ModOp,
1094+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
10991095
[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]>;
11041096
}
11051097
}
11061098

1107-
def : Builtin<"atomic_flag_clear",
1099+
defm : BuiltinAtomicExplicit<"atomic_flag_clear",
11081100
[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]>;
11131101

1114-
def : Builtin<"atomic_flag_test_and_set",
1102+
defm : BuiltinAtomicExplicit<"atomic_flag_test_and_set",
11151103
[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]>;
11201104
}
11211105

11221106
// The functionality added by cl_ext_float_atomics extension
11231107
let MinVersion = CL20 in {
11241108
let Extension = FuncExtFloatAtomicsFp16GlobalLoadStore in {
1125-
def : Builtin<"atomic_store",
1109+
defm : BuiltinAtomicExplicit<"atomic_store",
11261110
[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",
11321112
[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",
11381114
[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]>;
11431115
}
11441116
let Extension = FuncExtFloatAtomicsFp16LocalLoadStore in {
1145-
def : Builtin<"atomic_store",
1117+
defm : BuiltinAtomicExplicit<"atomic_store",
11461118
[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",
11521120
[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",
11581122
[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]>;
11631123
}
11641124
let Extension = FuncExtFloatAtomicsFp16GenericLoadStore in {
1165-
def : Builtin<"atomic_store",
1125+
defm : BuiltinAtomicExplicit<"atomic_store",
11661126
[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",
11721128
[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",
11781130
[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]>;
11831131
}
11841132
foreach ModOp = ["add", "sub"] in {
11851133
let Extension = FuncExtFloatAtomicsFp16GlobalAdd in {
1186-
def : Builtin<"atomic_fetch_" # ModOp,
1134+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
11871135
[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]>;
11921136
}
11931137
let Extension = FuncExtFloatAtomicsFp32GlobalAdd in {
1194-
def : Builtin<"atomic_fetch_" # ModOp,
1138+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
11951139
[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]>;
12001140
}
12011141
let Extension = FuncExtFloatAtomicsFp64GlobalAdd in {
1202-
def : Builtin<"atomic_fetch_" # ModOp,
1142+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
12031143
[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]>;
12081144
}
12091145
let Extension = FuncExtFloatAtomicsFp16LocalAdd in {
1210-
def : Builtin<"atomic_fetch_" # ModOp,
1146+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
12111147
[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]>;
12161148
}
12171149
let Extension = FuncExtFloatAtomicsFp32LocalAdd in {
1218-
def : Builtin<"atomic_fetch_" # ModOp,
1150+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
12191151
[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]>;
12241152
}
12251153
let Extension = FuncExtFloatAtomicsFp64LocalAdd in {
1226-
def : Builtin<"atomic_fetch_" # ModOp,
1154+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
12271155
[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]>;
12321156
}
12331157
let Extension = FuncExtFloatAtomicsFp16GenericAdd in {
1234-
def : Builtin<"atomic_fetch_" # ModOp,
1158+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
12351159
[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]>;
12401160
}
12411161
let Extension = FuncExtFloatAtomicsFp32GenericAdd in {
1242-
def : Builtin<"atomic_fetch_" # ModOp,
1162+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
12431163
[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]>;
12481164
}
12491165
let Extension = FuncExtFloatAtomicsFp64GenericAdd in {
1250-
def : Builtin<"atomic_fetch_" # ModOp,
1166+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
12511167
[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]>;
12561168
}
12571169
}
12581170
foreach ModOp = ["min", "max"] in {
12591171
let Extension = FuncExtFloatAtomicsFp16GlobalMinMax in {
1260-
def : Builtin<"atomic_fetch_" # ModOp,
1172+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
12611173
[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]>;
12661174
}
12671175
let Extension = FuncExtFloatAtomicsFp32GlobalMinMax in {
1268-
def : Builtin<"atomic_fetch_" # ModOp,
1176+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
12691177
[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]>;
12741178
}
12751179
let Extension = FuncExtFloatAtomicsFp64GlobalMinMax in {
1276-
def : Builtin<"atomic_fetch_" # ModOp,
1180+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
12771181
[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]>;
12821182
}
12831183
let Extension = FuncExtFloatAtomicsFp16LocalMinMax in {
1284-
def : Builtin<"atomic_fetch_" # ModOp,
1184+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
12851185
[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]>;
12901186
}
12911187
let Extension = FuncExtFloatAtomicsFp32LocalMinMax in {
1292-
def : Builtin<"atomic_fetch_" # ModOp,
1188+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
12931189
[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]>;
12981190
}
12991191
let Extension = FuncExtFloatAtomicsFp64LocalMinMax in {
1300-
def : Builtin<"atomic_fetch_" # ModOp,
1192+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
13011193
[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]>;
13061194
}
13071195
let Extension = FuncExtFloatAtomicsFp16GenericMinMax in {
1308-
def : Builtin<"atomic_fetch_" # ModOp,
1196+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
13091197
[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]>;
13141198
}
13151199
let Extension = FuncExtFloatAtomicsFp32GenericMinMax in {
1316-
def : Builtin<"atomic_fetch_" # ModOp,
1200+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
13171201
[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]>;
13221202
}
13231203
let Extension = FuncExtFloatAtomicsFp64GenericMinMax in {
1324-
def : Builtin<"atomic_fetch_" # ModOp,
1204+
defm : BuiltinAtomicExplicit<"atomic_fetch_" # ModOp,
13251205
[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]>;
13301206
}
13311207
}
13321208
}

0 commit comments

Comments
 (0)