11
11
; invariant %0
12
12
13
13
@string = internal unnamed_addr constant [5 x i8 ] c "abcd\00 " , align 1
14
+
14
15
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'
16
17
; CHECK: LV(REG): VF = vscale x 16
17
18
; CHECK-NEXT: LV(REG): Found max usage: 1 item
18
19
; CHECK-NEXT: LV(REG): RegisterClass: Generic::ScalarRC, 3 registers
19
20
; CHECK-NEXT: LV(REG): Found invariant usage: 2 item
20
21
; 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
22
23
23
24
L.entry:
24
25
%0 = load i128 , ptr %z , align 16
@@ -39,3 +40,31 @@ loopbody: ;preds = %L.entry, %loopbody
39
40
return: ;preds = %loopexit, %L.entry
40
41
ret void
41
42
}
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