1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2 < %s | FileCheck %s
3 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme < %s | FileCheck %s
9 define <vscale x 16 x i1> @whilerw_i8(ptr %a, ptr %b) {
10 ; CHECK-LABEL: whilerw_i8:
12 ; CHECK-NEXT: whilerw p0.b, x0, x1
14 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilerw.b.nx16i1(ptr %a, ptr %b)
15 ret <vscale x 16 x i1> %out
18 define <vscale x 8 x i1> @whilerw_i16(ptr %a, ptr %b) {
19 ; CHECK-LABEL: whilerw_i16:
21 ; CHECK-NEXT: whilerw p0.h, x0, x1
23 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilerw.h.nx8i1(ptr %a, ptr %b)
24 ret <vscale x 8 x i1> %out
27 define <vscale x 4 x i1> @whilerw_i32(ptr %a, ptr %b) {
28 ; CHECK-LABEL: whilerw_i32:
30 ; CHECK-NEXT: whilerw p0.s, x0, x1
32 %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilerw.s.nx4i1(ptr %a, ptr %b)
33 ret <vscale x 4 x i1> %out
36 define <vscale x 2 x i1> @whilerw_i64(ptr %a, ptr %b) {
37 ; CHECK-LABEL: whilerw_i64:
39 ; CHECK-NEXT: whilerw p0.d, x0, x1
41 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilerw.d.nx2i1(ptr %a, ptr %b)
42 ret <vscale x 2 x i1> %out
45 define <vscale x 8 x i1> @whilerw_bfloat(ptr %a, ptr %b) {
46 ; CHECK-LABEL: whilerw_bfloat:
48 ; CHECK-NEXT: whilerw p0.h, x0, x1
50 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilerw.h.nx8i1.bf16.bf16(ptr %a, ptr %b)
51 ret <vscale x 8 x i1> %out
54 define <vscale x 8 x i1> @whilerw_half(ptr %a, ptr %b) {
55 ; CHECK-LABEL: whilerw_half:
57 ; CHECK-NEXT: whilerw p0.h, x0, x1
59 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilerw.h.nx8i1.f16.f16(ptr %a, ptr %b)
60 ret <vscale x 8 x i1> %out
63 define <vscale x 4 x i1> @whilerw_float(ptr %a, ptr %b) {
64 ; CHECK-LABEL: whilerw_float:
66 ; CHECK-NEXT: whilerw p0.s, x0, x1
68 %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilerw.s.nx4i1.f32.f32(ptr %a, ptr %b)
69 ret <vscale x 4 x i1> %out
72 define <vscale x 2 x i1> @whilerw_double(ptr %a, ptr %b) {
73 ; CHECK-LABEL: whilerw_double:
75 ; CHECK-NEXT: whilerw p0.d, x0, x1
77 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilerw.d.nx2i1.f64.f64(ptr %a, ptr %b)
78 ret <vscale x 2 x i1> %out
85 define <vscale x 16 x i1> @whilewr_i8(ptr %a, ptr %b) {
86 ; CHECK-LABEL: whilewr_i8:
88 ; CHECK-NEXT: whilewr p0.b, x0, x1
90 %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilewr.b.nx16i1(ptr %a, ptr %b)
91 ret <vscale x 16 x i1> %out
94 define <vscale x 8 x i1> @whilewr_i16(ptr %a, ptr %b) {
95 ; CHECK-LABEL: whilewr_i16:
97 ; CHECK-NEXT: whilewr p0.h, x0, x1
99 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilewr.h.nx8i1(ptr %a, ptr %b)
100 ret <vscale x 8 x i1> %out
103 define <vscale x 4 x i1> @whilewr_i32(ptr %a, ptr %b) {
104 ; CHECK-LABEL: whilewr_i32:
106 ; CHECK-NEXT: whilewr p0.s, x0, x1
108 %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilewr.s.nx4i1(ptr %a, ptr %b)
109 ret <vscale x 4 x i1> %out
112 define <vscale x 2 x i1> @whilewr_i64(ptr %a, ptr %b) {
113 ; CHECK-LABEL: whilewr_i64:
115 ; CHECK-NEXT: whilewr p0.d, x0, x1
117 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilewr.d.nx2i1(ptr %a, ptr %b)
118 ret <vscale x 2 x i1> %out
121 define <vscale x 8 x i1> @whilewr_bfloat(ptr %a, ptr %b) {
122 ; CHECK-LABEL: whilewr_bfloat:
124 ; CHECK-NEXT: whilewr p0.h, x0, x1
126 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilewr.h.nx8i1.bf16.bf16(ptr %a, ptr %b)
127 ret <vscale x 8 x i1> %out
130 define <vscale x 8 x i1> @whilewr_half(ptr %a, ptr %b) {
131 ; CHECK-LABEL: whilewr_half:
133 ; CHECK-NEXT: whilewr p0.h, x0, x1
135 %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilewr.h.nx8i1.f16.f16(ptr %a, ptr %b)
136 ret <vscale x 8 x i1> %out
139 define <vscale x 4 x i1> @whilewr_float(ptr %a, ptr %b) {
140 ; CHECK-LABEL: whilewr_float:
142 ; CHECK-NEXT: whilewr p0.s, x0, x1
144 %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilewr.s.nx4i1.f32.f32(ptr %a, ptr %b)
145 ret <vscale x 4 x i1> %out
148 define <vscale x 2 x i1> @whilewr_double(ptr %a, ptr %b) {
149 ; CHECK-LABEL: whilewr_double:
151 ; CHECK-NEXT: whilewr p0.d, x0, x1
153 %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilewr.d.nx2i1.f64.f64(ptr %a, ptr %b)
154 ret <vscale x 2 x i1> %out
157 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilerw.b.nx16i1(ptr %a, ptr %b)
158 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilerw.h.nx8i1(ptr %a, ptr %b)
159 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilerw.s.nx4i1(ptr %a, ptr %b)
160 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilerw.d.nx2i1(ptr %a, ptr %b)
162 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilerw.h.nx8i1.bf16.bf16(ptr %a, ptr %b)
163 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilerw.h.nx8i1.f16.f16(ptr %a, ptr %b)
164 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilerw.s.nx4i1.f32.f32(ptr %a, ptr %b)
165 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilerw.d.nx2i1.f64.f64(ptr %a, ptr %b)
167 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilewr.b.nx16i1(ptr %a, ptr %b)
168 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilewr.h.nx8i1(ptr %a, ptr %b)
169 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilewr.s.nx4i1(ptr %a, ptr %b)
170 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilewr.d.nx2i1(ptr %a, ptr %b)
172 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilewr.h.nx8i1.bf16.bf16(ptr %a, ptr %b)
173 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilewr.h.nx8i1.f16.f16(ptr %a, ptr %b)
174 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilewr.s.nx4i1.f32.f32(ptr %a, ptr %b)
175 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilewr.d.nx2i1.f64.f64(ptr %a, ptr %b)