[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve2-intrinsics-bit-permutation.ll
blob13ca4b8967e3977f098e042cf7281f30f179a18a
1 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2,+sve2-bitperm < %s | FileCheck %s
4 ; BDEP
7 define <vscale x 16 x i8> @bdep_nxv16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
8 ; CHECK-LABEL: bdep_nxv16i8:
9 ; CHECK: bdep z0.b, z0.b, z1.b
10 ; CHECK-NEXT: ret
11   %out = call <vscale x 16 x i8> @llvm.aarch64.sve.bdep.x.nx16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b)
12   ret <vscale x 16 x i8> %out
15 define <vscale x 8 x i16> @bdep_nxv8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
16 ; CHECK-LABEL: bdep_nxv8i16:
17 ; CHECK: bdep z0.h, z0.h, z1.h
18 ; CHECK-NEXT: ret
19   %out = call <vscale x 8 x i16> @llvm.aarch64.sve.bdep.x.nx8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b)
20   ret <vscale x 8 x i16> %out
23 define <vscale x 4 x i32> @bdep_nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
24 ; CHECK-LABEL: bdep_nxv4i32:
25 ; CHECK: bdep z0.s, z0.s, z1.s
26 ; CHECK-NEXT: ret
27   %out = call <vscale x 4 x i32> @llvm.aarch64.sve.bdep.x.nx4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b)
28   ret <vscale x 4 x i32> %out
31 define <vscale x 2 x i64> @bdep_nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
32 ; CHECK-LABEL: bdep_nxv2i64:
33 ; CHECK: bdep z0.d, z0.d, z1.d
34 ; CHECK-NEXT: ret
35   %out = call <vscale x 2 x i64> @llvm.aarch64.sve.bdep.x.nx2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b)
36   ret <vscale x 2 x i64> %out
40 ; BEXT
43 define <vscale x 16 x i8> @bext_nxv16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
44 ; CHECK-LABEL: bext_nxv16i8:
45 ; CHECK: bext z0.b, z0.b, z1.b
46 ; CHECK-NEXT: ret
47   %out = call <vscale x 16 x i8> @llvm.aarch64.sve.bext.x.nx16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b)
48   ret <vscale x 16 x i8> %out
51 define <vscale x 8 x i16> @bext_nxv8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
52 ; CHECK-LABEL: bext_nxv8i16:
53 ; CHECK: bext z0.h, z0.h, z1.h
54 ; CHECK-NEXT: ret
55   %out = call <vscale x 8 x i16> @llvm.aarch64.sve.bext.x.nx8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b)
56   ret <vscale x 8 x i16> %out
59 define <vscale x 4 x i32> @bext_nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
60 ; CHECK-LABEL: bext_nxv4i32:
61 ; CHECK: bext z0.s, z0.s, z1.s
62 ; CHECK-NEXT: ret
63   %out = call <vscale x 4 x i32> @llvm.aarch64.sve.bext.x.nx4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b)
64   ret <vscale x 4 x i32> %out
67 define <vscale x 2 x i64> @bext_nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
68 ; CHECK-LABEL: bext_nxv2i64:
69 ; CHECK: bext z0.d, z0.d, z1.d
70 ; CHECK-NEXT: ret
71   %out = call <vscale x 2 x i64> @llvm.aarch64.sve.bext.x.nx2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b)
72   ret <vscale x 2 x i64> %out
76 ; BGRP
79 define <vscale x 16 x i8> @bgrp_nxv16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
80 ; CHECK-LABEL: bgrp_nxv16i8:
81 ; CHECK: bgrp z0.b, z0.b, z1.b
82 ; CHECK-NEXT: ret
83   %out = call <vscale x 16 x i8> @llvm.aarch64.sve.bgrp.x.nx16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b)
84   ret <vscale x 16 x i8> %out
87 define <vscale x 8 x i16> @bgrp_nxv8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) {
88 ; CHECK-LABEL: bgrp_nxv8i16:
89 ; CHECK: bgrp z0.h, z0.h, z1.h
90 ; CHECK-NEXT: ret
91   %out = call <vscale x 8 x i16> @llvm.aarch64.sve.bgrp.x.nx8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b)
92   ret <vscale x 8 x i16> %out
95 define <vscale x 4 x i32> @bgrp_nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) {
96 ; CHECK-LABEL: bgrp_nxv4i32:
97 ; CHECK: bgrp z0.s, z0.s, z1.s
98 ; CHECK-NEXT: ret
99   %out = call <vscale x 4 x i32> @llvm.aarch64.sve.bgrp.x.nx4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b)
100   ret <vscale x 4 x i32> %out
103 define <vscale x 2 x i64> @bgrp_nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
104 ; CHECK-LABEL: bgrp_nxv2i64:
105 ; CHECK: bgrp z0.d, z0.d, z1.d
106 ; CHECK-NEXT: ret
107   %out = call <vscale x 2 x i64> @llvm.aarch64.sve.bgrp.x.nx2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b)
108   ret <vscale x 2 x i64> %out
111 declare <vscale x 16 x i8> @llvm.aarch64.sve.bdep.x.nx16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b)
112 declare <vscale x 8 x i16> @llvm.aarch64.sve.bdep.x.nx8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b)
113 declare <vscale x 4 x i32> @llvm.aarch64.sve.bdep.x.nx4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b)
114 declare <vscale x 2 x i64> @llvm.aarch64.sve.bdep.x.nx2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b)
116 declare <vscale x 16 x i8> @llvm.aarch64.sve.bext.x.nx16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b)
117 declare <vscale x 8 x i16> @llvm.aarch64.sve.bext.x.nx8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b)
118 declare <vscale x 4 x i32> @llvm.aarch64.sve.bext.x.nx4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b)
119 declare <vscale x 2 x i64> @llvm.aarch64.sve.bext.x.nx2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b)
121 declare <vscale x 16 x i8> @llvm.aarch64.sve.bgrp.x.nx16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b)
122 declare <vscale x 8 x i16> @llvm.aarch64.sve.bgrp.x.nx8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b)
123 declare <vscale x 4 x i32> @llvm.aarch64.sve.bgrp.x.nx4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b)
124 declare <vscale x 2 x i64> @llvm.aarch64.sve.bgrp.x.nx2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b)