@@ -19,16 +19,9 @@ define dso_local void @assumeDivisibleTC(ptr noalias nocapture %a, ptr noalias n
1919; CHECK-NEXT: [[CMP110:%.*]] = icmp sgt i32 [[N]], 0
2020; CHECK-NEXT: br i1 [[CMP110]], label [[FOR_BODY_PREHEADER:%.*]], label [[EXIT]]
2121; CHECK: for.body.preheader:
22- ; CHECK-NEXT: [[TMP2:%.*]] = add i32 [[N]], -1
23- ; CHECK-NEXT: [[XTRAITER:%.*]] = and i32 [[N]], 1
24- ; CHECK-NEXT: [[TMP3:%.*]] = icmp ult i32 [[TMP2]], 1
25- ; CHECK-NEXT: br i1 [[TMP3]], label [[FOR_BODY_EPIL_PREHEADER:%.*]], label [[FOR_BODY_PREHEADER_NEW:%.*]]
26- ; CHECK: for.body.preheader.new:
27- ; CHECK-NEXT: [[UNROLL_ITER:%.*]] = sub i32 [[N]], [[XTRAITER]]
2822; CHECK-NEXT: br label [[FOR_BODY:%.*]]
2923; CHECK: for.body:
30- ; CHECK-NEXT: [[I_011:%.*]] = phi i32 [ 0, [[FOR_BODY_PREHEADER_NEW]] ], [ [[INC_1:%.*]], [[FOR_BODY]] ]
31- ; CHECK-NEXT: [[NITER:%.*]] = phi i32 [ 0, [[FOR_BODY_PREHEADER_NEW]] ], [ [[NITER_NEXT_1:%.*]], [[FOR_BODY]] ]
24+ ; CHECK-NEXT: [[I_011:%.*]] = phi i32 [ 0, [[FOR_BODY_PREHEADER]] ], [ [[INC_1:%.*]], [[FOR_BODY]] ]
3225; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i8, ptr [[B:%.*]], i32 [[I_011]]
3326; CHECK-NEXT: [[TMP0:%.*]] = load i8, ptr [[ARRAYIDX]], align 1
3427; CHECK-NEXT: [[ADD:%.*]] = add i8 [[TMP0]], 3
@@ -41,25 +34,8 @@ define dso_local void @assumeDivisibleTC(ptr noalias nocapture %a, ptr noalias n
4134; CHECK-NEXT: [[ARRAYIDX4_1:%.*]] = getelementptr inbounds i8, ptr [[A]], i32 [[INC]]
4235; CHECK-NEXT: store i8 [[ADD_1]], ptr [[ARRAYIDX4_1]], align 1
4336; CHECK-NEXT: [[INC_1]] = add nuw nsw i32 [[I_011]], 2
44- ; CHECK-NEXT: [[NITER_NEXT_1]] = add i32 [[NITER]], 2
45- ; CHECK-NEXT: [[NITER_NCMP_1:%.*]] = icmp ne i32 [[NITER_NEXT_1]], [[UNROLL_ITER]]
46- ; CHECK-NEXT: br i1 [[NITER_NCMP_1]], label [[FOR_BODY]], label [[EXIT_LOOPEXIT_UNR_LCSSA:%.*]], !llvm.loop [[LOOP0:![0-9]+]]
47- ; CHECK: exit.loopexit.unr-lcssa:
48- ; CHECK-NEXT: [[I_011_UNR:%.*]] = phi i32 [ [[INC_1]], [[FOR_BODY]] ]
49- ; CHECK-NEXT: [[LCMP_MOD:%.*]] = icmp ne i32 [[XTRAITER]], 0
50- ; CHECK-NEXT: br i1 [[LCMP_MOD]], label [[FOR_BODY_EPIL_PREHEADER]], label [[EXIT_LOOPEXIT:%.*]]
51- ; CHECK: for.body.epil.preheader:
52- ; CHECK-NEXT: [[I_011_EPIL_INIT:%.*]] = phi i32 [ 0, [[FOR_BODY_PREHEADER]] ], [ [[I_011_UNR]], [[EXIT_LOOPEXIT_UNR_LCSSA]] ]
53- ; CHECK-NEXT: [[LCMP_MOD1:%.*]] = icmp ne i32 [[XTRAITER]], 0
54- ; CHECK-NEXT: call void @llvm.assume(i1 [[LCMP_MOD1]])
55- ; CHECK-NEXT: br label [[FOR_BODY_EPIL:%.*]]
56- ; CHECK: for.body.epil:
57- ; CHECK-NEXT: [[ARRAYIDX_EPIL:%.*]] = getelementptr inbounds i8, ptr [[B]], i32 [[I_011_EPIL_INIT]]
58- ; CHECK-NEXT: [[TMP4:%.*]] = load i8, ptr [[ARRAYIDX_EPIL]], align 1
59- ; CHECK-NEXT: [[ADD_EPIL:%.*]] = add i8 [[TMP4]], 3
60- ; CHECK-NEXT: [[ARRAYIDX4_EPIL:%.*]] = getelementptr inbounds i8, ptr [[A]], i32 [[I_011_EPIL_INIT]]
61- ; CHECK-NEXT: store i8 [[ADD_EPIL]], ptr [[ARRAYIDX4_EPIL]], align 1
62- ; CHECK-NEXT: br label [[EXIT_LOOPEXIT]]
37+ ; CHECK-NEXT: [[CMP1_1:%.*]] = icmp slt i32 [[INC_1]], [[N]]
38+ ; CHECK-NEXT: br i1 [[CMP1_1]], label [[FOR_BODY]], label [[EXIT_LOOPEXIT:%.*]], !llvm.loop [[LOOP0:![0-9]+]]
6339; CHECK: exit.loopexit:
6440; CHECK-NEXT: br label [[EXIT]]
6541; CHECK: exit:
0 commit comments