@@ -1245,8 +1245,8 @@ for.body:
1245
1245
br i1 %exitcond.not , label %for.cond.cleanup , label %for.body
1246
1246
}
1247
1247
1248
- define void @simple_urem_to_sel_non_zero_start_through_add_fail_missing_nuw (i32 %N , i32 %rem_amt_in ) nounwind {
1249
- ; CHECK-LABEL: simple_urem_to_sel_non_zero_start_through_add_fail_missing_nuw :
1248
+ define void @simple_urem_to_sel_non_zero_start_through_dis_or (i32 %N , i32 %rem_amt_in ) nounwind {
1249
+ ; CHECK-LABEL: simple_urem_to_sel_non_zero_start_through_dis_or :
1250
1250
; CHECK: # %bb.0: # %entry
1251
1251
; CHECK-NEXT: cmpl $3, %edi
1252
1252
; CHECK-NEXT: jb .LBB22_4
@@ -1258,7 +1258,7 @@ define void @simple_urem_to_sel_non_zero_start_through_add_fail_missing_nuw(i32
1258
1258
; CHECK-NEXT: movl %edi, %r14d
1259
1259
; CHECK-NEXT: orl $16, %ebx
1260
1260
; CHECK-NEXT: negl %r14d
1261
- ; CHECK-NEXT: movl $7 , %r15d
1261
+ ; CHECK-NEXT: movl $10 , %r15d
1262
1262
; CHECK-NEXT: .p2align 4, 0x90
1263
1263
; CHECK-NEXT: .LBB22_2: # %for.body
1264
1264
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
@@ -1270,7 +1270,7 @@ define void @simple_urem_to_sel_non_zero_start_through_add_fail_missing_nuw(i32
1270
1270
; CHECK-NEXT: leal 1(%r14,%r15), %eax
1271
1271
; CHECK-NEXT: movl %r15d, %ecx
1272
1272
; CHECK-NEXT: incl %ecx
1273
- ; CHECK-NEXT: cmpl $5 , %eax
1273
+ ; CHECK-NEXT: cmpl $8 , %eax
1274
1274
; CHECK-NEXT: movl %ecx, %r15d
1275
1275
; CHECK-NEXT: jne .LBB22_2
1276
1276
; CHECK-NEXT: # %bb.3:
@@ -1289,16 +1289,16 @@ for.cond.cleanup:
1289
1289
1290
1290
for.body:
1291
1291
%i.04 = phi i32 [ %inc , %for.body ], [ 2 , %entry ]
1292
- %i_with_off = add i32 %i.04 , 5
1292
+ %i_with_off = or disjoint i32 %i.04 , 8
1293
1293
%rem = urem i32 %i_with_off , %rem_amt
1294
1294
tail call void @use.i32 (i32 %rem )
1295
1295
%inc = add nuw i32 %i.04 , 1
1296
1296
%exitcond.not = icmp eq i32 %inc , %N
1297
1297
br i1 %exitcond.not , label %for.cond.cleanup , label %for.body
1298
1298
}
1299
1299
1300
- define void @simple_urem_to_sel_non_zero_start_through_add_fail_no_simplify_rem (i32 %N , i32 %rem_amt ) nounwind {
1301
- ; CHECK-LABEL: simple_urem_to_sel_non_zero_start_through_add_fail_no_simplify_rem :
1300
+ define void @simple_urem_to_sel_non_zero_start_through_add_fail_missing_nuw (i32 %N , i32 %rem_amt_in ) nounwind {
1301
+ ; CHECK-LABEL: simple_urem_to_sel_non_zero_start_through_add_fail_missing_nuw :
1302
1302
; CHECK: # %bb.0: # %entry
1303
1303
; CHECK-NEXT: cmpl $3, %edi
1304
1304
; CHECK-NEXT: jb .LBB23_4
@@ -1308,6 +1308,7 @@ define void @simple_urem_to_sel_non_zero_start_through_add_fail_no_simplify_rem(
1308
1308
; CHECK-NEXT: pushq %rbx
1309
1309
; CHECK-NEXT: movl %esi, %ebx
1310
1310
; CHECK-NEXT: movl %edi, %r14d
1311
+ ; CHECK-NEXT: orl $16, %ebx
1311
1312
; CHECK-NEXT: negl %r14d
1312
1313
; CHECK-NEXT: movl $7, %r15d
1313
1314
; CHECK-NEXT: .p2align 4, 0x90
@@ -1330,6 +1331,57 @@ define void @simple_urem_to_sel_non_zero_start_through_add_fail_no_simplify_rem(
1330
1331
; CHECK-NEXT: popq %r15
1331
1332
; CHECK-NEXT: .LBB23_4: # %for.cond.cleanup
1332
1333
; CHECK-NEXT: retq
1334
+ entry:
1335
+ %rem_amt = or i32 %rem_amt_in , 16
1336
+ %cmp3.not = icmp ult i32 %N , 3
1337
+ br i1 %cmp3.not , label %for.cond.cleanup , label %for.body
1338
+
1339
+ for.cond.cleanup:
1340
+ ret void
1341
+
1342
+ for.body:
1343
+ %i.04 = phi i32 [ %inc , %for.body ], [ 2 , %entry ]
1344
+ %i_with_off = add i32 %i.04 , 5
1345
+ %rem = urem i32 %i_with_off , %rem_amt
1346
+ tail call void @use.i32 (i32 %rem )
1347
+ %inc = add nuw i32 %i.04 , 1
1348
+ %exitcond.not = icmp eq i32 %inc , %N
1349
+ br i1 %exitcond.not , label %for.cond.cleanup , label %for.body
1350
+ }
1351
+
1352
+ define void @simple_urem_to_sel_non_zero_start_through_add_fail_no_simplify_rem (i32 %N , i32 %rem_amt ) nounwind {
1353
+ ; CHECK-LABEL: simple_urem_to_sel_non_zero_start_through_add_fail_no_simplify_rem:
1354
+ ; CHECK: # %bb.0: # %entry
1355
+ ; CHECK-NEXT: cmpl $3, %edi
1356
+ ; CHECK-NEXT: jb .LBB24_4
1357
+ ; CHECK-NEXT: # %bb.1: # %for.body.preheader
1358
+ ; CHECK-NEXT: pushq %r15
1359
+ ; CHECK-NEXT: pushq %r14
1360
+ ; CHECK-NEXT: pushq %rbx
1361
+ ; CHECK-NEXT: movl %esi, %ebx
1362
+ ; CHECK-NEXT: movl %edi, %r14d
1363
+ ; CHECK-NEXT: negl %r14d
1364
+ ; CHECK-NEXT: movl $7, %r15d
1365
+ ; CHECK-NEXT: .p2align 4, 0x90
1366
+ ; CHECK-NEXT: .LBB24_2: # %for.body
1367
+ ; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
1368
+ ; CHECK-NEXT: movl %r15d, %eax
1369
+ ; CHECK-NEXT: xorl %edx, %edx
1370
+ ; CHECK-NEXT: divl %ebx
1371
+ ; CHECK-NEXT: movl %edx, %edi
1372
+ ; CHECK-NEXT: callq use.i32@PLT
1373
+ ; CHECK-NEXT: leal 1(%r14,%r15), %eax
1374
+ ; CHECK-NEXT: movl %r15d, %ecx
1375
+ ; CHECK-NEXT: incl %ecx
1376
+ ; CHECK-NEXT: cmpl $5, %eax
1377
+ ; CHECK-NEXT: movl %ecx, %r15d
1378
+ ; CHECK-NEXT: jne .LBB24_2
1379
+ ; CHECK-NEXT: # %bb.3:
1380
+ ; CHECK-NEXT: popq %rbx
1381
+ ; CHECK-NEXT: popq %r14
1382
+ ; CHECK-NEXT: popq %r15
1383
+ ; CHECK-NEXT: .LBB24_4: # %for.cond.cleanup
1384
+ ; CHECK-NEXT: retq
1333
1385
entry:
1334
1386
%cmp3.not = icmp ult i32 %N , 3
1335
1387
br i1 %cmp3.not , label %for.cond.cleanup , label %for.body
@@ -1357,14 +1409,14 @@ define void @simple_urem_to_sel_non_zero_start_through_sub(i32 %N, i32 %rem_amt,
1357
1409
; CHECK-NEXT: pushq %rbx
1358
1410
; CHECK-NEXT: movl %edi, %ebp
1359
1411
; CHECK-NEXT: subl %edx, %ebp
1360
- ; CHECK-NEXT: jbe .LBB24_3
1412
+ ; CHECK-NEXT: jbe .LBB25_3
1361
1413
; CHECK-NEXT: # %bb.1: # %for.body.preheader
1362
1414
; CHECK-NEXT: movl %esi, %ebx
1363
1415
; CHECK-NEXT: xorl %r15d, %r15d
1364
1416
; CHECK-NEXT: xorl %r14d, %r14d
1365
1417
; CHECK-NEXT: xorl %r12d, %r12d
1366
1418
; CHECK-NEXT: .p2align 4, 0x90
1367
- ; CHECK-NEXT: .LBB24_2 : # %for.body
1419
+ ; CHECK-NEXT: .LBB25_2 : # %for.body
1368
1420
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
1369
1421
; CHECK-NEXT: movl %r14d, %edi
1370
1422
; CHECK-NEXT: callq use.i32@PLT
@@ -1373,8 +1425,8 @@ define void @simple_urem_to_sel_non_zero_start_through_sub(i32 %N, i32 %rem_amt,
1373
1425
; CHECK-NEXT: cmovel %r15d, %r14d
1374
1426
; CHECK-NEXT: incl %r12d
1375
1427
; CHECK-NEXT: cmpl %r12d, %ebp
1376
- ; CHECK-NEXT: jne .LBB24_2
1377
- ; CHECK-NEXT: .LBB24_3 : # %for.cond.cleanup
1428
+ ; CHECK-NEXT: jne .LBB25_2
1429
+ ; CHECK-NEXT: .LBB25_3 : # %for.cond.cleanup
1378
1430
; CHECK-NEXT: popq %rbx
1379
1431
; CHECK-NEXT: popq %r12
1380
1432
; CHECK-NEXT: popq %r14
@@ -1402,7 +1454,7 @@ define void @simple_urem_to_sel_non_zero_start_through_sub_no_simplfy(i32 %N, i3
1402
1454
; CHECK-LABEL: simple_urem_to_sel_non_zero_start_through_sub_no_simplfy:
1403
1455
; CHECK: # %bb.0: # %entry
1404
1456
; CHECK-NEXT: cmpl %edx, %edi
1405
- ; CHECK-NEXT: jbe .LBB25_4
1457
+ ; CHECK-NEXT: jbe .LBB26_4
1406
1458
; CHECK-NEXT: # %bb.1: # %for.body.preheader
1407
1459
; CHECK-NEXT: pushq %r15
1408
1460
; CHECK-NEXT: pushq %r14
@@ -1413,7 +1465,7 @@ define void @simple_urem_to_sel_non_zero_start_through_sub_no_simplfy(i32 %N, i3
1413
1465
; CHECK-NEXT: negl %r14d
1414
1466
; CHECK-NEXT: addl $-2, %r15d
1415
1467
; CHECK-NEXT: .p2align 4, 0x90
1416
- ; CHECK-NEXT: .LBB25_2 : # %for.body
1468
+ ; CHECK-NEXT: .LBB26_2 : # %for.body
1417
1469
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
1418
1470
; CHECK-NEXT: movl %r15d, %eax
1419
1471
; CHECK-NEXT: xorl %edx, %edx
@@ -1425,12 +1477,12 @@ define void @simple_urem_to_sel_non_zero_start_through_sub_no_simplfy(i32 %N, i3
1425
1477
; CHECK-NEXT: incl %ecx
1426
1478
; CHECK-NEXT: cmpl $-2, %eax
1427
1479
; CHECK-NEXT: movl %ecx, %r15d
1428
- ; CHECK-NEXT: jne .LBB25_2
1480
+ ; CHECK-NEXT: jne .LBB26_2
1429
1481
; CHECK-NEXT: # %bb.3:
1430
1482
; CHECK-NEXT: popq %rbx
1431
1483
; CHECK-NEXT: popq %r14
1432
1484
; CHECK-NEXT: popq %r15
1433
- ; CHECK-NEXT: .LBB25_4 : # %for.cond.cleanup
1485
+ ; CHECK-NEXT: .LBB26_4 : # %for.cond.cleanup
1434
1486
; CHECK-NEXT: retq
1435
1487
entry:
1436
1488
%cmp3.not = icmp ule i32 %N , %start
0 commit comments