Skip to content

Commit 716f76d

Browse files
Add tests.
1 parent 8eb28ca commit 716f76d

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
2+
; RUN: opt -S -passes=licm < %s | FileCheck %s
3+
4+
target triple = "aarch64-unknown-linux-gnu"
5+
6+
define i64 @sve_uaddv(<vscale x 4 x i32> %inv, i1 %c) {
7+
; CHECK-LABEL: define i64 @sve_uaddv(
8+
; CHECK-SAME: <vscale x 4 x i32> [[INV:%.*]], i1 [[C:%.*]]) {
9+
; CHECK-NEXT: [[ENTRY:.*]]:
10+
; CHECK-NEXT: br label %[[LOOP:.*]]
11+
; CHECK: [[LOOP]]:
12+
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[COND_TRUE:.*]] ]
13+
; CHECK-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1
14+
; CHECK-NEXT: br i1 [[C]], label %[[COND_TRUE]], label %[[EXIT:.*]]
15+
; CHECK: [[COND_TRUE]]:
16+
; CHECK-NEXT: [[UADDV:%.*]] = call i64 @llvm.aarch64.sve.uaddv.nxv4i32(<vscale x 4 x i1> splat (i1 true), <vscale x 4 x i32> [[INV]])
17+
; CHECK-NEXT: [[BACKEDGE_COND:%.*]] = icmp ult i64 [[IV]], [[UADDV]]
18+
; CHECK-NEXT: br i1 [[BACKEDGE_COND]], label %[[LOOP]], label %[[EXIT]]
19+
; CHECK: [[EXIT]]:
20+
; CHECK-NEXT: [[IV_LCSSA:%.*]] = phi i64 [ [[IV]], %[[COND_TRUE]] ], [ [[IV]], %[[LOOP]] ]
21+
; CHECK-NEXT: ret i64 [[IV_LCSSA]]
22+
;
23+
entry:
24+
br label %loop
25+
26+
loop:
27+
%iv = phi i64 [ 0, %entry ], [ %iv.next, %cond.true ]
28+
%iv.next = add i64 %iv, 1
29+
br i1 %c, label %cond.true, label %exit
30+
31+
cond.true:
32+
%uaddv = call i64 @llvm.aarch64.sve.uaddv.nxv4i32(<vscale x 4 x i1> splat (i1 true), <vscale x 4 x i32> %inv)
33+
%backedge.cond = icmp ult i64 %iv, %uaddv
34+
br i1 %backedge.cond, label %loop, label %exit
35+
36+
exit:
37+
ret i64 %iv
38+
}
39+
40+
define i64 @sve_faddv(<vscale x 4 x float> %inv, i1 %c) {
41+
; CHECK-LABEL: define i64 @sve_faddv(
42+
; CHECK-SAME: <vscale x 4 x float> [[INV:%.*]], i1 [[C:%.*]]) {
43+
; CHECK-NEXT: [[ENTRY:.*]]:
44+
; CHECK-NEXT: br label %[[LOOP:.*]]
45+
; CHECK: [[LOOP]]:
46+
; CHECK-NEXT: [[IV:%.*]] = phi i64 [ 0, %[[ENTRY]] ], [ [[IV_NEXT:%.*]], %[[COND_TRUE:.*]] ]
47+
; CHECK-NEXT: [[IV_NEXT]] = add i64 [[IV]], 1
48+
; CHECK-NEXT: br i1 [[C]], label %[[COND_TRUE]], label %[[EXIT:.*]]
49+
; CHECK: [[COND_TRUE]]:
50+
; CHECK-NEXT: [[FADDV:%.*]] = call float @llvm.aarch64.sve.faddv.nxv4f32(<vscale x 4 x i1> splat (i1 true), <vscale x 4 x float> [[INV]])
51+
; CHECK-NEXT: [[IV_AS_FLOAT:%.*]] = sitofp i64 [[IV]] to float
52+
; CHECK-NEXT: [[BACKEDGE_COND:%.*]] = fcmp olt float [[IV_AS_FLOAT]], [[FADDV]]
53+
; CHECK-NEXT: br i1 [[BACKEDGE_COND]], label %[[LOOP]], label %[[EXIT]]
54+
; CHECK: [[EXIT]]:
55+
; CHECK-NEXT: [[IV_LCSSA:%.*]] = phi i64 [ [[IV]], %[[COND_TRUE]] ], [ [[IV]], %[[LOOP]] ]
56+
; CHECK-NEXT: ret i64 [[IV_LCSSA]]
57+
;
58+
entry:
59+
br label %loop
60+
61+
loop:
62+
%iv = phi i64 [ 0, %entry ], [ %iv.next, %cond.true ]
63+
%iv.next = add i64 %iv, 1
64+
br i1 %c, label %cond.true, label %exit
65+
66+
cond.true:
67+
%faddv = call float @llvm.aarch64.sve.faddv.nxv4i32(<vscale x 4 x i1> splat (i1 true), <vscale x 4 x float> %inv)
68+
%iv.as.float = sitofp i64 %iv to float
69+
%backedge.cond = fcmp olt float %iv.as.float, %faddv
70+
br i1 %backedge.cond, label %loop, label %exit
71+
72+
exit:
73+
ret i64 %iv
74+
}

0 commit comments

Comments
 (0)