; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 ; RUN: llc -mtriple aarch64 -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-SD ; RUN: llc -mtriple aarch64 -global-isel -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-GI ; RUN: llc -mtriple aarch64 -O0 -global-isel -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-GIO0 define <1 x i1> @shuffle_extract_4(<8 x i1> %a, <8 x i1> %b) { ; CHECK-SD-LABEL: shuffle_extract_4: ; CHECK-SD: // %bb.0: ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0 ; CHECK-SD-NEXT: umov w0, v0.b[4] ; CHECK-SD-NEXT: ret ; ; CHECK-GI-LABEL: shuffle_extract_4: ; CHECK-GI: // %bb.0: ; CHECK-GI-NEXT: ushll v0.8h, v0.8b, #0 ; CHECK-GI-NEXT: umov w8, v0.h[4] ; CHECK-GI-NEXT: and w0, w8, #0x1 ; CHECK-GI-NEXT: ret ; ; CHECK-GIO0-LABEL: shuffle_extract_4: ; CHECK-GIO0: // %bb.0: ; CHECK-GIO0-NEXT: ushll v0.8h, v0.8b, #0 ; CHECK-GIO0-NEXT: umov w8, v0.h[4] ; CHECK-GIO0-NEXT: and w0, w8, #0x1 ; CHECK-GIO0-NEXT: ret %extractvec60 = shufflevector <8 x i1> %a, <8 x i1> %b, <1 x i32> ret <1 x i1> %extractvec60 } define <1 x i1> @shuffle_extract_12(<8 x i1> %a, <8 x i1> %b) { ; CHECK-SD-LABEL: shuffle_extract_12: ; CHECK-SD: // %bb.0: ; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q1 ; CHECK-SD-NEXT: umov w0, v1.b[4] ; CHECK-SD-NEXT: ret ; ; CHECK-GI-LABEL: shuffle_extract_12: ; CHECK-GI: // %bb.0: ; CHECK-GI-NEXT: ushll v0.8h, v1.8b, #0 ; CHECK-GI-NEXT: umov w8, v0.h[4] ; CHECK-GI-NEXT: and w0, w8, #0x1 ; CHECK-GI-NEXT: ret ; ; CHECK-GIO0-LABEL: shuffle_extract_12: ; CHECK-GIO0: // %bb.0: ; CHECK-GIO0-NEXT: ushll v0.8h, v1.8b, #0 ; CHECK-GIO0-NEXT: umov w8, v0.h[4] ; CHECK-GIO0-NEXT: and w0, w8, #0x1 ; CHECK-GIO0-NEXT: ret %extractvec60 = shufflevector <8 x i1> %a, <8 x i1> %b, <1 x i32> ret <1 x i1> %extractvec60 } define <1 x i1> @shuffle_extract_p(<8 x i1> %a, <8 x i1> %b) { ; CHECK-SD-LABEL: shuffle_extract_p: ; CHECK-SD: // %bb.0: ; CHECK-SD-NEXT: ret ; ; CHECK-GI-LABEL: shuffle_extract_p: ; CHECK-GI: // %bb.0: ; CHECK-GI-NEXT: mov w0, wzr ; CHECK-GI-NEXT: ret ; ; CHECK-GIO0-LABEL: shuffle_extract_p: ; CHECK-GIO0: // %bb.0: ; CHECK-GIO0-NEXT: // implicit-def: $w8 ; CHECK-GIO0-NEXT: and w0, w8, #0x1 ; CHECK-GIO0-NEXT: ret %extractvec60 = shufflevector <8 x i1> %a, <8 x i1> %b, <1 x i32> ret <1 x i1> %extractvec60 } define <1 x i32> @shufflevector_v1i32(<1 x i32> %a, <1 x i32> %b) { ; CHECK-LABEL: shufflevector_v1i32: ; CHECK: // %bb.0: ; CHECK-NEXT: fmov d0, d1 ; CHECK-NEXT: ret %c = shufflevector <1 x i32> %a, <1 x i32> %b, <1 x i32> ret <1 x i32> %c }