; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme2 -verify-machineinstrs < %s | FileCheck %s ; == 2 vectors == define { , } @test_unpk_s16_x2( %unused, %a) { ; CHECK-LABEL: test_unpk_s16_x2: ; CHECK: // %bb.0: ; CHECK-NEXT: sunpk { z0.h, z1.h }, z1.b ; CHECK-NEXT: ret %res = call { , } @llvm.aarch64.sve.sunpk.x2.nxv8i16( %a) ret { , } %res } define { , } @test_unpk_s32_x2( %unused, %a) { ; CHECK-LABEL: test_unpk_s32_x2: ; CHECK: // %bb.0: ; CHECK-NEXT: sunpk { z0.s, z1.s }, z1.h ; CHECK-NEXT: ret %res = call { , } @llvm.aarch64.sve.sunpk.x2.nxv4i32( %a) ret { , } %res } define { , } @test_unpk_s64_x2( %unusued, %a) { ; CHECK-LABEL: test_unpk_s64_x2: ; CHECK: // %bb.0: ; CHECK-NEXT: sunpk { z0.d, z1.d }, z1.s ; CHECK-NEXT: ret %res = call { , } @llvm.aarch64.sve.sunpk.x2.nxv2i64( %a) ret { , } %res } define { , } @test_unpk_u16_x2( %unused, %a) { ; CHECK-LABEL: test_unpk_u16_x2: ; CHECK: // %bb.0: ; CHECK-NEXT: uunpk { z0.h, z1.h }, z1.b ; CHECK-NEXT: ret %res = call { , } @llvm.aarch64.sve.uunpk.x2.nxv8i16( %a) ret { , } %res } define { , } @test_unpk_u32_x2( %unused, %a) { ; CHECK-LABEL: test_unpk_u32_x2: ; CHECK: // %bb.0: ; CHECK-NEXT: uunpk { z0.s, z1.s }, z1.h ; CHECK-NEXT: ret %res = call { , } @llvm.aarch64.sve.uunpk.x2.nxv4i32( %a) ret { , } %res } define { , } @test_unpk_u64_x2( %unused, %a) { ; CHECK-LABEL: test_unpk_u64_x2: ; CHECK: // %bb.0: ; CHECK-NEXT: uunpk { z0.d, z1.d }, z1.s ; CHECK-NEXT: ret %res = call { , } @llvm.aarch64.sve.uunpk.x2.nxv2i64( %a) ret { , } %res } ; == 4 vectors == define { , , , } @test_unpk_s16_x4( %unused, %a, %b) { ; CHECK-LABEL: test_unpk_s16_x4: ; CHECK: // %bb.0: ; CHECK-NEXT: mov z3.d, z2.d ; CHECK-NEXT: mov z2.d, z1.d ; CHECK-NEXT: sunpk { z0.h - z3.h }, { z2.b, z3.b } ; CHECK-NEXT: ret %res = call { , , , } @llvm.aarch64.sve.sunpk.x4.nxv8i16( %a, %b) ret { , , , } %res } define { , , , } @test_unpk_s32( %unused, %a, %b) { ; CHECK-LABEL: test_unpk_s32: ; CHECK: // %bb.0: ; CHECK-NEXT: mov z3.d, z2.d ; CHECK-NEXT: mov z2.d, z1.d ; CHECK-NEXT: sunpk { z0.s - z3.s }, { z2.h, z3.h } ; CHECK-NEXT: ret %res = call { , , , } @llvm.aarch64.sve.sunpk.x4.nxv4i32( %a, %b) ret { , , , } %res } define { , , , } @test_unpk_s64( %unused, %a, %b) { ; CHECK-LABEL: test_unpk_s64: ; CHECK: // %bb.0: ; CHECK-NEXT: mov z3.d, z2.d ; CHECK-NEXT: mov z2.d, z1.d ; CHECK-NEXT: sunpk { z0.d - z3.d }, { z2.s, z3.s } ; CHECK-NEXT: ret %res = call { , , , } @llvm.aarch64.sve.sunpk.x4.nxv2i64( %a, %b) ret { , , , } %res } define { , , , } @test_unpk_u16_x4( %unused, %a, %b) { ; CHECK-LABEL: test_unpk_u16_x4: ; CHECK: // %bb.0: ; CHECK-NEXT: mov z3.d, z2.d ; CHECK-NEXT: mov z2.d, z1.d ; CHECK-NEXT: uunpk { z0.h - z3.h }, { z2.b, z3.b } ; CHECK-NEXT: ret %res = call { , , , } @llvm.aarch64.sve.uunpk.x4.nxv8i16( %a, %b) ret { , , , } %res } define { , , , } @test_unpk_u32( %unused, %a, %b) { ; CHECK-LABEL: test_unpk_u32: ; CHECK: // %bb.0: ; CHECK-NEXT: mov z3.d, z2.d ; CHECK-NEXT: mov z2.d, z1.d ; CHECK-NEXT: uunpk { z0.s - z3.s }, { z2.h, z3.h } ; CHECK-NEXT: ret %res = call { , , , } @llvm.aarch64.sve.uunpk.x4.nxv4i32( %a, %b) ret { , , , } %res } define { , , , } @test_unpk_u64( %unused, %a, %b) { ; CHECK-LABEL: test_unpk_u64: ; CHECK: // %bb.0: ; CHECK-NEXT: mov z3.d, z2.d ; CHECK-NEXT: mov z2.d, z1.d ; CHECK-NEXT: uunpk { z0.d - z3.d }, { z2.s, z3.s } ; CHECK-NEXT: ret %res = call { , , , } @llvm.aarch64.sve.uunpk.x4.nxv2i64( %a, %b) ret { , , , } %res } ; == 2 vectors == declare { , } @llvm.aarch64.sve.sunpk.x2.nxv8i16() declare { , } @llvm.aarch64.sve.sunpk.x2.nxv4i32() declare { , } @llvm.aarch64.sve.sunpk.x2.nxv2i64() declare { , } @llvm.aarch64.sve.uunpk.x2.nxv8i16() declare { , } @llvm.aarch64.sve.uunpk.x2.nxv4i32() declare { , } @llvm.aarch64.sve.uunpk.x2.nxv2i64() ; == 4 vectors == declare { , , , } @llvm.aarch64.sve.sunpk.x4.nxv8i16(, ) declare { , , , } @llvm.aarch64.sve.sunpk.x4.nxv4i32(, ) declare { , , , } @llvm.aarch64.sve.sunpk.x4.nxv2i64(, ) declare { , , , } @llvm.aarch64.sve.uunpk.x4.nxv8i16(, ) declare { , , , } @llvm.aarch64.sve.uunpk.x4.nxv4i32(, ) declare { , , , } @llvm.aarch64.sve.uunpk.x4.nxv2i64(, )