@@ -11,76 +11,74 @@ define void @test_widen_ptr_induction(ptr %ptr.start.1) {
11
11
; CHECK: vector.main.loop.iter.check:
12
12
; CHECK-NEXT: br i1 false, label [[VEC_EPILOG_PH:%.*]], label [[VECTOR_PH:%.*]]
13
13
; CHECK: vector.ph:
14
- ; CHECK-NEXT: [[IND_END:%.*]] = getelementptr i8, ptr [[PTR_START_1:%.*]], i64 10000
15
14
; CHECK-NEXT: br label [[VECTOR_BODY:%.*]]
16
15
; CHECK: vector.body:
17
16
; CHECK-NEXT: [[INDEX:%.*]] = phi i64 [ 0, [[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], [[VECTOR_BODY]] ]
18
17
; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[INDEX]], 0
19
- ; CHECK-NEXT: [[NEXT_GEP:%.*]] = getelementptr i8, ptr [[PTR_START_1]], i64 [[TMP0]]
20
18
; CHECK-NEXT: [[TMP1:%.*]] = add i64 [[INDEX]], 1
21
- ; CHECK-NEXT: [[NEXT_GEP1:%.*]] = getelementptr i8, ptr [[PTR_START_1]], i64 [[TMP1]]
22
- ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x ptr> poison, ptr [[NEXT_GEP]], i32 0
23
- ; CHECK-NEXT: [[TMP3:%.*]] = insertelement <2 x ptr> [[TMP2]], ptr [[NEXT_GEP1]], i32 1
24
- ; CHECK-NEXT: [[TMP4:%.*]] = add i64 [[INDEX]], 2
25
- ; CHECK-NEXT: [[NEXT_GEP2:%.*]] = getelementptr i8, ptr [[PTR_START_1]], i64 [[TMP4]]
26
- ; CHECK-NEXT: [[TMP5:%.*]] = add i64 [[INDEX]], 3
27
- ; CHECK-NEXT: [[NEXT_GEP3:%.*]] = getelementptr i8, ptr [[PTR_START_1]], i64 [[TMP5]]
28
- ; CHECK-NEXT: [[TMP6:%.*]] = insertelement <2 x ptr> poison, ptr [[NEXT_GEP2]], i32 0
29
- ; CHECK-NEXT: [[TMP7:%.*]] = insertelement <2 x ptr> [[TMP6]], ptr [[NEXT_GEP3]], i32 1
30
- ; CHECK-NEXT: [[TMP8:%.*]] = icmp ne <2 x ptr> [[TMP3]], zeroinitializer
31
- ; CHECK-NEXT: [[TMP9:%.*]] = icmp ne <2 x ptr> [[TMP7]], zeroinitializer
32
- ; CHECK-NEXT: [[TMP10:%.*]] = extractelement <2 x i1> [[TMP8]], i32 0
33
- ; CHECK-NEXT: tail call void @llvm.assume(i1 [[TMP10]])
34
- ; CHECK-NEXT: [[TMP11:%.*]] = extractelement <2 x i1> [[TMP8]], i32 1
35
- ; CHECK-NEXT: tail call void @llvm.assume(i1 [[TMP11]])
36
- ; CHECK-NEXT: [[TMP12:%.*]] = extractelement <2 x i1> [[TMP9]], i32 0
37
- ; CHECK-NEXT: tail call void @llvm.assume(i1 [[TMP12]])
38
- ; CHECK-NEXT: [[TMP13:%.*]] = extractelement <2 x i1> [[TMP9]], i32 1
39
- ; CHECK-NEXT: tail call void @llvm.assume(i1 [[TMP13]])
40
- ; CHECK-NEXT: [[TMP14:%.*]] = getelementptr i8, ptr [[NEXT_GEP]], i32 0
41
- ; CHECK-NEXT: [[TMP15:%.*]] = getelementptr i8, ptr [[NEXT_GEP]], i32 2
42
- ; CHECK-NEXT: store <2 x i8> zeroinitializer, ptr [[TMP14]], align 1
43
- ; CHECK-NEXT: store <2 x i8> zeroinitializer, ptr [[TMP15]], align 1
19
+ ; CHECK-NEXT: [[TMP2:%.*]] = add i64 [[INDEX]], 2
20
+ ; CHECK-NEXT: [[TMP3:%.*]] = add i64 [[INDEX]], 3
21
+ ; CHECK-NEXT: [[TMP4:%.*]] = getelementptr i8, ptr [[PTR_START_1:%.*]], i64 [[TMP0]]
22
+ ; CHECK-NEXT: [[TMP5:%.*]] = getelementptr i8, ptr [[PTR_START_1]], i64 [[TMP1]]
23
+ ; CHECK-NEXT: [[TMP6:%.*]] = insertelement <2 x ptr> poison, ptr [[TMP4]], i32 0
24
+ ; CHECK-NEXT: [[TMP7:%.*]] = insertelement <2 x ptr> [[TMP6]], ptr [[TMP5]], i32 1
25
+ ; CHECK-NEXT: [[TMP8:%.*]] = getelementptr i8, ptr [[PTR_START_1]], i64 [[TMP2]]
26
+ ; CHECK-NEXT: [[TMP9:%.*]] = getelementptr i8, ptr [[PTR_START_1]], i64 [[TMP3]]
27
+ ; CHECK-NEXT: [[TMP10:%.*]] = insertelement <2 x ptr> poison, ptr [[TMP8]], i32 0
28
+ ; CHECK-NEXT: [[TMP11:%.*]] = insertelement <2 x ptr> [[TMP10]], ptr [[TMP9]], i32 1
29
+ ; CHECK-NEXT: [[TMP12:%.*]] = icmp ne <2 x ptr> [[TMP7]], zeroinitializer
30
+ ; CHECK-NEXT: [[TMP13:%.*]] = icmp ne <2 x ptr> [[TMP11]], zeroinitializer
31
+ ; CHECK-NEXT: [[TMP14:%.*]] = extractelement <2 x i1> [[TMP12]], i32 0
32
+ ; CHECK-NEXT: tail call void @llvm.assume(i1 [[TMP14]])
33
+ ; CHECK-NEXT: [[TMP15:%.*]] = extractelement <2 x i1> [[TMP12]], i32 1
34
+ ; CHECK-NEXT: tail call void @llvm.assume(i1 [[TMP15]])
35
+ ; CHECK-NEXT: [[TMP16:%.*]] = extractelement <2 x i1> [[TMP13]], i32 0
36
+ ; CHECK-NEXT: tail call void @llvm.assume(i1 [[TMP16]])
37
+ ; CHECK-NEXT: [[TMP17:%.*]] = extractelement <2 x i1> [[TMP13]], i32 1
38
+ ; CHECK-NEXT: tail call void @llvm.assume(i1 [[TMP17]])
39
+ ; CHECK-NEXT: [[TMP18:%.*]] = getelementptr i8, ptr [[TMP4]], i32 0
40
+ ; CHECK-NEXT: [[TMP19:%.*]] = getelementptr i8, ptr [[TMP4]], i32 2
41
+ ; CHECK-NEXT: store <2 x i8> zeroinitializer, ptr [[TMP18]], align 1
42
+ ; CHECK-NEXT: store <2 x i8> zeroinitializer, ptr [[TMP19]], align 1
44
43
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i64 [[INDEX]], 4
45
- ; CHECK-NEXT: [[TMP16 :%.*]] = icmp eq i64 [[INDEX_NEXT]], 10000
46
- ; CHECK-NEXT: br i1 [[TMP16 ]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], {{!llvm.loop ![0-9]+}}
44
+ ; CHECK-NEXT: [[TMP20 :%.*]] = icmp eq i64 [[INDEX_NEXT]], 10000
45
+ ; CHECK-NEXT: br i1 [[TMP20 ]], label [[MIDDLE_BLOCK:%.*]], label [[VECTOR_BODY]], {{!llvm.loop ![0-9]+}}
47
46
; CHECK: middle.block:
48
47
; CHECK-NEXT: br i1 false, label [[EXIT:%.*]], label [[VEC_EPILOG_ITER_CHECK:%.*]]
49
48
; CHECK: vec.epilog.iter.check:
50
- ; CHECK-NEXT: [[IND_END6 :%.*]] = getelementptr i8, ptr [[PTR_START_1]], i64 10000
49
+ ; CHECK-NEXT: [[IND_END1 :%.*]] = getelementptr i8, ptr [[PTR_START_1]], i64 10000
51
50
; CHECK-NEXT: br i1 true, label [[VEC_EPILOG_SCALAR_PH]], label [[VEC_EPILOG_PH]]
52
51
; CHECK: vec.epilog.ph:
53
- ; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi ptr [ [[IND_END]], [[VEC_EPILOG_ITER_CHECK]] ], [ [[PTR_START_1]], [[VECTOR_MAIN_LOOP_ITER_CHECK]] ]
54
52
; CHECK-NEXT: [[VEC_EPILOG_RESUME_VAL:%.*]] = phi i64 [ 10000, [[VEC_EPILOG_ITER_CHECK]] ], [ 0, [[VECTOR_MAIN_LOOP_ITER_CHECK]] ]
55
- ; CHECK-NEXT: [[IND_END5 :%.*]] = getelementptr i8, ptr [[PTR_START_1]], i64 10000
53
+ ; CHECK-NEXT: [[IND_END :%.*]] = getelementptr i8, ptr [[PTR_START_1]], i64 10000
56
54
; CHECK-NEXT: br label [[VEC_EPILOG_VECTOR_BODY:%.*]]
57
55
; CHECK: vec.epilog.vector.body:
58
- ; CHECK-NEXT: [[INDEX8 :%.*]] = phi i64 [ [[VEC_EPILOG_RESUME_VAL]], [[VEC_EPILOG_PH]] ], [ [[INDEX_NEXT11 :%.*]], [[VEC_EPILOG_VECTOR_BODY]] ]
59
- ; CHECK-NEXT: [[TMP17 :%.*]] = add i64 [[INDEX8 ]], 0
60
- ; CHECK-NEXT: [[NEXT_GEP9 :%.*]] = getelementptr i8, ptr [[PTR_START_1 ]], i64 [[TMP17]]
61
- ; CHECK-NEXT: [[TMP18 :%.*]] = add i64 [[INDEX8 ]], 1
62
- ; CHECK-NEXT: [[NEXT_GEP10 :%.*]] = getelementptr i8, ptr [[PTR_START_1]], i64 [[TMP18 ]]
63
- ; CHECK-NEXT: [[TMP19 :%.*]] = insertelement <2 x ptr> poison, ptr [[NEXT_GEP9 ]], i32 0
64
- ; CHECK-NEXT: [[TMP20 :%.*]] = insertelement <2 x ptr> [[TMP19 ]], ptr [[NEXT_GEP10 ]], i32 1
65
- ; CHECK-NEXT: [[TMP21 :%.*]] = icmp ne <2 x ptr> [[TMP20 ]], zeroinitializer
66
- ; CHECK-NEXT: [[TMP22 :%.*]] = extractelement <2 x i1> [[TMP21 ]], i32 0
67
- ; CHECK-NEXT: tail call void @llvm.assume(i1 [[TMP22 ]])
68
- ; CHECK-NEXT: [[TMP23 :%.*]] = extractelement <2 x i1> [[TMP21 ]], i32 1
69
- ; CHECK-NEXT: tail call void @llvm.assume(i1 [[TMP23 ]])
70
- ; CHECK-NEXT: [[TMP24 :%.*]] = getelementptr i8, ptr [[NEXT_GEP9 ]], i32 0
71
- ; CHECK-NEXT: store <2 x i8> zeroinitializer, ptr [[TMP24 ]], align 1
72
- ; CHECK-NEXT: [[INDEX_NEXT11 ]] = add nuw i64 [[INDEX8 ]], 2
73
- ; CHECK-NEXT: [[TMP25 :%.*]] = icmp eq i64 [[INDEX_NEXT11 ]], 10000
74
- ; CHECK-NEXT: br i1 [[TMP25 ]], label [[VEC_EPILOG_MIDDLE_BLOCK:%.*]], label [[VEC_EPILOG_VECTOR_BODY]], {{!llvm.loop ![0-9]+}}
56
+ ; CHECK-NEXT: [[INDEX3 :%.*]] = phi i64 [ [[VEC_EPILOG_RESUME_VAL]], [[VEC_EPILOG_PH]] ], [ [[INDEX_NEXT4 :%.*]], [[VEC_EPILOG_VECTOR_BODY]] ]
57
+ ; CHECK-NEXT: [[TMP21 :%.*]] = add i64 [[INDEX3 ]], 0
58
+ ; CHECK-NEXT: [[TMP22 :%.*]] = add i64 [[INDEX3 ]], 1
59
+ ; CHECK-NEXT: [[TMP23 :%.*]] = getelementptr i8, ptr [[PTR_START_1 ]], i64 [[TMP21]]
60
+ ; CHECK-NEXT: [[TMP24 :%.*]] = getelementptr i8, ptr [[PTR_START_1]], i64 [[TMP22 ]]
61
+ ; CHECK-NEXT: [[TMP25 :%.*]] = insertelement <2 x ptr> poison, ptr [[TMP23 ]], i32 0
62
+ ; CHECK-NEXT: [[TMP26 :%.*]] = insertelement <2 x ptr> [[TMP25 ]], ptr [[TMP24 ]], i32 1
63
+ ; CHECK-NEXT: [[TMP27 :%.*]] = icmp ne <2 x ptr> [[TMP26 ]], zeroinitializer
64
+ ; CHECK-NEXT: [[TMP28 :%.*]] = extractelement <2 x i1> [[TMP27 ]], i32 0
65
+ ; CHECK-NEXT: tail call void @llvm.assume(i1 [[TMP28 ]])
66
+ ; CHECK-NEXT: [[TMP29 :%.*]] = extractelement <2 x i1> [[TMP27 ]], i32 1
67
+ ; CHECK-NEXT: tail call void @llvm.assume(i1 [[TMP29 ]])
68
+ ; CHECK-NEXT: [[TMP30 :%.*]] = getelementptr i8, ptr [[TMP23 ]], i32 0
69
+ ; CHECK-NEXT: store <2 x i8> zeroinitializer, ptr [[TMP30 ]], align 1
70
+ ; CHECK-NEXT: [[INDEX_NEXT4 ]] = add nuw i64 [[INDEX3 ]], 2
71
+ ; CHECK-NEXT: [[TMP31 :%.*]] = icmp eq i64 [[INDEX_NEXT4 ]], 10000
72
+ ; CHECK-NEXT: br i1 [[TMP31 ]], label [[VEC_EPILOG_MIDDLE_BLOCK:%.*]], label [[VEC_EPILOG_VECTOR_BODY]], {{!llvm.loop ![0-9]+}}
75
73
; CHECK: vec.epilog.middle.block:
76
74
; CHECK-NEXT: br i1 false, label [[EXIT]], label [[VEC_EPILOG_SCALAR_PH]]
77
75
; CHECK: vec.epilog.scalar.ph:
78
- ; CHECK-NEXT: [[BC_RESUME_VAL4 :%.*]] = phi i64 [ 10000, [[VEC_EPILOG_MIDDLE_BLOCK]] ], [ 10000, [[VEC_EPILOG_ITER_CHECK]] ], [ 0, [[ITER_CHECK:%.*]] ]
79
- ; CHECK-NEXT: [[BC_RESUME_VAL7 :%.*]] = phi ptr [ [[IND_END5 ]], [[VEC_EPILOG_MIDDLE_BLOCK]] ], [ [[IND_END6 ]], [[VEC_EPILOG_ITER_CHECK]] ], [ [[PTR_START_1]], [[ITER_CHECK]] ]
76
+ ; CHECK-NEXT: [[BC_RESUME_VAL :%.*]] = phi i64 [ 10000, [[VEC_EPILOG_MIDDLE_BLOCK]] ], [ 10000, [[VEC_EPILOG_ITER_CHECK]] ], [ 0, [[ITER_CHECK:%.*]] ]
77
+ ; CHECK-NEXT: [[BC_RESUME_VAL2 :%.*]] = phi ptr [ [[IND_END ]], [[VEC_EPILOG_MIDDLE_BLOCK]] ], [ [[IND_END1 ]], [[VEC_EPILOG_ITER_CHECK]] ], [ [[PTR_START_1]], [[ITER_CHECK]] ]
80
78
; CHECK-NEXT: br label [[LOOP:%.*]]
81
79
; CHECK: loop:
82
- ; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[BC_RESUME_VAL4 ]], [[VEC_EPILOG_SCALAR_PH]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
83
- ; CHECK-NEXT: [[PTR_IV:%.*]] = phi ptr [ [[BC_RESUME_VAL7 ]], [[VEC_EPILOG_SCALAR_PH]] ], [ [[PTR_IV_NEXT:%.*]], [[LOOP]] ]
80
+ ; CHECK-NEXT: [[IV:%.*]] = phi i64 [ [[BC_RESUME_VAL ]], [[VEC_EPILOG_SCALAR_PH]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
81
+ ; CHECK-NEXT: [[PTR_IV:%.*]] = phi ptr [ [[BC_RESUME_VAL2 ]], [[VEC_EPILOG_SCALAR_PH]] ], [ [[PTR_IV_NEXT:%.*]], [[LOOP]] ]
84
82
; CHECK-NEXT: [[CMP_I_I_I_I:%.*]] = icmp ne ptr [[PTR_IV]], null
85
83
; CHECK-NEXT: tail call void @llvm.assume(i1 [[CMP_I_I_I_I]])
86
84
; CHECK-NEXT: store i8 0, ptr [[PTR_IV]], align 1
0 commit comments