xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/extract-store.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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