Skip to content

Commit 39b825e

Browse files
committed
[LV] Add test for miscompile with conditional store.
Add test case for #149347.
1 parent e2b4ba0 commit 39b825e

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

llvm/test/Transforms/LoopVectorize/predicatedinst-loop-invariant.ll

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,3 +261,55 @@ loop.latch: ; preds = %cond.false, %loop.h
261261
exit: ; 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

Comments
 (0)