; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2p2 < %s | FileCheck %s --check-prefixes=CHECK ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+sme2p2 < %s | FileCheck %s --check-prefixes=CHECK ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme2p2 -force-streaming < %s | FileCheck %s --check-prefixes=CHECK ; ; COMPACT ; define @compact_i8( %pg, %a) { ; CHECK-LABEL: compact_i8: ; CHECK: // %bb.0: ; CHECK-NEXT: compact z0.b, p0, z0.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.compact.nxv16i8( %pg, %a) ret %out } define @compact_i16( %pg, %a) { ; CHECK-LABEL: compact_i16: ; CHECK: // %bb.0: ; CHECK-NEXT: compact z0.h, p0, z0.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.compact.nxv8i16( %pg, %a) ret %out } define @compact_i32( %pg, %a) { ; CHECK-LABEL: compact_i32: ; CHECK: // %bb.0: ; CHECK-NEXT: compact z0.s, p0, z0.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.compact.nxv4i32( %pg, %a) ret %out } define @compact_i64( %pg, %a) { ; CHECK-LABEL: compact_i64: ; CHECK: // %bb.0: ; CHECK-NEXT: compact z0.d, p0, z0.d ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.compact.nxv2i64( %pg, %a) ret %out } define @compact_f16( %pg, %a) { ; CHECK-LABEL: compact_f16: ; CHECK: // %bb.0: ; CHECK-NEXT: compact z0.h, p0, z0.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.compact.nxv8f16( %pg, %a) ret %out } define @compact_f32( %pg, %a) { ; CHECK-LABEL: compact_f32: ; CHECK: // %bb.0: ; CHECK-NEXT: compact z0.s, p0, z0.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.compact.nxv4f32( %pg, %a) ret %out } define @compact_f64( %pg, %a) { ; CHECK-LABEL: compact_f64: ; CHECK: // %bb.0: ; CHECK-NEXT: compact z0.d, p0, z0.d ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.compact.nxv2f64( %pg, %a) ret %out } define @compact_bf16( %pg, %a) { ; CHECK-LABEL: compact_bf16: ; CHECK: // %bb.0: ; CHECK-NEXT: compact z0.h, p0, z0.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.compact.nxv8bf16( %pg, %a) ret %out } ; ; EXPAND ; define @expand_i8( %pg, %a) { ; CHECK-LABEL: expand_i8: ; CHECK: // %bb.0: ; CHECK-NEXT: expand z0.b, p0, z0.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.expand.nxv16i8( %pg, %a) ret %out } define @expand_i16( %pg, %a) { ; CHECK-LABEL: expand_i16: ; CHECK: // %bb.0: ; CHECK-NEXT: expand z0.h, p0, z0.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.expand.nxv8i16( %pg, %a) ret %out } define @expand_i32( %pg, %a) { ; CHECK-LABEL: expand_i32: ; CHECK: // %bb.0: ; CHECK-NEXT: expand z0.s, p0, z0.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.expand.nxv4i32( %pg, %a) ret %out } define @expand_i64( %pg, %a) { ; CHECK-LABEL: expand_i64: ; CHECK: // %bb.0: ; CHECK-NEXT: expand z0.d, p0, z0.d ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.expand.nxv2i64( %pg, %a) ret %out } define @expand_f16( %pg, %a) { ; CHECK-LABEL: expand_f16: ; CHECK: // %bb.0: ; CHECK-NEXT: expand z0.h, p0, z0.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.expand.nxv8f16( %pg, %a) ret %out } define @expand_f32( %pg, %a) { ; CHECK-LABEL: expand_f32: ; CHECK: // %bb.0: ; CHECK-NEXT: expand z0.s, p0, z0.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.expand.nxv4f32( %pg, %a) ret %out } define @expand_f64( %pg, %a) { ; CHECK-LABEL: expand_f64: ; CHECK: // %bb.0: ; CHECK-NEXT: expand z0.d, p0, z0.d ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.expand.nxv2f64( %pg, %a) ret %out } define @expand_bf16( %pg, %a) { ; CHECK-LABEL: expand_bf16: ; CHECK: // %bb.0: ; CHECK-NEXT: expand z0.h, p0, z0.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.expand.nxv8bf16( %pg, %a) ret %out } ; ; FIRSTP ; define i64 @firstp_b8( %pg, %a) { ; CHECK-LABEL: firstp_b8: ; CHECK: // %bb.0: ; CHECK-NEXT: firstp x0, p0, p1.b ; CHECK-NEXT: ret %out = call i64 @llvm.aarch64.sve.firstp.nxv16i1( %pg, %a) ret i64 %out } define i64 @firstp_b16( %pg, %a) { ; CHECK-LABEL: firstp_b16: ; CHECK: // %bb.0: ; CHECK-NEXT: firstp x0, p0, p1.h ; CHECK-NEXT: ret %out = call i64 @llvm.aarch64.sve.firstp.nxv8i1( %pg, %a) ret i64 %out } define i64 @firstp_b32( %pg, %a) { ; CHECK-LABEL: firstp_b32: ; CHECK: // %bb.0: ; CHECK-NEXT: firstp x0, p0, p1.s ; CHECK-NEXT: ret %out = call i64 @llvm.aarch64.sve.firstp.nxv4i1( %pg, %a) ret i64 %out } define i64 @firstp_b64( %pg, %a) { ; CHECK-LABEL: firstp_b64: ; CHECK: // %bb.0: ; CHECK-NEXT: firstp x0, p0, p1.d ; CHECK-NEXT: ret %out = call i64 @llvm.aarch64.sve.firstp.nxv2i1( %pg, %a) ret i64 %out } ; ; LASTP ; define i64 @lastp_b8( %pg, %a) { ; CHECK-LABEL: lastp_b8: ; CHECK: // %bb.0: ; CHECK-NEXT: lastp x0, p0, p1.b ; CHECK-NEXT: ret %out = call i64 @llvm.aarch64.sve.lastp.nxv16i1( %pg, %a) ret i64 %out } define i64 @lastp_b16( %pg, %a) { ; CHECK-LABEL: lastp_b16: ; CHECK: // %bb.0: ; CHECK-NEXT: lastp x0, p0, p1.h ; CHECK-NEXT: ret %out = call i64 @llvm.aarch64.sve.lastp.nxv8i1( %pg, %a) ret i64 %out } define i64 @lastp_b32( %pg, %a) { ; CHECK-LABEL: lastp_b32: ; CHECK: // %bb.0: ; CHECK-NEXT: lastp x0, p0, p1.s ; CHECK-NEXT: ret %out = call i64 @llvm.aarch64.sve.lastp.nxv4i1( %pg, %a) ret i64 %out } define i64 @lastp_b64( %pg, %a) { ; CHECK-LABEL: lastp_b64: ; CHECK: // %bb.0: ; CHECK-NEXT: lastp x0, p0, p1.d ; CHECK-NEXT: ret %out = call i64 @llvm.aarch64.sve.lastp.nxv2i1( %pg, %a) ret i64 %out } declare @llvm.aarch64.sve.compact.nxv16i8(, ) declare @llvm.aarch64.sve.compact.nxv8i16(, ) declare @llvm.aarch64.sve.compact.nxv4i32(, ) declare @llvm.aarch64.sve.compact.nxv2i64(, ) declare @llvm.aarch64.sve.compact.nxv8f16(, ) declare @llvm.aarch64.sve.compact.nxv4f32(, ) declare @llvm.aarch64.sve.compact.nxv2f64(, ) declare @llvm.aarch64.sve.compact.nxv8bf16(, )