1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -o - -mcpu=generic -march=x86-64 -mattr=+sse4.1 | FileCheck %s -check-prefix=SSE41 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -o - -mcpu=generic -march=x86-64 -mattr=+avx | FileCheck %s -check-prefix=AVX 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: extract_i8 5*9880d681SAndroid Build Coastguard Workerdefine void @extract_i8(i8* nocapture %dst, <16 x i8> %foo) { 6*9880d681SAndroid Build Coastguard Worker; AVX: vpextrb 7*9880d681SAndroid Build Coastguard Worker; SSE41: pextrb 8*9880d681SAndroid Build Coastguard Worker; AVX-NOT: movb 9*9880d681SAndroid Build Coastguard Worker; SSE41-NOT: movb 10*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <16 x i8> %foo, i32 15 11*9880d681SAndroid Build Coastguard Worker store i8 %vecext, i8* %dst, align 1 12*9880d681SAndroid Build Coastguard Worker ret void 13*9880d681SAndroid Build Coastguard Worker} 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: extract_i16 16*9880d681SAndroid Build Coastguard Workerdefine void @extract_i16(i16* nocapture %dst, <8 x i16> %foo) { 17*9880d681SAndroid Build Coastguard Worker; AVX: vpextrw 18*9880d681SAndroid Build Coastguard Worker; SSE41: pextrw 19*9880d681SAndroid Build Coastguard Worker; AVX-NOT: movw 20*9880d681SAndroid Build Coastguard Worker; SSE41-NOT: movw 21*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <8 x i16> %foo, i32 7 22*9880d681SAndroid Build Coastguard Worker store i16 %vecext, i16* %dst, align 1 23*9880d681SAndroid Build Coastguard Worker ret void 24*9880d681SAndroid Build Coastguard Worker} 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: extract_i8_undef 27*9880d681SAndroid Build Coastguard Workerdefine void @extract_i8_undef(i8* nocapture %dst, <16 x i8> %foo) { 28*9880d681SAndroid Build Coastguard Worker; AVX-NOT: vpextrb 29*9880d681SAndroid Build Coastguard Worker; SSE41-NOT: pextrb 30*9880d681SAndroid Build Coastguard Worker; AVX-NOT: movb 31*9880d681SAndroid Build Coastguard Worker; SSE41-NOT: movb 32*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <16 x i8> %foo, i32 16 ; undef 33*9880d681SAndroid Build Coastguard Worker store i8 %vecext, i8* %dst, align 1 34*9880d681SAndroid Build Coastguard Worker ret void 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: extract_i16_undef 38*9880d681SAndroid Build Coastguard Workerdefine void @extract_i16_undef(i16* nocapture %dst, <8 x i16> %foo) { 39*9880d681SAndroid Build Coastguard Worker; AVX-NOT: vpextrw 40*9880d681SAndroid Build Coastguard Worker; SSE41-NOT: pextrw 41*9880d681SAndroid Build Coastguard Worker; AVX-NOT: movw 42*9880d681SAndroid Build Coastguard Worker; SSE41-NOT: movw 43*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <8 x i16> %foo, i32 9 ; undef 44*9880d681SAndroid Build Coastguard Worker store i16 %vecext, i16* %dst, align 1 45*9880d681SAndroid Build Coastguard Worker ret void 46*9880d681SAndroid Build Coastguard Worker} 47