@@ -1197,7 +1197,197 @@ define fp128 @trunc_f128(fp128 %x) #0 {
11971197 ret fp128 %val
11981198}
11991199
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+ }
12011391
12021392
12031393; Intrinsics to convert between floating-point types
0 commit comments