1111; invariant %0
1212
1313@string = internal unnamed_addr constant [5 x i8 ] c "abcd\00 " , align 1
14+
1415define 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
2324L.entry:
2425 %0 = load i128 , ptr %z , align 16
@@ -39,3 +40,31 @@ loopbody: ;preds = %L.entry, %loopbody
3940return: ;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