@@ -161,13 +161,17 @@ define void @test_ptr_diff_with_assume(ptr align 8 %start, ptr align 8 %end, ptr
161161; CHECK-NEXT: [[PTR_DIFF:%.*]] = sub i64 [[START_INT]], [[END_INT]]
162162; CHECK-NEXT: [[DIFF_CMP:%.*]] = icmp ult i64 [[PTR_DIFF]], 2
163163; CHECK-NEXT: call void @llvm.assume(i1 [[DIFF_CMP]])
164+ ; CHECK-NEXT: [[COMPUTED_END:%.*]] = getelementptr i8, ptr [[START]], i64 [[PTR_DIFF]]
164165; CHECK-NEXT: [[ENTRY_CMP:%.*]] = icmp eq ptr [[START]], [[END]]
165166; CHECK-NEXT: br i1 [[ENTRY_CMP]], label %[[EXIT:.*]], label %[[LOOP_BODY_PREHEADER:.*]]
166167; CHECK: [[LOOP_BODY_PREHEADER]]:
167168; CHECK-NEXT: br label %[[LOOP_BODY:.*]]
168169; CHECK: [[LOOP_BODY]]:
170+ ; CHECK-NEXT: [[IV:%.*]] = phi ptr [ [[IV_NEXT:%.*]], %[[LOOP_BODY]] ], [ [[START]], %[[LOOP_BODY_PREHEADER]] ]
169171; CHECK-NEXT: [[TMP0:%.*]] = call i1 @cond()
170- ; CHECK-NEXT: br i1 true, label %[[EXIT_LOOPEXIT:.*]], label %[[LOOP_BODY]]
172+ ; CHECK-NEXT: [[IV_NEXT]] = getelementptr i8, ptr [[IV]], i64 1
173+ ; CHECK-NEXT: [[LOOP_CMP:%.*]] = icmp eq ptr [[IV_NEXT]], [[COMPUTED_END]]
174+ ; CHECK-NEXT: br i1 [[LOOP_CMP]], label %[[EXIT_LOOPEXIT:.*]], label %[[LOOP_BODY]]
171175; CHECK: [[EXIT_LOOPEXIT]]:
172176; CHECK-NEXT: br label %[[EXIT]]
173177; CHECK: [[EXIT]]:
@@ -181,13 +185,17 @@ define void @test_ptr_diff_with_assume(ptr align 8 %start, ptr align 8 %end, ptr
181185; N32-NEXT: [[PTR_DIFF:%.*]] = sub i64 [[START_INT]], [[END_INT]]
182186; N32-NEXT: [[DIFF_CMP:%.*]] = icmp ult i64 [[PTR_DIFF]], 2
183187; N32-NEXT: call void @llvm.assume(i1 [[DIFF_CMP]])
188+ ; N32-NEXT: [[COMPUTED_END:%.*]] = getelementptr i8, ptr [[START]], i64 [[PTR_DIFF]]
184189; N32-NEXT: [[ENTRY_CMP:%.*]] = icmp eq ptr [[START]], [[END]]
185190; N32-NEXT: br i1 [[ENTRY_CMP]], label %[[EXIT:.*]], label %[[LOOP_BODY_PREHEADER:.*]]
186191; N32: [[LOOP_BODY_PREHEADER]]:
187192; N32-NEXT: br label %[[LOOP_BODY:.*]]
188193; N32: [[LOOP_BODY]]:
194+ ; N32-NEXT: [[IV:%.*]] = phi ptr [ [[IV_NEXT:%.*]], %[[LOOP_BODY]] ], [ [[START]], %[[LOOP_BODY_PREHEADER]] ]
189195; N32-NEXT: [[TMP0:%.*]] = call i1 @cond()
190- ; N32-NEXT: br i1 true, label %[[EXIT_LOOPEXIT:.*]], label %[[LOOP_BODY]]
196+ ; N32-NEXT: [[IV_NEXT]] = getelementptr i8, ptr [[IV]], i64 1
197+ ; N32-NEXT: [[LOOP_CMP:%.*]] = icmp eq ptr [[IV_NEXT]], [[COMPUTED_END]]
198+ ; N32-NEXT: br i1 [[LOOP_CMP]], label %[[EXIT_LOOPEXIT:.*]], label %[[LOOP_BODY]]
191199; N32: [[EXIT_LOOPEXIT]]:
192200; N32-NEXT: br label %[[EXIT]]
193201; N32: [[EXIT]]:
0 commit comments