Skip to content

Commit 3c554de

Browse files
committed
[LV] Add reg-usage test with values only used by llvm.assume.
Add test checking we are not counting registers that are only used by ephemeral users, like llvm.assume.
1 parent 3adf2b0 commit 3c554de

File tree

1 file changed

+31
-2
lines changed

1 file changed

+31
-2
lines changed

llvm/test/Transforms/LoopVectorize/AArch64/reg-usage.ll

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@
1111
; invariant %0
1212

1313
@string = internal unnamed_addr constant [5 x i8] c"abcd\00", align 1
14+
1415
define void @get_invariant_reg_usage(ptr %z) {
15-
; CHECK: LV: Checking a loop in 'get_invariant_reg_usage'
16+
; CHECK-LABEL: LV: Checking a loop in 'get_invariant_reg_usage'
1617
; CHECK: LV(REG): VF = vscale x 16
1718
; CHECK-NEXT: LV(REG): Found max usage: 1 item
1819
; CHECK-NEXT: LV(REG): RegisterClass: Generic::ScalarRC, 3 registers
1920
; CHECK-NEXT: LV(REG): Found invariant usage: 2 item
2021
; CHECK-NEXT: LV(REG): RegisterClass: Generic::ScalarRC, 2 registers
21-
; CHECK-NEXT: LV(REG): RegisterClass: Generic::VectorRC, 8 registers
22+
; CHECK-NEXT: LV(REG): RegisterClass: Generic::VectorRC, 8 registers
2223

2324
L.entry:
2425
%0 = load i128, ptr %z, align 16
@@ -39,3 +40,31 @@ loopbody: ;preds = %L.entry, %loopbody
3940
return: ;preds = %loopexit, %L.entry
4041
ret void
4142
}
43+
44+
define void @load_and_compare_only_used_by_assume(ptr %a, ptr noalias %b) {
45+
; CHECK-LABEL: LV: Checking a loop in 'load_and_compare_only_used_by_assume'
46+
; CHECK: LV(REG): VF = vscale x 4
47+
; CHECK-NEXT: LV(REG): Found max usage: 2 item
48+
; CHECK-NEXT: LV(REG): RegisterClass: Generic::ScalarRC, 2 registers
49+
; CHECK-NEXT: LV(REG): RegisterClass: Generic::VectorRC, 1 registers
50+
; CHECK-NEXT: LV(REG): Found invariant usage: 0 item
51+
52+
entry:
53+
br label %loop
54+
55+
loop:
56+
%iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
57+
%gep.a = getelementptr inbounds i32, ptr %a, i64 %iv
58+
%l.a = load i32, ptr %gep.a
59+
%gep.b = getelementptr inbounds i32, ptr %b, i64 %iv
60+
%l.b = load i32, ptr %gep.b
61+
%c = icmp ugt i32 %l.b, 10
62+
call void @llvm.assume(i1 %c)
63+
store i32 %l.a, ptr %gep.b
64+
%iv.next = add i64 %iv, 1
65+
%ec = icmp eq i64 %iv.next, 1000
66+
br i1 %ec, label %exit, label %loop
67+
68+
exit:
69+
ret void
70+
}

0 commit comments

Comments
 (0)