868 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck --check-prefix=SKX %s3 4 5define <8 x i16> @extract_subvector128_v32i16(<32 x i16> %x) nounwind {6; SKX-LABEL: extract_subvector128_v32i16:7; SKX: ## %bb.0:8; SKX-NEXT: vextractf32x4 $2, %zmm0, %xmm09; SKX-NEXT: vzeroupper10; SKX-NEXT: retq11 %r1 = shufflevector <32 x i16> %x, <32 x i16> undef, <8 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23>12 ret <8 x i16> %r113}14 15define <8 x i16> @extract_subvector128_v32i16_first_element(<32 x i16> %x) nounwind {16; SKX-LABEL: extract_subvector128_v32i16_first_element:17; SKX: ## %bb.0:18; SKX-NEXT: ## kill: def $xmm0 killed $xmm0 killed $zmm019; SKX-NEXT: vzeroupper20; SKX-NEXT: retq21 %r1 = shufflevector <32 x i16> %x, <32 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>22 ret <8 x i16> %r123}24 25define <16 x i8> @extract_subvector128_v64i8(<64 x i8> %x) nounwind {26; SKX-LABEL: extract_subvector128_v64i8:27; SKX: ## %bb.0:28; SKX-NEXT: vextractf32x4 $2, %zmm0, %xmm029; SKX-NEXT: vzeroupper30; SKX-NEXT: retq31 %r1 = shufflevector <64 x i8> %x, <64 x i8> undef, <16 x i32> <i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38,i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47>32 ret <16 x i8> %r133}34 35define <16 x i8> @extract_subvector128_v64i8_first_element(<64 x i8> %x) nounwind {36; SKX-LABEL: extract_subvector128_v64i8_first_element:37; SKX: ## %bb.0:38; SKX-NEXT: ## kill: def $xmm0 killed $xmm0 killed $zmm039; SKX-NEXT: vzeroupper40; SKX-NEXT: retq41 %r1 = shufflevector <64 x i8> %x, <64 x i8> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>42 ret <16 x i8> %r143}44 45 46define <16 x i16> @extract_subvector256_v32i16(<32 x i16> %x) nounwind {47; SKX-LABEL: extract_subvector256_v32i16:48; SKX: ## %bb.0:49; SKX-NEXT: vextractf64x4 $1, %zmm0, %ymm050; SKX-NEXT: retq51 %r1 = shufflevector <32 x i16> %x, <32 x i16> undef, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>52 ret <16 x i16> %r153}54 55define <32 x i8> @extract_subvector256_v64i8(<64 x i8> %x) nounwind {56; SKX-LABEL: extract_subvector256_v64i8:57; SKX: ## %bb.0:58; SKX-NEXT: vextractf64x4 $1, %zmm0, %ymm059; SKX-NEXT: retq60 %r1 = shufflevector <64 x i8> %x, <64 x i8> undef, <32 x i32> <i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63>61 ret <32 x i8> %r162}63 64define void @extract_subvector256_v8f64_store(ptr nocapture %addr, <4 x double> %a) nounwind uwtable ssp {65; SKX-LABEL: extract_subvector256_v8f64_store:66; SKX: ## %bb.0: ## %entry67; SKX-NEXT: vextractf128 $1, %ymm0, (%rdi)68; SKX-NEXT: vzeroupper69; SKX-NEXT: retq70entry:71 %0 = shufflevector <4 x double> %a, <4 x double> undef, <2 x i32> <i32 2, i32 3>72 store <2 x double> %0, ptr %addr, align 173 ret void74}75 76define void @extract_subvector256_v8f32_store(ptr nocapture %addr, <8 x float> %a) nounwind uwtable ssp {77; SKX-LABEL: extract_subvector256_v8f32_store:78; SKX: ## %bb.0: ## %entry79; SKX-NEXT: vextractf128 $1, %ymm0, (%rdi)80; SKX-NEXT: vzeroupper81; SKX-NEXT: retq82entry:83 %0 = shufflevector <8 x float> %a, <8 x float> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>84 store <4 x float> %0, ptr %addr, align 185 ret void86}87 88define void @extract_subvector256_v4i64_store(ptr nocapture %addr, <4 x i64> %a) nounwind uwtable ssp {89; SKX-LABEL: extract_subvector256_v4i64_store:90; SKX: ## %bb.0: ## %entry91; SKX-NEXT: vextractf128 $1, %ymm0, (%rdi)92; SKX-NEXT: vzeroupper93; SKX-NEXT: retq94entry:95 %0 = shufflevector <4 x i64> %a, <4 x i64> undef, <2 x i32> <i32 2, i32 3>96 store <2 x i64> %0, ptr %addr, align 197 ret void98}99 100define void @extract_subvector256_v8i32_store(ptr nocapture %addr, <8 x i32> %a) nounwind uwtable ssp {101; SKX-LABEL: extract_subvector256_v8i32_store:102; SKX: ## %bb.0: ## %entry103; SKX-NEXT: vextractf128 $1, %ymm0, (%rdi)104; SKX-NEXT: vzeroupper105; SKX-NEXT: retq106entry:107 %0 = shufflevector <8 x i32> %a, <8 x i32> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>108 store <4 x i32> %0, ptr %addr, align 1109 ret void110}111 112define void @extract_subvector256_v16i16_store(ptr nocapture %addr, <16 x i16> %a) nounwind uwtable ssp {113; SKX-LABEL: extract_subvector256_v16i16_store:114; SKX: ## %bb.0: ## %entry115; SKX-NEXT: vextractf128 $1, %ymm0, (%rdi)116; SKX-NEXT: vzeroupper117; SKX-NEXT: retq118entry:119 %0 = shufflevector <16 x i16> %a, <16 x i16> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>120 store <8 x i16> %0, ptr %addr, align 1121 ret void122}123 124define void @extract_subvector256_v32i8_store(ptr nocapture %addr, <32 x i8> %a) nounwind uwtable ssp {125; SKX-LABEL: extract_subvector256_v32i8_store:126; SKX: ## %bb.0: ## %entry127; SKX-NEXT: vextractf128 $1, %ymm0, (%rdi)128; SKX-NEXT: vzeroupper129; SKX-NEXT: retq130entry:131 %0 = shufflevector <32 x i8> %a, <32 x i8> undef, <16 x i32> <i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>132 store <16 x i8> %0, ptr %addr, align 1133 ret void134}135 136define void @extract_subvector256_v4f64_store_lo(ptr nocapture %addr, <4 x double> %a) nounwind uwtable ssp {137; SKX-LABEL: extract_subvector256_v4f64_store_lo:138; SKX: ## %bb.0: ## %entry139; SKX-NEXT: vmovups %xmm0, (%rdi)140; SKX-NEXT: vzeroupper141; SKX-NEXT: retq142entry:143 %0 = shufflevector <4 x double> %a, <4 x double> undef, <2 x i32> <i32 0, i32 1>144 store <2 x double> %0, ptr %addr, align 1145 ret void146}147 148define void @extract_subvector256_v4f64_store_lo_align_16(ptr nocapture %addr, <4 x double> %a) nounwind uwtable ssp {149; SKX-LABEL: extract_subvector256_v4f64_store_lo_align_16:150; SKX: ## %bb.0: ## %entry151; SKX-NEXT: vmovaps %xmm0, (%rdi)152; SKX-NEXT: vzeroupper153; SKX-NEXT: retq154entry:155 %0 = shufflevector <4 x double> %a, <4 x double> undef, <2 x i32> <i32 0, i32 1>156 store <2 x double> %0, ptr %addr, align 16157 ret void158}159 160define void @extract_subvector256_v4f32_store_lo(ptr nocapture %addr, <8 x float> %a) nounwind uwtable ssp {161; SKX-LABEL: extract_subvector256_v4f32_store_lo:162; SKX: ## %bb.0: ## %entry163; SKX-NEXT: vmovups %xmm0, (%rdi)164; SKX-NEXT: vzeroupper165; SKX-NEXT: retq166entry:167 %0 = shufflevector <8 x float> %a, <8 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>168 store <4 x float> %0, ptr %addr, align 1169 ret void170}171 172define void @extract_subvector256_v4f32_store_lo_align_16(ptr nocapture %addr, <8 x float> %a) nounwind uwtable ssp {173; SKX-LABEL: extract_subvector256_v4f32_store_lo_align_16:174; SKX: ## %bb.0: ## %entry175; SKX-NEXT: vmovaps %xmm0, (%rdi)176; SKX-NEXT: vzeroupper177; SKX-NEXT: retq178entry:179 %0 = shufflevector <8 x float> %a, <8 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>180 store <4 x float> %0, ptr %addr, align 16181 ret void182}183 184define void @extract_subvector256_v2i64_store_lo(ptr nocapture %addr, <4 x i64> %a) nounwind uwtable ssp {185; SKX-LABEL: extract_subvector256_v2i64_store_lo:186; SKX: ## %bb.0: ## %entry187; SKX-NEXT: vmovups %xmm0, (%rdi)188; SKX-NEXT: vzeroupper189; SKX-NEXT: retq190entry:191 %0 = shufflevector <4 x i64> %a, <4 x i64> undef, <2 x i32> <i32 0, i32 1>192 store <2 x i64> %0, ptr %addr, align 1193 ret void194}195 196define void @extract_subvector256_v2i64_store_lo_align_16(ptr nocapture %addr, <4 x i64> %a) nounwind uwtable ssp {197; SKX-LABEL: extract_subvector256_v2i64_store_lo_align_16:198; SKX: ## %bb.0: ## %entry199; SKX-NEXT: vmovaps %xmm0, (%rdi)200; SKX-NEXT: vzeroupper201; SKX-NEXT: retq202entry:203 %0 = shufflevector <4 x i64> %a, <4 x i64> undef, <2 x i32> <i32 0, i32 1>204 store <2 x i64> %0, ptr %addr, align 16205 ret void206}207 208define void @extract_subvector256_v4i32_store_lo(ptr nocapture %addr, <8 x i32> %a) nounwind uwtable ssp {209; SKX-LABEL: extract_subvector256_v4i32_store_lo:210; SKX: ## %bb.0: ## %entry211; SKX-NEXT: vmovups %xmm0, (%rdi)212; SKX-NEXT: vzeroupper213; SKX-NEXT: retq214entry:215 %0 = shufflevector <8 x i32> %a, <8 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>216 store <4 x i32> %0, ptr %addr, align 1217 ret void218}219 220define void @extract_subvector256_v4i32_store_lo_align_16(ptr nocapture %addr, <8 x i32> %a) nounwind uwtable ssp {221; SKX-LABEL: extract_subvector256_v4i32_store_lo_align_16:222; SKX: ## %bb.0: ## %entry223; SKX-NEXT: vmovaps %xmm0, (%rdi)224; SKX-NEXT: vzeroupper225; SKX-NEXT: retq226entry:227 %0 = shufflevector <8 x i32> %a, <8 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>228 store <4 x i32> %0, ptr %addr, align 16229 ret void230}231 232define void @extract_subvector256_v8i16_store_lo(ptr nocapture %addr, <16 x i16> %a) nounwind uwtable ssp {233; SKX-LABEL: extract_subvector256_v8i16_store_lo:234; SKX: ## %bb.0: ## %entry235; SKX-NEXT: vmovups %xmm0, (%rdi)236; SKX-NEXT: vzeroupper237; SKX-NEXT: retq238entry:239 %0 = shufflevector <16 x i16> %a, <16 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>240 store <8 x i16> %0, ptr %addr, align 1241 ret void242}243 244define void @extract_subvector256_v8i16_store_lo_align_16(ptr nocapture %addr, <16 x i16> %a) nounwind uwtable ssp {245; SKX-LABEL: extract_subvector256_v8i16_store_lo_align_16:246; SKX: ## %bb.0: ## %entry247; SKX-NEXT: vmovaps %xmm0, (%rdi)248; SKX-NEXT: vzeroupper249; SKX-NEXT: retq250entry:251 %0 = shufflevector <16 x i16> %a, <16 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>252 store <8 x i16> %0, ptr %addr, align 16253 ret void254}255 256define void @extract_subvector256_v16i8_store_lo(ptr nocapture %addr, <32 x i8> %a) nounwind uwtable ssp {257; SKX-LABEL: extract_subvector256_v16i8_store_lo:258; SKX: ## %bb.0: ## %entry259; SKX-NEXT: vmovups %xmm0, (%rdi)260; SKX-NEXT: vzeroupper261; SKX-NEXT: retq262entry:263 %0 = shufflevector <32 x i8> %a, <32 x i8> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>264 store <16 x i8> %0, ptr %addr, align 1265 ret void266}267 268define void @extract_subvector256_v16i8_store_lo_align_16(ptr nocapture %addr, <32 x i8> %a) nounwind uwtable ssp {269; SKX-LABEL: extract_subvector256_v16i8_store_lo_align_16:270; SKX: ## %bb.0: ## %entry271; SKX-NEXT: vmovaps %xmm0, (%rdi)272; SKX-NEXT: vzeroupper273; SKX-NEXT: retq274entry:275 %0 = shufflevector <32 x i8> %a, <32 x i8> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>276 store <16 x i8> %0, ptr %addr, align 16277 ret void278}279 280define void @extract_subvector512_v2f64_store_lo(ptr nocapture %addr, <8 x double> %a) nounwind uwtable ssp {281; SKX-LABEL: extract_subvector512_v2f64_store_lo:282; SKX: ## %bb.0: ## %entry283; SKX-NEXT: vmovups %xmm0, (%rdi)284; SKX-NEXT: vzeroupper285; SKX-NEXT: retq286entry:287 %0 = shufflevector <8 x double> %a, <8 x double> undef, <2 x i32> <i32 0, i32 1>288 store <2 x double> %0, ptr %addr, align 1289 ret void290}291 292define void @extract_subvector512_v2f64_store_lo_align_16(ptr nocapture %addr, <8 x double> %a) nounwind uwtable ssp {293; SKX-LABEL: extract_subvector512_v2f64_store_lo_align_16:294; SKX: ## %bb.0: ## %entry295; SKX-NEXT: vmovaps %xmm0, (%rdi)296; SKX-NEXT: vzeroupper297; SKX-NEXT: retq298entry:299 %0 = shufflevector <8 x double> %a, <8 x double> undef, <2 x i32> <i32 0, i32 1>300 store <2 x double> %0, ptr %addr, align 16301 ret void302}303 304define void @extract_subvector512_v4f32_store_lo(ptr nocapture %addr, <16 x float> %a) nounwind uwtable ssp {305; SKX-LABEL: extract_subvector512_v4f32_store_lo:306; SKX: ## %bb.0: ## %entry307; SKX-NEXT: vmovups %xmm0, (%rdi)308; SKX-NEXT: vzeroupper309; SKX-NEXT: retq310entry:311 %0 = shufflevector <16 x float> %a, <16 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>312 store <4 x float> %0, ptr %addr, align 1313 ret void314}315 316define void @extract_subvector512_v4f32_store_lo_align_16(ptr nocapture %addr, <16 x float> %a) nounwind uwtable ssp {317; SKX-LABEL: extract_subvector512_v4f32_store_lo_align_16:318; SKX: ## %bb.0: ## %entry319; SKX-NEXT: vmovaps %xmm0, (%rdi)320; SKX-NEXT: vzeroupper321; SKX-NEXT: retq322entry:323 %0 = shufflevector <16 x float> %a, <16 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>324 store <4 x float> %0, ptr %addr, align 16325 ret void326}327 328define void @extract_subvector512_v2i64_store_lo(ptr nocapture %addr, <8 x i64> %a) nounwind uwtable ssp {329; SKX-LABEL: extract_subvector512_v2i64_store_lo:330; SKX: ## %bb.0: ## %entry331; SKX-NEXT: vmovups %xmm0, (%rdi)332; SKX-NEXT: vzeroupper333; SKX-NEXT: retq334entry:335 %0 = shufflevector <8 x i64> %a, <8 x i64> undef, <2 x i32> <i32 0, i32 1>336 store <2 x i64> %0, ptr %addr, align 1337 ret void338}339 340define void @extract_subvector512_v2i64_store_lo_align_16(ptr nocapture %addr, <8 x i64> %a) nounwind uwtable ssp {341; SKX-LABEL: extract_subvector512_v2i64_store_lo_align_16:342; SKX: ## %bb.0: ## %entry343; SKX-NEXT: vmovaps %xmm0, (%rdi)344; SKX-NEXT: vzeroupper345; SKX-NEXT: retq346entry:347 %0 = shufflevector <8 x i64> %a, <8 x i64> undef, <2 x i32> <i32 0, i32 1>348 store <2 x i64> %0, ptr %addr, align 16349 ret void350}351 352define void @extract_subvector512_v4i32_store_lo(ptr nocapture %addr, <16 x i32> %a) nounwind uwtable ssp {353; SKX-LABEL: extract_subvector512_v4i32_store_lo:354; SKX: ## %bb.0: ## %entry355; SKX-NEXT: vmovups %xmm0, (%rdi)356; SKX-NEXT: vzeroupper357; SKX-NEXT: retq358entry:359 %0 = shufflevector <16 x i32> %a, <16 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>360 store <4 x i32> %0, ptr %addr, align 1361 ret void362}363 364define void @extract_subvector512_v4i32_store_lo_align_16(ptr nocapture %addr, <16 x i32> %a) nounwind uwtable ssp {365; SKX-LABEL: extract_subvector512_v4i32_store_lo_align_16:366; SKX: ## %bb.0: ## %entry367; SKX-NEXT: vmovaps %xmm0, (%rdi)368; SKX-NEXT: vzeroupper369; SKX-NEXT: retq370entry:371 %0 = shufflevector <16 x i32> %a, <16 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>372 store <4 x i32> %0, ptr %addr, align 16373 ret void374}375 376define void @extract_subvector512_v8i16_store_lo(ptr nocapture %addr, <32 x i16> %a) nounwind uwtable ssp {377; SKX-LABEL: extract_subvector512_v8i16_store_lo:378; SKX: ## %bb.0: ## %entry379; SKX-NEXT: vmovups %xmm0, (%rdi)380; SKX-NEXT: vzeroupper381; SKX-NEXT: retq382entry:383 %0 = shufflevector <32 x i16> %a, <32 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>384 store <8 x i16> %0, ptr %addr, align 1385 ret void386}387 388define void @extract_subvector512_v16i8_store_lo(ptr nocapture %addr, <64 x i8> %a) nounwind uwtable ssp {389; SKX-LABEL: extract_subvector512_v16i8_store_lo:390; SKX: ## %bb.0: ## %entry391; SKX-NEXT: vmovups %xmm0, (%rdi)392; SKX-NEXT: vzeroupper393; SKX-NEXT: retq394entry:395 %0 = shufflevector <64 x i8> %a, <64 x i8> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>396 store <16 x i8> %0, ptr %addr, align 1397 ret void398}399 400define void @extract_subvector512_v16i8_store_lo_align_16(ptr nocapture %addr, <64 x i8> %a) nounwind uwtable ssp {401; SKX-LABEL: extract_subvector512_v16i8_store_lo_align_16:402; SKX: ## %bb.0: ## %entry403; SKX-NEXT: vmovaps %xmm0, (%rdi)404; SKX-NEXT: vzeroupper405; SKX-NEXT: retq406entry:407 %0 = shufflevector <64 x i8> %a, <64 x i8> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>408 store <16 x i8> %0, ptr %addr, align 16409 ret void410}411 412define void @extract_subvector512_v4f64_store_lo(ptr nocapture %addr, <8 x double> %a) nounwind uwtable ssp {413; SKX-LABEL: extract_subvector512_v4f64_store_lo:414; SKX: ## %bb.0: ## %entry415; SKX-NEXT: vmovups %ymm0, (%rdi)416; SKX-NEXT: vzeroupper417; SKX-NEXT: retq418entry:419 %0 = shufflevector <8 x double> %a, <8 x double> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>420 store <4 x double> %0, ptr %addr, align 1421 ret void422}423 424define void @extract_subvector512_v4f64_store_lo_align_16(ptr nocapture %addr, <8 x double> %a) nounwind uwtable ssp {425; SKX-LABEL: extract_subvector512_v4f64_store_lo_align_16:426; SKX: ## %bb.0: ## %entry427; SKX-NEXT: vmovups %ymm0, (%rdi)428; SKX-NEXT: vzeroupper429; SKX-NEXT: retq430entry:431 %0 = shufflevector <8 x double> %a, <8 x double> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>432 store <4 x double> %0, ptr %addr, align 16433 ret void434}435 436define void @extract_subvector512_v4f64_store_lo_align_32(ptr nocapture %addr, <8 x double> %a) nounwind uwtable ssp {437; SKX-LABEL: extract_subvector512_v4f64_store_lo_align_32:438; SKX: ## %bb.0: ## %entry439; SKX-NEXT: vmovaps %ymm0, (%rdi)440; SKX-NEXT: vzeroupper441; SKX-NEXT: retq442entry:443 %0 = shufflevector <8 x double> %a, <8 x double> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>444 store <4 x double> %0, ptr %addr, align 32445 ret void446}447 448define void @extract_subvector512_v8f32_store_lo(ptr nocapture %addr, <16 x float> %a) nounwind uwtable ssp {449; SKX-LABEL: extract_subvector512_v8f32_store_lo:450; SKX: ## %bb.0: ## %entry451; SKX-NEXT: vmovups %ymm0, (%rdi)452; SKX-NEXT: vzeroupper453; SKX-NEXT: retq454entry:455 %0 = shufflevector <16 x float> %a, <16 x float> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>456 store <8 x float> %0, ptr %addr, align 1457 ret void458}459 460define void @extract_subvector512_v8f32_store_lo_align_16(ptr nocapture %addr, <16 x float> %a) nounwind uwtable ssp {461; SKX-LABEL: extract_subvector512_v8f32_store_lo_align_16:462; SKX: ## %bb.0: ## %entry463; SKX-NEXT: vmovups %ymm0, (%rdi)464; SKX-NEXT: vzeroupper465; SKX-NEXT: retq466entry:467 %0 = shufflevector <16 x float> %a, <16 x float> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>468 store <8 x float> %0, ptr %addr, align 16469 ret void470}471 472define void @extract_subvector512_v8f32_store_lo_align_32(ptr nocapture %addr, <16 x float> %a) nounwind uwtable ssp {473; SKX-LABEL: extract_subvector512_v8f32_store_lo_align_32:474; SKX: ## %bb.0: ## %entry475; SKX-NEXT: vmovaps %ymm0, (%rdi)476; SKX-NEXT: vzeroupper477; SKX-NEXT: retq478entry:479 %0 = shufflevector <16 x float> %a, <16 x float> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>480 store <8 x float> %0, ptr %addr, align 32481 ret void482}483 484define void @extract_subvector512_v4i64_store_lo(ptr nocapture %addr, <8 x i64> %a) nounwind uwtable ssp {485; SKX-LABEL: extract_subvector512_v4i64_store_lo:486; SKX: ## %bb.0: ## %entry487; SKX-NEXT: vmovups %ymm0, (%rdi)488; SKX-NEXT: vzeroupper489; SKX-NEXT: retq490entry:491 %0 = shufflevector <8 x i64> %a, <8 x i64> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>492 store <4 x i64> %0, ptr %addr, align 1493 ret void494}495 496define void @extract_subvector512_v4i64_store_lo_align_16(ptr nocapture %addr, <8 x i64> %a) nounwind uwtable ssp {497; SKX-LABEL: extract_subvector512_v4i64_store_lo_align_16:498; SKX: ## %bb.0: ## %entry499; SKX-NEXT: vmovups %ymm0, (%rdi)500; SKX-NEXT: vzeroupper501; SKX-NEXT: retq502entry:503 %0 = shufflevector <8 x i64> %a, <8 x i64> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>504 store <4 x i64> %0, ptr %addr, align 16505 ret void506}507 508define void @extract_subvector512_v4i64_store_lo_align_32(ptr nocapture %addr, <8 x i64> %a) nounwind uwtable ssp {509; SKX-LABEL: extract_subvector512_v4i64_store_lo_align_32:510; SKX: ## %bb.0: ## %entry511; SKX-NEXT: vmovaps %ymm0, (%rdi)512; SKX-NEXT: vzeroupper513; SKX-NEXT: retq514entry:515 %0 = shufflevector <8 x i64> %a, <8 x i64> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>516 store <4 x i64> %0, ptr %addr, align 32517 ret void518}519 520define void @extract_subvector512_v8i32_store_lo(ptr nocapture %addr, <16 x i32> %a) nounwind uwtable ssp {521; SKX-LABEL: extract_subvector512_v8i32_store_lo:522; SKX: ## %bb.0: ## %entry523; SKX-NEXT: vmovups %ymm0, (%rdi)524; SKX-NEXT: vzeroupper525; SKX-NEXT: retq526entry:527 %0 = shufflevector <16 x i32> %a, <16 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>528 store <8 x i32> %0, ptr %addr, align 1529 ret void530}531 532define void @extract_subvector512_v8i32_store_lo_align_16(ptr nocapture %addr, <16 x i32> %a) nounwind uwtable ssp {533; SKX-LABEL: extract_subvector512_v8i32_store_lo_align_16:534; SKX: ## %bb.0: ## %entry535; SKX-NEXT: vmovups %ymm0, (%rdi)536; SKX-NEXT: vzeroupper537; SKX-NEXT: retq538entry:539 %0 = shufflevector <16 x i32> %a, <16 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>540 store <8 x i32> %0, ptr %addr, align 16541 ret void542}543 544define void @extract_subvector512_v8i32_store_lo_align_32(ptr nocapture %addr, <16 x i32> %a) nounwind uwtable ssp {545; SKX-LABEL: extract_subvector512_v8i32_store_lo_align_32:546; SKX: ## %bb.0: ## %entry547; SKX-NEXT: vmovaps %ymm0, (%rdi)548; SKX-NEXT: vzeroupper549; SKX-NEXT: retq550entry:551 %0 = shufflevector <16 x i32> %a, <16 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>552 store <8 x i32> %0, ptr %addr, align 32553 ret void554}555 556define void @extract_subvector512_v16i16_store_lo(ptr nocapture %addr, <32 x i16> %a) nounwind uwtable ssp {557; SKX-LABEL: extract_subvector512_v16i16_store_lo:558; SKX: ## %bb.0: ## %entry559; SKX-NEXT: vmovups %ymm0, (%rdi)560; SKX-NEXT: vzeroupper561; SKX-NEXT: retq562entry:563 %0 = shufflevector <32 x i16> %a, <32 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>564 store <16 x i16> %0, ptr %addr, align 1565 ret void566}567 568define void @extract_subvector512_v16i16_store_lo_align_16(ptr nocapture %addr, <32 x i16> %a) nounwind uwtable ssp {569; SKX-LABEL: extract_subvector512_v16i16_store_lo_align_16:570; SKX: ## %bb.0: ## %entry571; SKX-NEXT: vmovups %ymm0, (%rdi)572; SKX-NEXT: vzeroupper573; SKX-NEXT: retq574entry:575 %0 = shufflevector <32 x i16> %a, <32 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>576 store <16 x i16> %0, ptr %addr, align 16577 ret void578}579 580define void @extract_subvector512_v16i16_store_lo_align_32(ptr nocapture %addr, <32 x i16> %a) nounwind uwtable ssp {581; SKX-LABEL: extract_subvector512_v16i16_store_lo_align_32:582; SKX: ## %bb.0: ## %entry583; SKX-NEXT: vmovaps %ymm0, (%rdi)584; SKX-NEXT: vzeroupper585; SKX-NEXT: retq586entry:587 %0 = shufflevector <32 x i16> %a, <32 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>588 store <16 x i16> %0, ptr %addr, align 32589 ret void590}591 592define void @extract_subvector512_v32i8_store_lo(ptr nocapture %addr, <64 x i8> %a) nounwind uwtable ssp {593; SKX-LABEL: extract_subvector512_v32i8_store_lo:594; SKX: ## %bb.0: ## %entry595; SKX-NEXT: vmovups %ymm0, (%rdi)596; SKX-NEXT: vzeroupper597; SKX-NEXT: retq598entry:599 %0 = shufflevector <64 x i8> %a, <64 x i8> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>600 store <32 x i8> %0, ptr %addr, align 1601 ret void602}603 604define void @extract_subvector512_v32i8_store_lo_align_16(ptr nocapture %addr, <64 x i8> %a) nounwind uwtable ssp {605; SKX-LABEL: extract_subvector512_v32i8_store_lo_align_16:606; SKX: ## %bb.0: ## %entry607; SKX-NEXT: vmovups %ymm0, (%rdi)608; SKX-NEXT: vzeroupper609; SKX-NEXT: retq610entry:611 %0 = shufflevector <64 x i8> %a, <64 x i8> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>612 store <32 x i8> %0, ptr %addr, align 16613 ret void614}615 616define void @extract_subvector512_v32i8_store_lo_align_32(ptr nocapture %addr, <64 x i8> %a) nounwind uwtable ssp {617; SKX-LABEL: extract_subvector512_v32i8_store_lo_align_32:618; SKX: ## %bb.0: ## %entry619; SKX-NEXT: vmovaps %ymm0, (%rdi)620; SKX-NEXT: vzeroupper621; SKX-NEXT: retq622entry:623 %0 = shufflevector <64 x i8> %a, <64 x i8> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>624 store <32 x i8> %0, ptr %addr, align 32625 ret void626}627 628define <4 x double> @test_mm512_mask_extractf64x4_pd(<4 x double> %__W, i8 %__U, <8 x double> %__A) {629; SKX-LABEL: test_mm512_mask_extractf64x4_pd:630; SKX: ## %bb.0: ## %entry631; SKX-NEXT: kmovd %edi, %k1632; SKX-NEXT: vextractf64x4 $1, %zmm1, %ymm0 {%k1}633; SKX-NEXT: retq634entry:635 %shuffle = shufflevector <8 x double> %__A, <8 x double> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>636 %0 = bitcast i8 %__U to <8 x i1>637 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>638 %1 = select <4 x i1> %extract, <4 x double> %shuffle, <4 x double> %__W639 ret <4 x double> %1640}641 642define <4 x double> @test_mm512_maskz_extractf64x4_pd(i8 %__U, <8 x double> %__A) {643; SKX-LABEL: test_mm512_maskz_extractf64x4_pd:644; SKX: ## %bb.0: ## %entry645; SKX-NEXT: kmovd %edi, %k1646; SKX-NEXT: vextractf64x4 $1, %zmm0, %ymm0 {%k1} {z}647; SKX-NEXT: retq648entry:649 %shuffle = shufflevector <8 x double> %__A, <8 x double> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>650 %0 = bitcast i8 %__U to <8 x i1>651 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>652 %1 = select <4 x i1> %extract, <4 x double> %shuffle, <4 x double> zeroinitializer653 ret <4 x double> %1654}655 656define <4 x float> @test_mm512_mask_extractf32x4_ps(<4 x float> %__W, i8 %__U, <8 x double> %__A) {657; SKX-LABEL: test_mm512_mask_extractf32x4_ps:658; SKX: ## %bb.0: ## %entry659; SKX-NEXT: kmovd %edi, %k1660; SKX-NEXT: vextractf32x4 $1, %zmm1, %xmm0 {%k1}661; SKX-NEXT: vzeroupper662; SKX-NEXT: retq663entry:664 %0 = bitcast <8 x double> %__A to <16 x float>665 %shuffle = shufflevector <16 x float> %0, <16 x float> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>666 %1 = bitcast i8 %__U to <8 x i1>667 %extract = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>668 %2 = select <4 x i1> %extract, <4 x float> %shuffle, <4 x float> %__W669 ret <4 x float> %2670}671 672define <4 x float> @test_mm512_maskz_extractf32x4_ps(i8 %__U, <8 x double> %__A) {673; SKX-LABEL: test_mm512_maskz_extractf32x4_ps:674; SKX: ## %bb.0: ## %entry675; SKX-NEXT: kmovd %edi, %k1676; SKX-NEXT: vextractf32x4 $1, %zmm0, %xmm0 {%k1} {z}677; SKX-NEXT: vzeroupper678; SKX-NEXT: retq679entry:680 %0 = bitcast <8 x double> %__A to <16 x float>681 %shuffle = shufflevector <16 x float> %0, <16 x float> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>682 %1 = bitcast i8 %__U to <8 x i1>683 %extract = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>684 %2 = select <4 x i1> %extract, <4 x float> %shuffle, <4 x float> zeroinitializer685 ret <4 x float> %2686}687 688define <2 x double> @test_mm256_mask_extractf64x2_pd(<2 x double> %__W, i8 %__U, <4 x double> %__A) {689; SKX-LABEL: test_mm256_mask_extractf64x2_pd:690; SKX: ## %bb.0: ## %entry691; SKX-NEXT: kmovd %edi, %k1692; SKX-NEXT: vextractf64x2 $1, %ymm1, %xmm0 {%k1}693; SKX-NEXT: vzeroupper694; SKX-NEXT: retq695entry:696 %shuffle = shufflevector <4 x double> %__A, <4 x double> undef, <2 x i32> <i32 2, i32 3>697 %0 = bitcast i8 %__U to <8 x i1>698 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>699 %1 = select <2 x i1> %extract, <2 x double> %shuffle, <2 x double> %__W700 ret <2 x double> %1701}702 703define <2 x double> @test_mm256_maskz_extractf64x2_pd(i8 %__U, <4 x double> %__A) {704; SKX-LABEL: test_mm256_maskz_extractf64x2_pd:705; SKX: ## %bb.0: ## %entry706; SKX-NEXT: kmovd %edi, %k1707; SKX-NEXT: vextractf64x2 $1, %ymm0, %xmm0 {%k1} {z}708; SKX-NEXT: vzeroupper709; SKX-NEXT: retq710entry:711 %shuffle = shufflevector <4 x double> %__A, <4 x double> undef, <2 x i32> <i32 2, i32 3>712 %0 = bitcast i8 %__U to <8 x i1>713 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>714 %1 = select <2 x i1> %extract, <2 x double> %shuffle, <2 x double> zeroinitializer715 ret <2 x double> %1716}717 718define <2 x i64> @test_mm256_mask_extracti64x2_epi64(<2 x i64> %__W, i8 %__U, <4 x i64> %__A) {719; SKX-LABEL: test_mm256_mask_extracti64x2_epi64:720; SKX: ## %bb.0: ## %entry721; SKX-NEXT: kmovd %edi, %k1722; SKX-NEXT: vextracti64x2 $1, %ymm1, %xmm0 {%k1}723; SKX-NEXT: vzeroupper724; SKX-NEXT: retq725entry:726 %shuffle = shufflevector <4 x i64> %__A, <4 x i64> undef, <2 x i32> <i32 2, i32 3>727 %0 = bitcast i8 %__U to <8 x i1>728 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>729 %1 = select <2 x i1> %extract, <2 x i64> %shuffle, <2 x i64> %__W730 ret <2 x i64> %1731}732 733define <2 x i64> @test_mm256_maskz_extracti64x2_epi64(i8 %__U, <4 x i64> %__A) {734; SKX-LABEL: test_mm256_maskz_extracti64x2_epi64:735; SKX: ## %bb.0: ## %entry736; SKX-NEXT: kmovd %edi, %k1737; SKX-NEXT: vextracti64x2 $1, %ymm0, %xmm0 {%k1} {z}738; SKX-NEXT: vzeroupper739; SKX-NEXT: retq740entry:741 %shuffle = shufflevector <4 x i64> %__A, <4 x i64> undef, <2 x i32> <i32 2, i32 3>742 %0 = bitcast i8 %__U to <8 x i1>743 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>744 %1 = select <2 x i1> %extract, <2 x i64> %shuffle, <2 x i64> zeroinitializer745 ret <2 x i64> %1746}747 748define <4 x float> @test_mm256_mask_extractf32x4_ps(<4 x float> %__W, i8 %__U, <8 x float> %__A) {749; SKX-LABEL: test_mm256_mask_extractf32x4_ps:750; SKX: ## %bb.0: ## %entry751; SKX-NEXT: kmovd %edi, %k1752; SKX-NEXT: vextractf32x4 $1, %ymm1, %xmm0 {%k1}753; SKX-NEXT: vzeroupper754; SKX-NEXT: retq755entry:756 %shuffle = shufflevector <8 x float> %__A, <8 x float> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>757 %0 = bitcast i8 %__U to <8 x i1>758 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>759 %1 = select <4 x i1> %extract, <4 x float> %shuffle, <4 x float> %__W760 ret <4 x float> %1761}762 763define <4 x float> @test_mm256_maskz_extractf32x4_ps(i8 %__U, <8 x float> %__A) {764; SKX-LABEL: test_mm256_maskz_extractf32x4_ps:765; SKX: ## %bb.0: ## %entry766; SKX-NEXT: kmovd %edi, %k1767; SKX-NEXT: vextractf32x4 $1, %ymm0, %xmm0 {%k1} {z}768; SKX-NEXT: vzeroupper769; SKX-NEXT: retq770entry:771 %shuffle = shufflevector <8 x float> %__A, <8 x float> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>772 %0 = bitcast i8 %__U to <8 x i1>773 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>774 %1 = select <4 x i1> %extract, <4 x float> %shuffle, <4 x float> zeroinitializer775 ret <4 x float> %1776}777 778define <2 x i64> @test_mm256_mask_extracti32x4_epi32(<2 x i64> %__W, i8 %__U, <4 x i64> %__A) {779; SKX-LABEL: test_mm256_mask_extracti32x4_epi32:780; SKX: ## %bb.0: ## %entry781; SKX-NEXT: kmovd %edi, %k1782; SKX-NEXT: vextracti32x4 $1, %ymm1, %xmm0 {%k1}783; SKX-NEXT: vzeroupper784; SKX-NEXT: retq785entry:786 %0 = bitcast <4 x i64> %__A to <8 x i32>787 %shuffle = shufflevector <8 x i32> %0, <8 x i32> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>788 %1 = bitcast <2 x i64> %__W to <4 x i32>789 %2 = bitcast i8 %__U to <8 x i1>790 %extract = shufflevector <8 x i1> %2, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>791 %3 = select <4 x i1> %extract, <4 x i32> %shuffle, <4 x i32> %1792 %4 = bitcast <4 x i32> %3 to <2 x i64>793 ret <2 x i64> %4794}795 796define <2 x i64> @test_mm256_maskz_extracti32x4_epi32(i8 %__U, <4 x i64> %__A) {797; SKX-LABEL: test_mm256_maskz_extracti32x4_epi32:798; SKX: ## %bb.0: ## %entry799; SKX-NEXT: kmovd %edi, %k1800; SKX-NEXT: vextracti32x4 $1, %ymm0, %xmm0 {%k1} {z}801; SKX-NEXT: vzeroupper802; SKX-NEXT: retq803entry:804 %0 = bitcast <4 x i64> %__A to <8 x i32>805 %shuffle = shufflevector <8 x i32> %0, <8 x i32> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>806 %1 = bitcast i8 %__U to <8 x i1>807 %extract = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>808 %2 = select <4 x i1> %extract, <4 x i32> %shuffle, <4 x i32> zeroinitializer809 %3 = bitcast <4 x i32> %2 to <2 x i64>810 ret <2 x i64> %3811}812 813define <8 x float> @test_mm512_mask_extractf32x8_ps(<8 x float> %__W, i8 %__U, <16 x float> %__A) {814; SKX-LABEL: test_mm512_mask_extractf32x8_ps:815; SKX: ## %bb.0: ## %entry816; SKX-NEXT: kmovd %edi, %k1817; SKX-NEXT: vextractf32x8 $1, %zmm1, %ymm0 {%k1}818; SKX-NEXT: retq819entry:820 %shuffle = shufflevector <16 x float> %__A, <16 x float> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>821 %0 = bitcast i8 %__U to <8 x i1>822 %1 = select <8 x i1> %0, <8 x float> %shuffle, <8 x float> %__W823 ret <8 x float> %1824}825 826define <8 x float> @test_mm512_maskz_extractf32x8_ps(i8 %__U, <16 x float> %__A) {827; SKX-LABEL: test_mm512_maskz_extractf32x8_ps:828; SKX: ## %bb.0: ## %entry829; SKX-NEXT: kmovd %edi, %k1830; SKX-NEXT: vextractf32x8 $1, %zmm0, %ymm0 {%k1} {z}831; SKX-NEXT: retq832entry:833 %shuffle = shufflevector <16 x float> %__A, <16 x float> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>834 %0 = bitcast i8 %__U to <8 x i1>835 %1 = select <8 x i1> %0, <8 x float> %shuffle, <8 x float> zeroinitializer836 ret <8 x float> %1837}838 839define <2 x double> @test_mm512_mask_extractf64x2_pd(<2 x double> %__W, i8 %__U, <8 x double> %__A) {840; SKX-LABEL: test_mm512_mask_extractf64x2_pd:841; SKX: ## %bb.0: ## %entry842; SKX-NEXT: kmovd %edi, %k1843; SKX-NEXT: vextractf64x2 $3, %zmm1, %xmm0 {%k1}844; SKX-NEXT: vzeroupper845; SKX-NEXT: retq846entry:847 %shuffle = shufflevector <8 x double> %__A, <8 x double> undef, <2 x i32> <i32 6, i32 7>848 %0 = bitcast i8 %__U to <8 x i1>849 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>850 %1 = select <2 x i1> %extract, <2 x double> %shuffle, <2 x double> %__W851 ret <2 x double> %1852}853 854define <2 x double> @test_mm512_maskz_extractf64x2_pd(i8 %__U, <8 x double> %__A) {855; SKX-LABEL: test_mm512_maskz_extractf64x2_pd:856; SKX: ## %bb.0: ## %entry857; SKX-NEXT: kmovd %edi, %k1858; SKX-NEXT: vextractf64x2 $3, %zmm0, %xmm0 {%k1} {z}859; SKX-NEXT: vzeroupper860; SKX-NEXT: retq861entry:862 %shuffle = shufflevector <8 x double> %__A, <8 x double> undef, <2 x i32> <i32 6, i32 7>863 %0 = bitcast i8 %__U to <8 x i1>864 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>865 %1 = select <2 x i1> %extract, <2 x double> %shuffle, <2 x double> zeroinitializer866 ret <2 x double> %1867}868