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 -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-pc-linux -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE41 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-pc-linux -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1 5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-pc-linux -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker; 8*9880d681SAndroid Build Coastguard Worker; ExtractElement - Constant Index 9*9880d681SAndroid Build Coastguard Worker; 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdefine i8 @extractelement_v16i8_1(<16 x i8> %a) nounwind { 12*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: extractelement_v16i8_1: 13*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 14*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp) 15*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al 16*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 17*9880d681SAndroid Build Coastguard Worker; 18*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: extractelement_v16i8_1: 19*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 20*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pextrb $1, %xmm0, %eax 21*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> 22*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 23*9880d681SAndroid Build Coastguard Worker; 24*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v16i8_1: 25*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 26*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpextrb $1, %xmm0, %eax 27*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> 28*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 29*9880d681SAndroid Build Coastguard Worker %b = extractelement <16 x i8> %a, i256 1 30*9880d681SAndroid Build Coastguard Worker ret i8 %b 31*9880d681SAndroid Build Coastguard Worker} 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Workerdefine i8 @extractelement_v16i8_11(<16 x i8> %a) nounwind { 34*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: extractelement_v16i8_11: 35*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 36*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp) 37*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al 38*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 39*9880d681SAndroid Build Coastguard Worker; 40*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: extractelement_v16i8_11: 41*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 42*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pextrb $11, %xmm0, %eax 43*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> 44*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 45*9880d681SAndroid Build Coastguard Worker; 46*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v16i8_11: 47*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 48*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpextrb $11, %xmm0, %eax 49*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> 50*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 51*9880d681SAndroid Build Coastguard Worker %b = extractelement <16 x i8> %a, i256 11 52*9880d681SAndroid Build Coastguard Worker ret i8 %b 53*9880d681SAndroid Build Coastguard Worker} 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerdefine i8 @extractelement_v16i8_14(<16 x i8> %a) nounwind { 56*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: extractelement_v16i8_14: 57*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 58*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp) 59*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al 60*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 61*9880d681SAndroid Build Coastguard Worker; 62*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: extractelement_v16i8_14: 63*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 64*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pextrb $14, %xmm0, %eax 65*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> 66*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 67*9880d681SAndroid Build Coastguard Worker; 68*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v16i8_14: 69*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 70*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpextrb $14, %xmm0, %eax 71*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> 72*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 73*9880d681SAndroid Build Coastguard Worker %b = extractelement <16 x i8> %a, i256 14 74*9880d681SAndroid Build Coastguard Worker ret i8 %b 75*9880d681SAndroid Build Coastguard Worker} 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Workerdefine i8 @extractelement_v32i8_1(<32 x i8> %a) nounwind { 78*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: extractelement_v32i8_1: 79*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 80*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp) 81*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al 82*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 83*9880d681SAndroid Build Coastguard Worker; 84*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: extractelement_v32i8_1: 85*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 86*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pextrb $1, %xmm0, %eax 87*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> 88*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 89*9880d681SAndroid Build Coastguard Worker; 90*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v32i8_1: 91*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 92*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpextrb $1, %xmm0, %eax 93*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> 94*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vzeroupper 95*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 96*9880d681SAndroid Build Coastguard Worker %b = extractelement <32 x i8> %a, i256 1 97*9880d681SAndroid Build Coastguard Worker ret i8 %b 98*9880d681SAndroid Build Coastguard Worker} 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Workerdefine i8 @extractelement_v32i8_17(<32 x i8> %a) nounwind { 101*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: extractelement_v32i8_17: 102*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 103*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movaps %xmm1, -{{[0-9]+}}(%rsp) 104*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movb -{{[0-9]+}}(%rsp), %al 105*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 106*9880d681SAndroid Build Coastguard Worker; 107*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: extractelement_v32i8_17: 108*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 109*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pextrb $1, %xmm1, %eax 110*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> 111*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 112*9880d681SAndroid Build Coastguard Worker; 113*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: extractelement_v32i8_17: 114*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 115*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 116*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpextrb $1, %xmm0, %eax 117*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> 118*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 119*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 120*9880d681SAndroid Build Coastguard Worker; 121*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: extractelement_v32i8_17: 122*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 123*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 124*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpextrb $1, %xmm0, %eax 125*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %AL<def> %AL<kill> %EAX<kill> 126*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 127*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 128*9880d681SAndroid Build Coastguard Worker %b = extractelement <32 x i8> %a, i256 17 129*9880d681SAndroid Build Coastguard Worker ret i8 %b 130*9880d681SAndroid Build Coastguard Worker} 131*9880d681SAndroid Build Coastguard Worker 132*9880d681SAndroid Build Coastguard Workerdefine i16 @extractelement_v8i16_0(<8 x i16> %a, i256 %i) nounwind { 133*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_v8i16_0: 134*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 135*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %xmm0, %eax 136*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: # kill: %AX<def> %AX<kill> %EAX<kill> 137*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 138*9880d681SAndroid Build Coastguard Worker; 139*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v8i16_0: 140*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 141*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovd %xmm0, %eax 142*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: # kill: %AX<def> %AX<kill> %EAX<kill> 143*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 144*9880d681SAndroid Build Coastguard Worker %b = extractelement <8 x i16> %a, i256 0 145*9880d681SAndroid Build Coastguard Worker ret i16 %b 146*9880d681SAndroid Build Coastguard Worker} 147*9880d681SAndroid Build Coastguard Worker 148*9880d681SAndroid Build Coastguard Workerdefine i16 @extractelement_v8i16_3(<8 x i16> %a, i256 %i) nounwind { 149*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_v8i16_3: 150*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 151*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $3, %xmm0, %eax 152*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: # kill: %AX<def> %AX<kill> %EAX<kill> 153*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 154*9880d681SAndroid Build Coastguard Worker; 155*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v8i16_3: 156*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 157*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpextrw $3, %xmm0, %eax 158*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: # kill: %AX<def> %AX<kill> %EAX<kill> 159*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 160*9880d681SAndroid Build Coastguard Worker %b = extractelement <8 x i16> %a, i256 3 161*9880d681SAndroid Build Coastguard Worker ret i16 %b 162*9880d681SAndroid Build Coastguard Worker} 163*9880d681SAndroid Build Coastguard Worker 164*9880d681SAndroid Build Coastguard Workerdefine i16 @extractelement_v16i16_0(<16 x i16> %a, i256 %i) nounwind { 165*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_v16i16_0: 166*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 167*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %xmm0, %eax 168*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: # kill: %AX<def> %AX<kill> %EAX<kill> 169*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 170*9880d681SAndroid Build Coastguard Worker; 171*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v16i16_0: 172*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 173*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovd %xmm0, %eax 174*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: # kill: %AX<def> %AX<kill> %EAX<kill> 175*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vzeroupper 176*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 177*9880d681SAndroid Build Coastguard Worker %b = extractelement <16 x i16> %a, i256 0 178*9880d681SAndroid Build Coastguard Worker ret i16 %b 179*9880d681SAndroid Build Coastguard Worker} 180*9880d681SAndroid Build Coastguard Worker 181*9880d681SAndroid Build Coastguard Workerdefine i16 @extractelement_v16i16_13(<16 x i16> %a, i256 %i) nounwind { 182*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_v16i16_13: 183*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 184*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pextrw $5, %xmm1, %eax 185*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: # kill: %AX<def> %AX<kill> %EAX<kill> 186*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 187*9880d681SAndroid Build Coastguard Worker; 188*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: extractelement_v16i16_13: 189*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 190*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 191*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpextrw $5, %xmm0, %eax 192*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: # kill: %AX<def> %AX<kill> %EAX<kill> 193*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 194*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 195*9880d681SAndroid Build Coastguard Worker; 196*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: extractelement_v16i16_13: 197*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 198*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 199*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpextrw $5, %xmm0, %eax 200*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: # kill: %AX<def> %AX<kill> %EAX<kill> 201*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 202*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 203*9880d681SAndroid Build Coastguard Worker %b = extractelement <16 x i16> %a, i256 13 204*9880d681SAndroid Build Coastguard Worker ret i16 %b 205*9880d681SAndroid Build Coastguard Worker} 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Workerdefine i32 @extractelement_v4i32_0(<4 x i32> %a) nounwind { 208*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_v4i32_0: 209*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 210*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %xmm0, %eax 211*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 212*9880d681SAndroid Build Coastguard Worker; 213*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v4i32_0: 214*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 215*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovd %xmm0, %eax 216*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 217*9880d681SAndroid Build Coastguard Worker %b = extractelement <4 x i32> %a, i256 0 218*9880d681SAndroid Build Coastguard Worker ret i32 %b 219*9880d681SAndroid Build Coastguard Worker} 220*9880d681SAndroid Build Coastguard Worker 221*9880d681SAndroid Build Coastguard Workerdefine i32 @extractelement_v4i32_3(<4 x i32> %a) nounwind { 222*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: extractelement_v4i32_3: 223*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 224*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,1,2,3] 225*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %xmm0, %eax 226*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 227*9880d681SAndroid Build Coastguard Worker; 228*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: extractelement_v4i32_3: 229*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 230*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pextrd $3, %xmm0, %eax 231*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 232*9880d681SAndroid Build Coastguard Worker; 233*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v4i32_3: 234*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 235*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpextrd $3, %xmm0, %eax 236*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 237*9880d681SAndroid Build Coastguard Worker %b = extractelement <4 x i32> %a, i256 3 238*9880d681SAndroid Build Coastguard Worker ret i32 %b 239*9880d681SAndroid Build Coastguard Worker} 240*9880d681SAndroid Build Coastguard Worker 241*9880d681SAndroid Build Coastguard Workerdefine i32 @extractelement_v8i32_0(<8 x i32> %a) nounwind { 242*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_v8i32_0: 243*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 244*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %xmm1, %eax 245*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 246*9880d681SAndroid Build Coastguard Worker; 247*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v8i32_0: 248*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 249*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vextractf128 $1, %ymm0, %xmm0 250*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovd %xmm0, %eax 251*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vzeroupper 252*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 253*9880d681SAndroid Build Coastguard Worker %b = extractelement <8 x i32> %a, i256 4 254*9880d681SAndroid Build Coastguard Worker ret i32 %b 255*9880d681SAndroid Build Coastguard Worker} 256*9880d681SAndroid Build Coastguard Worker 257*9880d681SAndroid Build Coastguard Workerdefine i32 @extractelement_v8i32_4(<8 x i32> %a) nounwind { 258*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_v8i32_4: 259*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 260*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %xmm1, %eax 261*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 262*9880d681SAndroid Build Coastguard Worker; 263*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v8i32_4: 264*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 265*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vextractf128 $1, %ymm0, %xmm0 266*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovd %xmm0, %eax 267*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vzeroupper 268*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 269*9880d681SAndroid Build Coastguard Worker %b = extractelement <8 x i32> %a, i256 4 270*9880d681SAndroid Build Coastguard Worker ret i32 %b 271*9880d681SAndroid Build Coastguard Worker} 272*9880d681SAndroid Build Coastguard Worker 273*9880d681SAndroid Build Coastguard Workerdefine i32 @extractelement_v8i32_7(<8 x i32> %a) nounwind { 274*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: extractelement_v8i32_7: 275*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 276*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[3,1,2,3] 277*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %xmm0, %eax 278*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 279*9880d681SAndroid Build Coastguard Worker; 280*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: extractelement_v8i32_7: 281*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 282*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pextrd $3, %xmm1, %eax 283*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 284*9880d681SAndroid Build Coastguard Worker; 285*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: extractelement_v8i32_7: 286*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 287*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 288*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpextrd $3, %xmm0, %eax 289*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 290*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 291*9880d681SAndroid Build Coastguard Worker; 292*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: extractelement_v8i32_7: 293*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 294*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 295*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpextrd $3, %xmm0, %eax 296*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 297*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 298*9880d681SAndroid Build Coastguard Worker %b = extractelement <8 x i32> %a, i64 7 299*9880d681SAndroid Build Coastguard Worker ret i32 %b 300*9880d681SAndroid Build Coastguard Worker} 301*9880d681SAndroid Build Coastguard Worker 302*9880d681SAndroid Build Coastguard Workerdefine i64 @extractelement_v2i64_0(<2 x i64> %a, i256 %i) nounwind { 303*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_v2i64_0: 304*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 305*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movd %xmm0, %rax 306*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 307*9880d681SAndroid Build Coastguard Worker; 308*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v2i64_0: 309*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 310*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovq %xmm0, %rax 311*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 312*9880d681SAndroid Build Coastguard Worker %b = extractelement <2 x i64> %a, i256 0 313*9880d681SAndroid Build Coastguard Worker ret i64 %b 314*9880d681SAndroid Build Coastguard Worker} 315*9880d681SAndroid Build Coastguard Worker 316*9880d681SAndroid Build Coastguard Workerdefine i64 @extractelement_v2i64_1(<2 x i64> %a, i256 %i) nounwind { 317*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: extractelement_v2i64_1: 318*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 319*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 320*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %xmm0, %rax 321*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 322*9880d681SAndroid Build Coastguard Worker; 323*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: extractelement_v2i64_1: 324*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 325*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pextrq $1, %xmm0, %rax 326*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 327*9880d681SAndroid Build Coastguard Worker; 328*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v2i64_1: 329*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 330*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpextrq $1, %xmm0, %rax 331*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 332*9880d681SAndroid Build Coastguard Worker %b = extractelement <2 x i64> %a, i256 1 333*9880d681SAndroid Build Coastguard Worker ret i64 %b 334*9880d681SAndroid Build Coastguard Worker} 335*9880d681SAndroid Build Coastguard Worker 336*9880d681SAndroid Build Coastguard Workerdefine i64 @extractelement_v4i64_1(<4 x i64> %a, i256 %i) nounwind { 337*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: extractelement_v4i64_1: 338*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 339*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 340*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %xmm0, %rax 341*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 342*9880d681SAndroid Build Coastguard Worker; 343*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: extractelement_v4i64_1: 344*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 345*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pextrq $1, %xmm0, %rax 346*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 347*9880d681SAndroid Build Coastguard Worker; 348*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v4i64_1: 349*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 350*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpextrq $1, %xmm0, %rax 351*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vzeroupper 352*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 353*9880d681SAndroid Build Coastguard Worker %b = extractelement <4 x i64> %a, i256 1 354*9880d681SAndroid Build Coastguard Worker ret i64 %b 355*9880d681SAndroid Build Coastguard Worker} 356*9880d681SAndroid Build Coastguard Worker 357*9880d681SAndroid Build Coastguard Workerdefine i64 @extractelement_v4i64_3(<4 x i64> %a, i256 %i) nounwind { 358*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: extractelement_v4i64_3: 359*9880d681SAndroid Build Coastguard Worker; SSE2: # BB#0: 360*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1] 361*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: movd %xmm0, %rax 362*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT: retq 363*9880d681SAndroid Build Coastguard Worker; 364*9880d681SAndroid Build Coastguard Worker; SSE41-LABEL: extractelement_v4i64_3: 365*9880d681SAndroid Build Coastguard Worker; SSE41: # BB#0: 366*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: pextrq $1, %xmm1, %rax 367*9880d681SAndroid Build Coastguard Worker; SSE41-NEXT: retq 368*9880d681SAndroid Build Coastguard Worker; 369*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: extractelement_v4i64_3: 370*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 371*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 372*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vpextrq $1, %xmm0, %rax 373*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 374*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 375*9880d681SAndroid Build Coastguard Worker; 376*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: extractelement_v4i64_3: 377*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 378*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 379*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpextrq $1, %xmm0, %rax 380*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 381*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 382*9880d681SAndroid Build Coastguard Worker %b = extractelement <4 x i64> %a, i256 3 383*9880d681SAndroid Build Coastguard Worker ret i64 %b 384*9880d681SAndroid Build Coastguard Worker} 385*9880d681SAndroid Build Coastguard Worker 386*9880d681SAndroid Build Coastguard Worker; 387*9880d681SAndroid Build Coastguard Worker; ExtractElement - Variable Index 388*9880d681SAndroid Build Coastguard Worker; 389*9880d681SAndroid Build Coastguard Worker 390*9880d681SAndroid Build Coastguard Workerdefine i8 @extractelement_v16i8_var(<16 x i8> %a, i256 %i) nounwind { 391*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_v16i8_var: 392*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 393*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp) 394*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: leaq -{{[0-9]+}}(%rsp), %rax 395*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movb (%rdi,%rax), %al 396*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 397*9880d681SAndroid Build Coastguard Worker; 398*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v16i8_var: 399*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 400*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp) 401*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: leaq -{{[0-9]+}}(%rsp), %rax 402*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movb (%rdi,%rax), %al 403*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 404*9880d681SAndroid Build Coastguard Worker %b = extractelement <16 x i8> %a, i256 %i 405*9880d681SAndroid Build Coastguard Worker ret i8 %b 406*9880d681SAndroid Build Coastguard Worker} 407*9880d681SAndroid Build Coastguard Worker 408*9880d681SAndroid Build Coastguard Workerdefine i8 @extractelement_v32i8_var(<32 x i8> %a, i256 %i) nounwind { 409*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_v32i8_var: 410*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 411*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pushq %rbp 412*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movq %rsp, %rbp 413*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: andq $-32, %rsp 414*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subq $64, %rsp 415*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, {{[0-9]+}}(%rsp) 416*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm0, (%rsp) 417*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: leaq (%rsp), %rax 418*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movb (%rdi,%rax), %al 419*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movq %rbp, %rsp 420*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: popq %rbp 421*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 422*9880d681SAndroid Build Coastguard Worker; 423*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v32i8_var: 424*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 425*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: pushq %rbp 426*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movq %rsp, %rbp 427*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: andq $-32, %rsp 428*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: subq $64, %rsp 429*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovaps %ymm0, (%rsp) 430*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: leaq (%rsp), %rax 431*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movb (%rdi,%rax), %al 432*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movq %rbp, %rsp 433*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: popq %rbp 434*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vzeroupper 435*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 436*9880d681SAndroid Build Coastguard Worker %b = extractelement <32 x i8> %a, i256 %i 437*9880d681SAndroid Build Coastguard Worker ret i8 %b 438*9880d681SAndroid Build Coastguard Worker} 439*9880d681SAndroid Build Coastguard Worker 440*9880d681SAndroid Build Coastguard Workerdefine i16 @extractelement_v8i16_var(<8 x i16> %a, i256 %i) nounwind { 441*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_v8i16_var: 442*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 443*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp) 444*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movzwl -24(%rsp,%rdi,2), %eax 445*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 446*9880d681SAndroid Build Coastguard Worker; 447*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v8i16_var: 448*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 449*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp) 450*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movzwl -24(%rsp,%rdi,2), %eax 451*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 452*9880d681SAndroid Build Coastguard Worker %b = extractelement <8 x i16> %a, i256 %i 453*9880d681SAndroid Build Coastguard Worker ret i16 %b 454*9880d681SAndroid Build Coastguard Worker} 455*9880d681SAndroid Build Coastguard Worker 456*9880d681SAndroid Build Coastguard Workerdefine i16 @extractelement_v16i16_var(<16 x i16> %a, i256 %i) nounwind { 457*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_v16i16_var: 458*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 459*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pushq %rbp 460*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movq %rsp, %rbp 461*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: andq $-32, %rsp 462*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subq $64, %rsp 463*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, {{[0-9]+}}(%rsp) 464*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm0, (%rsp) 465*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movzwl (%rsp,%rdi,2), %eax 466*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movq %rbp, %rsp 467*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: popq %rbp 468*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 469*9880d681SAndroid Build Coastguard Worker; 470*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v16i16_var: 471*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 472*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: pushq %rbp 473*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movq %rsp, %rbp 474*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: andq $-32, %rsp 475*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: subq $64, %rsp 476*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovaps %ymm0, (%rsp) 477*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movzwl (%rsp,%rdi,2), %eax 478*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movq %rbp, %rsp 479*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: popq %rbp 480*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vzeroupper 481*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 482*9880d681SAndroid Build Coastguard Worker %b = extractelement <16 x i16> %a, i256 %i 483*9880d681SAndroid Build Coastguard Worker ret i16 %b 484*9880d681SAndroid Build Coastguard Worker} 485*9880d681SAndroid Build Coastguard Worker 486*9880d681SAndroid Build Coastguard Workerdefine i32 @extractelement_v4i32_var(<4 x i32> %a, i256 %i) nounwind { 487*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_v4i32_var: 488*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 489*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp) 490*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl -24(%rsp,%rdi,4), %eax 491*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 492*9880d681SAndroid Build Coastguard Worker; 493*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v4i32_var: 494*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 495*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp) 496*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movl -24(%rsp,%rdi,4), %eax 497*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 498*9880d681SAndroid Build Coastguard Worker %b = extractelement <4 x i32> %a, i256 %i 499*9880d681SAndroid Build Coastguard Worker ret i32 %b 500*9880d681SAndroid Build Coastguard Worker} 501*9880d681SAndroid Build Coastguard Worker 502*9880d681SAndroid Build Coastguard Workerdefine i32 @extractelement_v8i32_var(<8 x i32> %a, i256 %i) nounwind { 503*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_v8i32_var: 504*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 505*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pushq %rbp 506*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movq %rsp, %rbp 507*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: andq $-32, %rsp 508*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subq $64, %rsp 509*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, {{[0-9]+}}(%rsp) 510*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm0, (%rsp) 511*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movl (%rsp,%rdi,4), %eax 512*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movq %rbp, %rsp 513*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: popq %rbp 514*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 515*9880d681SAndroid Build Coastguard Worker; 516*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: extractelement_v8i32_var: 517*9880d681SAndroid Build Coastguard Worker; AVX1: # BB#0: 518*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: pushq %rbp 519*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rsp, %rbp 520*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: andq $-32, %rsp 521*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: subq $64, %rsp 522*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vmovaps %ymm0, (%rsp) 523*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movl (%rsp,%rdi,4), %eax 524*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: movq %rbp, %rsp 525*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: popq %rbp 526*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: vzeroupper 527*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT: retq 528*9880d681SAndroid Build Coastguard Worker; 529*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: extractelement_v8i32_var: 530*9880d681SAndroid Build Coastguard Worker; AVX2: # BB#0: 531*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %edi, %xmm1 532*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vpermd %ymm0, %ymm1, %ymm0 533*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vmovd %xmm0, %eax 534*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: vzeroupper 535*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT: retq 536*9880d681SAndroid Build Coastguard Worker %b = extractelement <8 x i32> %a, i256 %i 537*9880d681SAndroid Build Coastguard Worker ret i32 %b 538*9880d681SAndroid Build Coastguard Worker} 539*9880d681SAndroid Build Coastguard Worker 540*9880d681SAndroid Build Coastguard Workerdefine i64 @extractelement_v2i64_var(<2 x i64> %a, i256 %i) nounwind { 541*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_v2i64_var: 542*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 543*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp) 544*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movq -24(%rsp,%rdi,8), %rax 545*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 546*9880d681SAndroid Build Coastguard Worker; 547*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v2i64_var: 548*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 549*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp) 550*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movq -24(%rsp,%rdi,8), %rax 551*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 552*9880d681SAndroid Build Coastguard Worker %b = extractelement <2 x i64> %a, i256 %i 553*9880d681SAndroid Build Coastguard Worker ret i64 %b 554*9880d681SAndroid Build Coastguard Worker} 555*9880d681SAndroid Build Coastguard Worker 556*9880d681SAndroid Build Coastguard Workerdefine i64 @extractelement_v4i64_var(<4 x i64> %a, i256 %i) nounwind { 557*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_v4i64_var: 558*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 559*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pushq %rbp 560*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movq %rsp, %rbp 561*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: andq $-32, %rsp 562*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: subq $64, %rsp 563*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm1, {{[0-9]+}}(%rsp) 564*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movaps %xmm0, (%rsp) 565*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movq (%rsp,%rdi,8), %rax 566*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movq %rbp, %rsp 567*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: popq %rbp 568*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 569*9880d681SAndroid Build Coastguard Worker; 570*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v4i64_var: 571*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 572*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: pushq %rbp 573*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movq %rsp, %rbp 574*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: andq $-32, %rsp 575*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: subq $64, %rsp 576*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovaps %ymm0, (%rsp) 577*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movq (%rsp,%rdi,8), %rax 578*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: movq %rbp, %rsp 579*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: popq %rbp 580*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vzeroupper 581*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 582*9880d681SAndroid Build Coastguard Worker %b = extractelement <4 x i64> %a, i256 %i 583*9880d681SAndroid Build Coastguard Worker ret i64 %b 584*9880d681SAndroid Build Coastguard Worker} 585*9880d681SAndroid Build Coastguard Worker 586*9880d681SAndroid Build Coastguard Worker; 587*9880d681SAndroid Build Coastguard Worker; ExtractElement - Constant (Out Of Range) Index 588*9880d681SAndroid Build Coastguard Worker; 589*9880d681SAndroid Build Coastguard Worker 590*9880d681SAndroid Build Coastguard Workerdefine i8 @extractelement_32i8_m1(<32 x i8> %a) nounwind { 591*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_32i8_m1: 592*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 593*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 594*9880d681SAndroid Build Coastguard Worker; 595*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_32i8_m1: 596*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 597*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 598*9880d681SAndroid Build Coastguard Worker %b = extractelement <32 x i8> %a, i256 -1 599*9880d681SAndroid Build Coastguard Worker ret i8 %b 600*9880d681SAndroid Build Coastguard Worker} 601*9880d681SAndroid Build Coastguard Worker 602*9880d681SAndroid Build Coastguard Workerdefine i16 @extractelement_v16i16_m4(<16 x i16> %a, i256 %i) nounwind { 603*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_v16i16_m4: 604*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 605*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 606*9880d681SAndroid Build Coastguard Worker; 607*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v16i16_m4: 608*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 609*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 610*9880d681SAndroid Build Coastguard Worker %b = extractelement <16 x i16> %a, i256 -4 611*9880d681SAndroid Build Coastguard Worker ret i16 %b 612*9880d681SAndroid Build Coastguard Worker} 613*9880d681SAndroid Build Coastguard Worker 614*9880d681SAndroid Build Coastguard Workerdefine i32 @extractelement_v8i32_15(<8 x i32> %a) nounwind { 615*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_v8i32_15: 616*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 617*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 618*9880d681SAndroid Build Coastguard Worker; 619*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v8i32_15: 620*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 621*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 622*9880d681SAndroid Build Coastguard Worker %b = extractelement <8 x i32> %a, i64 15 623*9880d681SAndroid Build Coastguard Worker ret i32 %b 624*9880d681SAndroid Build Coastguard Worker} 625*9880d681SAndroid Build Coastguard Worker 626*9880d681SAndroid Build Coastguard Workerdefine i64 @extractelement_v4i64_4(<4 x i64> %a, i256 %i) nounwind { 627*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: extractelement_v4i64_4: 628*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 629*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 630*9880d681SAndroid Build Coastguard Worker; 631*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: extractelement_v4i64_4: 632*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 633*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 634*9880d681SAndroid Build Coastguard Worker %b = extractelement <4 x i64> %a, i256 4 635*9880d681SAndroid Build Coastguard Worker ret i64 %b 636*9880d681SAndroid Build Coastguard Worker} 637