@@ -1245,8 +1245,8 @@ for.body:
12451245 br i1 %exitcond.not , label %for.cond.cleanup , label %for.body
12461246}
12471247
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 :
12501250; CHECK: # %bb.0: # %entry
12511251; CHECK-NEXT: cmpl $3, %edi
12521252; CHECK-NEXT: jb .LBB22_4
@@ -1258,7 +1258,7 @@ define void @simple_urem_to_sel_non_zero_start_through_add_fail_missing_nuw(i32
12581258; CHECK-NEXT: movl %edi, %r14d
12591259; CHECK-NEXT: orl $16, %ebx
12601260; CHECK-NEXT: negl %r14d
1261- ; CHECK-NEXT: movl $7 , %r15d
1261+ ; CHECK-NEXT: movl $10 , %r15d
12621262; CHECK-NEXT: .p2align 4, 0x90
12631263; CHECK-NEXT: .LBB22_2: # %for.body
12641264; 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
12701270; CHECK-NEXT: leal 1(%r14,%r15), %eax
12711271; CHECK-NEXT: movl %r15d, %ecx
12721272; CHECK-NEXT: incl %ecx
1273- ; CHECK-NEXT: cmpl $5 , %eax
1273+ ; CHECK-NEXT: cmpl $8 , %eax
12741274; CHECK-NEXT: movl %ecx, %r15d
12751275; CHECK-NEXT: jne .LBB22_2
12761276; CHECK-NEXT: # %bb.3:
@@ -1289,16 +1289,16 @@ for.cond.cleanup:
12891289
12901290for.body:
12911291 %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
12931293 %rem = urem i32 %i_with_off , %rem_amt
12941294 tail call void @use.i32 (i32 %rem )
12951295 %inc = add nuw i32 %i.04 , 1
12961296 %exitcond.not = icmp eq i32 %inc , %N
12971297 br i1 %exitcond.not , label %for.cond.cleanup , label %for.body
12981298}
12991299
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 :
13021302; CHECK: # %bb.0: # %entry
13031303; CHECK-NEXT: cmpl $3, %edi
13041304; CHECK-NEXT: jb .LBB23_4
@@ -1308,6 +1308,7 @@ define void @simple_urem_to_sel_non_zero_start_through_add_fail_no_simplify_rem(
13081308; CHECK-NEXT: pushq %rbx
13091309; CHECK-NEXT: movl %esi, %ebx
13101310; CHECK-NEXT: movl %edi, %r14d
1311+ ; CHECK-NEXT: orl $16, %ebx
13111312; CHECK-NEXT: negl %r14d
13121313; CHECK-NEXT: movl $7, %r15d
13131314; CHECK-NEXT: .p2align 4, 0x90
@@ -1330,6 +1331,57 @@ define void @simple_urem_to_sel_non_zero_start_through_add_fail_no_simplify_rem(
13301331; CHECK-NEXT: popq %r15
13311332; CHECK-NEXT: .LBB23_4: # %for.cond.cleanup
13321333; 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
13331385entry:
13341386 %cmp3.not = icmp ult i32 %N , 3
13351387 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,
13571409; CHECK-NEXT: pushq %rbx
13581410; CHECK-NEXT: movl %edi, %ebp
13591411; CHECK-NEXT: subl %edx, %ebp
1360- ; CHECK-NEXT: jbe .LBB24_3
1412+ ; CHECK-NEXT: jbe .LBB25_3
13611413; CHECK-NEXT: # %bb.1: # %for.body.preheader
13621414; CHECK-NEXT: movl %esi, %ebx
13631415; CHECK-NEXT: xorl %r15d, %r15d
13641416; CHECK-NEXT: xorl %r14d, %r14d
13651417; CHECK-NEXT: xorl %r12d, %r12d
13661418; CHECK-NEXT: .p2align 4, 0x90
1367- ; CHECK-NEXT: .LBB24_2 : # %for.body
1419+ ; CHECK-NEXT: .LBB25_2 : # %for.body
13681420; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
13691421; CHECK-NEXT: movl %r14d, %edi
13701422; 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,
13731425; CHECK-NEXT: cmovel %r15d, %r14d
13741426; CHECK-NEXT: incl %r12d
13751427; 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
13781430; CHECK-NEXT: popq %rbx
13791431; CHECK-NEXT: popq %r12
13801432; CHECK-NEXT: popq %r14
@@ -1402,7 +1454,7 @@ define void @simple_urem_to_sel_non_zero_start_through_sub_no_simplfy(i32 %N, i3
14021454; CHECK-LABEL: simple_urem_to_sel_non_zero_start_through_sub_no_simplfy:
14031455; CHECK: # %bb.0: # %entry
14041456; CHECK-NEXT: cmpl %edx, %edi
1405- ; CHECK-NEXT: jbe .LBB25_4
1457+ ; CHECK-NEXT: jbe .LBB26_4
14061458; CHECK-NEXT: # %bb.1: # %for.body.preheader
14071459; CHECK-NEXT: pushq %r15
14081460; CHECK-NEXT: pushq %r14
@@ -1413,7 +1465,7 @@ define void @simple_urem_to_sel_non_zero_start_through_sub_no_simplfy(i32 %N, i3
14131465; CHECK-NEXT: negl %r14d
14141466; CHECK-NEXT: addl $-2, %r15d
14151467; CHECK-NEXT: .p2align 4, 0x90
1416- ; CHECK-NEXT: .LBB25_2 : # %for.body
1468+ ; CHECK-NEXT: .LBB26_2 : # %for.body
14171469; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
14181470; CHECK-NEXT: movl %r15d, %eax
14191471; 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
14251477; CHECK-NEXT: incl %ecx
14261478; CHECK-NEXT: cmpl $-2, %eax
14271479; CHECK-NEXT: movl %ecx, %r15d
1428- ; CHECK-NEXT: jne .LBB25_2
1480+ ; CHECK-NEXT: jne .LBB26_2
14291481; CHECK-NEXT: # %bb.3:
14301482; CHECK-NEXT: popq %rbx
14311483; CHECK-NEXT: popq %r14
14321484; CHECK-NEXT: popq %r15
1433- ; CHECK-NEXT: .LBB25_4 : # %for.cond.cleanup
1485+ ; CHECK-NEXT: .LBB26_4 : # %for.cond.cleanup
14341486; CHECK-NEXT: retq
14351487entry:
14361488 %cmp3.not = icmp ule i32 %N , %start
0 commit comments