[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve2-intrinsics-contiguous-conflict-detection.ll
blob67c9637b5c4269c4cd2973bf94dbe9d2044586b5
1 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2 -asm-verbose=0 < %s | FileCheck %s
4 ; WHILERW
7 define <vscale x 16 x i1> @whilerw_i8(i8* %a, i8* %b) {
8 ; CHECK-LABEL: whilerw_i8:
9 ; CHECK: whilerw  p0.b, x0, x1
10 ; CHECK-NEXT: ret
11   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilerw.b.nx16i1(i8* %a, i8* %b)
12   ret <vscale x 16 x i1> %out
15 define <vscale x 8 x i1> @whilerw_i16(i16* %a, i16* %b) {
16 ; CHECK-LABEL: whilerw_i16:
17 ; CHECK: whilerw  p0.h, x0, x1
18 ; CHECK-NEXT: ret
19   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilerw.h.nx8i1(i16* %a, i16* %b)
20   ret <vscale x 8 x i1> %out
23 define <vscale x 4 x i1> @whilerw_i32(i32* %a, i32* %b) {
24 ; CHECK-LABEL: whilerw_i32:
25 ; CHECK: whilerw  p0.s, x0, x1
26 ; CHECK-NEXT: ret
27   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilerw.s.nx4i1(i32* %a, i32* %b)
28   ret <vscale x 4 x i1> %out
31 define <vscale x 2 x i1> @whilerw_i64(i64* %a, i64* %b) {
32 ; CHECK-LABEL: whilerw_i64:
33 ; CHECK: whilerw  p0.d, x0, x1
34 ; CHECK-NEXT: ret
35   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilerw.d.nx2i1(i64* %a, i64* %b)
36   ret <vscale x 2 x i1> %out
39 define <vscale x 8 x i1> @whilerw_bfloat(bfloat* %a, bfloat* %b) {
40 ; CHECK-LABEL: whilerw_bfloat:
41 ; CHECK: whilerw  p0.h, x0, x1
42 ; CHECK-NEXT: ret
43   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilerw.h.nx8i1.bf16.bf16(bfloat* %a, bfloat* %b)
44   ret <vscale x 8 x i1> %out
47 define <vscale x 8 x i1> @whilerw_half(half* %a, half* %b) {
48 ; CHECK-LABEL: whilerw_half:
49 ; CHECK: whilerw  p0.h, x0, x1
50 ; CHECK-NEXT: ret
51   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilerw.h.nx8i1.f16.f16(half* %a, half* %b)
52   ret <vscale x 8 x i1> %out
55 define <vscale x 4 x i1> @whilerw_float(float* %a, float* %b) {
56 ; CHECK-LABEL: whilerw_float:
57 ; CHECK: whilerw  p0.s, x0, x1
58 ; CHECK-NEXT: ret
59   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilerw.s.nx4i1.f32.f32(float* %a, float* %b)
60   ret <vscale x 4 x i1> %out
63 define <vscale x 2 x i1> @whilerw_double(double* %a, double* %b) {
64 ; CHECK-LABEL: whilerw_double:
65 ; CHECK: whilerw  p0.d, x0, x1
66 ; CHECK-NEXT: ret
67   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilerw.d.nx2i1.f64.f64(double* %a, double* %b)
68   ret <vscale x 2 x i1> %out
72 ; WHILEWR
75 define <vscale x 16 x i1> @whilewr_i8(i8* %a, i8* %b) {
76 ; CHECK-LABEL: whilewr_i8:
77 ; CHECK: whilewr  p0.b, x0, x1
78 ; CHECK-NEXT: ret
79   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilewr.b.nx16i1(i8* %a, i8* %b)
80   ret <vscale x 16 x i1> %out
83 define <vscale x 8 x i1> @whilewr_i16(i16* %a, i16* %b) {
84 ; CHECK-LABEL: whilewr_i16:
85 ; CHECK: whilewr  p0.h, x0, x1
86 ; CHECK-NEXT: ret
87   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilewr.h.nx8i1(i16* %a, i16* %b)
88   ret <vscale x 8 x i1> %out
91 define <vscale x 4 x i1> @whilewr_i32(i32* %a, i32* %b) {
92 ; CHECK-LABEL: whilewr_i32:
93 ; CHECK: whilewr  p0.s, x0, x1
94 ; CHECK-NEXT: ret
95   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilewr.s.nx4i1(i32* %a, i32* %b)
96   ret <vscale x 4 x i1> %out
99 define <vscale x 2 x i1> @whilewr_i64(i64* %a, i64* %b) {
100 ; CHECK-LABEL: whilewr_i64:
101 ; CHECK: whilewr  p0.d, x0, x1
102 ; CHECK-NEXT: ret
103   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilewr.d.nx2i1(i64* %a, i64* %b)
104   ret <vscale x 2 x i1> %out
107 define <vscale x 8 x i1> @whilewr_bfloat(bfloat* %a, bfloat* %b) {
108 ; CHECK-LABEL: whilewr_bfloat:
109 ; CHECK: whilewr  p0.h, x0, x1
110 ; CHECK-NEXT: ret
111   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilewr.h.nx8i1.bf16.bf16(bfloat* %a, bfloat* %b)
112   ret <vscale x 8 x i1> %out
115 define <vscale x 8 x i1> @whilewr_half(half* %a, half* %b) {
116 ; CHECK-LABEL: whilewr_half:
117 ; CHECK: whilewr  p0.h, x0, x1
118 ; CHECK-NEXT: ret
119   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilewr.h.nx8i1.f16.f16(half* %a, half* %b)
120   ret <vscale x 8 x i1> %out
123 define <vscale x 4 x i1> @whilewr_float(float* %a, float* %b) {
124 ; CHECK-LABEL: whilewr_float:
125 ; CHECK: whilewr  p0.s, x0, x1
126 ; CHECK-NEXT: ret
127   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilewr.s.nx4i1.f32.f32(float* %a, float* %b)
128   ret <vscale x 4 x i1> %out
131 define <vscale x 2 x i1> @whilewr_double(double* %a, double* %b) {
132 ; CHECK-LABEL: whilewr_double:
133 ; CHECK: whilewr  p0.d, x0, x1
134 ; CHECK-NEXT: ret
135   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilewr.d.nx2i1.f64.f64(double* %a, double* %b)
136   ret <vscale x 2 x i1> %out
139 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilerw.b.nx16i1(i8* %a, i8* %b)
140 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilerw.h.nx8i1(i16* %a, i16* %b)
141 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilerw.s.nx4i1(i32* %a, i32* %b)
142 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilerw.d.nx2i1(i64* %a, i64* %b)
144 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilerw.h.nx8i1.bf16.bf16(bfloat* %a, bfloat* %b)
145 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilerw.h.nx8i1.f16.f16(half* %a, half* %b)
146 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilerw.s.nx4i1.f32.f32(float* %a, float* %b)
147 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilerw.d.nx2i1.f64.f64(double* %a, double* %b)
149 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilewr.b.nx16i1(i8* %a, i8* %b)
150 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilewr.h.nx8i1(i16* %a, i16* %b)
151 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilewr.s.nx4i1(i32* %a, i32* %b)
152 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilewr.d.nx2i1(i64* %a, i64* %b)
154 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilewr.h.nx8i1.bf16.bf16(bfloat* %a, bfloat* %b)
155 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilewr.h.nx8i1.f16.f16(half* %a, half* %b)
156 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilewr.s.nx4i1.f32.f32(float* %a, float* %b)
157 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilewr.d.nx2i1.f64.f64(double* %a, double* %b)