@@ -1197,7 +1197,197 @@ define fp128 @trunc_f128(fp128 %x) #0 {
1197
1197
ret fp128 %val
1198
1198
}
1199
1199
1200
- ; TODO: fcmp (missing STRICT_FSETCC handling)
1200
+ ; CHECK-LABEL: fcmp_olt_f128:
1201
+ ; CHECK: bl __lttf2
1202
+ define i32 @fcmp_olt_f128 (fp128 %a , fp128 %b ) #0 {
1203
+ %cmp = call i1 @llvm.experimental.constrained.fcmp.f128 (fp128 %a , fp128 %b , metadata !"olt" , metadata !"fpexcept.strict" ) #0
1204
+ %conv = zext i1 %cmp to i32
1205
+ ret i32 %conv
1206
+ }
1207
+
1208
+ ; CHECK-LABEL: fcmp_ole_f128:
1209
+ ; CHECK: bl __letf2
1210
+ define i32 @fcmp_ole_f128 (fp128 %a , fp128 %b ) #0 {
1211
+ %cmp = call i1 @llvm.experimental.constrained.fcmp.f128 (fp128 %a , fp128 %b , metadata !"ole" , metadata !"fpexcept.strict" ) #0
1212
+ %conv = zext i1 %cmp to i32
1213
+ ret i32 %conv
1214
+ }
1215
+
1216
+ ; CHECK-LABEL: fcmp_ogt_f128:
1217
+ ; CHECK: bl __gttf2
1218
+ define i32 @fcmp_ogt_f128 (fp128 %a , fp128 %b ) #0 {
1219
+ %cmp = call i1 @llvm.experimental.constrained.fcmp.f128 (fp128 %a , fp128 %b , metadata !"ogt" , metadata !"fpexcept.strict" ) #0
1220
+ %conv = zext i1 %cmp to i32
1221
+ ret i32 %conv
1222
+ }
1223
+
1224
+ ; CHECK-LABEL: fcmp_oge_f128:
1225
+ ; CHECK: bl __getf2
1226
+ define i32 @fcmp_oge_f128 (fp128 %a , fp128 %b ) #0 {
1227
+ %cmp = call i1 @llvm.experimental.constrained.fcmp.f128 (fp128 %a , fp128 %b , metadata !"oge" , metadata !"fpexcept.strict" ) #0
1228
+ %conv = zext i1 %cmp to i32
1229
+ ret i32 %conv
1230
+ }
1231
+
1232
+ ; CHECK-LABEL: fcmp_oeq_f128:
1233
+ ; CHECK: bl __eqtf2
1234
+ define i32 @fcmp_oeq_f128 (fp128 %a , fp128 %b ) #0 {
1235
+ %cmp = call i1 @llvm.experimental.constrained.fcmp.f128 (fp128 %a , fp128 %b , metadata !"oeq" , metadata !"fpexcept.strict" ) #0
1236
+ %conv = zext i1 %cmp to i32
1237
+ ret i32 %conv
1238
+ }
1239
+
1240
+ ; CHECK-LABEL: fcmp_one_f128:
1241
+ ; CHECK: bl __eqtf2
1242
+ define i32 @fcmp_one_f128 (fp128 %a , fp128 %b ) #0 {
1243
+ %cmp = call i1 @llvm.experimental.constrained.fcmp.f128 (fp128 %a , fp128 %b , metadata !"one" , metadata !"fpexcept.strict" ) #0
1244
+ %conv = zext i1 %cmp to i32
1245
+ ret i32 %conv
1246
+ }
1247
+
1248
+ ; CHECK-LABEL: fcmp_ult_f128:
1249
+ ; CHECK: bl __getf2
1250
+ define i32 @fcmp_ult_f128 (fp128 %a , fp128 %b ) #0 {
1251
+ %cmp = call i1 @llvm.experimental.constrained.fcmp.f128 (fp128 %a , fp128 %b , metadata !"ult" , metadata !"fpexcept.strict" ) #0
1252
+ %conv = zext i1 %cmp to i32
1253
+ ret i32 %conv
1254
+ }
1255
+
1256
+ ; CHECK-LABEL: fcmp_ule_f128:
1257
+ ; CHECK: bl __gttf2
1258
+ define i32 @fcmp_ule_f128 (fp128 %a , fp128 %b ) #0 {
1259
+ %cmp = call i1 @llvm.experimental.constrained.fcmp.f128 (fp128 %a , fp128 %b , metadata !"ule" , metadata !"fpexcept.strict" ) #0
1260
+ %conv = zext i1 %cmp to i32
1261
+ ret i32 %conv
1262
+ }
1263
+
1264
+ ; CHECK-LABEL: fcmp_ugt_f128:
1265
+ ; CHECK: bl __letf2
1266
+ define i32 @fcmp_ugt_f128 (fp128 %a , fp128 %b ) #0 {
1267
+ %cmp = call i1 @llvm.experimental.constrained.fcmp.f128 (fp128 %a , fp128 %b , metadata !"ugt" , metadata !"fpexcept.strict" ) #0
1268
+ %conv = zext i1 %cmp to i32
1269
+ ret i32 %conv
1270
+ }
1271
+
1272
+ ; CHECK-LABEL: fcmp_uge_f128:
1273
+ ; CHECK: bl __lttf2
1274
+ define i32 @fcmp_uge_f128 (fp128 %a , fp128 %b ) #0 {
1275
+ %cmp = call i1 @llvm.experimental.constrained.fcmp.f128 (fp128 %a , fp128 %b , metadata !"uge" , metadata !"fpexcept.strict" ) #0
1276
+ %conv = zext i1 %cmp to i32
1277
+ ret i32 %conv
1278
+ }
1279
+
1280
+ ; CHECK-LABEL: fcmp_ueq_f128:
1281
+ ; CHECK: bl __eqtf2
1282
+ define i32 @fcmp_ueq_f128 (fp128 %a , fp128 %b ) #0 {
1283
+ %cmp = call i1 @llvm.experimental.constrained.fcmp.f128 (fp128 %a , fp128 %b , metadata !"ueq" , metadata !"fpexcept.strict" ) #0
1284
+ %conv = zext i1 %cmp to i32
1285
+ ret i32 %conv
1286
+ }
1287
+
1288
+ ; CHECK-LABEL: fcmp_une_f128:
1289
+ ; CHECK: bl __netf2
1290
+ define i32 @fcmp_une_f128 (fp128 %a , fp128 %b ) #0 {
1291
+ %cmp = call i1 @llvm.experimental.constrained.fcmp.f128 (fp128 %a , fp128 %b , metadata !"une" , metadata !"fpexcept.strict" ) #0
1292
+ %conv = zext i1 %cmp to i32
1293
+ ret i32 %conv
1294
+ }
1295
+
1296
+ ; CHECK-LABEL: fcmps_olt_f128:
1297
+ ; CHECK: bl __lttf2
1298
+ define i32 @fcmps_olt_f128 (fp128 %a , fp128 %b ) #0 {
1299
+ %cmp = call i1 @llvm.experimental.constrained.fcmps.f128 (fp128 %a , fp128 %b , metadata !"olt" , metadata !"fpexcept.strict" ) #0
1300
+ %conv = zext i1 %cmp to i32
1301
+ ret i32 %conv
1302
+ }
1303
+
1304
+ ; CHECK-LABEL: fcmps_ole_f128:
1305
+ ; CHECK: bl __letf2
1306
+ define i32 @fcmps_ole_f128 (fp128 %a , fp128 %b ) #0 {
1307
+ %cmp = call i1 @llvm.experimental.constrained.fcmps.f128 (fp128 %a , fp128 %b , metadata !"ole" , metadata !"fpexcept.strict" ) #0
1308
+ %conv = zext i1 %cmp to i32
1309
+ ret i32 %conv
1310
+ }
1311
+
1312
+ ; CHECK-LABEL: fcmps_ogt_f128:
1313
+ ; CHECK: bl __gttf2
1314
+ define i32 @fcmps_ogt_f128 (fp128 %a , fp128 %b ) #0 {
1315
+ %cmp = call i1 @llvm.experimental.constrained.fcmps.f128 (fp128 %a , fp128 %b , metadata !"ogt" , metadata !"fpexcept.strict" ) #0
1316
+ %conv = zext i1 %cmp to i32
1317
+ ret i32 %conv
1318
+ }
1319
+
1320
+ ; CHECK-LABEL: fcmps_oge_f128:
1321
+ ; CHECK: bl __getf2
1322
+ define i32 @fcmps_oge_f128 (fp128 %a , fp128 %b ) #0 {
1323
+ %cmp = call i1 @llvm.experimental.constrained.fcmps.f128 (fp128 %a , fp128 %b , metadata !"oge" , metadata !"fpexcept.strict" ) #0
1324
+ %conv = zext i1 %cmp to i32
1325
+ ret i32 %conv
1326
+ }
1327
+
1328
+ ; CHECK-LABEL: fcmps_oeq_f128:
1329
+ ; CHECK: bl __eqtf2
1330
+ define i32 @fcmps_oeq_f128 (fp128 %a , fp128 %b ) #0 {
1331
+ %cmp = call i1 @llvm.experimental.constrained.fcmps.f128 (fp128 %a , fp128 %b , metadata !"oeq" , metadata !"fpexcept.strict" ) #0
1332
+ %conv = zext i1 %cmp to i32
1333
+ ret i32 %conv
1334
+ }
1335
+
1336
+ ; CHECK-LABEL: fcmps_one_f128:
1337
+ ; CHECK: bl __eqtf2
1338
+ define i32 @fcmps_one_f128 (fp128 %a , fp128 %b ) #0 {
1339
+ %cmp = call i1 @llvm.experimental.constrained.fcmps.f128 (fp128 %a , fp128 %b , metadata !"one" , metadata !"fpexcept.strict" ) #0
1340
+ %conv = zext i1 %cmp to i32
1341
+ ret i32 %conv
1342
+ }
1343
+
1344
+ ; CHECK-LABEL: fcmps_ult_f128:
1345
+ ; CHECK: bl __getf2
1346
+ define i32 @fcmps_ult_f128 (fp128 %a , fp128 %b ) #0 {
1347
+ %cmp = call i1 @llvm.experimental.constrained.fcmps.f128 (fp128 %a , fp128 %b , metadata !"ult" , metadata !"fpexcept.strict" ) #0
1348
+ %conv = zext i1 %cmp to i32
1349
+ ret i32 %conv
1350
+ }
1351
+
1352
+ ; CHECK-LABEL: fcmps_ule_f128:
1353
+ ; CHECK: bl __gttf2
1354
+ define i32 @fcmps_ule_f128 (fp128 %a , fp128 %b ) #0 {
1355
+ %cmp = call i1 @llvm.experimental.constrained.fcmps.f128 (fp128 %a , fp128 %b , metadata !"ule" , metadata !"fpexcept.strict" ) #0
1356
+ %conv = zext i1 %cmp to i32
1357
+ ret i32 %conv
1358
+ }
1359
+
1360
+ ; CHECK-LABEL: fcmps_ugt_f128:
1361
+ ; CHECK: bl __letf2
1362
+ define i32 @fcmps_ugt_f128 (fp128 %a , fp128 %b ) #0 {
1363
+ %cmp = call i1 @llvm.experimental.constrained.fcmps.f128 (fp128 %a , fp128 %b , metadata !"ugt" , metadata !"fpexcept.strict" ) #0
1364
+ %conv = zext i1 %cmp to i32
1365
+ ret i32 %conv
1366
+ }
1367
+
1368
+ ; CHECK-LABEL: fcmps_uge_f128:
1369
+ ; CHECK: bl __lttf2
1370
+ define i32 @fcmps_uge_f128 (fp128 %a , fp128 %b ) #0 {
1371
+ %cmp = call i1 @llvm.experimental.constrained.fcmps.f128 (fp128 %a , fp128 %b , metadata !"uge" , metadata !"fpexcept.strict" ) #0
1372
+ %conv = zext i1 %cmp to i32
1373
+ ret i32 %conv
1374
+ }
1375
+
1376
+ ; CHECK-LABEL: fcmps_ueq_f128:
1377
+ ; CHECK: bl __eqtf2
1378
+ define i32 @fcmps_ueq_f128 (fp128 %a , fp128 %b ) #0 {
1379
+ %cmp = call i1 @llvm.experimental.constrained.fcmps.f128 (fp128 %a , fp128 %b , metadata !"ueq" , metadata !"fpexcept.strict" ) #0
1380
+ %conv = zext i1 %cmp to i32
1381
+ ret i32 %conv
1382
+ }
1383
+
1384
+ ; CHECK-LABEL: fcmps_une_f128:
1385
+ ; CHECK: bl __netf2
1386
+ define i32 @fcmps_une_f128 (fp128 %a , fp128 %b ) #0 {
1387
+ %cmp = call i1 @llvm.experimental.constrained.fcmps.f128 (fp128 %a , fp128 %b , metadata !"une" , metadata !"fpexcept.strict" ) #0
1388
+ %conv = zext i1 %cmp to i32
1389
+ ret i32 %conv
1390
+ }
1201
1391
1202
1392
1203
1393
; Intrinsics to convert between floating-point types
0 commit comments