1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-pc-linux -mcpu=corei7-avx | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine <4 x i3> @test1(<4 x i3>* %in) nounwind { 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1: 6*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movzwl (%rdi), %eax 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movl %eax, %ecx 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrl $3, %ecx 10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovd %eax, %xmm0 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movl %eax, %ecx 13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrl $6, %ecx 14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrd $2, %ecx, %xmm0, %xmm0 15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrl $9, %eax 16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrd $3, %eax, %xmm0, %xmm0 17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 19*9880d681SAndroid Build Coastguard Worker %ret = load <4 x i3>, <4 x i3>* %in, align 1 20*9880d681SAndroid Build Coastguard Worker ret <4 x i3> %ret 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerdefine <4 x i1> @test2(<4 x i1>* %in) nounwind { 24*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2: 25*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movzbl (%rdi), %eax 27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movl %eax, %ecx 28*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrl %ecx 29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovd %eax, %xmm0 30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movl %eax, %ecx 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrl $2, %ecx 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrd $2, %ecx, %xmm0, %xmm0 34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrl $3, %eax 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrd $3, %eax, %xmm0, %xmm0 36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 38*9880d681SAndroid Build Coastguard Worker %ret = load <4 x i1>, <4 x i1>* %in, align 1 39*9880d681SAndroid Build Coastguard Worker ret <4 x i1> %ret 40*9880d681SAndroid Build Coastguard Worker} 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test3(<4 x i1>* %in) nounwind { 43*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3: 44*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movzbl (%rdi), %eax 46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rax, %rcx 47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shlq $62, %rcx 48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sarq $63, %rcx 49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rax, %rdx 50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shlq $63, %rdx 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sarq $63, %rdx 52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovd %edx, %xmm0 53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rax, %rcx 55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shlq $61, %rcx 56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sarq $63, %rcx 57*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrd $2, %ecx, %xmm0, %xmm0 58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shlq $60, %rax 59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sarq $63, %rax 60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrd $3, %eax, %xmm0, %xmm0 61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovsxdq %xmm0, %xmm1 62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovsxdq %xmm0, %xmm0 64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 66*9880d681SAndroid Build Coastguard Worker %wide.load35 = load <4 x i1>, <4 x i1>* %in, align 1 67*9880d681SAndroid Build Coastguard Worker %sext = sext <4 x i1> %wide.load35 to <4 x i64> 68*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %sext 69*9880d681SAndroid Build Coastguard Worker} 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Workerdefine <16 x i4> @test4(<16 x i4>* %in) nounwind { 72*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test4: 73*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 74*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq (%rdi), %rax 75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movl %eax, %ecx 76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrl $4, %ecx 77*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl $15, %ecx 78*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movl %eax, %edx 79*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl $15, %edx 80*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmovd %edx, %xmm0 81*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrb $1, %ecx, %xmm0, %xmm0 82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movl %eax, %ecx 83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrl $8, %ecx 84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl $15, %ecx 85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrb $2, %ecx, %xmm0, %xmm0 86*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movl %eax, %ecx 87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrl $12, %ecx 88*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl $15, %ecx 89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrb $3, %ecx, %xmm0, %xmm0 90*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movl %eax, %ecx 91*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrl $16, %ecx 92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl $15, %ecx 93*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrb $4, %ecx, %xmm0, %xmm0 94*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movl %eax, %ecx 95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrl $20, %ecx 96*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl $15, %ecx 97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrb $5, %ecx, %xmm0, %xmm0 98*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movl %eax, %ecx 99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrl $24, %ecx 100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl $15, %ecx 101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrb $6, %ecx, %xmm0, %xmm0 102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movl %eax, %ecx 103*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrl $28, %ecx 104*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrb $7, %ecx, %xmm0, %xmm0 105*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rax, %rcx 106*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrq $32, %rcx 107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl $15, %ecx 108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrb $8, %ecx, %xmm0, %xmm0 109*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rax, %rcx 110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrq $36, %rcx 111*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl $15, %ecx 112*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrb $9, %ecx, %xmm0, %xmm0 113*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rax, %rcx 114*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrq $40, %rcx 115*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl $15, %ecx 116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrb $10, %ecx, %xmm0, %xmm0 117*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rax, %rcx 118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrq $44, %rcx 119*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl $15, %ecx 120*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrb $11, %ecx, %xmm0, %xmm0 121*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rax, %rcx 122*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrq $48, %rcx 123*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl $15, %ecx 124*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrb $12, %ecx, %xmm0, %xmm0 125*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rax, %rcx 126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrq $52, %rcx 127*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl $15, %ecx 128*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrb $13, %ecx, %xmm0, %xmm0 129*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movq %rax, %rcx 130*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrq $56, %rcx 131*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: andl $15, %ecx 132*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrb $14, %ecx, %xmm0, %xmm0 133*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: shrq $60, %rax 134*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0 135*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 136*9880d681SAndroid Build Coastguard Worker %ret = load <16 x i4>, <16 x i4>* %in, align 1 137*9880d681SAndroid Build Coastguard Worker ret <16 x i4> %ret 138*9880d681SAndroid Build Coastguard Worker} 139