; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -verify-machineinstrs < %s | FileCheck %s define @select_nxv16i8(i1 %cond, %a, %b) { ; CHECK-LABEL: select_nxv16i8: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $w0 killed $w0 def $x0 ; CHECK-NEXT: sbfx x8, x0, #0, #1 ; CHECK-NEXT: whilelo p0.b, xzr, x8 ; CHECK-NEXT: sel z0.b, p0, z0.b, z1.b ; CHECK-NEXT: ret %res = select i1 %cond, %a, %b ret %res } define @select_nxv8i16(i1 %cond, %a, %b) { ; CHECK-LABEL: select_nxv8i16: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $w0 killed $w0 def $x0 ; CHECK-NEXT: sbfx x8, x0, #0, #1 ; CHECK-NEXT: whilelo p0.h, xzr, x8 ; CHECK-NEXT: sel z0.h, p0, z0.h, z1.h ; CHECK-NEXT: ret %res = select i1 %cond, %a, %b ret %res } define @select_nxv4i32(i1 %cond, %a, %b) { ; CHECK-LABEL: select_nxv4i32: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $w0 killed $w0 def $x0 ; CHECK-NEXT: sbfx x8, x0, #0, #1 ; CHECK-NEXT: whilelo p0.s, xzr, x8 ; CHECK-NEXT: sel z0.s, p0, z0.s, z1.s ; CHECK-NEXT: ret %res = select i1 %cond, %a, %b ret %res } define @select_nxv2i64(i1 %cond, %a, %b) { ; CHECK-LABEL: select_nxv2i64: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $w0 killed $w0 def $x0 ; CHECK-NEXT: sbfx x8, x0, #0, #1 ; CHECK-NEXT: whilelo p0.d, xzr, x8 ; CHECK-NEXT: sel z0.d, p0, z0.d, z1.d ; CHECK-NEXT: ret %res = select i1 %cond, %a, %b ret %res } define @select_nxv8f16(i1 %cond, %a, %b) { ; CHECK-LABEL: select_nxv8f16: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $w0 killed $w0 def $x0 ; CHECK-NEXT: sbfx x8, x0, #0, #1 ; CHECK-NEXT: whilelo p0.h, xzr, x8 ; CHECK-NEXT: sel z0.h, p0, z0.h, z1.h ; CHECK-NEXT: ret %res = select i1 %cond, %a, %b ret %res } define @select_nxv4f32(i1 %cond, %a, %b) { ; CHECK-LABEL: select_nxv4f32: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $w0 killed $w0 def $x0 ; CHECK-NEXT: sbfx x8, x0, #0, #1 ; CHECK-NEXT: whilelo p0.s, xzr, x8 ; CHECK-NEXT: sel z0.s, p0, z0.s, z1.s ; CHECK-NEXT: ret %res = select i1 %cond, %a, %b ret %res } define @select_nxv2f64(i1 %cond, %a, %b) { ; CHECK-LABEL: select_nxv2f64: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $w0 killed $w0 def $x0 ; CHECK-NEXT: sbfx x8, x0, #0, #1 ; CHECK-NEXT: whilelo p0.d, xzr, x8 ; CHECK-NEXT: sel z0.d, p0, z0.d, z1.d ; CHECK-NEXT: ret %res = select i1 %cond, %a, %b ret %res } define @select_nxv16i1(i1 %cond, %a, %b) { ; CHECK-LABEL: select_nxv16i1: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $w0 killed $w0 def $x0 ; CHECK-NEXT: sbfx x8, x0, #0, #1 ; CHECK-NEXT: whilelo p2.b, xzr, x8 ; CHECK-NEXT: sel p0.b, p2, p0.b, p1.b ; CHECK-NEXT: ret %res = select i1 %cond, %a, %b ret %res } define @select_nxv8i1(i1 %cond, %a, %b) { ; CHECK-LABEL: select_nxv8i1: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $w0 killed $w0 def $x0 ; CHECK-NEXT: sbfx x8, x0, #0, #1 ; CHECK-NEXT: whilelo p2.h, xzr, x8 ; CHECK-NEXT: sel p0.b, p2, p0.b, p1.b ; CHECK-NEXT: ret %res = select i1 %cond, %a, %b ret %res } define @select_nxv4i1(i1 %cond, %a, %b) { ; CHECK-LABEL: select_nxv4i1: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $w0 killed $w0 def $x0 ; CHECK-NEXT: sbfx x8, x0, #0, #1 ; CHECK-NEXT: whilelo p2.s, xzr, x8 ; CHECK-NEXT: sel p0.b, p2, p0.b, p1.b ; CHECK-NEXT: ret %res = select i1 %cond, %a, %b ret %res } define @select_nxv2i1(i1 %cond, %a, %b) { ; CHECK-LABEL: select_nxv2i1: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $w0 killed $w0 def $x0 ; CHECK-NEXT: sbfx x8, x0, #0, #1 ; CHECK-NEXT: whilelo p2.d, xzr, x8 ; CHECK-NEXT: sel p0.b, p2, p0.b, p1.b ; CHECK-NEXT: ret %res = select i1 %cond, %a, %b ret %res }