@@ -152,7 +152,6 @@ for.end: ; preds = %for.cond
152152
153153@h = global i64 0
154154
155- ; TODO: Currently we generate SCEV check code for the same predicate twice.
156155define void @implied_wrap_predicate (ptr %A , ptr %B , ptr %C ) {
157156; CHECK-LABEL: define void @implied_wrap_predicate
158157; CHECK-SAME: (ptr [[A:%.*]], ptr [[B:%.*]], ptr [[C:%.*]]) {
@@ -184,17 +183,11 @@ define void @implied_wrap_predicate(ptr %A, ptr %B, ptr %C) {
184183; CHECK-NEXT: [[TMP16:%.*]] = icmp ult i16 [[TMP15]], 2
185184; CHECK-NEXT: [[TMP17:%.*]] = icmp ugt i64 [[TMP8]], 65535
186185; CHECK-NEXT: [[TMP18:%.*]] = or i1 [[TMP16]], [[TMP17]]
187- ; CHECK-NEXT: [[TMP19:%.*]] = trunc i64 [[TMP8]] to i16
188- ; CHECK-NEXT: [[TMP20:%.*]] = add i16 1, [[TMP19]]
189- ; CHECK-NEXT: [[TMP21:%.*]] = icmp ult i16 [[TMP20]], 1
190- ; CHECK-NEXT: [[TMP22:%.*]] = icmp ugt i64 [[TMP8]], 65535
191- ; CHECK-NEXT: [[TMP23:%.*]] = or i1 [[TMP21]], [[TMP22]]
192- ; CHECK-NEXT: [[TMP24:%.*]] = or i1 [[TMP13]], [[TMP18]]
193- ; CHECK-NEXT: [[TMP25:%.*]] = or i1 [[TMP24]], [[TMP23]]
194- ; CHECK-NEXT: br i1 [[TMP25]], label [[SCALAR_PH]], label [[VECTOR_MEMCHECK:%.*]]
186+ ; CHECK-NEXT: [[TMP19:%.*]] = or i1 [[TMP13]], [[TMP18]]
187+ ; CHECK-NEXT: br i1 [[TMP19]], label [[SCALAR_PH]], label [[VECTOR_MEMCHECK:%.*]]
195188; CHECK: vector.memcheck:
196- ; CHECK-NEXT: [[TMP26 :%.*]] = sub i64 [[C2]], [[A3]]
197- ; CHECK-NEXT: [[DIFF_CHECK:%.*]] = icmp ult i64 [[TMP26 ]], 32
189+ ; CHECK-NEXT: [[TMP20 :%.*]] = sub i64 [[C2]], [[A3]]
190+ ; CHECK-NEXT: [[DIFF_CHECK:%.*]] = icmp ult i64 [[TMP20 ]], 32
198191; CHECK-NEXT: br i1 [[DIFF_CHECK]], label [[SCALAR_PH]], label [[VECTOR_PH:%.*]]
199192; CHECK: vector.ph:
200193; CHECK-NEXT: [[N_MOD_VF:%.*]] = urem i64 [[TMP4]], 4
@@ -206,16 +199,16 @@ define void @implied_wrap_predicate(ptr %A, ptr %B, ptr %C) {
206199; CHECK: vector.body:
207200; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
208201; CHECK-NEXT: [[OFFSET_IDX:%.*]] = add i64 1, [[INDEX]]
209- ; CHECK-NEXT: [[TMP27 :%.*]] = add i64 [[OFFSET_IDX]], 0
210- ; CHECK-NEXT: [[TMP28 :%.*]] = getelementptr i64, ptr [[A]], i64 [[TMP27 ]]
211- ; CHECK-NEXT: [[TMP29 :%.*]] = getelementptr i64, ptr [[TMP28 ]], i32 0
212- ; CHECK-NEXT: store <4 x i64> zeroinitializer, ptr [[TMP29 ]], align 4
213- ; CHECK-NEXT: [[TMP30 :%.*]] = getelementptr i64, ptr [[C]], i64 [[TMP27 ]]
214- ; CHECK-NEXT: [[TMP31 :%.*]] = getelementptr i64, ptr [[TMP30 ]], i32 0
215- ; CHECK-NEXT: store <4 x i64> zeroinitializer, ptr [[TMP31 ]], align 4
202+ ; CHECK-NEXT: [[TMP21 :%.*]] = add i64 [[OFFSET_IDX]], 0
203+ ; CHECK-NEXT: [[TMP22 :%.*]] = getelementptr i64, ptr [[A]], i64 [[TMP21 ]]
204+ ; CHECK-NEXT: [[TMP23 :%.*]] = getelementptr i64, ptr [[TMP22 ]], i32 0
205+ ; CHECK-NEXT: store <4 x i64> zeroinitializer, ptr [[TMP23 ]], align 4
206+ ; CHECK-NEXT: [[TMP24 :%.*]] = getelementptr i64, ptr [[C]], i64 [[TMP21 ]]
207+ ; CHECK-NEXT: [[TMP25 :%.*]] = getelementptr i64, ptr [[TMP24 ]], i32 0
208+ ; CHECK-NEXT: store <4 x i64> zeroinitializer, ptr [[TMP25 ]], align 4
216209; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
217- ; CHECK-NEXT: [[TMP32 :%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
218- ; CHECK-NEXT: br i1 [[TMP32 ]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
210+ ; CHECK-NEXT: [[TMP26 :%.*]] = icmp eq i64 [[INDEX_NEXT]], [[N_VEC]]
211+ ; CHECK-NEXT: br i1 [[TMP26 ]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
219212; CHECK: middle.block:
220213; CHECK-NEXT: [[CMP_N:%.*]] = icmp eq i64 [[TMP4]], [[N_VEC]]
221214; CHECK-NEXT: br i1 [[CMP_N]], label [[EXIT:%.*]], label [[SCALAR_PH]]
0 commit comments