@@ -1195,5 +1195,230 @@ define i1 @extract_value_smul_fail(i8 %xx, i8 %yy) {
1195
1195
ret i1 %r
1196
1196
}
1197
1197
1198
+ define i8 @test_icmp_add (i8 %n , i8 %n2 , i8 %other ) {
1199
+ ; CHECK-LABEL: @test_icmp_add(
1200
+ ; CHECK-NEXT: entry:
1201
+ ; CHECK-NEXT: [[N_ADD:%.*]] = add nuw i8 [[N:%.*]], [[N2:%.*]]
1202
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[N_ADD]], 32
1203
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1204
+ ; CHECK: if.then:
1205
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
1206
+ ; CHECK-NEXT: ret i8 [[R]]
1207
+ ; CHECK: if.else:
1208
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1209
+ ;
1210
+ entry:
1211
+ %n_add = add nuw i8 %n , %n2
1212
+ %cmp = icmp ult i8 %n_add , 32
1213
+ br i1 %cmp , label %if.then , label %if.else
1214
+
1215
+ if.then:
1216
+ %r = and i8 %n , 32
1217
+ ret i8 %r
1218
+
1219
+ if.else:
1220
+ ret i8 %other
1221
+ }
1222
+
1223
+ define i8 @test_icmp_add2 (i8 %n , i8 %n2 , i8 %other ) {
1224
+ ; CHECK-LABEL: @test_icmp_add2(
1225
+ ; CHECK-NEXT: entry:
1226
+ ; CHECK-NEXT: [[N_ADD:%.*]] = add nuw i8 [[N:%.*]], [[N2:%.*]]
1227
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_ADD]], 14
1228
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1229
+ ; CHECK: if.then:
1230
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1231
+ ; CHECK: if.else:
1232
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
1233
+ ; CHECK-NEXT: ret i8 [[R]]
1234
+ ;
1235
+ entry:
1236
+ %n_add = add nuw i8 %n , %n2
1237
+ %cmp = icmp uge i8 %n_add , 15
1238
+ br i1 %cmp , label %if.then , label %if.else
1239
+
1240
+ if.then:
1241
+ ret i8 %other
1242
+ if.else:
1243
+ %r = and i8 %n , 32
1244
+ ret i8 %r
1245
+
1246
+ }
1247
+
1248
+ define i8 @test_icmp_add_fail_bad_range (i8 %n , i8 %n2 , i8 %other ) {
1249
+ ; CHECK-LABEL: @test_icmp_add_fail_bad_range(
1250
+ ; CHECK-NEXT: entry:
1251
+ ; CHECK-NEXT: [[N_ADD:%.*]] = add nuw i8 [[N:%.*]], [[N2:%.*]]
1252
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[N_ADD]], 33
1253
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1254
+ ; CHECK: if.then:
1255
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
1256
+ ; CHECK-NEXT: ret i8 [[R]]
1257
+ ; CHECK: if.else:
1258
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1259
+ ;
1260
+ entry:
1261
+ %n_add = add nuw i8 %n , %n2
1262
+ %cmp = icmp ule i8 %n_add , 32
1263
+ br i1 %cmp , label %if.then , label %if.else
1264
+
1265
+ if.then:
1266
+ %r = and i8 %n , 32
1267
+ ret i8 %r
1268
+
1269
+ if.else:
1270
+ ret i8 %other
1271
+ }
1272
+
1273
+ define i8 @test_icmp_add_fail_bad_pred (i8 %n , i8 %n2 , i8 %other ) {
1274
+ ; CHECK-LABEL: @test_icmp_add_fail_bad_pred(
1275
+ ; CHECK-NEXT: entry:
1276
+ ; CHECK-NEXT: [[N_ADD:%.*]] = add nuw i8 [[N:%.*]], [[N2:%.*]]
1277
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_ADD]], 32
1278
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1279
+ ; CHECK: if.then:
1280
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
1281
+ ; CHECK-NEXT: ret i8 [[R]]
1282
+ ; CHECK: if.else:
1283
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1284
+ ;
1285
+ entry:
1286
+ %n_add = add nuw i8 %n , %n2
1287
+ %cmp = icmp ugt i8 %n_add , 32
1288
+ br i1 %cmp , label %if.then , label %if.else
1289
+
1290
+ if.then:
1291
+ %r = and i8 %n , 32
1292
+ ret i8 %r
1293
+
1294
+ if.else:
1295
+ ret i8 %other
1296
+ }
1297
+
1298
+ define i8 @test_icmp_sub (i8 %n , i8 %n2 , i8 %other ) {
1299
+ ; CHECK-LABEL: @test_icmp_sub(
1300
+ ; CHECK-NEXT: entry:
1301
+ ; CHECK-NEXT: [[N_AND:%.*]] = sub nuw i8 [[N:%.*]], [[N2:%.*]]
1302
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_AND]], -33
1303
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1304
+ ; CHECK: if.then:
1305
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
1306
+ ; CHECK-NEXT: ret i8 [[R]]
1307
+ ; CHECK: if.else:
1308
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1309
+ ;
1310
+ entry:
1311
+ %n_sub = sub nuw i8 %n , %n2
1312
+ %cmp = icmp ugt i8 %n_sub , 223
1313
+ br i1 %cmp , label %if.then , label %if.else
1314
+
1315
+ if.then:
1316
+ %r = and i8 %n , 32
1317
+ ret i8 %r
1318
+
1319
+ if.else:
1320
+ ret i8 %other
1321
+ }
1322
+
1323
+ define i8 @test_icmp_sub_fail_wrong_arg (i8 %n , i8 %n2 , i8 %other ) {
1324
+ ; CHECK-LABEL: @test_icmp_sub_fail_wrong_arg(
1325
+ ; CHECK-NEXT: entry:
1326
+ ; CHECK-NEXT: [[N_AND:%.*]] = sub nuw i8 [[N1:%.*]], [[N:%.*]]
1327
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_AND]], -33
1328
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1329
+ ; CHECK: if.then:
1330
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
1331
+ ; CHECK-NEXT: ret i8 [[R]]
1332
+ ; CHECK: if.else:
1333
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1334
+ ;
1335
+ entry:
1336
+ %n_sub = sub nuw i8 %n , %n2
1337
+ %cmp = icmp ugt i8 %n_sub , 223
1338
+ br i1 %cmp , label %if.then , label %if.else
1339
+
1340
+ if.then:
1341
+ %r = and i8 %n2 , 32
1342
+ ret i8 %r
1343
+
1344
+ if.else:
1345
+ ret i8 %other
1346
+ }
1347
+
1348
+ define i8 @test_icmp_sub2 (i8 %n , i8 %n2 , i8 %other ) {
1349
+ ; CHECK-LABEL: @test_icmp_sub2(
1350
+ ; CHECK-NEXT: entry:
1351
+ ; CHECK-NEXT: [[N_SUB:%.*]] = sub nuw i8 [[N:%.*]], [[N2:%.*]]
1352
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[N_SUB]], -31
1353
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1354
+ ; CHECK: if.then:
1355
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1356
+ ; CHECK: if.else:
1357
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
1358
+ ; CHECK-NEXT: ret i8 [[R]]
1359
+ ;
1360
+ entry:
1361
+ %n_sub = sub nuw i8 %n , %n2
1362
+ %cmp = icmp ule i8 %n_sub , 224
1363
+ br i1 %cmp , label %if.then , label %if.else
1364
+
1365
+ if.then:
1366
+ ret i8 %other
1367
+ if.else:
1368
+ %r = and i8 %n , 32
1369
+ ret i8 %r
1370
+
1371
+ }
1372
+
1373
+ define i8 @test_icmp_sub_fail_bad_range (i8 %n , i8 %n2 , i8 %other ) {
1374
+ ; CHECK-LABEL: @test_icmp_sub_fail_bad_range(
1375
+ ; CHECK-NEXT: entry:
1376
+ ; CHECK-NEXT: [[N_SUB:%.*]] = sub nuw i8 [[N:%.*]], [[N2:%.*]]
1377
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[N_SUB]], -34
1378
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1379
+ ; CHECK: if.then:
1380
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
1381
+ ; CHECK-NEXT: ret i8 [[R]]
1382
+ ; CHECK: if.else:
1383
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1384
+ ;
1385
+ entry:
1386
+ %n_sub = sub nuw i8 %n , %n2
1387
+ %cmp = icmp uge i8 %n_sub , 223
1388
+ br i1 %cmp , label %if.then , label %if.else
1389
+
1390
+ if.then:
1391
+ %r = and i8 %n , 32
1392
+ ret i8 %r
1393
+
1394
+ if.else:
1395
+ ret i8 %other
1396
+ }
1397
+
1398
+ define i8 @test_icmp_sub_fail_bad_pred (i8 %n , i8 %n2 , i8 %other ) {
1399
+ ; CHECK-LABEL: @test_icmp_sub_fail_bad_pred(
1400
+ ; CHECK-NEXT: entry:
1401
+ ; CHECK-NEXT: [[N_SUB:%.*]] = sub nuw i8 [[N:%.*]], [[N2:%.*]]
1402
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[N_SUB]], 31
1403
+ ; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
1404
+ ; CHECK: if.then:
1405
+ ; CHECK-NEXT: [[R:%.*]] = and i8 [[N]], 32
1406
+ ; CHECK-NEXT: ret i8 [[R]]
1407
+ ; CHECK: if.else:
1408
+ ; CHECK-NEXT: ret i8 [[OTHER:%.*]]
1409
+ ;
1410
+ entry:
1411
+ %n_sub = sub nuw i8 %n , %n2
1412
+ %cmp = icmp sge i8 %n_sub , 32
1413
+ br i1 %cmp , label %if.then , label %if.else
1414
+
1415
+ if.then:
1416
+ %r = and i8 %n , 32
1417
+ ret i8 %r
1418
+
1419
+ if.else:
1420
+ ret i8 %other
1421
+ }
1422
+
1198
1423
declare void @use (i1 )
1199
1424
declare void @sink (i8 )
0 commit comments