@@ -861,10 +861,10 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {
861
861
case AtomicExpr::AO__opencl_atomic_init:
862
862
llvm_unreachable (" Already handled above with EmitAtomicInit!" );
863
863
864
+ case AtomicExpr::AO__atomic_load_n:
864
865
case AtomicExpr::AO__c11_atomic_load:
865
866
case AtomicExpr::AO__opencl_atomic_load:
866
867
case AtomicExpr::AO__hip_atomic_load:
867
- case AtomicExpr::AO__atomic_load_n:
868
868
break ;
869
869
870
870
case AtomicExpr::AO__atomic_load:
@@ -880,14 +880,14 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {
880
880
Dest = EmitPointerWithAlignment (E->getVal2 ());
881
881
break ;
882
882
883
- case AtomicExpr::AO__c11_atomic_compare_exchange_strong:
883
+ case AtomicExpr::AO__atomic_compare_exchange:
884
+ case AtomicExpr::AO__atomic_compare_exchange_n:
884
885
case AtomicExpr::AO__c11_atomic_compare_exchange_weak:
885
- case AtomicExpr::AO__opencl_atomic_compare_exchange_strong:
886
+ case AtomicExpr::AO__c11_atomic_compare_exchange_strong:
887
+ case AtomicExpr::AO__hip_atomic_compare_exchange_weak:
886
888
case AtomicExpr::AO__hip_atomic_compare_exchange_strong:
887
889
case AtomicExpr::AO__opencl_atomic_compare_exchange_weak:
888
- case AtomicExpr::AO__hip_atomic_compare_exchange_weak:
889
- case AtomicExpr::AO__atomic_compare_exchange_n:
890
- case AtomicExpr::AO__atomic_compare_exchange:
890
+ case AtomicExpr::AO__opencl_atomic_compare_exchange_strong:
891
891
Val1 = EmitPointerWithAlignment (E->getVal1 ());
892
892
if (E->getOp () == AtomicExpr::AO__atomic_compare_exchange)
893
893
Val2 = EmitPointerWithAlignment (E->getVal2 ());
@@ -938,32 +938,32 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {
938
938
ShouldCastToIntPtrTy = !MemTy->isFloatingType ();
939
939
[[fallthrough]];
940
940
941
- case AtomicExpr::AO__c11_atomic_store:
942
- case AtomicExpr::AO__c11_atomic_exchange:
943
- case AtomicExpr::AO__opencl_atomic_store:
944
- case AtomicExpr::AO__hip_atomic_store:
945
- case AtomicExpr::AO__opencl_atomic_exchange:
946
- case AtomicExpr::AO__hip_atomic_exchange:
941
+ case AtomicExpr::AO__atomic_fetch_and:
942
+ case AtomicExpr::AO__atomic_fetch_nand:
943
+ case AtomicExpr::AO__atomic_fetch_or:
944
+ case AtomicExpr::AO__atomic_fetch_xor:
945
+ case AtomicExpr::AO__atomic_and_fetch:
946
+ case AtomicExpr::AO__atomic_nand_fetch:
947
+ case AtomicExpr::AO__atomic_or_fetch:
948
+ case AtomicExpr::AO__atomic_xor_fetch:
947
949
case AtomicExpr::AO__atomic_store_n:
948
950
case AtomicExpr::AO__atomic_exchange_n:
949
951
case AtomicExpr::AO__c11_atomic_fetch_and:
952
+ case AtomicExpr::AO__c11_atomic_fetch_nand:
950
953
case AtomicExpr::AO__c11_atomic_fetch_or:
951
954
case AtomicExpr::AO__c11_atomic_fetch_xor:
952
- case AtomicExpr::AO__c11_atomic_fetch_nand:
953
- case AtomicExpr::AO__opencl_atomic_fetch_and:
954
- case AtomicExpr::AO__opencl_atomic_fetch_or:
955
- case AtomicExpr::AO__opencl_atomic_fetch_xor:
956
- case AtomicExpr::AO__atomic_fetch_and:
955
+ case AtomicExpr::AO__c11_atomic_store:
956
+ case AtomicExpr::AO__c11_atomic_exchange:
957
957
case AtomicExpr::AO__hip_atomic_fetch_and:
958
- case AtomicExpr::AO__atomic_fetch_or:
959
958
case AtomicExpr::AO__hip_atomic_fetch_or:
960
- case AtomicExpr::AO__atomic_fetch_xor:
961
959
case AtomicExpr::AO__hip_atomic_fetch_xor:
962
- case AtomicExpr::AO__atomic_fetch_nand:
963
- case AtomicExpr::AO__atomic_and_fetch:
964
- case AtomicExpr::AO__atomic_or_fetch:
965
- case AtomicExpr::AO__atomic_xor_fetch:
966
- case AtomicExpr::AO__atomic_nand_fetch:
960
+ case AtomicExpr::AO__hip_atomic_store:
961
+ case AtomicExpr::AO__hip_atomic_exchange:
962
+ case AtomicExpr::AO__opencl_atomic_fetch_and:
963
+ case AtomicExpr::AO__opencl_atomic_fetch_or:
964
+ case AtomicExpr::AO__opencl_atomic_fetch_xor:
965
+ case AtomicExpr::AO__opencl_atomic_store:
966
+ case AtomicExpr::AO__opencl_atomic_exchange:
967
967
Val1 = EmitValToTemp (*this , E->getVal1 ());
968
968
break ;
969
969
}
@@ -1002,44 +1002,44 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {
1002
1002
case AtomicExpr::AO__opencl_atomic_init:
1003
1003
llvm_unreachable (" Already handled above with EmitAtomicInit!" );
1004
1004
1005
- case AtomicExpr::AO__c11_atomic_fetch_add:
1006
- case AtomicExpr::AO__opencl_atomic_fetch_add:
1007
1005
case AtomicExpr::AO__atomic_fetch_add:
1008
- case AtomicExpr::AO__hip_atomic_fetch_add:
1009
- case AtomicExpr::AO__c11_atomic_fetch_and:
1010
- case AtomicExpr::AO__opencl_atomic_fetch_and:
1011
- case AtomicExpr::AO__hip_atomic_fetch_and:
1012
1006
case AtomicExpr::AO__atomic_fetch_and:
1013
- case AtomicExpr::AO__c11_atomic_fetch_or:
1014
- case AtomicExpr::AO__opencl_atomic_fetch_or:
1015
- case AtomicExpr::AO__hip_atomic_fetch_or:
1016
- case AtomicExpr::AO__atomic_fetch_or:
1017
- case AtomicExpr::AO__c11_atomic_fetch_nand:
1007
+ case AtomicExpr::AO__atomic_fetch_max:
1008
+ case AtomicExpr::AO__atomic_fetch_min:
1018
1009
case AtomicExpr::AO__atomic_fetch_nand:
1019
- case AtomicExpr::AO__c11_atomic_fetch_sub:
1020
- case AtomicExpr::AO__opencl_atomic_fetch_sub:
1010
+ case AtomicExpr::AO__atomic_fetch_or:
1021
1011
case AtomicExpr::AO__atomic_fetch_sub:
1022
- case AtomicExpr::AO__hip_atomic_fetch_sub:
1023
- case AtomicExpr::AO__c11_atomic_fetch_xor:
1024
- case AtomicExpr::AO__opencl_atomic_fetch_xor:
1025
- case AtomicExpr::AO__opencl_atomic_fetch_min:
1026
- case AtomicExpr::AO__opencl_atomic_fetch_max:
1027
1012
case AtomicExpr::AO__atomic_fetch_xor:
1028
- case AtomicExpr::AO__hip_atomic_fetch_xor:
1029
- case AtomicExpr::AO__c11_atomic_fetch_max:
1030
- case AtomicExpr::AO__c11_atomic_fetch_min:
1031
1013
case AtomicExpr::AO__atomic_add_fetch:
1032
1014
case AtomicExpr::AO__atomic_and_fetch:
1015
+ case AtomicExpr::AO__atomic_max_fetch:
1016
+ case AtomicExpr::AO__atomic_min_fetch:
1033
1017
case AtomicExpr::AO__atomic_nand_fetch:
1034
1018
case AtomicExpr::AO__atomic_or_fetch:
1035
1019
case AtomicExpr::AO__atomic_sub_fetch:
1036
1020
case AtomicExpr::AO__atomic_xor_fetch:
1037
- case AtomicExpr::AO__atomic_fetch_max:
1021
+ case AtomicExpr::AO__c11_atomic_fetch_add:
1022
+ case AtomicExpr::AO__c11_atomic_fetch_and:
1023
+ case AtomicExpr::AO__c11_atomic_fetch_max:
1024
+ case AtomicExpr::AO__c11_atomic_fetch_min:
1025
+ case AtomicExpr::AO__c11_atomic_fetch_nand:
1026
+ case AtomicExpr::AO__c11_atomic_fetch_or:
1027
+ case AtomicExpr::AO__c11_atomic_fetch_sub:
1028
+ case AtomicExpr::AO__c11_atomic_fetch_xor:
1029
+ case AtomicExpr::AO__hip_atomic_fetch_add:
1030
+ case AtomicExpr::AO__hip_atomic_fetch_and:
1038
1031
case AtomicExpr::AO__hip_atomic_fetch_max:
1039
- case AtomicExpr::AO__atomic_fetch_min:
1040
1032
case AtomicExpr::AO__hip_atomic_fetch_min:
1041
- case AtomicExpr::AO__atomic_max_fetch:
1042
- case AtomicExpr::AO__atomic_min_fetch:
1033
+ case AtomicExpr::AO__hip_atomic_fetch_or:
1034
+ case AtomicExpr::AO__hip_atomic_fetch_sub:
1035
+ case AtomicExpr::AO__hip_atomic_fetch_xor:
1036
+ case AtomicExpr::AO__opencl_atomic_fetch_add:
1037
+ case AtomicExpr::AO__opencl_atomic_fetch_and:
1038
+ case AtomicExpr::AO__opencl_atomic_fetch_max:
1039
+ case AtomicExpr::AO__opencl_atomic_fetch_min:
1040
+ case AtomicExpr::AO__opencl_atomic_fetch_or:
1041
+ case AtomicExpr::AO__opencl_atomic_fetch_sub:
1042
+ case AtomicExpr::AO__opencl_atomic_fetch_xor:
1043
1043
// For these, only library calls for certain sizes exist.
1044
1044
UseOptimizedLibcall = true ;
1045
1045
break ;
@@ -1053,25 +1053,25 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {
1053
1053
if (Misaligned)
1054
1054
break ;
1055
1055
[[fallthrough]];
1056
+ case AtomicExpr::AO__atomic_load_n:
1057
+ case AtomicExpr::AO__atomic_store_n:
1058
+ case AtomicExpr::AO__atomic_exchange_n:
1059
+ case AtomicExpr::AO__atomic_compare_exchange_n:
1056
1060
case AtomicExpr::AO__c11_atomic_load:
1057
1061
case AtomicExpr::AO__c11_atomic_store:
1058
1062
case AtomicExpr::AO__c11_atomic_exchange:
1059
1063
case AtomicExpr::AO__c11_atomic_compare_exchange_weak:
1060
1064
case AtomicExpr::AO__c11_atomic_compare_exchange_strong:
1065
+ case AtomicExpr::AO__hip_atomic_load:
1066
+ case AtomicExpr::AO__hip_atomic_store:
1067
+ case AtomicExpr::AO__hip_atomic_exchange:
1068
+ case AtomicExpr::AO__hip_atomic_compare_exchange_weak:
1061
1069
case AtomicExpr::AO__hip_atomic_compare_exchange_strong:
1062
1070
case AtomicExpr::AO__opencl_atomic_load:
1063
- case AtomicExpr::AO__hip_atomic_load:
1064
1071
case AtomicExpr::AO__opencl_atomic_store:
1065
- case AtomicExpr::AO__hip_atomic_store:
1066
1072
case AtomicExpr::AO__opencl_atomic_exchange:
1067
- case AtomicExpr::AO__hip_atomic_exchange:
1068
1073
case AtomicExpr::AO__opencl_atomic_compare_exchange_weak:
1069
- case AtomicExpr::AO__hip_atomic_compare_exchange_weak:
1070
1074
case AtomicExpr::AO__opencl_atomic_compare_exchange_strong:
1071
- case AtomicExpr::AO__atomic_load_n:
1072
- case AtomicExpr::AO__atomic_store_n:
1073
- case AtomicExpr::AO__atomic_exchange_n:
1074
- case AtomicExpr::AO__atomic_compare_exchange_n:
1075
1075
// Only use optimized library calls for sizes for which they exist.
1076
1076
// FIXME: Size == 16 optimized library functions exist too.
1077
1077
if (Size == 1 || Size == 2 || Size == 4 || Size == 8 )
@@ -1124,14 +1124,14 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {
1124
1124
// void *desired, int success, int failure)
1125
1125
// bool __atomic_compare_exchange_N(T *mem, T *expected, T desired,
1126
1126
// int success, int failure)
1127
+ case AtomicExpr::AO__atomic_compare_exchange:
1128
+ case AtomicExpr::AO__atomic_compare_exchange_n:
1127
1129
case AtomicExpr::AO__c11_atomic_compare_exchange_weak:
1128
1130
case AtomicExpr::AO__c11_atomic_compare_exchange_strong:
1129
- case AtomicExpr::AO__opencl_atomic_compare_exchange_weak:
1130
1131
case AtomicExpr::AO__hip_atomic_compare_exchange_weak:
1131
- case AtomicExpr::AO__opencl_atomic_compare_exchange_strong:
1132
1132
case AtomicExpr::AO__hip_atomic_compare_exchange_strong:
1133
- case AtomicExpr::AO__atomic_compare_exchange :
1134
- case AtomicExpr::AO__atomic_compare_exchange_n :
1133
+ case AtomicExpr::AO__opencl_atomic_compare_exchange_weak :
1134
+ case AtomicExpr::AO__opencl_atomic_compare_exchange_strong :
1135
1135
LibCallName = " __atomic_compare_exchange" ;
1136
1136
RetTy = getContext ().BoolTy ;
1137
1137
HaveRetTy = true ;
@@ -1146,22 +1146,22 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {
1146
1146
// void __atomic_exchange(size_t size, void *mem, void *val, void *return,
1147
1147
// int order)
1148
1148
// T __atomic_exchange_N(T *mem, T val, int order)
1149
- case AtomicExpr::AO__c11_atomic_exchange:
1150
- case AtomicExpr::AO__opencl_atomic_exchange:
1151
- case AtomicExpr::AO__atomic_exchange_n:
1152
1149
case AtomicExpr::AO__atomic_exchange:
1150
+ case AtomicExpr::AO__atomic_exchange_n:
1151
+ case AtomicExpr::AO__c11_atomic_exchange:
1153
1152
case AtomicExpr::AO__hip_atomic_exchange:
1153
+ case AtomicExpr::AO__opencl_atomic_exchange:
1154
1154
LibCallName = " __atomic_exchange" ;
1155
1155
AddDirectArgument (*this , Args, UseOptimizedLibcall, Val1.getPointer (),
1156
1156
MemTy, E->getExprLoc (), TInfo.Width );
1157
1157
break ;
1158
1158
// void __atomic_store(size_t size, void *mem, void *val, int order)
1159
1159
// void __atomic_store_N(T *mem, T val, int order)
1160
- case AtomicExpr::AO__c11_atomic_store:
1161
- case AtomicExpr::AO__opencl_atomic_store:
1162
- case AtomicExpr::AO__hip_atomic_store:
1163
1160
case AtomicExpr::AO__atomic_store:
1164
1161
case AtomicExpr::AO__atomic_store_n:
1162
+ case AtomicExpr::AO__c11_atomic_store:
1163
+ case AtomicExpr::AO__hip_atomic_store:
1164
+ case AtomicExpr::AO__opencl_atomic_store:
1165
1165
LibCallName = " __atomic_store" ;
1166
1166
RetTy = getContext ().VoidTy ;
1167
1167
HaveRetTy = true ;
@@ -1170,22 +1170,22 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {
1170
1170
break ;
1171
1171
// void __atomic_load(size_t size, void *mem, void *return, int order)
1172
1172
// T __atomic_load_N(T *mem, int order)
1173
- case AtomicExpr::AO__c11_atomic_load:
1174
- case AtomicExpr::AO__opencl_atomic_load:
1175
- case AtomicExpr::AO__hip_atomic_load:
1176
1173
case AtomicExpr::AO__atomic_load:
1177
1174
case AtomicExpr::AO__atomic_load_n:
1175
+ case AtomicExpr::AO__c11_atomic_load:
1176
+ case AtomicExpr::AO__hip_atomic_load:
1177
+ case AtomicExpr::AO__opencl_atomic_load:
1178
1178
LibCallName = " __atomic_load" ;
1179
1179
break ;
1180
1180
// T __atomic_add_fetch_N(T *mem, T val, int order)
1181
1181
// T __atomic_fetch_add_N(T *mem, T val, int order)
1182
1182
case AtomicExpr::AO__atomic_add_fetch:
1183
1183
PostOp = llvm::Instruction::Add;
1184
1184
[[fallthrough]];
1185
- case AtomicExpr::AO__c11_atomic_fetch_add:
1186
- case AtomicExpr::AO__opencl_atomic_fetch_add:
1187
1185
case AtomicExpr::AO__atomic_fetch_add:
1186
+ case AtomicExpr::AO__c11_atomic_fetch_add:
1188
1187
case AtomicExpr::AO__hip_atomic_fetch_add:
1188
+ case AtomicExpr::AO__opencl_atomic_fetch_add:
1189
1189
LibCallName = " __atomic_fetch_add" ;
1190
1190
AddDirectArgument (*this , Args, UseOptimizedLibcall, Val1.getPointer (),
1191
1191
LoweredMemTy, E->getExprLoc (), TInfo.Width );
@@ -1195,10 +1195,10 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {
1195
1195
case AtomicExpr::AO__atomic_and_fetch:
1196
1196
PostOp = llvm::Instruction::And;
1197
1197
[[fallthrough]];
1198
+ case AtomicExpr::AO__atomic_fetch_and:
1198
1199
case AtomicExpr::AO__c11_atomic_fetch_and:
1199
- case AtomicExpr::AO__opencl_atomic_fetch_and:
1200
1200
case AtomicExpr::AO__hip_atomic_fetch_and:
1201
- case AtomicExpr::AO__atomic_fetch_and :
1201
+ case AtomicExpr::AO__opencl_atomic_fetch_and :
1202
1202
LibCallName = " __atomic_fetch_and" ;
1203
1203
AddDirectArgument (*this , Args, UseOptimizedLibcall, Val1.getPointer (),
1204
1204
MemTy, E->getExprLoc (), TInfo.Width );
@@ -1208,10 +1208,10 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {
1208
1208
case AtomicExpr::AO__atomic_or_fetch:
1209
1209
PostOp = llvm::Instruction::Or;
1210
1210
[[fallthrough]];
1211
+ case AtomicExpr::AO__atomic_fetch_or:
1211
1212
case AtomicExpr::AO__c11_atomic_fetch_or:
1212
- case AtomicExpr::AO__opencl_atomic_fetch_or:
1213
1213
case AtomicExpr::AO__hip_atomic_fetch_or:
1214
- case AtomicExpr::AO__atomic_fetch_or :
1214
+ case AtomicExpr::AO__opencl_atomic_fetch_or :
1215
1215
LibCallName = " __atomic_fetch_or" ;
1216
1216
AddDirectArgument (*this , Args, UseOptimizedLibcall, Val1.getPointer (),
1217
1217
MemTy, E->getExprLoc (), TInfo.Width );
@@ -1221,10 +1221,10 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {
1221
1221
case AtomicExpr::AO__atomic_sub_fetch:
1222
1222
PostOp = llvm::Instruction::Sub;
1223
1223
[[fallthrough]];
1224
+ case AtomicExpr::AO__atomic_fetch_sub:
1224
1225
case AtomicExpr::AO__c11_atomic_fetch_sub:
1225
- case AtomicExpr::AO__opencl_atomic_fetch_sub:
1226
1226
case AtomicExpr::AO__hip_atomic_fetch_sub:
1227
- case AtomicExpr::AO__atomic_fetch_sub :
1227
+ case AtomicExpr::AO__opencl_atomic_fetch_sub :
1228
1228
LibCallName = " __atomic_fetch_sub" ;
1229
1229
AddDirectArgument (*this , Args, UseOptimizedLibcall, Val1.getPointer (),
1230
1230
LoweredMemTy, E->getExprLoc (), TInfo.Width );
@@ -1234,19 +1234,19 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {
1234
1234
case AtomicExpr::AO__atomic_xor_fetch:
1235
1235
PostOp = llvm::Instruction::Xor;
1236
1236
[[fallthrough]];
1237
+ case AtomicExpr::AO__atomic_fetch_xor:
1237
1238
case AtomicExpr::AO__c11_atomic_fetch_xor:
1238
- case AtomicExpr::AO__opencl_atomic_fetch_xor:
1239
1239
case AtomicExpr::AO__hip_atomic_fetch_xor:
1240
- case AtomicExpr::AO__atomic_fetch_xor :
1240
+ case AtomicExpr::AO__opencl_atomic_fetch_xor :
1241
1241
LibCallName = " __atomic_fetch_xor" ;
1242
1242
AddDirectArgument (*this , Args, UseOptimizedLibcall, Val1.getPointer (),
1243
1243
MemTy, E->getExprLoc (), TInfo.Width );
1244
1244
break ;
1245
1245
case AtomicExpr::AO__atomic_min_fetch:
1246
1246
PostOpMinMax = true ;
1247
1247
[[fallthrough]];
1248
- case AtomicExpr::AO__c11_atomic_fetch_min:
1249
1248
case AtomicExpr::AO__atomic_fetch_min:
1249
+ case AtomicExpr::AO__c11_atomic_fetch_min:
1250
1250
case AtomicExpr::AO__hip_atomic_fetch_min:
1251
1251
case AtomicExpr::AO__opencl_atomic_fetch_min:
1252
1252
LibCallName = E->getValueType ()->isSignedIntegerType ()
@@ -1258,8 +1258,8 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {
1258
1258
case AtomicExpr::AO__atomic_max_fetch:
1259
1259
PostOpMinMax = true ;
1260
1260
[[fallthrough]];
1261
- case AtomicExpr::AO__c11_atomic_fetch_max:
1262
1261
case AtomicExpr::AO__atomic_fetch_max:
1262
+ case AtomicExpr::AO__c11_atomic_fetch_max:
1263
1263
case AtomicExpr::AO__hip_atomic_fetch_max:
1264
1264
case AtomicExpr::AO__opencl_atomic_fetch_max:
1265
1265
LibCallName = E->getValueType ()->isSignedIntegerType ()
@@ -1273,8 +1273,8 @@ RValue CodeGenFunction::EmitAtomicExpr(AtomicExpr *E) {
1273
1273
case AtomicExpr::AO__atomic_nand_fetch:
1274
1274
PostOp = llvm::Instruction::And; // the NOT is special cased below
1275
1275
[[fallthrough]];
1276
- case AtomicExpr::AO__c11_atomic_fetch_nand:
1277
1276
case AtomicExpr::AO__atomic_fetch_nand:
1277
+ case AtomicExpr::AO__c11_atomic_fetch_nand:
1278
1278
LibCallName = " __atomic_fetch_nand" ;
1279
1279
AddDirectArgument (*this , Args, UseOptimizedLibcall, Val1.getPointer (),
1280
1280
MemTy, E->getExprLoc (), TInfo.Width );
0 commit comments