[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve2-intrinsics-contiguous-conflict-detection.ll
blob0799989308d463032ecf01d1798d9be7c57874dd
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
6 ; WHILERW
9 define <vscale x 16 x i1> @whilerw_i8(ptr %a, ptr %b) {
10 ; CHECK-LABEL: whilerw_i8:
11 ; CHECK:       // %bb.0:
12 ; CHECK-NEXT:    whilerw p0.b, x0, x1
13 ; CHECK-NEXT:    ret
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:
20 ; CHECK:       // %bb.0:
21 ; CHECK-NEXT:    whilerw p0.h, x0, x1
22 ; CHECK-NEXT:    ret
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:
29 ; CHECK:       // %bb.0:
30 ; CHECK-NEXT:    whilerw p0.s, x0, x1
31 ; CHECK-NEXT:    ret
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:
38 ; CHECK:       // %bb.0:
39 ; CHECK-NEXT:    whilerw p0.d, x0, x1
40 ; CHECK-NEXT:    ret
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:
47 ; CHECK:       // %bb.0:
48 ; CHECK-NEXT:    whilerw p0.h, x0, x1
49 ; CHECK-NEXT:    ret
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:
56 ; CHECK:       // %bb.0:
57 ; CHECK-NEXT:    whilerw p0.h, x0, x1
58 ; CHECK-NEXT:    ret
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:
65 ; CHECK:       // %bb.0:
66 ; CHECK-NEXT:    whilerw p0.s, x0, x1
67 ; CHECK-NEXT:    ret
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:
74 ; CHECK:       // %bb.0:
75 ; CHECK-NEXT:    whilerw p0.d, x0, x1
76 ; CHECK-NEXT:    ret
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
82 ; WHILEWR
85 define <vscale x 16 x i1> @whilewr_i8(ptr %a, ptr %b) {
86 ; CHECK-LABEL: whilewr_i8:
87 ; CHECK:       // %bb.0:
88 ; CHECK-NEXT:    whilewr p0.b, x0, x1
89 ; CHECK-NEXT:    ret
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:
96 ; CHECK:       // %bb.0:
97 ; CHECK-NEXT:    whilewr p0.h, x0, x1
98 ; CHECK-NEXT:    ret
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:
105 ; CHECK:       // %bb.0:
106 ; CHECK-NEXT:    whilewr p0.s, x0, x1
107 ; CHECK-NEXT:    ret
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:
114 ; CHECK:       // %bb.0:
115 ; CHECK-NEXT:    whilewr p0.d, x0, x1
116 ; CHECK-NEXT:    ret
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:
123 ; CHECK:       // %bb.0:
124 ; CHECK-NEXT:    whilewr p0.h, x0, x1
125 ; CHECK-NEXT:    ret
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:
132 ; CHECK:       // %bb.0:
133 ; CHECK-NEXT:    whilewr p0.h, x0, x1
134 ; CHECK-NEXT:    ret
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:
141 ; CHECK:       // %bb.0:
142 ; CHECK-NEXT:    whilewr p0.s, x0, x1
143 ; CHECK-NEXT:    ret
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:
150 ; CHECK:       // %bb.0:
151 ; CHECK-NEXT:    whilewr p0.d, x0, x1
152 ; CHECK-NEXT:    ret
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)