@@ -11,8 +11,8 @@ define void @deref_assumption_in_header_constant_trip_count(ptr noalias %a, ptr
1111; CHECK: [[VECTOR_PH]]:
1212; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
1313; CHECK: [[VECTOR_BODY]]:
14- ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE2:.* ]] ]
15- ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <2 x i64> [ <i64 0, i64 1>, %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[PRED_LOAD_CONTINUE2 ]] ]
14+ ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY ]] ]
15+ ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <2 x i64> [ <i64 0, i64 1>, %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[VECTOR_BODY ]] ]
1616; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[INDEX]], 0
1717; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i32, ptr [[A]], <2 x i64> [[VEC_IND]]
1818; CHECK-NEXT: [[TMP4:%.*]] = extractelement <2 x ptr> [[TMP1]], i32 0
@@ -23,25 +23,8 @@ define void @deref_assumption_in_header_constant_trip_count(ptr noalias %a, ptr
2323; CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds i32, ptr [[TMP6]], i32 0
2424; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 4
2525; CHECK-NEXT: [[TMP9:%.*]] = icmp sge <2 x i32> [[WIDE_LOAD]], zeroinitializer
26- ; CHECK-NEXT: [[TMP10:%.*]] = xor <2 x i1> [[TMP9]], splat (i1 true)
27- ; CHECK-NEXT: [[TMP8:%.*]] = extractelement <2 x i1> [[TMP10]], i32 0
28- ; CHECK-NEXT: br i1 [[TMP8]], label %[[PRED_LOAD_IF:.*]], label %[[PRED_LOAD_CONTINUE:.*]]
29- ; CHECK: [[PRED_LOAD_IF]]:
30- ; CHECK-NEXT: [[TMP21:%.*]] = extractelement <2 x ptr> [[TMP1]], i32 0
31- ; CHECK-NEXT: [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 4
32- ; CHECK-NEXT: [[TMP11:%.*]] = insertelement <2 x i32> poison, i32 [[TMP22]], i32 0
33- ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE]]
34- ; CHECK: [[PRED_LOAD_CONTINUE]]:
35- ; CHECK-NEXT: [[TMP12:%.*]] = phi <2 x i32> [ poison, %[[VECTOR_BODY]] ], [ [[TMP11]], %[[PRED_LOAD_IF]] ]
36- ; CHECK-NEXT: [[TMP13:%.*]] = extractelement <2 x i1> [[TMP10]], i32 1
37- ; CHECK-NEXT: br i1 [[TMP13]], label %[[PRED_LOAD_IF1:.*]], label %[[PRED_LOAD_CONTINUE2]]
38- ; CHECK: [[PRED_LOAD_IF1]]:
39- ; CHECK-NEXT: [[TMP26:%.*]] = extractelement <2 x ptr> [[TMP1]], i32 1
40- ; CHECK-NEXT: [[TMP27:%.*]] = load i32, ptr [[TMP26]], align 4
41- ; CHECK-NEXT: [[TMP16:%.*]] = insertelement <2 x i32> [[TMP12]], i32 [[TMP27]], i32 1
42- ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE2]]
43- ; CHECK: [[PRED_LOAD_CONTINUE2]]:
44- ; CHECK-NEXT: [[TMP17:%.*]] = phi <2 x i32> [ [[TMP12]], %[[PRED_LOAD_CONTINUE]] ], [ [[TMP16]], %[[PRED_LOAD_IF1]] ]
26+ ; CHECK-NEXT: [[TMP8:%.*]] = getelementptr i32, ptr [[TMP4]], i32 0
27+ ; CHECK-NEXT: [[TMP17:%.*]] = load <2 x i32>, ptr [[TMP8]], align 4
4528; CHECK-NEXT: [[PREDPHI:%.*]] = select <2 x i1> [[TMP9]], <2 x i32> [[WIDE_LOAD]], <2 x i32> [[TMP17]]
4629; CHECK-NEXT: [[TMP30:%.*]] = getelementptr inbounds i32, ptr [[C]], i64 [[TMP0]]
4730; CHECK-NEXT: [[TMP31:%.*]] = getelementptr inbounds i32, ptr [[TMP30]], i32 0
@@ -290,8 +273,8 @@ define void @deref_assumption_in_header_constant_trip_count_align_1(ptr noalias
290273; CHECK: [[VECTOR_PH]]:
291274; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
292275; CHECK: [[VECTOR_BODY]]:
293- ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE2:.* ]] ]
294- ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <2 x i64> [ <i64 0, i64 1>, %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[PRED_LOAD_CONTINUE2 ]] ]
276+ ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY ]] ]
277+ ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <2 x i64> [ <i64 0, i64 1>, %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[VECTOR_BODY ]] ]
295278; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[INDEX]], 0
296279; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i32, ptr [[A]], <2 x i64> [[VEC_IND]]
297280; CHECK-NEXT: [[TMP2:%.*]] = extractelement <2 x ptr> [[TMP1]], i32 0
@@ -302,25 +285,8 @@ define void @deref_assumption_in_header_constant_trip_count_align_1(ptr noalias
302285; CHECK-NEXT: [[TMP5:%.*]] = getelementptr inbounds i32, ptr [[TMP4]], i32 0
303286; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <2 x i32>, ptr [[TMP5]], align 4
304287; CHECK-NEXT: [[TMP6:%.*]] = icmp sge <2 x i32> [[WIDE_LOAD]], zeroinitializer
305- ; CHECK-NEXT: [[TMP7:%.*]] = xor <2 x i1> [[TMP6]], splat (i1 true)
306- ; CHECK-NEXT: [[TMP8:%.*]] = extractelement <2 x i1> [[TMP7]], i32 0
307- ; CHECK-NEXT: br i1 [[TMP8]], label %[[PRED_LOAD_IF:.*]], label %[[PRED_LOAD_CONTINUE:.*]]
308- ; CHECK: [[PRED_LOAD_IF]]:
309- ; CHECK-NEXT: [[TMP9:%.*]] = extractelement <2 x ptr> [[TMP1]], i32 0
310- ; CHECK-NEXT: [[TMP10:%.*]] = load i32, ptr [[TMP9]], align 1
311- ; CHECK-NEXT: [[TMP11:%.*]] = insertelement <2 x i32> poison, i32 [[TMP10]], i32 0
312- ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE]]
313- ; CHECK: [[PRED_LOAD_CONTINUE]]:
314- ; CHECK-NEXT: [[TMP12:%.*]] = phi <2 x i32> [ poison, %[[VECTOR_BODY]] ], [ [[TMP11]], %[[PRED_LOAD_IF]] ]
315- ; CHECK-NEXT: [[TMP13:%.*]] = extractelement <2 x i1> [[TMP7]], i32 1
316- ; CHECK-NEXT: br i1 [[TMP13]], label %[[PRED_LOAD_IF1:.*]], label %[[PRED_LOAD_CONTINUE2]]
317- ; CHECK: [[PRED_LOAD_IF1]]:
318- ; CHECK-NEXT: [[TMP14:%.*]] = extractelement <2 x ptr> [[TMP1]], i32 1
319- ; CHECK-NEXT: [[TMP15:%.*]] = load i32, ptr [[TMP14]], align 1
320- ; CHECK-NEXT: [[TMP16:%.*]] = insertelement <2 x i32> [[TMP12]], i32 [[TMP15]], i32 1
321- ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE2]]
322- ; CHECK: [[PRED_LOAD_CONTINUE2]]:
323- ; CHECK-NEXT: [[TMP17:%.*]] = phi <2 x i32> [ [[TMP12]], %[[PRED_LOAD_CONTINUE]] ], [ [[TMP16]], %[[PRED_LOAD_IF1]] ]
288+ ; CHECK-NEXT: [[TMP7:%.*]] = getelementptr i32, ptr [[TMP2]], i32 0
289+ ; CHECK-NEXT: [[TMP17:%.*]] = load <2 x i32>, ptr [[TMP7]], align 1
324290; CHECK-NEXT: [[PREDPHI:%.*]] = select <2 x i1> [[TMP6]], <2 x i32> [[WIDE_LOAD]], <2 x i32> [[TMP17]]
325291; CHECK-NEXT: [[TMP18:%.*]] = getelementptr inbounds i32, ptr [[C]], i64 [[TMP0]]
326292; CHECK-NEXT: [[TMP19:%.*]] = getelementptr inbounds i32, ptr [[TMP18]], i32 0
@@ -606,17 +572,17 @@ define void @deref_assumption_in_then_constant_trip_count(ptr noalias %a, ptr no
606572; CHECK-NEXT: br i1 [[TMP6]], label %[[PRED_LOAD_IF:.*]], label %[[PRED_LOAD_CONTINUE:.*]]
607573; CHECK: [[PRED_LOAD_IF]]:
608574; CHECK-NEXT: [[TMP17:%.*]] = extractelement <2 x ptr> [[TMP5]], i32 0
609- ; CHECK-NEXT: [[TMP18 :%.*]] = load i32, ptr [[TMP17]], align 4
610- ; CHECK-NEXT: [[TMP9:%.*]] = insertelement <2 x i32> poison, i32 [[TMP18 ]], i32 0
575+ ; CHECK-NEXT: [[TMP8 :%.*]] = load i32, ptr [[TMP17]], align 4
576+ ; CHECK-NEXT: [[TMP9:%.*]] = insertelement <2 x i32> poison, i32 [[TMP8 ]], i32 0
611577; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE]]
612578; CHECK: [[PRED_LOAD_CONTINUE]]:
613579; CHECK-NEXT: [[TMP10:%.*]] = phi <2 x i32> [ poison, %[[VECTOR_BODY]] ], [ [[TMP9]], %[[PRED_LOAD_IF]] ]
614580; CHECK-NEXT: [[TMP11:%.*]] = extractelement <2 x i1> [[TMP4]], i32 1
615581; CHECK-NEXT: br i1 [[TMP11]], label %[[PRED_LOAD_IF1:.*]], label %[[PRED_LOAD_CONTINUE2]]
616582; CHECK: [[PRED_LOAD_IF1]]:
617- ; CHECK-NEXT: [[TMP22 :%.*]] = extractelement <2 x ptr> [[TMP5]], i32 1
618- ; CHECK-NEXT: [[TMP23 :%.*]] = load i32, ptr [[TMP22 ]], align 4
619- ; CHECK-NEXT: [[TMP14:%.*]] = insertelement <2 x i32> [[TMP10]], i32 [[TMP23 ]], i32 1
583+ ; CHECK-NEXT: [[TMP12 :%.*]] = extractelement <2 x ptr> [[TMP5]], i32 1
584+ ; CHECK-NEXT: [[TMP13 :%.*]] = load i32, ptr [[TMP12 ]], align 4
585+ ; CHECK-NEXT: [[TMP14:%.*]] = insertelement <2 x i32> [[TMP10]], i32 [[TMP13 ]], i32 1
620586; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE2]]
621587; CHECK: [[PRED_LOAD_CONTINUE2]]:
622588; CHECK-NEXT: [[TMP15:%.*]] = phi <2 x i32> [ [[TMP10]], %[[PRED_LOAD_CONTINUE]] ], [ [[TMP14]], %[[PRED_LOAD_IF1]] ]
@@ -703,24 +669,24 @@ define void @deref_assumption_in_latch_constant_trip_count(ptr noalias %a, ptr n
703669; CHECK-NEXT: br i1 [[TMP6]], label %[[PRED_LOAD_IF:.*]], label %[[PRED_LOAD_CONTINUE:.*]]
704670; CHECK: [[PRED_LOAD_IF]]:
705671; CHECK-NEXT: [[TMP17:%.*]] = extractelement <2 x ptr> [[TMP1]], i32 0
706- ; CHECK-NEXT: [[TMP18 :%.*]] = load i32, ptr [[TMP17]], align 4
707- ; CHECK-NEXT: [[TMP9:%.*]] = insertelement <2 x i32> poison, i32 [[TMP18 ]], i32 0
672+ ; CHECK-NEXT: [[TMP8 :%.*]] = load i32, ptr [[TMP17]], align 4
673+ ; CHECK-NEXT: [[TMP9:%.*]] = insertelement <2 x i32> poison, i32 [[TMP8 ]], i32 0
708674; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE]]
709675; CHECK: [[PRED_LOAD_CONTINUE]]:
710676; CHECK-NEXT: [[TMP10:%.*]] = phi <2 x i32> [ poison, %[[VECTOR_BODY]] ], [ [[TMP9]], %[[PRED_LOAD_IF]] ]
711677; CHECK-NEXT: [[TMP11:%.*]] = extractelement <2 x i1> [[TMP5]], i32 1
712678; CHECK-NEXT: br i1 [[TMP11]], label %[[PRED_LOAD_IF1:.*]], label %[[PRED_LOAD_CONTINUE2]]
713679; CHECK: [[PRED_LOAD_IF1]]:
714- ; CHECK-NEXT: [[TMP22 :%.*]] = extractelement <2 x ptr> [[TMP1]], i32 1
715- ; CHECK-NEXT: [[TMP23 :%.*]] = load i32, ptr [[TMP22 ]], align 4
716- ; CHECK-NEXT: [[TMP14:%.*]] = insertelement <2 x i32> [[TMP10]], i32 [[TMP23 ]], i32 1
680+ ; CHECK-NEXT: [[TMP12 :%.*]] = extractelement <2 x ptr> [[TMP1]], i32 1
681+ ; CHECK-NEXT: [[TMP13 :%.*]] = load i32, ptr [[TMP12 ]], align 4
682+ ; CHECK-NEXT: [[TMP14:%.*]] = insertelement <2 x i32> [[TMP10]], i32 [[TMP13 ]], i32 1
717683; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE2]]
718684; CHECK: [[PRED_LOAD_CONTINUE2]]:
719685; CHECK-NEXT: [[TMP15:%.*]] = phi <2 x i32> [ [[TMP10]], %[[PRED_LOAD_CONTINUE]] ], [ [[TMP14]], %[[PRED_LOAD_IF1]] ]
720686; CHECK-NEXT: [[PREDPHI:%.*]] = select <2 x i1> [[TMP4]], <2 x i32> [[WIDE_LOAD]], <2 x i32> [[TMP15]]
721- ; CHECK-NEXT: [[TMP28 :%.*]] = extractelement <2 x ptr> [[TMP1]], i32 0
722- ; CHECK-NEXT: [[TMP20 :%.*]] = extractelement <2 x ptr> [[TMP1]], i32 0
723- ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[TMP28 ]], i64 4), "dereferenceable"(ptr [[TMP20 ]], i64 4) ]
687+ ; CHECK-NEXT: [[TMP16 :%.*]] = extractelement <2 x ptr> [[TMP1]], i32 0
688+ ; CHECK-NEXT: [[TMP18 :%.*]] = extractelement <2 x ptr> [[TMP1]], i32 0
689+ ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[TMP16 ]], i64 4), "dereferenceable"(ptr [[TMP18 ]], i64 4) ]
724690; CHECK-NEXT: [[TMP29:%.*]] = extractelement <2 x ptr> [[TMP1]], i32 1
725691; CHECK-NEXT: [[TMP19:%.*]] = extractelement <2 x ptr> [[TMP1]], i32 1
726692; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[TMP29]], i64 4), "dereferenceable"(ptr [[TMP19]], i64 4) ]
@@ -796,8 +762,8 @@ define void @deref_assumption_in_header_variable_trip_count(ptr noalias %a, ptr
796762; CHECK-NEXT: [[N_VEC:%.*]] = sub i64 [[N]], [[N_MOD_VF]]
797763; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
798764; CHECK: [[VECTOR_BODY]]:
799- ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[PRED_LOAD_CONTINUE2:.* ]] ]
800- ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <2 x i64> [ <i64 0, i64 1>, %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[PRED_LOAD_CONTINUE2 ]] ]
765+ ; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY ]] ]
766+ ; CHECK-NEXT: [[VEC_IND:%.*]] = phi <2 x i64> [ <i64 0, i64 1>, %[[VECTOR_PH]] ], [ [[VEC_IND_NEXT:%.*]], %[[VECTOR_BODY ]] ]
801767; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[INDEX]], 0
802768; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i32, ptr [[A]], <2 x i64> [[VEC_IND]]
803769; CHECK-NEXT: [[TMP4:%.*]] = extractelement <2 x ptr> [[TMP1]], i32 0
@@ -808,25 +774,8 @@ define void @deref_assumption_in_header_variable_trip_count(ptr noalias %a, ptr
808774; CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds i32, ptr [[TMP6]], i32 0
809775; CHECK-NEXT: [[WIDE_LOAD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 4
810776; CHECK-NEXT: [[TMP9:%.*]] = icmp sge <2 x i32> [[WIDE_LOAD]], zeroinitializer
811- ; CHECK-NEXT: [[TMP10:%.*]] = xor <2 x i1> [[TMP9]], splat (i1 true)
812- ; CHECK-NEXT: [[TMP8:%.*]] = extractelement <2 x i1> [[TMP10]], i32 0
813- ; CHECK-NEXT: br i1 [[TMP8]], label %[[PRED_LOAD_IF:.*]], label %[[PRED_LOAD_CONTINUE:.*]]
814- ; CHECK: [[PRED_LOAD_IF]]:
815- ; CHECK-NEXT: [[TMP21:%.*]] = extractelement <2 x ptr> [[TMP1]], i32 0
816- ; CHECK-NEXT: [[TMP22:%.*]] = load i32, ptr [[TMP21]], align 4
817- ; CHECK-NEXT: [[TMP11:%.*]] = insertelement <2 x i32> poison, i32 [[TMP22]], i32 0
818- ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE]]
819- ; CHECK: [[PRED_LOAD_CONTINUE]]:
820- ; CHECK-NEXT: [[TMP12:%.*]] = phi <2 x i32> [ poison, %[[VECTOR_BODY]] ], [ [[TMP11]], %[[PRED_LOAD_IF]] ]
821- ; CHECK-NEXT: [[TMP13:%.*]] = extractelement <2 x i1> [[TMP10]], i32 1
822- ; CHECK-NEXT: br i1 [[TMP13]], label %[[PRED_LOAD_IF1:.*]], label %[[PRED_LOAD_CONTINUE2]]
823- ; CHECK: [[PRED_LOAD_IF1]]:
824- ; CHECK-NEXT: [[TMP26:%.*]] = extractelement <2 x ptr> [[TMP1]], i32 1
825- ; CHECK-NEXT: [[TMP27:%.*]] = load i32, ptr [[TMP26]], align 4
826- ; CHECK-NEXT: [[TMP16:%.*]] = insertelement <2 x i32> [[TMP12]], i32 [[TMP27]], i32 1
827- ; CHECK-NEXT: br label %[[PRED_LOAD_CONTINUE2]]
828- ; CHECK: [[PRED_LOAD_CONTINUE2]]:
829- ; CHECK-NEXT: [[TMP17:%.*]] = phi <2 x i32> [ [[TMP12]], %[[PRED_LOAD_CONTINUE]] ], [ [[TMP16]], %[[PRED_LOAD_IF1]] ]
777+ ; CHECK-NEXT: [[TMP8:%.*]] = getelementptr i32, ptr [[TMP4]], i32 0
778+ ; CHECK-NEXT: [[TMP17:%.*]] = load <2 x i32>, ptr [[TMP8]], align 4
830779; CHECK-NEXT: [[PREDPHI:%.*]] = select <2 x i1> [[TMP9]], <2 x i32> [[WIDE_LOAD]], <2 x i32> [[TMP17]]
831780; CHECK-NEXT: [[TMP30:%.*]] = getelementptr inbounds i32, ptr [[C]], i64 [[TMP0]]
832781; CHECK-NEXT: [[TMP31:%.*]] = getelementptr inbounds i32, ptr [[TMP30]], i32 0
0 commit comments