@@ -261,3 +261,55 @@ loop.latch: ; preds = %cond.false, %loop.h
261
261
exit: ; preds = %loop.latch
262
262
ret void
263
263
}
264
+
265
+ ; Test case for https://github.com/llvm/llvm-project/issues/149347.
266
+ ; FIXME: Currently mis-compiles.
267
+ define void @test_store_to_invariant_address_needs_mask_due_to_low_trip_count (ptr %dst ) {
268
+ ; CHECK-LABEL: define void @test_store_to_invariant_address_needs_mask_due_to_low_trip_count(
269
+ ; CHECK-SAME: ptr [[DST:%.*]]) {
270
+ ; CHECK-NEXT: [[ENTRY:.*]]:
271
+ ; CHECK-NEXT: br i1 false, label %[[SCALAR_PH:.*]], label %[[VECTOR_PH:.*]]
272
+ ; CHECK: [[VECTOR_PH]]:
273
+ ; CHECK-NEXT: br label %[[VECTOR_BODY:.*]]
274
+ ; CHECK: [[VECTOR_BODY]]:
275
+ ; CHECK-NEXT: store i32 0, ptr [[DST]], align 4
276
+ ; CHECK-NEXT: br label %[[MIDDLE_BLOCK:.*]]
277
+ ; CHECK: [[MIDDLE_BLOCK]]:
278
+ ; CHECK-NEXT: br label %[[EXIT:.*]]
279
+ ; CHECK: [[SCALAR_PH]]:
280
+ ; CHECK-NEXT: [[BC_RESUME_VAL:%.*]] = phi i16 [ 0, %[[ENTRY]] ]
281
+ ; CHECK-NEXT: br label %[[LOOP_HEADER:.*]]
282
+ ; CHECK: [[LOOP_HEADER]]:
283
+ ; CHECK-NEXT: [[IV:%.*]] = phi i16 [ [[BC_RESUME_VAL]], %[[SCALAR_PH]] ], [ [[IV_NEXT:%.*]], %[[LOOP_LATCH:.*]] ]
284
+ ; CHECK-NEXT: br i1 true, label %[[LOOP_LATCH]], label %[[ELSE:.*]]
285
+ ; CHECK: [[ELSE]]:
286
+ ; CHECK-NEXT: br label %[[LOOP_LATCH]]
287
+ ; CHECK: [[LOOP_LATCH]]:
288
+ ; CHECK-NEXT: [[MERGE:%.*]] = phi i32 [ 1, %[[LOOP_HEADER]] ], [ 0, %[[ELSE]] ]
289
+ ; CHECK-NEXT: store i32 [[MERGE]], ptr [[DST]], align 4
290
+ ; CHECK-NEXT: [[IV_NEXT]] = add i16 [[IV]], 1
291
+ ; CHECK-NEXT: [[EC:%.*]] = icmp eq i16 [[IV_NEXT]], 3
292
+ ; CHECK-NEXT: br i1 [[EC]], label %[[EXIT]], label %[[LOOP_HEADER]], !llvm.loop [[LOOP8:![0-9]+]]
293
+ ; CHECK: [[EXIT]]:
294
+ ; CHECK-NEXT: ret void
295
+ ;
296
+ entry:
297
+ br label %loop.header
298
+
299
+ loop.header:
300
+ %iv = phi i16 [ 0 , %entry ], [ %iv.next , %loop.latch ]
301
+ br i1 true , label %loop.latch , label %else
302
+
303
+ else:
304
+ br label %loop.latch
305
+
306
+ loop.latch:
307
+ %merge = phi i32 [ 1 , %loop.header ], [ 0 , %else ]
308
+ store i32 %merge , ptr %dst , align 4
309
+ %iv.next = add i16 %iv , 1
310
+ %ec = icmp eq i16 %iv.next , 3
311
+ br i1 %ec , label %exit , label %loop.header
312
+
313
+ exit:
314
+ ret void
315
+ }
0 commit comments