@@ -6,42 +6,18 @@ define i8 @recurrence_phi_with_same_incoming_values_after_simplifications(i8 %fo
6
6
; CHECK-LABEL: define i8 @recurrence_phi_with_same_incoming_values_after_simplifications(
7
7
; CHECK-SAME: i8 [[FOR_START:%.*]], ptr [[DST:%.*]]) {
8
8
; CHECK-NEXT: [[ENTRY:.*]]:
9
- ; CHECK-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_SCEVCHECK:.*]]
10
- ; CHECK: [[VECTOR_SCEVCHECK]]:
11
- ; CHECK-NEXT: br i1 true, label %[[SCALAR_PH]], label %[[VECTOR_PH:.*]]
12
- ; CHECK: [[VECTOR_PH]]:
13
- ; CHECK-NEXT: [[BROADCAST_SPLATINSERT:%.*]] = insertelement <4 x i8> poison, i8 [[FOR_START]], i64 0
14
- ; CHECK-NEXT: [[BROADCAST_SPLAT:%.*]] = shufflevector <4 x i8> [[BROADCAST_SPLATINSERT]], <4 x i8> poison, <4 x i32> zeroinitializer
15
- ; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <4 x i8> [[BROADCAST_SPLAT]], <4 x i8> [[BROADCAST_SPLAT]], <4 x i32> <i32 3, i32 4, i32 5, i32 6>
16
- ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
17
- ; CHECK: [[VECTOR_BODY]]:
18
- ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
19
- ; CHECK-NEXT: [[OFFSET_IDX:%.*]] = add i32 1, [[INDEX]]
20
- ; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[DST]], i32 [[OFFSET_IDX]]
21
- ; CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i32 0
22
- ; CHECK-NEXT: [[TMP3:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i32 4
23
- ; CHECK-NEXT: store <4 x i8> [[TMP0]], ptr [[TMP2]], align 1
24
- ; CHECK-NEXT: store <4 x i8> [[TMP0]], ptr [[TMP3]], align 1
25
- ; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 8
26
- ; CHECK-NEXT: [[TMP4:%.*]] = icmp eq i32 [[INDEX_NEXT]], -8
27
- ; CHECK-NEXT: br i1 [[TMP4]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]
28
- ; CHECK: [[MIDDLE_BLOCK]]:
29
- ; CHECK-NEXT: br i1 false, label %[[EXIT:.*]], label %[[SCALAR_PH]]
30
- ; CHECK: [[SCALAR_PH]]:
31
- ; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i32 [ -7, %[[MIDDLE_BLOCK]] ], [ 1, %[[ENTRY]] ], [ 1, %[[VECTOR_SCEVCHECK]] ]
32
- ; CHECK-NEXT: [[SCALAR_RECUR_INIT:%.*]] = phi i8 [ [[FOR_START]], %[[MIDDLE_BLOCK]] ], [ [[FOR_START]], %[[ENTRY]] ], [ [[FOR_START]], %[[VECTOR_SCEVCHECK]] ]
33
9
; CHECK-NEXT: br label %[[LOOP:.*]]
34
10
; CHECK: [[LOOP]]:
35
- ; CHECK-NEXT: [[IV:%.*]] = phi i32 [ [[BC_RESUME_VAL]] , %[[SCALAR_PH ]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]
36
- ; CHECK-NEXT: [[FOR:%.*]] = phi i8 [ [[SCALAR_RECUR_INIT ]], %[[SCALAR_PH ]] ], [ [[FOR_NEXT:%.*]], %[[LOOP]] ]
11
+ ; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 1 , %[[ENTRY ]] ], [ [[IV_NEXT:%.*]], %[[LOOP]] ]
12
+ ; CHECK-NEXT: [[FOR:%.*]] = phi i8 [ [[FOR_START ]], %[[ENTRY ]] ], [ [[FOR_NEXT:%.*]], %[[LOOP]] ]
37
13
; CHECK-NEXT: [[FOR_NEXT]] = and i8 [[FOR_START]], -1
38
14
; CHECK-NEXT: [[IV_NEXT]] = add i32 [[IV]], 1
39
15
; CHECK-NEXT: [[GEP_DST:%.*]] = getelementptr inbounds i8, ptr [[DST]], i32 [[IV]]
40
16
; CHECK-NEXT: store i8 [[FOR]], ptr [[GEP_DST]], align 1
41
17
; CHECK-NEXT: [[EC:%.*]] = icmp eq i32 [[IV_NEXT]], 0
42
- ; CHECK-NEXT: br i1 [[EC]], label %[[EXIT]], label %[[LOOP]], !llvm.loop [[LOOP3:![0-9]+ ]]
18
+ ; CHECK-NEXT: br i1 [[EC]], label %[[EXIT:.* ]], label %[[LOOP]]
43
19
; CHECK: [[EXIT]]:
44
- ; CHECK-NEXT: [[FOR_NEXT_LCSSA:%.*]] = phi i8 [ [[FOR_NEXT]], %[[LOOP]] ], [ [[FOR_START]], %[[MIDDLE_BLOCK]] ]
20
+ ; CHECK-NEXT: [[FOR_NEXT_LCSSA:%.*]] = phi i8 [ [[FOR_NEXT]], %[[LOOP]] ]
45
21
; CHECK-NEXT: ret i8 [[FOR_NEXT_LCSSA]]
46
22
;
47
23
entry:
@@ -86,7 +62,7 @@ define i32 @sink_after_dead_inst(ptr %A.ptr) {
86
62
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 8
87
63
; CHECK-NEXT: [[VEC_IND_NEXT]] = add <4 x i16> [[STEP_ADD]], splat (i16 4)
88
64
; CHECK-NEXT: [[TMP6:%.*]] = icmp eq i32 [[INDEX_NEXT]], 16
89
- ; CHECK-NEXT: br i1 [[TMP6]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP4 :![0-9]+]]
65
+ ; CHECK-NEXT: br i1 [[TMP6]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP0 :![0-9]+]]
90
66
; CHECK: [[MIDDLE_BLOCK]]:
91
67
; CHECK-NEXT: [[VECTOR_RECUR_EXTRACT:%.*]] = extractelement <4 x i32> [[TMP2]], i32 3
92
68
; CHECK-NEXT: [[VECTOR_RECUR_EXTRACT_FOR_PHI:%.*]] = extractelement <4 x i32> [[TMP2]], i32 2
@@ -108,7 +84,7 @@ define i32 @sink_after_dead_inst(ptr %A.ptr) {
108
84
; CHECK-NEXT: [[EXT:%.*]] = zext i1 [[B3]] to i32
109
85
; CHECK-NEXT: [[A_GEP:%.*]] = getelementptr i32, ptr [[A_PTR]], i16 [[IV]]
110
86
; CHECK-NEXT: store i32 0, ptr [[A_GEP]], align 4
111
- ; CHECK-NEXT: br i1 [[VEC_DEAD]], label %[[FOR_END]], label %[[LOOP]], !llvm.loop [[LOOP5 :![0-9]+]]
87
+ ; CHECK-NEXT: br i1 [[VEC_DEAD]], label %[[FOR_END]], label %[[LOOP]], !llvm.loop [[LOOP3 :![0-9]+]]
112
88
; CHECK: [[FOR_END]]:
113
89
; CHECK-NEXT: [[FOR_LCSSA:%.*]] = phi i32 [ [[FOR]], %[[LOOP]] ], [ [[VECTOR_RECUR_EXTRACT_FOR_PHI]], %[[MIDDLE_BLOCK]] ]
114
90
; CHECK-NEXT: ret i32 [[FOR_LCSSA]]
@@ -169,7 +145,7 @@ define void @sink_dead_inst(ptr %a) {
169
145
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 8
170
146
; CHECK-NEXT: [[VEC_IND_NEXT]] = add <4 x i16> [[STEP_ADD]], splat (i16 4)
171
147
; CHECK-NEXT: [[TMP12:%.*]] = icmp eq i32 [[INDEX_NEXT]], 40
172
- ; CHECK-NEXT: br i1 [[TMP12]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP6 :![0-9]+]]
148
+ ; CHECK-NEXT: br i1 [[TMP12]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP4 :![0-9]+]]
173
149
; CHECK: [[MIDDLE_BLOCK]]:
174
150
; CHECK-NEXT: [[VECTOR_RECUR_EXTRACT:%.*]] = extractelement <4 x i16> [[TMP4]], i32 3
175
151
; CHECK-NEXT: [[VECTOR_RECUR_EXTRACT1:%.*]] = extractelement <4 x i32> [[TMP2]], i32 3
@@ -190,7 +166,7 @@ define void @sink_dead_inst(ptr %a) {
190
166
; CHECK-NEXT: [[REC_1_PREV]] = add i16 [[IV_NEXT]], 5
191
167
; CHECK-NEXT: [[GEP:%.*]] = getelementptr i16, ptr [[A]], i16 [[IV]]
192
168
; CHECK-NEXT: store i16 [[USE_REC_1]], ptr [[GEP]], align 2
193
- ; CHECK-NEXT: br i1 [[CMP]], label %[[FOR_END]], label %[[FOR_COND]], !llvm.loop [[LOOP7 :![0-9]+]]
169
+ ; CHECK-NEXT: br i1 [[CMP]], label %[[FOR_END]], label %[[FOR_COND]], !llvm.loop [[LOOP5 :![0-9]+]]
194
170
; CHECK: [[FOR_END]]:
195
171
; CHECK-NEXT: ret void
196
172
;
@@ -232,7 +208,7 @@ define void @unused_recurrence(ptr %a) {
232
208
; CHECK-NEXT: [[INDEX_NEXT]] = add nuw i32 [[INDEX]], 8
233
209
; CHECK-NEXT: [[VEC_IND_NEXT]] = add <4 x i16> [[STEP_ADD]], splat (i16 4)
234
210
; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i32 [[INDEX_NEXT]], 1024
235
- ; CHECK-NEXT: br i1 [[TMP2]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP8 :![0-9]+]]
211
+ ; CHECK-NEXT: br i1 [[TMP2]], label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP6 :![0-9]+]]
236
212
; CHECK: [[MIDDLE_BLOCK]]:
237
213
; CHECK-NEXT: [[VECTOR_RECUR_EXTRACT:%.*]] = extractelement <4 x i16> [[TMP1]], i32 3
238
214
; CHECK-NEXT: br i1 false, label %[[FOR_END:.*]], label %[[SCALAR_PH]]
@@ -247,7 +223,7 @@ define void @unused_recurrence(ptr %a) {
247
223
; CHECK-NEXT: [[IV_NEXT]] = add i16 [[IV]], 1
248
224
; CHECK-NEXT: [[REC_1_PREV]] = add i16 [[IV_NEXT]], 5
249
225
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i16 [[IV]], 1000
250
- ; CHECK-NEXT: br i1 [[CMP]], label %[[FOR_END]], label %[[FOR_COND]], !llvm.loop [[LOOP9 :![0-9]+]]
226
+ ; CHECK-NEXT: br i1 [[CMP]], label %[[FOR_END]], label %[[FOR_COND]], !llvm.loop [[LOOP7 :![0-9]+]]
251
227
; CHECK: [[FOR_END]]:
252
228
; CHECK-NEXT: ret void
253
229
;
0 commit comments