blob: cc678917677e6b7f3656678470064a78ad644ea0 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
; RUN: llc -mtriple=aarch64-- < %s | FileCheck %s
define <16 x i4> @avir_v2i4_v16i4(<2 x i4> %arg) nounwind {
; CHECK-LABEL: avir_v2i4_v16i4:
; CHECK: // %bb.0:
; CHECK-NEXT: sub sp, sp, #16
; CHECK-NEXT: uzp1 v1.4h, v0.4h, v0.4h
; CHECK-NEXT: movi v0.2d, #0000000000000000
; CHECK-NEXT: fmov x8, d1
; CHECK-NEXT: and w9, w8, #0xf
; CHECK-NEXT: mov v0.b[0], w9
; CHECK-NEXT: ubfx w9, w8, #4, #4
; CHECK-NEXT: mov v0.b[1], w9
; CHECK-NEXT: ubfx w9, w8, #8, #4
; CHECK-NEXT: mov v0.b[2], w9
; CHECK-NEXT: ubfx w9, w8, #12, #4
; CHECK-NEXT: mov v0.b[3], w9
; CHECK-NEXT: ubfx w9, w8, #16, #4
; CHECK-NEXT: mov v0.b[4], w9
; CHECK-NEXT: ubfx w9, w8, #20, #4
; CHECK-NEXT: mov v0.b[5], w9
; CHECK-NEXT: ubfx w9, w8, #24, #4
; CHECK-NEXT: mov v0.b[6], w9
; CHECK-NEXT: lsr w9, w8, #28
; CHECK-NEXT: mov v0.b[7], w9
; CHECK-NEXT: ubfx x9, x8, #32, #4
; CHECK-NEXT: mov v0.b[8], w9
; CHECK-NEXT: ubfx x9, x8, #36, #4
; CHECK-NEXT: mov v0.b[9], w9
; CHECK-NEXT: ubfx x9, x8, #40, #4
; CHECK-NEXT: mov v0.b[10], w9
; CHECK-NEXT: ubfx x9, x8, #44, #4
; CHECK-NEXT: mov v0.b[11], w9
; CHECK-NEXT: ubfx x9, x8, #52, #4
; CHECK-NEXT: mov v0.b[13], w9
; CHECK-NEXT: ubfx x9, x8, #56, #4
; CHECK-NEXT: lsr x8, x8, #60
; CHECK-NEXT: mov v0.b[14], w9
; CHECK-NEXT: mov v0.b[15], w8
; CHECK-NEXT: add sp, sp, #16
; CHECK-NEXT: ret
%res = shufflevector <2 x i4> %arg, <2 x i4> poison,
<16 x i32> <i32 poison, i32 poison, i32 poison, i32 poison, i32 1 , i32 poison, i32 poison, i32 poison,
i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
ret <16 x i4> %res
}