@@ -261,3 +261,55 @@ loop.latch: ; preds = %cond.false, %loop.h
261261exit: ; preds = %loop.latch
262262 ret void
263263}
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