1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s
3
4define void @f(<4 x half>* %a, <4 x half>* %b, <8 x half>* %c) {
5; CHECK-LABEL: f:
6; CHECK:       # %bb.0:
7; CHECK-NEXT:    movq (%rdi), %rax
8; CHECK-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
9; CHECK-NEXT:    movdqa -{{[0-9]+}}(%rsp), %xmm0
10; CHECK-NEXT:    movq (%rsi), %rax
11; CHECK-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
12; CHECK-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1],xmm0[2],mem[2],xmm0[3],mem[3]
13; CHECK-NEXT:    movdqa %xmm0, (%rdx)
14; CHECK-NEXT:    retq
15  %tmp4 = load <4 x half>, <4 x half>* %a
16  %tmp5 = load <4 x half>, <4 x half>* %b
17  %tmp7 = shufflevector <4 x half> %tmp4, <4 x half> %tmp5, <2 x i32> <i32 0, i32 4>
18  %tmp8 = shufflevector <4 x half> %tmp4, <4 x half> %tmp5, <2 x i32> <i32 1, i32 5>
19  %tmp9 = shufflevector <4 x half> %tmp4, <4 x half> %tmp5, <2 x i32> <i32 2, i32 6>
20  %tmp10 = shufflevector <4 x half> %tmp4, <4 x half> %tmp5, <2 x i32> <i32 3, i32 7>
21  %tmp11 = extractelement <2 x half> %tmp7, i32 0
22  %tmp12 = insertelement <8 x half> undef, half %tmp11, i32 0
23  %tmp13 = extractelement <2 x half> %tmp7, i32 1
24  %tmp14 = insertelement <8 x half> %tmp12, half %tmp13, i32 1
25  %tmp15 = extractelement <2 x half> %tmp8, i32 0
26  %tmp16 = insertelement <8 x half> %tmp14, half %tmp15, i32 2
27  %tmp17 = extractelement <2 x half> %tmp8, i32 1
28  %tmp18 = insertelement <8 x half> %tmp16, half %tmp17, i32 3
29  %tmp19 = extractelement <2 x half> %tmp9, i32 0
30  %tmp20 = insertelement <8 x half> %tmp18, half %tmp19, i32 4
31  %tmp21 = extractelement <2 x half> %tmp9, i32 1
32  %tmp22 = insertelement <8 x half> %tmp20, half %tmp21, i32 5
33  %tmp23 = extractelement <2 x half> %tmp10, i32 0
34  %tmp24 = insertelement <8 x half> %tmp22, half %tmp23, i32 6
35  %tmp25 = extractelement <2 x half> %tmp10, i32 1
36  %tmp26 = insertelement <8 x half> %tmp24, half %tmp25, i32 7
37  store <8 x half> %tmp26, <8 x half>* %c
38  ret void
39}
40