@@ -152,11 +152,84 @@ exit:
152
152
ret void
153
153
}
154
154
155
+ ; Test case for https://github.com/llvm/llvm-project/issues/106641.
156
+ define void @truncate_to_i1_used_by_branch (i8 %x , ptr %dst ) #0 {
157
+ ; CHECK-LABEL: define void @truncate_to_i1_used_by_branch(
158
+ ; CHECK-SAME: i8 [[X:%.*]], ptr [[DST:%.*]]) #[[ATTR1:[0-9]+]] {
159
+ ; CHECK-NEXT: [[ENTRY:.*]]:
160
+ ; CHECK-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]]
161
+ ; CHECK: [[VECTOR_PH]]:
162
+ ; CHECK-NEXT: [[BROADCAST_SPLATINSERT:%.*]] = insertelement <2 x i8> poison, i8 [[X]], i64 0
163
+ ; CHECK-NEXT: [[BROADCAST_SPLAT:%.*]] = shufflevector <2 x i8> [[BROADCAST_SPLATINSERT]], <2 x i8> poison, <2 x i32> zeroinitializer
164
+ ; CHECK-NEXT: [[TMP0:%.*]] = trunc <2 x i8> [[BROADCAST_SPLAT]] to <2 x i1>
165
+ ; CHECK-NEXT: [[BROADCAST_SPLATINSERT3:%.*]] = insertelement <2 x ptr> poison, ptr [[DST]], i64 0
166
+ ; CHECK-NEXT: [[BROADCAST_SPLAT4:%.*]] = shufflevector <2 x ptr> [[BROADCAST_SPLATINSERT3]], <2 x ptr> poison, <2 x i32> zeroinitializer
167
+ ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
168
+ ; CHECK: [[VECTOR_BODY]]:
169
+ ; CHECK-NEXT: [[INDEX:%.*]] = phi i32 [ 0, %[[VECTOR_PH]] ], [ [[INDEX_NEXT:%.*]], %[[VECTOR_BODY]] ]
170
+ ; CHECK-NEXT: [[BROADCAST_SPLATINSERT1:%.*]] = insertelement <2 x i32> poison, i32 [[INDEX]], i64 0
171
+ ; CHECK-NEXT: [[BROADCAST_SPLAT2:%.*]] = shufflevector <2 x i32> [[BROADCAST_SPLATINSERT1]], <2 x i32> poison, <2 x i32> zeroinitializer
172
+ ; CHECK-NEXT: [[VEC_IV:%.*]] = add <2 x i32> [[BROADCAST_SPLAT2]], <i32 0, i32 1>
173
+ ; CHECK-NEXT: [[TMP1:%.*]] = extractelement <2 x i32> [[VEC_IV]], i32 0
174
+ ; CHECK-NEXT: [[ACTIVE_LANE_MASK:%.*]] = call <2 x i1> @llvm.get.active.lane.mask.v2i1.i32(i32 [[TMP1]], i32 2)
175
+ ; CHECK-NEXT: [[TMP2:%.*]] = or <2 x i1> <i1 true, i1 true>, [[TMP0]]
176
+ ; CHECK-NEXT: [[TMP3:%.*]] = select <2 x i1> [[ACTIVE_LANE_MASK]], <2 x i1> [[TMP2]], <2 x i1> zeroinitializer
177
+ ; CHECK-NEXT: call void @llvm.masked.scatter.v2i8.v2p0(<2 x i8> zeroinitializer, <2 x ptr> [[BROADCAST_SPLAT4]], i32 1, <2 x i1> [[TMP3]])
178
+ ; CHECK-NEXT: [[INDEX_NEXT]] = add i32 [[INDEX]], 2
179
+ ; CHECK-NEXT: br i1 true, label %[[MIDDLE_BLOCK:.*]], label %[[VECTOR_BODY]], !llvm.loop [[LOOP6:![0-9]+]]
180
+ ; CHECK: [[MIDDLE_BLOCK]]:
181
+ ; CHECK-NEXT: br i1 true, label %[[EXIT:.*]], label %[[SCALAR_PH]]
182
+ ; CHECK: [[SCALAR_PH]]:
183
+ ; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i8 [ 2, %[[MIDDLE_BLOCK]] ], [ 0, %[[ENTRY]] ]
184
+ ; CHECK-NEXT: br label %[[LOOP_HEADER:.*]]
185
+ ; CHECK: [[LOOP_HEADER]]:
186
+ ; CHECK-NEXT: [[F_039:%.*]] = phi i8 [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[ADD:%.*]], %[[LOOP_LATCH:.*]] ]
187
+ ; CHECK-NEXT: [[TMP4:%.*]] = or i8 23, [[X]]
188
+ ; CHECK-NEXT: [[EXTRACT_T:%.*]] = trunc i8 [[TMP4]] to i1
189
+ ; CHECK-NEXT: br i1 [[EXTRACT_T]], label %[[THEN:.*]], label %[[LOOP_LATCH]]
190
+ ; CHECK: [[THEN]]:
191
+ ; CHECK-NEXT: store i8 0, ptr [[DST]], align 1
192
+ ; CHECK-NEXT: br label %[[LOOP_LATCH]]
193
+ ; CHECK: [[LOOP_LATCH]]:
194
+ ; CHECK-NEXT: [[ADD]] = add i8 [[F_039]], 1
195
+ ; CHECK-NEXT: [[CONV:%.*]] = sext i8 [[F_039]] to i32
196
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[CONV]], 1
197
+ ; CHECK-NEXT: br i1 [[CMP]], label %[[LOOP_HEADER]], label %[[EXIT]], !llvm.loop [[LOOP7:![0-9]+]]
198
+ ; CHECK: [[EXIT]]:
199
+ ; CHECK-NEXT: ret void
200
+ ;
201
+ entry:
202
+ br label %loop.header
203
+
204
+ loop.header:
205
+ %f.039 = phi i8 [ 0 , %entry ], [ %add , %loop.latch ]
206
+ %0 = or i8 23 , %x
207
+ %extract.t = trunc i8 %0 to i1
208
+ br i1 %extract.t , label %then , label %loop.latch
209
+
210
+ then:
211
+ store i8 0 , ptr %dst , align 1
212
+ br label %loop.latch
213
+
214
+ loop.latch:
215
+ %add = add i8 %f.039 , 1
216
+ %conv = sext i8 %f.039 to i32
217
+ %cmp = icmp slt i32 %conv , 1
218
+ br i1 %cmp , label %loop.header , label %exit
219
+
220
+ exit:
221
+ ret void
222
+ }
223
+
224
+ attributes #0 = { "target-features" ="+64bit,+v,+zvl256b" }
225
+
155
226
;.
156
227
; CHECK: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]], [[META2:![0-9]+]]}
157
228
; CHECK: [[META1]] = !{!"llvm.loop.isvectorized", i32 1}
158
229
; CHECK: [[META2]] = !{!"llvm.loop.unroll.runtime.disable"}
159
230
; CHECK: [[LOOP3]] = distinct !{[[LOOP3]], [[META2]], [[META1]]}
160
231
; CHECK: [[LOOP4]] = distinct !{[[LOOP4]], [[META1]], [[META2]]}
161
232
; CHECK: [[LOOP5]] = distinct !{[[LOOP5]], [[META2]], [[META1]]}
233
+ ; CHECK: [[LOOP6]] = distinct !{[[LOOP6]], [[META1]], [[META2]]}
234
+ ; CHECK: [[LOOP7]] = distinct !{[[LOOP7]], [[META2]], [[META1]]}
162
235
;.
0 commit comments