7637 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -fast-isel -mtriple=i386-unknown-unknown -mattr=+avx512f,+avx512vl | FileCheck %s --check-prefixes=CHECK,X863; RUN: llc < %s -fast-isel -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl | FileCheck %s --check-prefixes=CHECK,X644 5; NOTE: This should use IR equivalent to what is generated by clang/test/CodeGen/avx512vl-builtins.c6 7define <4 x float> @test_mm_mask_cvtepi32_ps(<4 x float> %__W, i8 zeroext %__U, <2 x i64> %__A) {8; X86-LABEL: test_mm_mask_cvtepi32_ps:9; X86: # %bb.0: # %entry10; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax11; X86-NEXT: kmovw %eax, %k112; X86-NEXT: vcvtdq2ps %xmm1, %xmm0 {%k1}13; X86-NEXT: retl14;15; X64-LABEL: test_mm_mask_cvtepi32_ps:16; X64: # %bb.0: # %entry17; X64-NEXT: kmovw %edi, %k118; X64-NEXT: vcvtdq2ps %xmm1, %xmm0 {%k1}19; X64-NEXT: retq20entry:21 %0 = bitcast <2 x i64> %__A to <4 x i32>22 %conv.i.i = sitofp <4 x i32> %0 to <4 x float>23 %1 = bitcast i8 %__U to <8 x i1>24 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>25 %2 = select <4 x i1> %extract.i, <4 x float> %conv.i.i, <4 x float> %__W26 ret <4 x float> %227}28 29define <4 x float> @test_mm_maskz_cvtepi32_ps(i8 zeroext %__U, <2 x i64> %__A) {30; X86-LABEL: test_mm_maskz_cvtepi32_ps:31; X86: # %bb.0: # %entry32; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax33; X86-NEXT: kmovw %eax, %k134; X86-NEXT: vcvtdq2ps %xmm0, %xmm0 {%k1} {z}35; X86-NEXT: retl36;37; X64-LABEL: test_mm_maskz_cvtepi32_ps:38; X64: # %bb.0: # %entry39; X64-NEXT: kmovw %edi, %k140; X64-NEXT: vcvtdq2ps %xmm0, %xmm0 {%k1} {z}41; X64-NEXT: retq42entry:43 %0 = bitcast <2 x i64> %__A to <4 x i32>44 %conv.i.i = sitofp <4 x i32> %0 to <4 x float>45 %1 = bitcast i8 %__U to <8 x i1>46 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>47 %2 = select <4 x i1> %extract.i, <4 x float> %conv.i.i, <4 x float> zeroinitializer48 ret <4 x float> %249}50 51define <8 x float> @test_mm256_mask_cvtepi32_ps(<8 x float> %__W, i8 zeroext %__U, <4 x i64> %__A) {52; X86-LABEL: test_mm256_mask_cvtepi32_ps:53; X86: # %bb.0: # %entry54; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax55; X86-NEXT: kmovw %eax, %k156; X86-NEXT: vcvtdq2ps %ymm1, %ymm0 {%k1}57; X86-NEXT: retl58;59; X64-LABEL: test_mm256_mask_cvtepi32_ps:60; X64: # %bb.0: # %entry61; X64-NEXT: kmovw %edi, %k162; X64-NEXT: vcvtdq2ps %ymm1, %ymm0 {%k1}63; X64-NEXT: retq64entry:65 %0 = bitcast <4 x i64> %__A to <8 x i32>66 %conv.i.i = sitofp <8 x i32> %0 to <8 x float>67 %1 = bitcast i8 %__U to <8 x i1>68 %2 = select <8 x i1> %1, <8 x float> %conv.i.i, <8 x float> %__W69 ret <8 x float> %270}71 72define <8 x float> @test_mm256_maskz_cvtepi32_ps(i8 zeroext %__U, <4 x i64> %__A) {73; X86-LABEL: test_mm256_maskz_cvtepi32_ps:74; X86: # %bb.0: # %entry75; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax76; X86-NEXT: kmovw %eax, %k177; X86-NEXT: vcvtdq2ps %ymm0, %ymm0 {%k1} {z}78; X86-NEXT: retl79;80; X64-LABEL: test_mm256_maskz_cvtepi32_ps:81; X64: # %bb.0: # %entry82; X64-NEXT: kmovw %edi, %k183; X64-NEXT: vcvtdq2ps %ymm0, %ymm0 {%k1} {z}84; X64-NEXT: retq85entry:86 %0 = bitcast <4 x i64> %__A to <8 x i32>87 %conv.i.i = sitofp <8 x i32> %0 to <8 x float>88 %1 = bitcast i8 %__U to <8 x i1>89 %2 = select <8 x i1> %1, <8 x float> %conv.i.i, <8 x float> zeroinitializer90 ret <8 x float> %291}92 93define <2 x i64> @test_mm_mask_cvtpd_epi32(<2 x i64> %__W, i8 zeroext %__U, <2 x double> %__A) {94; X86-LABEL: test_mm_mask_cvtpd_epi32:95; X86: # %bb.0: # %entry96; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax97; X86-NEXT: kmovw %eax, %k198; X86-NEXT: vcvtpd2dq %xmm1, %xmm0 {%k1}99; X86-NEXT: retl100;101; X64-LABEL: test_mm_mask_cvtpd_epi32:102; X64: # %bb.0: # %entry103; X64-NEXT: kmovw %edi, %k1104; X64-NEXT: vcvtpd2dq %xmm1, %xmm0 {%k1}105; X64-NEXT: retq106entry:107 %0 = bitcast <2 x i64> %__W to <4 x i32>108 %1 = tail call <4 x i32> @llvm.x86.avx512.mask.cvtpd2dq.128(<2 x double> %__A, <4 x i32> %0, i8 %__U) #8109 %2 = bitcast <4 x i32> %1 to <2 x i64>110 ret <2 x i64> %2111}112 113define <2 x i64> @test_mm_maskz_cvtpd_epi32(i8 zeroext %__U, <2 x double> %__A) {114; X86-LABEL: test_mm_maskz_cvtpd_epi32:115; X86: # %bb.0: # %entry116; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax117; X86-NEXT: kmovw %eax, %k1118; X86-NEXT: vcvtpd2dq %xmm0, %xmm0 {%k1} {z}119; X86-NEXT: retl120;121; X64-LABEL: test_mm_maskz_cvtpd_epi32:122; X64: # %bb.0: # %entry123; X64-NEXT: kmovw %edi, %k1124; X64-NEXT: vcvtpd2dq %xmm0, %xmm0 {%k1} {z}125; X64-NEXT: retq126entry:127 %0 = tail call <4 x i32> @llvm.x86.avx512.mask.cvtpd2dq.128(<2 x double> %__A, <4 x i32> zeroinitializer, i8 %__U) #8128 %1 = bitcast <4 x i32> %0 to <2 x i64>129 ret <2 x i64> %1130}131 132define <2 x i64> @test_mm256_mask_cvtpd_epi32(<2 x i64> %__W, i8 zeroext %__U, <4 x double> %__A) {133; X86-LABEL: test_mm256_mask_cvtpd_epi32:134; X86: # %bb.0: # %entry135; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax136; X86-NEXT: kmovw %eax, %k1137; X86-NEXT: vcvtpd2dq %ymm1, %xmm0 {%k1}138; X86-NEXT: vzeroupper139; X86-NEXT: retl140;141; X64-LABEL: test_mm256_mask_cvtpd_epi32:142; X64: # %bb.0: # %entry143; X64-NEXT: kmovw %edi, %k1144; X64-NEXT: vcvtpd2dq %ymm1, %xmm0 {%k1}145; X64-NEXT: vzeroupper146; X64-NEXT: retq147entry:148 %0 = tail call <4 x i32> @llvm.x86.avx.cvt.pd2dq.256(<4 x double> %__A) #8149 %1 = bitcast <2 x i64> %__W to <4 x i32>150 %2 = bitcast i8 %__U to <8 x i1>151 %extract.i = shufflevector <8 x i1> %2, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>152 %3 = select <4 x i1> %extract.i, <4 x i32> %0, <4 x i32> %1153 %4 = bitcast <4 x i32> %3 to <2 x i64>154 ret <2 x i64> %4155}156 157define <2 x i64> @test_mm256_maskz_cvtpd_epi32(i8 zeroext %__U, <4 x double> %__A) {158; X86-LABEL: test_mm256_maskz_cvtpd_epi32:159; X86: # %bb.0: # %entry160; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax161; X86-NEXT: kmovw %eax, %k1162; X86-NEXT: vcvtpd2dq %ymm0, %xmm0 {%k1} {z}163; X86-NEXT: vzeroupper164; X86-NEXT: retl165;166; X64-LABEL: test_mm256_maskz_cvtpd_epi32:167; X64: # %bb.0: # %entry168; X64-NEXT: kmovw %edi, %k1169; X64-NEXT: vcvtpd2dq %ymm0, %xmm0 {%k1} {z}170; X64-NEXT: vzeroupper171; X64-NEXT: retq172entry:173 %0 = tail call <4 x i32> @llvm.x86.avx.cvt.pd2dq.256(<4 x double> %__A) #8174 %1 = bitcast i8 %__U to <8 x i1>175 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>176 %2 = select <4 x i1> %extract.i, <4 x i32> %0, <4 x i32> zeroinitializer177 %3 = bitcast <4 x i32> %2 to <2 x i64>178 ret <2 x i64> %3179}180 181define <4 x float> @test_mm_mask_cvtpd_ps(<4 x float> %__W, i8 zeroext %__U, <2 x double> %__A) {182; X86-LABEL: test_mm_mask_cvtpd_ps:183; X86: # %bb.0: # %entry184; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax185; X86-NEXT: kmovw %eax, %k1186; X86-NEXT: vcvtpd2ps %xmm1, %xmm0 {%k1}187; X86-NEXT: retl188;189; X64-LABEL: test_mm_mask_cvtpd_ps:190; X64: # %bb.0: # %entry191; X64-NEXT: kmovw %edi, %k1192; X64-NEXT: vcvtpd2ps %xmm1, %xmm0 {%k1}193; X64-NEXT: retq194entry:195 %0 = tail call <4 x float> @llvm.x86.avx512.mask.cvtpd2ps(<2 x double> %__A, <4 x float> %__W, i8 %__U) #8196 ret <4 x float> %0197}198 199define <4 x float> @test_mm_maskz_cvtpd_ps(i8 zeroext %__U, <2 x double> %__A) {200; X86-LABEL: test_mm_maskz_cvtpd_ps:201; X86: # %bb.0: # %entry202; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax203; X86-NEXT: kmovw %eax, %k1204; X86-NEXT: vcvtpd2ps %xmm0, %xmm0 {%k1} {z}205; X86-NEXT: retl206;207; X64-LABEL: test_mm_maskz_cvtpd_ps:208; X64: # %bb.0: # %entry209; X64-NEXT: kmovw %edi, %k1210; X64-NEXT: vcvtpd2ps %xmm0, %xmm0 {%k1} {z}211; X64-NEXT: retq212entry:213 %0 = tail call <4 x float> @llvm.x86.avx512.mask.cvtpd2ps(<2 x double> %__A, <4 x float> zeroinitializer, i8 %__U) #8214 ret <4 x float> %0215}216 217define <4 x float> @test_mm256_mask_cvtpd_ps(<4 x float> %__W, i8 zeroext %__U, <4 x double> %__A) {218; X86-LABEL: test_mm256_mask_cvtpd_ps:219; X86: # %bb.0: # %entry220; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax221; X86-NEXT: kmovw %eax, %k1222; X86-NEXT: vcvtpd2ps %ymm1, %xmm0 {%k1}223; X86-NEXT: vzeroupper224; X86-NEXT: retl225;226; X64-LABEL: test_mm256_mask_cvtpd_ps:227; X64: # %bb.0: # %entry228; X64-NEXT: kmovw %edi, %k1229; X64-NEXT: vcvtpd2ps %ymm1, %xmm0 {%k1}230; X64-NEXT: vzeroupper231; X64-NEXT: retq232entry:233 %0 = tail call <4 x float> @llvm.x86.avx.cvt.pd2.ps.256(<4 x double> %__A) #8234 %1 = bitcast i8 %__U to <8 x i1>235 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>236 %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> %__W237 ret <4 x float> %2238}239 240define <4 x float> @test_mm256_maskz_cvtpd_ps(i8 zeroext %__U, <4 x double> %__A) {241; X86-LABEL: test_mm256_maskz_cvtpd_ps:242; X86: # %bb.0: # %entry243; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax244; X86-NEXT: kmovw %eax, %k1245; X86-NEXT: vcvtpd2ps %ymm0, %xmm0 {%k1} {z}246; X86-NEXT: vzeroupper247; X86-NEXT: retl248;249; X64-LABEL: test_mm256_maskz_cvtpd_ps:250; X64: # %bb.0: # %entry251; X64-NEXT: kmovw %edi, %k1252; X64-NEXT: vcvtpd2ps %ymm0, %xmm0 {%k1} {z}253; X64-NEXT: vzeroupper254; X64-NEXT: retq255entry:256 %0 = tail call <4 x float> @llvm.x86.avx.cvt.pd2.ps.256(<4 x double> %__A) #8257 %1 = bitcast i8 %__U to <8 x i1>258 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>259 %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> zeroinitializer260 ret <4 x float> %2261}262 263define <2 x i64> @test_mm_cvtpd_epu32(<2 x double> %__A) {264; CHECK-LABEL: test_mm_cvtpd_epu32:265; CHECK: # %bb.0: # %entry266; CHECK-NEXT: vcvtpd2udq %xmm0, %xmm0267; CHECK-NEXT: ret{{[l|q]}}268entry:269 %0 = tail call <4 x i32> @llvm.x86.avx512.mask.cvtpd2udq.128(<2 x double> %__A, <4 x i32> zeroinitializer, i8 -1) #8270 %1 = bitcast <4 x i32> %0 to <2 x i64>271 ret <2 x i64> %1272}273 274define <2 x i64> @test_mm_mask_cvtpd_epu32(<2 x i64> %__W, i8 zeroext %__U, <2 x double> %__A) {275; X86-LABEL: test_mm_mask_cvtpd_epu32:276; X86: # %bb.0: # %entry277; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax278; X86-NEXT: kmovw %eax, %k1279; X86-NEXT: vcvtpd2udq %xmm1, %xmm0 {%k1}280; X86-NEXT: retl281;282; X64-LABEL: test_mm_mask_cvtpd_epu32:283; X64: # %bb.0: # %entry284; X64-NEXT: kmovw %edi, %k1285; X64-NEXT: vcvtpd2udq %xmm1, %xmm0 {%k1}286; X64-NEXT: retq287entry:288 %0 = bitcast <2 x i64> %__W to <4 x i32>289 %1 = tail call <4 x i32> @llvm.x86.avx512.mask.cvtpd2udq.128(<2 x double> %__A, <4 x i32> %0, i8 %__U) #8290 %2 = bitcast <4 x i32> %1 to <2 x i64>291 ret <2 x i64> %2292}293 294define <2 x i64> @test_mm_maskz_cvtpd_epu32(i8 zeroext %__U, <2 x double> %__A) {295; X86-LABEL: test_mm_maskz_cvtpd_epu32:296; X86: # %bb.0: # %entry297; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax298; X86-NEXT: kmovw %eax, %k1299; X86-NEXT: vcvtpd2udq %xmm0, %xmm0 {%k1} {z}300; X86-NEXT: retl301;302; X64-LABEL: test_mm_maskz_cvtpd_epu32:303; X64: # %bb.0: # %entry304; X64-NEXT: kmovw %edi, %k1305; X64-NEXT: vcvtpd2udq %xmm0, %xmm0 {%k1} {z}306; X64-NEXT: retq307entry:308 %0 = tail call <4 x i32> @llvm.x86.avx512.mask.cvtpd2udq.128(<2 x double> %__A, <4 x i32> zeroinitializer, i8 %__U) #8309 %1 = bitcast <4 x i32> %0 to <2 x i64>310 ret <2 x i64> %1311}312 313define <2 x i64> @test_mm256_cvtpd_epu32(<4 x double> %__A) {314; CHECK-LABEL: test_mm256_cvtpd_epu32:315; CHECK: # %bb.0: # %entry316; CHECK-NEXT: vcvtpd2udq %ymm0, %xmm0317; CHECK-NEXT: vzeroupper318; CHECK-NEXT: ret{{[l|q]}}319entry:320 %0 = tail call <4 x i32> @llvm.x86.avx512.mask.cvtpd2udq.256(<4 x double> %__A, <4 x i32> zeroinitializer, i8 -1) #8321 %1 = bitcast <4 x i32> %0 to <2 x i64>322 ret <2 x i64> %1323}324 325define <2 x i64> @test_mm256_mask_cvtpd_epu32(<2 x i64> %__W, i8 zeroext %__U, <4 x double> %__A) {326; X86-LABEL: test_mm256_mask_cvtpd_epu32:327; X86: # %bb.0: # %entry328; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax329; X86-NEXT: kmovw %eax, %k1330; X86-NEXT: vcvtpd2udq %ymm1, %xmm0 {%k1}331; X86-NEXT: vzeroupper332; X86-NEXT: retl333;334; X64-LABEL: test_mm256_mask_cvtpd_epu32:335; X64: # %bb.0: # %entry336; X64-NEXT: kmovw %edi, %k1337; X64-NEXT: vcvtpd2udq %ymm1, %xmm0 {%k1}338; X64-NEXT: vzeroupper339; X64-NEXT: retq340entry:341 %0 = bitcast <2 x i64> %__W to <4 x i32>342 %1 = tail call <4 x i32> @llvm.x86.avx512.mask.cvtpd2udq.256(<4 x double> %__A, <4 x i32> %0, i8 %__U) #8343 %2 = bitcast <4 x i32> %1 to <2 x i64>344 ret <2 x i64> %2345}346 347define <2 x i64> @test_mm256_maskz_cvtpd_epu32(i8 zeroext %__U, <4 x double> %__A) {348; X86-LABEL: test_mm256_maskz_cvtpd_epu32:349; X86: # %bb.0: # %entry350; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax351; X86-NEXT: kmovw %eax, %k1352; X86-NEXT: vcvtpd2udq %ymm0, %xmm0 {%k1} {z}353; X86-NEXT: vzeroupper354; X86-NEXT: retl355;356; X64-LABEL: test_mm256_maskz_cvtpd_epu32:357; X64: # %bb.0: # %entry358; X64-NEXT: kmovw %edi, %k1359; X64-NEXT: vcvtpd2udq %ymm0, %xmm0 {%k1} {z}360; X64-NEXT: vzeroupper361; X64-NEXT: retq362entry:363 %0 = tail call <4 x i32> @llvm.x86.avx512.mask.cvtpd2udq.256(<4 x double> %__A, <4 x i32> zeroinitializer, i8 %__U) #8364 %1 = bitcast <4 x i32> %0 to <2 x i64>365 ret <2 x i64> %1366}367 368define <4 x float> @test_mm_mask_cvtph_ps(<4 x float> %__W, i8 zeroext %__U, <2 x i64> %__A) {369; X86-LABEL: test_mm_mask_cvtph_ps:370; X86: # %bb.0: # %entry371; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax372; X86-NEXT: kmovw %eax, %k1373; X86-NEXT: vcvtph2ps %xmm1, %xmm0 {%k1}374; X86-NEXT: retl375;376; X64-LABEL: test_mm_mask_cvtph_ps:377; X64: # %bb.0: # %entry378; X64-NEXT: kmovw %edi, %k1379; X64-NEXT: vcvtph2ps %xmm1, %xmm0 {%k1}380; X64-NEXT: retq381entry:382 %0 = bitcast <2 x i64> %__A to <8 x i16>383 %1 = shufflevector <8 x i16> %0, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>384 %2 = bitcast <4 x i16> %1 to <4 x half>385 %3 = bitcast i8 %__U to <8 x i1>386 %4 = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>387 %5 = fpext <4 x half> %2 to <4 x float>388 %6 = select <4 x i1> %4, <4 x float> %5, <4 x float> %__W389 ret <4 x float> %6390}391 392define <4 x float> @test_mm_maskz_cvtph_ps(i8 zeroext %__U, <2 x i64> %__A) {393; X86-LABEL: test_mm_maskz_cvtph_ps:394; X86: # %bb.0: # %entry395; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax396; X86-NEXT: kmovw %eax, %k1397; X86-NEXT: vcvtph2ps %xmm0, %xmm0 {%k1} {z}398; X86-NEXT: retl399;400; X64-LABEL: test_mm_maskz_cvtph_ps:401; X64: # %bb.0: # %entry402; X64-NEXT: kmovw %edi, %k1403; X64-NEXT: vcvtph2ps %xmm0, %xmm0 {%k1} {z}404; X64-NEXT: retq405entry:406 %0 = bitcast <2 x i64> %__A to <8 x i16>407 %1 = shufflevector <8 x i16> %0, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>408 %2 = bitcast <4 x i16> %1 to <4 x half>409 %3 = bitcast i8 %__U to <8 x i1>410 %4 = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>411 %5 = fpext <4 x half> %2 to <4 x float>412 %6 = select <4 x i1> %4, <4 x float> %5, <4 x float> zeroinitializer413 ret <4 x float> %6414}415 416define <8 x float> @test_mm256_mask_cvtph_ps(<8 x float> %__W, i8 zeroext %__U, <2 x i64> %__A) {417; X86-LABEL: test_mm256_mask_cvtph_ps:418; X86: # %bb.0: # %entry419; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax420; X86-NEXT: kmovw %eax, %k1421; X86-NEXT: vcvtph2ps %xmm1, %ymm0 {%k1}422; X86-NEXT: retl423;424; X64-LABEL: test_mm256_mask_cvtph_ps:425; X64: # %bb.0: # %entry426; X64-NEXT: kmovw %edi, %k1427; X64-NEXT: vcvtph2ps %xmm1, %ymm0 {%k1}428; X64-NEXT: retq429entry:430 %0 = bitcast <2 x i64> %__A to <8 x i16>431 %1 = bitcast <8 x i16> %0 to <8 x half>432 %2 = bitcast i8 %__U to <8 x i1>433 %3 = fpext <8 x half> %1 to <8 x float>434 %4 = select <8 x i1> %2, <8 x float> %3, <8 x float> %__W435 ret <8 x float> %4436}437 438define <8 x float> @test_mm256_maskz_cvtph_ps(i8 zeroext %__U, <2 x i64> %__A) {439; X86-LABEL: test_mm256_maskz_cvtph_ps:440; X86: # %bb.0: # %entry441; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax442; X86-NEXT: kmovw %eax, %k1443; X86-NEXT: vcvtph2ps %xmm0, %ymm0 {%k1} {z}444; X86-NEXT: retl445;446; X64-LABEL: test_mm256_maskz_cvtph_ps:447; X64: # %bb.0: # %entry448; X64-NEXT: kmovw %edi, %k1449; X64-NEXT: vcvtph2ps %xmm0, %ymm0 {%k1} {z}450; X64-NEXT: retq451entry:452 %0 = bitcast <2 x i64> %__A to <8 x i16>453 %1 = bitcast <8 x i16> %0 to <8 x half>454 %2 = bitcast i8 %__U to <8 x i1>455 %3 = fpext <8 x half> %1 to <8 x float>456 %4 = select <8 x i1> %2, <8 x float> %3, <8 x float> zeroinitializer457 ret <8 x float> %4458}459 460define <2 x i64> @test_mm_mask_cvtps_epi32(<2 x i64> %__W, i8 zeroext %__U, <4 x float> %__A) {461; X86-LABEL: test_mm_mask_cvtps_epi32:462; X86: # %bb.0: # %entry463; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax464; X86-NEXT: kmovw %eax, %k1465; X86-NEXT: vcvtps2dq %xmm1, %xmm0 {%k1}466; X86-NEXT: retl467;468; X64-LABEL: test_mm_mask_cvtps_epi32:469; X64: # %bb.0: # %entry470; X64-NEXT: kmovw %edi, %k1471; X64-NEXT: vcvtps2dq %xmm1, %xmm0 {%k1}472; X64-NEXT: retq473entry:474 %0 = tail call <4 x i32> @llvm.x86.sse2.cvtps2dq(<4 x float> %__A) #8475 %1 = bitcast <2 x i64> %__W to <4 x i32>476 %2 = bitcast i8 %__U to <8 x i1>477 %extract.i = shufflevector <8 x i1> %2, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>478 %3 = select <4 x i1> %extract.i, <4 x i32> %0, <4 x i32> %1479 %4 = bitcast <4 x i32> %3 to <2 x i64>480 ret <2 x i64> %4481}482 483define <2 x i64> @test_mm_maskz_cvtps_epi32(i8 zeroext %__U, <4 x float> %__A) {484; X86-LABEL: test_mm_maskz_cvtps_epi32:485; X86: # %bb.0: # %entry486; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax487; X86-NEXT: kmovw %eax, %k1488; X86-NEXT: vcvtps2dq %xmm0, %xmm0 {%k1} {z}489; X86-NEXT: retl490;491; X64-LABEL: test_mm_maskz_cvtps_epi32:492; X64: # %bb.0: # %entry493; X64-NEXT: kmovw %edi, %k1494; X64-NEXT: vcvtps2dq %xmm0, %xmm0 {%k1} {z}495; X64-NEXT: retq496entry:497 %0 = tail call <4 x i32> @llvm.x86.sse2.cvtps2dq(<4 x float> %__A) #8498 %1 = bitcast i8 %__U to <8 x i1>499 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>500 %2 = select <4 x i1> %extract.i, <4 x i32> %0, <4 x i32> zeroinitializer501 %3 = bitcast <4 x i32> %2 to <2 x i64>502 ret <2 x i64> %3503}504 505define <4 x i64> @test_mm256_mask_cvtps_epi32(<4 x i64> %__W, i8 zeroext %__U, <8 x float> %__A) {506; X86-LABEL: test_mm256_mask_cvtps_epi32:507; X86: # %bb.0: # %entry508; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax509; X86-NEXT: kmovw %eax, %k1510; X86-NEXT: vcvtps2dq %ymm1, %ymm0 {%k1}511; X86-NEXT: retl512;513; X64-LABEL: test_mm256_mask_cvtps_epi32:514; X64: # %bb.0: # %entry515; X64-NEXT: kmovw %edi, %k1516; X64-NEXT: vcvtps2dq %ymm1, %ymm0 {%k1}517; X64-NEXT: retq518entry:519 %0 = tail call <8 x i32> @llvm.x86.avx.cvt.ps2dq.256(<8 x float> %__A) #8520 %1 = bitcast <4 x i64> %__W to <8 x i32>521 %2 = bitcast i8 %__U to <8 x i1>522 %3 = select <8 x i1> %2, <8 x i32> %0, <8 x i32> %1523 %4 = bitcast <8 x i32> %3 to <4 x i64>524 ret <4 x i64> %4525}526 527define <4 x i64> @test_mm256_maskz_cvtps_epi32(i8 zeroext %__U, <8 x float> %__A) {528; X86-LABEL: test_mm256_maskz_cvtps_epi32:529; X86: # %bb.0: # %entry530; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax531; X86-NEXT: kmovw %eax, %k1532; X86-NEXT: vcvtps2dq %ymm0, %ymm0 {%k1} {z}533; X86-NEXT: retl534;535; X64-LABEL: test_mm256_maskz_cvtps_epi32:536; X64: # %bb.0: # %entry537; X64-NEXT: kmovw %edi, %k1538; X64-NEXT: vcvtps2dq %ymm0, %ymm0 {%k1} {z}539; X64-NEXT: retq540entry:541 %0 = tail call <8 x i32> @llvm.x86.avx.cvt.ps2dq.256(<8 x float> %__A) #8542 %1 = bitcast i8 %__U to <8 x i1>543 %2 = select <8 x i1> %1, <8 x i32> %0, <8 x i32> zeroinitializer544 %3 = bitcast <8 x i32> %2 to <4 x i64>545 ret <4 x i64> %3546}547 548define <2 x double> @test_mm_mask_cvtps_pd(<2 x double> %__W, i8 zeroext %__U, <4 x float> %__A) local_unnamed_addr #0 {549; X86-LABEL: test_mm_mask_cvtps_pd:550; X86: # %bb.0: # %entry551; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax552; X86-NEXT: kmovw %eax, %k1553; X86-NEXT: vcvtps2pd %xmm1, %xmm0 {%k1}554; X86-NEXT: retl555;556; X64-LABEL: test_mm_mask_cvtps_pd:557; X64: # %bb.0: # %entry558; X64-NEXT: kmovw %edi, %k1559; X64-NEXT: vcvtps2pd %xmm1, %xmm0 {%k1}560; X64-NEXT: retq561entry:562 %shuffle.i.i = shufflevector <4 x float> %__A, <4 x float> undef, <2 x i32> <i32 0, i32 1>563 %conv.i.i = fpext <2 x float> %shuffle.i.i to <2 x double>564 %0 = bitcast i8 %__U to <8 x i1>565 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>566 %1 = select <2 x i1> %extract.i, <2 x double> %conv.i.i, <2 x double> %__W567 ret <2 x double> %1568}569 570define <2 x double> @test_mm_maskz_cvtps_pd(i8 zeroext %__U, <4 x float> %__A) local_unnamed_addr #0 {571; X86-LABEL: test_mm_maskz_cvtps_pd:572; X86: # %bb.0: # %entry573; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax574; X86-NEXT: kmovw %eax, %k1575; X86-NEXT: vcvtps2pd %xmm0, %xmm0 {%k1} {z}576; X86-NEXT: retl577;578; X64-LABEL: test_mm_maskz_cvtps_pd:579; X64: # %bb.0: # %entry580; X64-NEXT: kmovw %edi, %k1581; X64-NEXT: vcvtps2pd %xmm0, %xmm0 {%k1} {z}582; X64-NEXT: retq583entry:584 %shuffle.i.i = shufflevector <4 x float> %__A, <4 x float> undef, <2 x i32> <i32 0, i32 1>585 %conv.i.i = fpext <2 x float> %shuffle.i.i to <2 x double>586 %0 = bitcast i8 %__U to <8 x i1>587 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>588 %1 = select <2 x i1> %extract.i, <2 x double> %conv.i.i, <2 x double> zeroinitializer589 ret <2 x double> %1590}591 592define <4 x double> @test_mm256_mask_cvtps_pd(<4 x double> %__W, i8 zeroext %__U, <4 x float> %__A) local_unnamed_addr #0 {593; X86-LABEL: test_mm256_mask_cvtps_pd:594; X86: # %bb.0: # %entry595; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax596; X86-NEXT: kmovw %eax, %k1597; X86-NEXT: vcvtps2pd %xmm1, %ymm0 {%k1}598; X86-NEXT: retl599;600; X64-LABEL: test_mm256_mask_cvtps_pd:601; X64: # %bb.0: # %entry602; X64-NEXT: kmovw %edi, %k1603; X64-NEXT: vcvtps2pd %xmm1, %ymm0 {%k1}604; X64-NEXT: retq605entry:606 %conv.i.i = fpext <4 x float> %__A to <4 x double>607 %0 = bitcast i8 %__U to <8 x i1>608 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>609 %1 = select <4 x i1> %extract.i, <4 x double> %conv.i.i, <4 x double> %__W610 ret <4 x double> %1611}612 613define <4 x double> @test_mm256_maskz_cvtps_pd(i8 zeroext %__U, <4 x float> %__A) local_unnamed_addr #0 {614; X86-LABEL: test_mm256_maskz_cvtps_pd:615; X86: # %bb.0: # %entry616; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax617; X86-NEXT: kmovw %eax, %k1618; X86-NEXT: vcvtps2pd %xmm0, %ymm0 {%k1} {z}619; X86-NEXT: retl620;621; X64-LABEL: test_mm256_maskz_cvtps_pd:622; X64: # %bb.0: # %entry623; X64-NEXT: kmovw %edi, %k1624; X64-NEXT: vcvtps2pd %xmm0, %ymm0 {%k1} {z}625; X64-NEXT: retq626entry:627 %conv.i.i = fpext <4 x float> %__A to <4 x double>628 %0 = bitcast i8 %__U to <8 x i1>629 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>630 %1 = select <4 x i1> %extract.i, <4 x double> %conv.i.i, <4 x double> zeroinitializer631 ret <4 x double> %1632}633 634define <2 x i64> @test_mm_cvtps_epu32(<4 x float> %__A) {635; CHECK-LABEL: test_mm_cvtps_epu32:636; CHECK: # %bb.0: # %entry637; CHECK-NEXT: vcvtps2udq %xmm0, %xmm0638; CHECK-NEXT: ret{{[l|q]}}639entry:640 %0 = tail call <4 x i32> @llvm.x86.avx512.mask.cvtps2udq.128(<4 x float> %__A, <4 x i32> zeroinitializer, i8 -1) #8641 %1 = bitcast <4 x i32> %0 to <2 x i64>642 ret <2 x i64> %1643}644 645define <2 x i64> @test_mm_mask_cvtps_epu32(<2 x i64> %__W, i8 zeroext %__U, <4 x float> %__A) {646; X86-LABEL: test_mm_mask_cvtps_epu32:647; X86: # %bb.0: # %entry648; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax649; X86-NEXT: kmovw %eax, %k1650; X86-NEXT: vcvtps2udq %xmm1, %xmm0 {%k1}651; X86-NEXT: retl652;653; X64-LABEL: test_mm_mask_cvtps_epu32:654; X64: # %bb.0: # %entry655; X64-NEXT: kmovw %edi, %k1656; X64-NEXT: vcvtps2udq %xmm1, %xmm0 {%k1}657; X64-NEXT: retq658entry:659 %0 = bitcast <2 x i64> %__W to <4 x i32>660 %1 = tail call <4 x i32> @llvm.x86.avx512.mask.cvtps2udq.128(<4 x float> %__A, <4 x i32> %0, i8 %__U) #8661 %2 = bitcast <4 x i32> %1 to <2 x i64>662 ret <2 x i64> %2663}664 665define <2 x i64> @test_mm_maskz_cvtps_epu32(i8 zeroext %__U, <4 x float> %__A) {666; X86-LABEL: test_mm_maskz_cvtps_epu32:667; X86: # %bb.0: # %entry668; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax669; X86-NEXT: kmovw %eax, %k1670; X86-NEXT: vcvtps2udq %xmm0, %xmm0 {%k1} {z}671; X86-NEXT: retl672;673; X64-LABEL: test_mm_maskz_cvtps_epu32:674; X64: # %bb.0: # %entry675; X64-NEXT: kmovw %edi, %k1676; X64-NEXT: vcvtps2udq %xmm0, %xmm0 {%k1} {z}677; X64-NEXT: retq678entry:679 %0 = tail call <4 x i32> @llvm.x86.avx512.mask.cvtps2udq.128(<4 x float> %__A, <4 x i32> zeroinitializer, i8 %__U) #8680 %1 = bitcast <4 x i32> %0 to <2 x i64>681 ret <2 x i64> %1682}683 684define <4 x i64> @test_mm256_cvtps_epu32(<8 x float> %__A) {685; CHECK-LABEL: test_mm256_cvtps_epu32:686; CHECK: # %bb.0: # %entry687; CHECK-NEXT: vcvtps2udq %ymm0, %ymm0688; CHECK-NEXT: ret{{[l|q]}}689entry:690 %0 = tail call <8 x i32> @llvm.x86.avx512.mask.cvtps2udq.256(<8 x float> %__A, <8 x i32> zeroinitializer, i8 -1) #8691 %1 = bitcast <8 x i32> %0 to <4 x i64>692 ret <4 x i64> %1693}694 695define <4 x i64> @test_mm256_mask_cvtps_epu32(<4 x i64> %__W, i8 zeroext %__U, <8 x float> %__A) {696; X86-LABEL: test_mm256_mask_cvtps_epu32:697; X86: # %bb.0: # %entry698; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax699; X86-NEXT: kmovw %eax, %k1700; X86-NEXT: vcvtps2udq %ymm1, %ymm0 {%k1}701; X86-NEXT: retl702;703; X64-LABEL: test_mm256_mask_cvtps_epu32:704; X64: # %bb.0: # %entry705; X64-NEXT: kmovw %edi, %k1706; X64-NEXT: vcvtps2udq %ymm1, %ymm0 {%k1}707; X64-NEXT: retq708entry:709 %0 = bitcast <4 x i64> %__W to <8 x i32>710 %1 = tail call <8 x i32> @llvm.x86.avx512.mask.cvtps2udq.256(<8 x float> %__A, <8 x i32> %0, i8 %__U) #8711 %2 = bitcast <8 x i32> %1 to <4 x i64>712 ret <4 x i64> %2713}714 715define <4 x i64> @test_mm256_maskz_cvtps_epu32(i8 zeroext %__U, <8 x float> %__A) {716; X86-LABEL: test_mm256_maskz_cvtps_epu32:717; X86: # %bb.0: # %entry718; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax719; X86-NEXT: kmovw %eax, %k1720; X86-NEXT: vcvtps2udq %ymm0, %ymm0 {%k1} {z}721; X86-NEXT: retl722;723; X64-LABEL: test_mm256_maskz_cvtps_epu32:724; X64: # %bb.0: # %entry725; X64-NEXT: kmovw %edi, %k1726; X64-NEXT: vcvtps2udq %ymm0, %ymm0 {%k1} {z}727; X64-NEXT: retq728entry:729 %0 = tail call <8 x i32> @llvm.x86.avx512.mask.cvtps2udq.256(<8 x float> %__A, <8 x i32> zeroinitializer, i8 %__U) #8730 %1 = bitcast <8 x i32> %0 to <4 x i64>731 ret <4 x i64> %1732}733 734define <2 x i64> @test_mm_mask_cvttpd_epi32(<2 x i64> %__W, i8 zeroext %__U, <2 x double> %__A) {735; X86-LABEL: test_mm_mask_cvttpd_epi32:736; X86: # %bb.0: # %entry737; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax738; X86-NEXT: kmovw %eax, %k1739; X86-NEXT: vcvttpd2dq %xmm1, %xmm0 {%k1}740; X86-NEXT: retl741;742; X64-LABEL: test_mm_mask_cvttpd_epi32:743; X64: # %bb.0: # %entry744; X64-NEXT: kmovw %edi, %k1745; X64-NEXT: vcvttpd2dq %xmm1, %xmm0 {%k1}746; X64-NEXT: retq747entry:748 %0 = bitcast <2 x i64> %__W to <4 x i32>749 %1 = tail call <4 x i32> @llvm.x86.avx512.mask.cvttpd2dq.128(<2 x double> %__A, <4 x i32> %0, i8 %__U) #8750 %2 = bitcast <4 x i32> %1 to <2 x i64>751 ret <2 x i64> %2752}753 754define <2 x i64> @test_mm_maskz_cvttpd_epi32(i8 zeroext %__U, <2 x double> %__A) {755; X86-LABEL: test_mm_maskz_cvttpd_epi32:756; X86: # %bb.0: # %entry757; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax758; X86-NEXT: kmovw %eax, %k1759; X86-NEXT: vcvttpd2dq %xmm0, %xmm0 {%k1} {z}760; X86-NEXT: retl761;762; X64-LABEL: test_mm_maskz_cvttpd_epi32:763; X64: # %bb.0: # %entry764; X64-NEXT: kmovw %edi, %k1765; X64-NEXT: vcvttpd2dq %xmm0, %xmm0 {%k1} {z}766; X64-NEXT: retq767entry:768 %0 = tail call <4 x i32> @llvm.x86.avx512.mask.cvttpd2dq.128(<2 x double> %__A, <4 x i32> zeroinitializer, i8 %__U) #8769 %1 = bitcast <4 x i32> %0 to <2 x i64>770 ret <2 x i64> %1771}772 773define <2 x i64> @test_mm256_mask_cvttpd_epi32(<2 x i64> %__W, i8 zeroext %__U, <4 x double> %__A) {774; X86-LABEL: test_mm256_mask_cvttpd_epi32:775; X86: # %bb.0: # %entry776; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax777; X86-NEXT: kmovw %eax, %k1778; X86-NEXT: vcvttpd2dq %ymm1, %xmm0 {%k1}779; X86-NEXT: vzeroupper780; X86-NEXT: retl781;782; X64-LABEL: test_mm256_mask_cvttpd_epi32:783; X64: # %bb.0: # %entry784; X64-NEXT: kmovw %edi, %k1785; X64-NEXT: vcvttpd2dq %ymm1, %xmm0 {%k1}786; X64-NEXT: vzeroupper787; X64-NEXT: retq788entry:789 %0 = tail call <4 x i32> @llvm.x86.avx.cvtt.pd2dq.256(<4 x double> %__A) #8790 %1 = bitcast <2 x i64> %__W to <4 x i32>791 %2 = bitcast i8 %__U to <8 x i1>792 %extract.i = shufflevector <8 x i1> %2, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>793 %3 = select <4 x i1> %extract.i, <4 x i32> %0, <4 x i32> %1794 %4 = bitcast <4 x i32> %3 to <2 x i64>795 ret <2 x i64> %4796}797 798define <2 x i64> @test_mm256_maskz_cvttpd_epi32(i8 zeroext %__U, <4 x double> %__A) {799; X86-LABEL: test_mm256_maskz_cvttpd_epi32:800; X86: # %bb.0: # %entry801; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax802; X86-NEXT: kmovw %eax, %k1803; X86-NEXT: vcvttpd2dq %ymm0, %xmm0 {%k1} {z}804; X86-NEXT: vzeroupper805; X86-NEXT: retl806;807; X64-LABEL: test_mm256_maskz_cvttpd_epi32:808; X64: # %bb.0: # %entry809; X64-NEXT: kmovw %edi, %k1810; X64-NEXT: vcvttpd2dq %ymm0, %xmm0 {%k1} {z}811; X64-NEXT: vzeroupper812; X64-NEXT: retq813entry:814 %0 = tail call <4 x i32> @llvm.x86.avx.cvtt.pd2dq.256(<4 x double> %__A) #8815 %1 = bitcast i8 %__U to <8 x i1>816 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>817 %2 = select <4 x i1> %extract.i, <4 x i32> %0, <4 x i32> zeroinitializer818 %3 = bitcast <4 x i32> %2 to <2 x i64>819 ret <2 x i64> %3820}821 822define <2 x i64> @test_mm_cvttpd_epu32(<2 x double> %__A) {823; CHECK-LABEL: test_mm_cvttpd_epu32:824; CHECK: # %bb.0: # %entry825; CHECK-NEXT: vcvttpd2udq %xmm0, %xmm0826; CHECK-NEXT: ret{{[l|q]}}827entry:828 %0 = tail call <4 x i32> @llvm.x86.avx512.mask.cvttpd2udq.128(<2 x double> %__A, <4 x i32> zeroinitializer, i8 -1) #8829 %1 = bitcast <4 x i32> %0 to <2 x i64>830 ret <2 x i64> %1831}832 833define <2 x i64> @test_mm_mask_cvttpd_epu32(<2 x i64> %__W, i8 zeroext %__U, <2 x double> %__A) {834; X86-LABEL: test_mm_mask_cvttpd_epu32:835; X86: # %bb.0: # %entry836; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax837; X86-NEXT: kmovw %eax, %k1838; X86-NEXT: vcvttpd2udq %xmm1, %xmm0 {%k1}839; X86-NEXT: retl840;841; X64-LABEL: test_mm_mask_cvttpd_epu32:842; X64: # %bb.0: # %entry843; X64-NEXT: kmovw %edi, %k1844; X64-NEXT: vcvttpd2udq %xmm1, %xmm0 {%k1}845; X64-NEXT: retq846entry:847 %0 = bitcast <2 x i64> %__W to <4 x i32>848 %1 = tail call <4 x i32> @llvm.x86.avx512.mask.cvttpd2udq.128(<2 x double> %__A, <4 x i32> %0, i8 %__U) #8849 %2 = bitcast <4 x i32> %1 to <2 x i64>850 ret <2 x i64> %2851}852 853define <2 x i64> @test_mm_maskz_cvttpd_epu32(i8 zeroext %__U, <2 x double> %__A) {854; X86-LABEL: test_mm_maskz_cvttpd_epu32:855; X86: # %bb.0: # %entry856; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax857; X86-NEXT: kmovw %eax, %k1858; X86-NEXT: vcvttpd2udq %xmm0, %xmm0 {%k1} {z}859; X86-NEXT: retl860;861; X64-LABEL: test_mm_maskz_cvttpd_epu32:862; X64: # %bb.0: # %entry863; X64-NEXT: kmovw %edi, %k1864; X64-NEXT: vcvttpd2udq %xmm0, %xmm0 {%k1} {z}865; X64-NEXT: retq866entry:867 %0 = tail call <4 x i32> @llvm.x86.avx512.mask.cvttpd2udq.128(<2 x double> %__A, <4 x i32> zeroinitializer, i8 %__U) #8868 %1 = bitcast <4 x i32> %0 to <2 x i64>869 ret <2 x i64> %1870}871 872define <2 x i64> @test_mm256_cvttpd_epu32(<4 x double> %__A) {873; CHECK-LABEL: test_mm256_cvttpd_epu32:874; CHECK: # %bb.0: # %entry875; CHECK-NEXT: vcvttpd2udq %ymm0, %xmm0876; CHECK-NEXT: vzeroupper877; CHECK-NEXT: ret{{[l|q]}}878entry:879 %0 = tail call <4 x i32> @llvm.x86.avx512.mask.cvttpd2udq.256(<4 x double> %__A, <4 x i32> zeroinitializer, i8 -1) #8880 %1 = bitcast <4 x i32> %0 to <2 x i64>881 ret <2 x i64> %1882}883 884define <2 x i64> @test_mm256_mask_cvttpd_epu32(<2 x i64> %__W, i8 zeroext %__U, <4 x double> %__A) {885; X86-LABEL: test_mm256_mask_cvttpd_epu32:886; X86: # %bb.0: # %entry887; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax888; X86-NEXT: kmovw %eax, %k1889; X86-NEXT: vcvttpd2udq %ymm1, %xmm0 {%k1}890; X86-NEXT: vzeroupper891; X86-NEXT: retl892;893; X64-LABEL: test_mm256_mask_cvttpd_epu32:894; X64: # %bb.0: # %entry895; X64-NEXT: kmovw %edi, %k1896; X64-NEXT: vcvttpd2udq %ymm1, %xmm0 {%k1}897; X64-NEXT: vzeroupper898; X64-NEXT: retq899entry:900 %0 = bitcast <2 x i64> %__W to <4 x i32>901 %1 = tail call <4 x i32> @llvm.x86.avx512.mask.cvttpd2udq.256(<4 x double> %__A, <4 x i32> %0, i8 %__U) #8902 %2 = bitcast <4 x i32> %1 to <2 x i64>903 ret <2 x i64> %2904}905 906define <2 x i64> @test_mm256_maskz_cvttpd_epu32(i8 zeroext %__U, <4 x double> %__A) {907; X86-LABEL: test_mm256_maskz_cvttpd_epu32:908; X86: # %bb.0: # %entry909; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax910; X86-NEXT: kmovw %eax, %k1911; X86-NEXT: vcvttpd2udq %ymm0, %xmm0 {%k1} {z}912; X86-NEXT: vzeroupper913; X86-NEXT: retl914;915; X64-LABEL: test_mm256_maskz_cvttpd_epu32:916; X64: # %bb.0: # %entry917; X64-NEXT: kmovw %edi, %k1918; X64-NEXT: vcvttpd2udq %ymm0, %xmm0 {%k1} {z}919; X64-NEXT: vzeroupper920; X64-NEXT: retq921entry:922 %0 = tail call <4 x i32> @llvm.x86.avx512.mask.cvttpd2udq.256(<4 x double> %__A, <4 x i32> zeroinitializer, i8 %__U) #8923 %1 = bitcast <4 x i32> %0 to <2 x i64>924 ret <2 x i64> %1925}926 927define <2 x i64> @test_mm_mask_cvttps_epi32(<2 x i64> %__W, i8 zeroext %__U, <4 x float> %__A) {928; X86-LABEL: test_mm_mask_cvttps_epi32:929; X86: # %bb.0: # %entry930; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax931; X86-NEXT: kmovw %eax, %k1932; X86-NEXT: vcvttps2dq %xmm1, %xmm0 {%k1}933; X86-NEXT: retl934;935; X64-LABEL: test_mm_mask_cvttps_epi32:936; X64: # %bb.0: # %entry937; X64-NEXT: kmovw %edi, %k1938; X64-NEXT: vcvttps2dq %xmm1, %xmm0 {%k1}939; X64-NEXT: retq940entry:941 %0 = tail call <4 x i32> @llvm.x86.sse2.cvttps2dq(<4 x float> %__A) #8942 %1 = bitcast <2 x i64> %__W to <4 x i32>943 %2 = bitcast i8 %__U to <8 x i1>944 %extract.i = shufflevector <8 x i1> %2, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>945 %3 = select <4 x i1> %extract.i, <4 x i32> %0, <4 x i32> %1946 %4 = bitcast <4 x i32> %3 to <2 x i64>947 ret <2 x i64> %4948}949 950define <2 x i64> @test_mm_maskz_cvttps_epi32(i8 zeroext %__U, <4 x float> %__A) {951; X86-LABEL: test_mm_maskz_cvttps_epi32:952; X86: # %bb.0: # %entry953; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax954; X86-NEXT: kmovw %eax, %k1955; X86-NEXT: vcvttps2dq %xmm0, %xmm0 {%k1} {z}956; X86-NEXT: retl957;958; X64-LABEL: test_mm_maskz_cvttps_epi32:959; X64: # %bb.0: # %entry960; X64-NEXT: kmovw %edi, %k1961; X64-NEXT: vcvttps2dq %xmm0, %xmm0 {%k1} {z}962; X64-NEXT: retq963entry:964 %0 = tail call <4 x i32> @llvm.x86.sse2.cvttps2dq(<4 x float> %__A) #8965 %1 = bitcast i8 %__U to <8 x i1>966 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>967 %2 = select <4 x i1> %extract.i, <4 x i32> %0, <4 x i32> zeroinitializer968 %3 = bitcast <4 x i32> %2 to <2 x i64>969 ret <2 x i64> %3970}971 972define <4 x i64> @test_mm256_mask_cvttps_epi32(<4 x i64> %__W, i8 zeroext %__U, <8 x float> %__A) {973; X86-LABEL: test_mm256_mask_cvttps_epi32:974; X86: # %bb.0: # %entry975; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax976; X86-NEXT: kmovw %eax, %k1977; X86-NEXT: vcvttps2dq %ymm1, %ymm0 {%k1}978; X86-NEXT: retl979;980; X64-LABEL: test_mm256_mask_cvttps_epi32:981; X64: # %bb.0: # %entry982; X64-NEXT: kmovw %edi, %k1983; X64-NEXT: vcvttps2dq %ymm1, %ymm0 {%k1}984; X64-NEXT: retq985entry:986 %0 = tail call <8 x i32> @llvm.x86.avx.cvtt.ps2dq.256(<8 x float> %__A) #8987 %1 = bitcast <4 x i64> %__W to <8 x i32>988 %2 = bitcast i8 %__U to <8 x i1>989 %3 = select <8 x i1> %2, <8 x i32> %0, <8 x i32> %1990 %4 = bitcast <8 x i32> %3 to <4 x i64>991 ret <4 x i64> %4992}993 994define <4 x i64> @test_mm256_maskz_cvttps_epi32(i8 zeroext %__U, <8 x float> %__A) {995; X86-LABEL: test_mm256_maskz_cvttps_epi32:996; X86: # %bb.0: # %entry997; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax998; X86-NEXT: kmovw %eax, %k1999; X86-NEXT: vcvttps2dq %ymm0, %ymm0 {%k1} {z}1000; X86-NEXT: retl1001;1002; X64-LABEL: test_mm256_maskz_cvttps_epi32:1003; X64: # %bb.0: # %entry1004; X64-NEXT: kmovw %edi, %k11005; X64-NEXT: vcvttps2dq %ymm0, %ymm0 {%k1} {z}1006; X64-NEXT: retq1007entry:1008 %0 = tail call <8 x i32> @llvm.x86.avx.cvtt.ps2dq.256(<8 x float> %__A) #81009 %1 = bitcast i8 %__U to <8 x i1>1010 %2 = select <8 x i1> %1, <8 x i32> %0, <8 x i32> zeroinitializer1011 %3 = bitcast <8 x i32> %2 to <4 x i64>1012 ret <4 x i64> %31013}1014 1015define <2 x i64> @test_mm_cvttps_epu32(<4 x float> %__A) {1016; CHECK-LABEL: test_mm_cvttps_epu32:1017; CHECK: # %bb.0: # %entry1018; CHECK-NEXT: vcvttps2udq %xmm0, %xmm01019; CHECK-NEXT: ret{{[l|q]}}1020entry:1021 %0 = tail call <4 x i32> @llvm.x86.avx512.mask.cvttps2udq.128(<4 x float> %__A, <4 x i32> zeroinitializer, i8 -1) #81022 %1 = bitcast <4 x i32> %0 to <2 x i64>1023 ret <2 x i64> %11024}1025 1026define <2 x i64> @test_mm_mask_cvttps_epu32(<2 x i64> %__W, i8 zeroext %__U, <4 x float> %__A) {1027; X86-LABEL: test_mm_mask_cvttps_epu32:1028; X86: # %bb.0: # %entry1029; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1030; X86-NEXT: kmovw %eax, %k11031; X86-NEXT: vcvttps2udq %xmm1, %xmm0 {%k1}1032; X86-NEXT: retl1033;1034; X64-LABEL: test_mm_mask_cvttps_epu32:1035; X64: # %bb.0: # %entry1036; X64-NEXT: kmovw %edi, %k11037; X64-NEXT: vcvttps2udq %xmm1, %xmm0 {%k1}1038; X64-NEXT: retq1039entry:1040 %0 = bitcast <2 x i64> %__W to <4 x i32>1041 %1 = tail call <4 x i32> @llvm.x86.avx512.mask.cvttps2udq.128(<4 x float> %__A, <4 x i32> %0, i8 %__U) #81042 %2 = bitcast <4 x i32> %1 to <2 x i64>1043 ret <2 x i64> %21044}1045 1046define <2 x i64> @test_mm_maskz_cvttps_epu32(i8 zeroext %__U, <4 x float> %__A) {1047; X86-LABEL: test_mm_maskz_cvttps_epu32:1048; X86: # %bb.0: # %entry1049; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1050; X86-NEXT: kmovw %eax, %k11051; X86-NEXT: vcvttps2udq %xmm0, %xmm0 {%k1} {z}1052; X86-NEXT: retl1053;1054; X64-LABEL: test_mm_maskz_cvttps_epu32:1055; X64: # %bb.0: # %entry1056; X64-NEXT: kmovw %edi, %k11057; X64-NEXT: vcvttps2udq %xmm0, %xmm0 {%k1} {z}1058; X64-NEXT: retq1059entry:1060 %0 = tail call <4 x i32> @llvm.x86.avx512.mask.cvttps2udq.128(<4 x float> %__A, <4 x i32> zeroinitializer, i8 %__U) #81061 %1 = bitcast <4 x i32> %0 to <2 x i64>1062 ret <2 x i64> %11063}1064 1065define <4 x i64> @test_mm256_cvttps_epu32(<8 x float> %__A) {1066; CHECK-LABEL: test_mm256_cvttps_epu32:1067; CHECK: # %bb.0: # %entry1068; CHECK-NEXT: vcvttps2udq %ymm0, %ymm01069; CHECK-NEXT: ret{{[l|q]}}1070entry:1071 %0 = tail call <8 x i32> @llvm.x86.avx512.mask.cvttps2udq.256(<8 x float> %__A, <8 x i32> zeroinitializer, i8 -1) #81072 %1 = bitcast <8 x i32> %0 to <4 x i64>1073 ret <4 x i64> %11074}1075 1076define <4 x i64> @test_mm256_mask_cvttps_epu32(<4 x i64> %__W, i8 zeroext %__U, <8 x float> %__A) {1077; X86-LABEL: test_mm256_mask_cvttps_epu32:1078; X86: # %bb.0: # %entry1079; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1080; X86-NEXT: kmovw %eax, %k11081; X86-NEXT: vcvttps2udq %ymm1, %ymm0 {%k1}1082; X86-NEXT: retl1083;1084; X64-LABEL: test_mm256_mask_cvttps_epu32:1085; X64: # %bb.0: # %entry1086; X64-NEXT: kmovw %edi, %k11087; X64-NEXT: vcvttps2udq %ymm1, %ymm0 {%k1}1088; X64-NEXT: retq1089entry:1090 %0 = bitcast <4 x i64> %__W to <8 x i32>1091 %1 = tail call <8 x i32> @llvm.x86.avx512.mask.cvttps2udq.256(<8 x float> %__A, <8 x i32> %0, i8 %__U) #81092 %2 = bitcast <8 x i32> %1 to <4 x i64>1093 ret <4 x i64> %21094}1095 1096define <4 x i64> @test_mm256_maskz_cvttps_epu32(i8 zeroext %__U, <8 x float> %__A) {1097; X86-LABEL: test_mm256_maskz_cvttps_epu32:1098; X86: # %bb.0: # %entry1099; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1100; X86-NEXT: kmovw %eax, %k11101; X86-NEXT: vcvttps2udq %ymm0, %ymm0 {%k1} {z}1102; X86-NEXT: retl1103;1104; X64-LABEL: test_mm256_maskz_cvttps_epu32:1105; X64: # %bb.0: # %entry1106; X64-NEXT: kmovw %edi, %k11107; X64-NEXT: vcvttps2udq %ymm0, %ymm0 {%k1} {z}1108; X64-NEXT: retq1109entry:1110 %0 = tail call <8 x i32> @llvm.x86.avx512.mask.cvttps2udq.256(<8 x float> %__A, <8 x i32> zeroinitializer, i8 %__U) #81111 %1 = bitcast <8 x i32> %0 to <4 x i64>1112 ret <4 x i64> %11113}1114 1115define <2 x double> @test_mm_cvtepu32_pd(<2 x i64> %__A) local_unnamed_addr #0 {1116; CHECK-LABEL: test_mm_cvtepu32_pd:1117; CHECK: # %bb.0: # %entry1118; CHECK-NEXT: vcvtudq2pd %xmm0, %xmm01119; CHECK-NEXT: ret{{[l|q]}}1120entry:1121 %0 = bitcast <2 x i64> %__A to <4 x i32>1122 %shuffle.i = shufflevector <4 x i32> %0, <4 x i32> undef, <2 x i32> <i32 0, i32 1>1123 %conv.i = uitofp <2 x i32> %shuffle.i to <2 x double>1124 ret <2 x double> %conv.i1125}1126 1127define <2 x double> @test_mm_mask_cvtepu32_pd(<2 x double> %__W, i8 zeroext %__U, <2 x i64> %__A) local_unnamed_addr #0 {1128; X86-LABEL: test_mm_mask_cvtepu32_pd:1129; X86: # %bb.0: # %entry1130; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1131; X86-NEXT: kmovw %eax, %k11132; X86-NEXT: vcvtudq2pd %xmm1, %xmm0 {%k1}1133; X86-NEXT: retl1134;1135; X64-LABEL: test_mm_mask_cvtepu32_pd:1136; X64: # %bb.0: # %entry1137; X64-NEXT: kmovw %edi, %k11138; X64-NEXT: vcvtudq2pd %xmm1, %xmm0 {%k1}1139; X64-NEXT: retq1140entry:1141 %0 = bitcast <2 x i64> %__A to <4 x i32>1142 %shuffle.i.i = shufflevector <4 x i32> %0, <4 x i32> undef, <2 x i32> <i32 0, i32 1>1143 %conv.i.i = uitofp <2 x i32> %shuffle.i.i to <2 x double>1144 %1 = bitcast i8 %__U to <8 x i1>1145 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>1146 %2 = select <2 x i1> %extract.i, <2 x double> %conv.i.i, <2 x double> %__W1147 ret <2 x double> %21148}1149 1150define <2 x double> @test_mm_maskz_cvtepu32_pd(i8 zeroext %__U, <2 x i64> %__A) local_unnamed_addr #0 {1151; X86-LABEL: test_mm_maskz_cvtepu32_pd:1152; X86: # %bb.0: # %entry1153; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1154; X86-NEXT: kmovw %eax, %k11155; X86-NEXT: vcvtudq2pd %xmm0, %xmm0 {%k1} {z}1156; X86-NEXT: retl1157;1158; X64-LABEL: test_mm_maskz_cvtepu32_pd:1159; X64: # %bb.0: # %entry1160; X64-NEXT: kmovw %edi, %k11161; X64-NEXT: vcvtudq2pd %xmm0, %xmm0 {%k1} {z}1162; X64-NEXT: retq1163entry:1164 %0 = bitcast <2 x i64> %__A to <4 x i32>1165 %shuffle.i.i = shufflevector <4 x i32> %0, <4 x i32> undef, <2 x i32> <i32 0, i32 1>1166 %conv.i.i = uitofp <2 x i32> %shuffle.i.i to <2 x double>1167 %1 = bitcast i8 %__U to <8 x i1>1168 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>1169 %2 = select <2 x i1> %extract.i, <2 x double> %conv.i.i, <2 x double> zeroinitializer1170 ret <2 x double> %21171}1172 1173define <4 x double> @test_mm256_cvtepu32_pd(<2 x i64> %__A) local_unnamed_addr #0 {1174; CHECK-LABEL: test_mm256_cvtepu32_pd:1175; CHECK: # %bb.0: # %entry1176; CHECK-NEXT: vcvtudq2pd %xmm0, %ymm01177; CHECK-NEXT: ret{{[l|q]}}1178entry:1179 %0 = bitcast <2 x i64> %__A to <4 x i32>1180 %conv.i = uitofp <4 x i32> %0 to <4 x double>1181 ret <4 x double> %conv.i1182}1183 1184define <4 x double> @test_mm256_mask_cvtepu32_pd(<4 x double> %__W, i8 zeroext %__U, <2 x i64> %__A) local_unnamed_addr #0 {1185; X86-LABEL: test_mm256_mask_cvtepu32_pd:1186; X86: # %bb.0: # %entry1187; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1188; X86-NEXT: kmovw %eax, %k11189; X86-NEXT: vcvtudq2pd %xmm1, %ymm0 {%k1}1190; X86-NEXT: retl1191;1192; X64-LABEL: test_mm256_mask_cvtepu32_pd:1193; X64: # %bb.0: # %entry1194; X64-NEXT: kmovw %edi, %k11195; X64-NEXT: vcvtudq2pd %xmm1, %ymm0 {%k1}1196; X64-NEXT: retq1197entry:1198 %0 = bitcast <2 x i64> %__A to <4 x i32>1199 %conv.i.i = uitofp <4 x i32> %0 to <4 x double>1200 %1 = bitcast i8 %__U to <8 x i1>1201 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1202 %2 = select <4 x i1> %extract.i, <4 x double> %conv.i.i, <4 x double> %__W1203 ret <4 x double> %21204}1205 1206define <4 x double> @test_mm256_maskz_cvtepu32_pd(i8 zeroext %__U, <2 x i64> %__A) local_unnamed_addr #0 {1207; X86-LABEL: test_mm256_maskz_cvtepu32_pd:1208; X86: # %bb.0: # %entry1209; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1210; X86-NEXT: kmovw %eax, %k11211; X86-NEXT: vcvtudq2pd %xmm0, %ymm0 {%k1} {z}1212; X86-NEXT: retl1213;1214; X64-LABEL: test_mm256_maskz_cvtepu32_pd:1215; X64: # %bb.0: # %entry1216; X64-NEXT: kmovw %edi, %k11217; X64-NEXT: vcvtudq2pd %xmm0, %ymm0 {%k1} {z}1218; X64-NEXT: retq1219entry:1220 %0 = bitcast <2 x i64> %__A to <4 x i32>1221 %conv.i.i = uitofp <4 x i32> %0 to <4 x double>1222 %1 = bitcast i8 %__U to <8 x i1>1223 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1224 %2 = select <4 x i1> %extract.i, <4 x double> %conv.i.i, <4 x double> zeroinitializer1225 ret <4 x double> %21226}1227 1228define <4 x float> @test_mm_cvtepu32_ps(<2 x i64> %__A) {1229; CHECK-LABEL: test_mm_cvtepu32_ps:1230; CHECK: # %bb.0: # %entry1231; CHECK-NEXT: vcvtudq2ps %xmm0, %xmm01232; CHECK-NEXT: ret{{[l|q]}}1233entry:1234 %0 = bitcast <2 x i64> %__A to <4 x i32>1235 %conv.i = uitofp <4 x i32> %0 to <4 x float>1236 ret <4 x float> %conv.i1237}1238 1239define <4 x float> @test_mm_mask_cvtepu32_ps(<4 x float> %__W, i8 zeroext %__U, <2 x i64> %__A) {1240; X86-LABEL: test_mm_mask_cvtepu32_ps:1241; X86: # %bb.0: # %entry1242; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1243; X86-NEXT: kmovw %eax, %k11244; X86-NEXT: vcvtudq2ps %xmm1, %xmm0 {%k1}1245; X86-NEXT: retl1246;1247; X64-LABEL: test_mm_mask_cvtepu32_ps:1248; X64: # %bb.0: # %entry1249; X64-NEXT: kmovw %edi, %k11250; X64-NEXT: vcvtudq2ps %xmm1, %xmm0 {%k1}1251; X64-NEXT: retq1252entry:1253 %0 = bitcast <2 x i64> %__A to <4 x i32>1254 %conv.i.i = uitofp <4 x i32> %0 to <4 x float>1255 %1 = bitcast i8 %__U to <8 x i1>1256 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1257 %2 = select <4 x i1> %extract.i, <4 x float> %conv.i.i, <4 x float> %__W1258 ret <4 x float> %21259}1260 1261define <4 x float> @test_mm_maskz_cvtepu32_ps(i8 zeroext %__U, <2 x i64> %__A) {1262; X86-LABEL: test_mm_maskz_cvtepu32_ps:1263; X86: # %bb.0: # %entry1264; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1265; X86-NEXT: kmovw %eax, %k11266; X86-NEXT: vcvtudq2ps %xmm0, %xmm0 {%k1} {z}1267; X86-NEXT: retl1268;1269; X64-LABEL: test_mm_maskz_cvtepu32_ps:1270; X64: # %bb.0: # %entry1271; X64-NEXT: kmovw %edi, %k11272; X64-NEXT: vcvtudq2ps %xmm0, %xmm0 {%k1} {z}1273; X64-NEXT: retq1274entry:1275 %0 = bitcast <2 x i64> %__A to <4 x i32>1276 %conv.i.i = uitofp <4 x i32> %0 to <4 x float>1277 %1 = bitcast i8 %__U to <8 x i1>1278 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1279 %2 = select <4 x i1> %extract.i, <4 x float> %conv.i.i, <4 x float> zeroinitializer1280 ret <4 x float> %21281}1282 1283define <8 x float> @test_mm256_cvtepu32_ps(<4 x i64> %__A) {1284; CHECK-LABEL: test_mm256_cvtepu32_ps:1285; CHECK: # %bb.0: # %entry1286; CHECK-NEXT: vcvtudq2ps %ymm0, %ymm01287; CHECK-NEXT: ret{{[l|q]}}1288entry:1289 %0 = bitcast <4 x i64> %__A to <8 x i32>1290 %conv.i = uitofp <8 x i32> %0 to <8 x float>1291 ret <8 x float> %conv.i1292}1293 1294define <8 x float> @test_mm256_mask_cvtepu32_ps(<8 x float> %__W, i8 zeroext %__U, <4 x i64> %__A) {1295; X86-LABEL: test_mm256_mask_cvtepu32_ps:1296; X86: # %bb.0: # %entry1297; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1298; X86-NEXT: kmovw %eax, %k11299; X86-NEXT: vcvtudq2ps %ymm1, %ymm0 {%k1}1300; X86-NEXT: retl1301;1302; X64-LABEL: test_mm256_mask_cvtepu32_ps:1303; X64: # %bb.0: # %entry1304; X64-NEXT: kmovw %edi, %k11305; X64-NEXT: vcvtudq2ps %ymm1, %ymm0 {%k1}1306; X64-NEXT: retq1307entry:1308 %0 = bitcast <4 x i64> %__A to <8 x i32>1309 %conv.i.i = uitofp <8 x i32> %0 to <8 x float>1310 %1 = bitcast i8 %__U to <8 x i1>1311 %2 = select <8 x i1> %1, <8 x float> %conv.i.i, <8 x float> %__W1312 ret <8 x float> %21313}1314 1315define <8 x float> @test_mm256_maskz_cvtepu32_ps(i8 zeroext %__U, <4 x i64> %__A) {1316; X86-LABEL: test_mm256_maskz_cvtepu32_ps:1317; X86: # %bb.0: # %entry1318; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1319; X86-NEXT: kmovw %eax, %k11320; X86-NEXT: vcvtudq2ps %ymm0, %ymm0 {%k1} {z}1321; X86-NEXT: retl1322;1323; X64-LABEL: test_mm256_maskz_cvtepu32_ps:1324; X64: # %bb.0: # %entry1325; X64-NEXT: kmovw %edi, %k11326; X64-NEXT: vcvtudq2ps %ymm0, %ymm0 {%k1} {z}1327; X64-NEXT: retq1328entry:1329 %0 = bitcast <4 x i64> %__A to <8 x i32>1330 %conv.i.i = uitofp <8 x i32> %0 to <8 x float>1331 %1 = bitcast i8 %__U to <8 x i1>1332 %2 = select <8 x i1> %1, <8 x float> %conv.i.i, <8 x float> zeroinitializer1333 ret <8 x float> %21334}1335 1336define <8 x float> @test_mm256_shuffle_f32x4(<8 x float> %__A, <8 x float> %__B) {1337; CHECK-LABEL: test_mm256_shuffle_f32x4:1338; CHECK: # %bb.0: # %entry1339; CHECK-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]1340; CHECK-NEXT: ret{{[l|q]}}1341entry:1342 %shuffle = shufflevector <8 x float> %__A, <8 x float> %__B, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 12, i32 13, i32 14, i32 15>1343 ret <8 x float> %shuffle1344}1345 1346define <8 x float> @test_mm256_mask_shuffle_f32x4(<8 x float> %__W, i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B) {1347; X86-LABEL: test_mm256_mask_shuffle_f32x4:1348; X86: # %bb.0: # %entry1349; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1350; X86-NEXT: kmovw %eax, %k11351; X86-NEXT: vshuff32x4 {{.*#+}} ymm0 {%k1} = ymm1[4,5,6,7],ymm2[4,5,6,7]1352; X86-NEXT: retl1353;1354; X64-LABEL: test_mm256_mask_shuffle_f32x4:1355; X64: # %bb.0: # %entry1356; X64-NEXT: kmovw %edi, %k11357; X64-NEXT: vshuff32x4 {{.*#+}} ymm0 {%k1} = ymm1[4,5,6,7],ymm2[4,5,6,7]1358; X64-NEXT: retq1359entry:1360 %shuffle = shufflevector <8 x float> %__A, <8 x float> %__B, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 12, i32 13, i32 14, i32 15>1361 %0 = bitcast i8 %__U to <8 x i1>1362 %1 = select <8 x i1> %0, <8 x float> %shuffle, <8 x float> %__W1363 ret <8 x float> %11364}1365 1366define <8 x float> @test_mm256_maskz_shuffle_f32x4(i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B) {1367; X86-LABEL: test_mm256_maskz_shuffle_f32x4:1368; X86: # %bb.0: # %entry1369; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1370; X86-NEXT: kmovw %eax, %k11371; X86-NEXT: vshuff32x4 {{.*#+}} ymm0 {%k1} {z} = ymm0[4,5,6,7],ymm1[4,5,6,7]1372; X86-NEXT: retl1373;1374; X64-LABEL: test_mm256_maskz_shuffle_f32x4:1375; X64: # %bb.0: # %entry1376; X64-NEXT: kmovw %edi, %k11377; X64-NEXT: vshuff32x4 {{.*#+}} ymm0 {%k1} {z} = ymm0[4,5,6,7],ymm1[4,5,6,7]1378; X64-NEXT: retq1379entry:1380 %shuffle = shufflevector <8 x float> %__A, <8 x float> %__B, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 12, i32 13, i32 14, i32 15>1381 %0 = bitcast i8 %__U to <8 x i1>1382 %1 = select <8 x i1> %0, <8 x float> %shuffle, <8 x float> zeroinitializer1383 ret <8 x float> %11384}1385 1386define <4 x double> @test_mm256_shuffle_f64x2(<4 x double> %__A, <4 x double> %__B) {1387; CHECK-LABEL: test_mm256_shuffle_f64x2:1388; CHECK: # %bb.0: # %entry1389; CHECK-NEXT: vperm2f128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]1390; CHECK-NEXT: ret{{[l|q]}}1391entry:1392 %shuffle = shufflevector <4 x double> %__A, <4 x double> %__B, <4 x i32> <i32 2, i32 3, i32 6, i32 7>1393 ret <4 x double> %shuffle1394}1395 1396define <4 x double> @test_mm256_mask_shuffle_f64x2(<4 x double> %__W, i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B) {1397; X86-LABEL: test_mm256_mask_shuffle_f64x2:1398; X86: # %bb.0: # %entry1399; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1400; X86-NEXT: kmovw %eax, %k11401; X86-NEXT: vshuff64x2 {{.*#+}} ymm0 {%k1} = ymm1[2,3],ymm2[2,3]1402; X86-NEXT: retl1403;1404; X64-LABEL: test_mm256_mask_shuffle_f64x2:1405; X64: # %bb.0: # %entry1406; X64-NEXT: kmovw %edi, %k11407; X64-NEXT: vshuff64x2 {{.*#+}} ymm0 {%k1} = ymm1[2,3],ymm2[2,3]1408; X64-NEXT: retq1409entry:1410 %shuffle = shufflevector <4 x double> %__A, <4 x double> %__B, <4 x i32> <i32 2, i32 3, i32 6, i32 7>1411 %0 = bitcast i8 %__U to <8 x i1>1412 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1413 %1 = select <4 x i1> %extract, <4 x double> %shuffle, <4 x double> %__W1414 ret <4 x double> %11415}1416 1417define <4 x double> @test_mm256_maskz_shuffle_f64x2(i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B) {1418; X86-LABEL: test_mm256_maskz_shuffle_f64x2:1419; X86: # %bb.0: # %entry1420; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1421; X86-NEXT: kmovw %eax, %k11422; X86-NEXT: vshuff64x2 {{.*#+}} ymm0 {%k1} {z} = ymm0[2,3],ymm1[2,3]1423; X86-NEXT: retl1424;1425; X64-LABEL: test_mm256_maskz_shuffle_f64x2:1426; X64: # %bb.0: # %entry1427; X64-NEXT: kmovw %edi, %k11428; X64-NEXT: vshuff64x2 {{.*#+}} ymm0 {%k1} {z} = ymm0[2,3],ymm1[2,3]1429; X64-NEXT: retq1430entry:1431 %shuffle = shufflevector <4 x double> %__A, <4 x double> %__B, <4 x i32> <i32 2, i32 3, i32 6, i32 7>1432 %0 = bitcast i8 %__U to <8 x i1>1433 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1434 %1 = select <4 x i1> %extract, <4 x double> %shuffle, <4 x double> zeroinitializer1435 ret <4 x double> %11436}1437 1438define <4 x i64> @test_mm256_shuffle_i32x4(<4 x i64> %__A, <4 x i64> %__B) {1439; CHECK-LABEL: test_mm256_shuffle_i32x4:1440; CHECK: # %bb.0: # %entry1441; CHECK-NEXT: vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]1442; CHECK-NEXT: ret{{[l|q]}}1443entry:1444 %shuffle = shufflevector <4 x i64> %__A, <4 x i64> %__B, <4 x i32> <i32 2, i32 3, i32 6, i32 7>1445 ret <4 x i64> %shuffle1446}1447 1448define <4 x i64> @test_mm256_mask_shuffle_i32x4(<4 x i64> %__W, i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) {1449; X86-LABEL: test_mm256_mask_shuffle_i32x4:1450; X86: # %bb.0: # %entry1451; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1452; X86-NEXT: kmovw %eax, %k11453; X86-NEXT: vshufi32x4 {{.*#+}} ymm0 {%k1} = ymm1[4,5,6,7],ymm2[4,5,6,7]1454; X86-NEXT: retl1455;1456; X64-LABEL: test_mm256_mask_shuffle_i32x4:1457; X64: # %bb.0: # %entry1458; X64-NEXT: kmovw %edi, %k11459; X64-NEXT: vshufi32x4 {{.*#+}} ymm0 {%k1} = ymm1[4,5,6,7],ymm2[4,5,6,7]1460; X64-NEXT: retq1461entry:1462 %shuffle = shufflevector <4 x i64> %__A, <4 x i64> %__B, <4 x i32> <i32 2, i32 3, i32 6, i32 7>1463 %0 = bitcast <4 x i64> %shuffle to <8 x i32>1464 %1 = bitcast <4 x i64> %__W to <8 x i32>1465 %2 = bitcast i8 %__U to <8 x i1>1466 %3 = select <8 x i1> %2, <8 x i32> %0, <8 x i32> %11467 %4 = bitcast <8 x i32> %3 to <4 x i64>1468 ret <4 x i64> %41469}1470 1471define <4 x i64> @test_mm256_maskz_shuffle_i32x4(i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) {1472; X86-LABEL: test_mm256_maskz_shuffle_i32x4:1473; X86: # %bb.0: # %entry1474; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1475; X86-NEXT: kmovw %eax, %k11476; X86-NEXT: vshufi32x4 {{.*#+}} ymm0 {%k1} {z} = ymm0[4,5,6,7],ymm1[4,5,6,7]1477; X86-NEXT: retl1478;1479; X64-LABEL: test_mm256_maskz_shuffle_i32x4:1480; X64: # %bb.0: # %entry1481; X64-NEXT: kmovw %edi, %k11482; X64-NEXT: vshufi32x4 {{.*#+}} ymm0 {%k1} {z} = ymm0[4,5,6,7],ymm1[4,5,6,7]1483; X64-NEXT: retq1484entry:1485 %shuffle = shufflevector <4 x i64> %__A, <4 x i64> %__B, <4 x i32> <i32 2, i32 3, i32 6, i32 7>1486 %0 = bitcast <4 x i64> %shuffle to <8 x i32>1487 %1 = bitcast i8 %__U to <8 x i1>1488 %2 = select <8 x i1> %1, <8 x i32> %0, <8 x i32> zeroinitializer1489 %3 = bitcast <8 x i32> %2 to <4 x i64>1490 ret <4 x i64> %31491}1492 1493define <4 x i64> @test_mm256_shuffle_i64x2(<4 x i64> %__A, <4 x i64> %__B) {1494; CHECK-LABEL: test_mm256_shuffle_i64x2:1495; CHECK: # %bb.0: # %entry1496; CHECK-NEXT: vperm2i128 {{.*#+}} ymm0 = ymm0[2,3],ymm1[2,3]1497; CHECK-NEXT: ret{{[l|q]}}1498entry:1499 %shuffle = shufflevector <4 x i64> %__A, <4 x i64> %__B, <4 x i32> <i32 2, i32 3, i32 6, i32 7>1500 ret <4 x i64> %shuffle1501}1502 1503define <4 x i64> @test_mm256_mask_shuffle_i64x2(<4 x i64> %__W, i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) {1504; X86-LABEL: test_mm256_mask_shuffle_i64x2:1505; X86: # %bb.0: # %entry1506; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1507; X86-NEXT: kmovw %eax, %k11508; X86-NEXT: vshufi64x2 {{.*#+}} ymm0 {%k1} = ymm1[2,3],ymm2[2,3]1509; X86-NEXT: retl1510;1511; X64-LABEL: test_mm256_mask_shuffle_i64x2:1512; X64: # %bb.0: # %entry1513; X64-NEXT: kmovw %edi, %k11514; X64-NEXT: vshufi64x2 {{.*#+}} ymm0 {%k1} = ymm1[2,3],ymm2[2,3]1515; X64-NEXT: retq1516entry:1517 %shuffle = shufflevector <4 x i64> %__A, <4 x i64> %__B, <4 x i32> <i32 2, i32 3, i32 6, i32 7>1518 %0 = bitcast i8 %__U to <8 x i1>1519 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1520 %1 = select <4 x i1> %extract, <4 x i64> %shuffle, <4 x i64> %__W1521 ret <4 x i64> %11522}1523 1524define <4 x i64> @test_mm256_maskz_shuffle_i64x2(i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) {1525; X86-LABEL: test_mm256_maskz_shuffle_i64x2:1526; X86: # %bb.0: # %entry1527; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1528; X86-NEXT: kmovw %eax, %k11529; X86-NEXT: vshufi64x2 {{.*#+}} ymm0 {%k1} {z} = ymm0[2,3],ymm1[2,3]1530; X86-NEXT: retl1531;1532; X64-LABEL: test_mm256_maskz_shuffle_i64x2:1533; X64: # %bb.0: # %entry1534; X64-NEXT: kmovw %edi, %k11535; X64-NEXT: vshufi64x2 {{.*#+}} ymm0 {%k1} {z} = ymm0[2,3],ymm1[2,3]1536; X64-NEXT: retq1537entry:1538 %shuffle = shufflevector <4 x i64> %__A, <4 x i64> %__B, <4 x i32> <i32 2, i32 3, i32 6, i32 7>1539 %0 = bitcast i8 %__U to <8 x i1>1540 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1541 %1 = select <4 x i1> %extract, <4 x i64> %shuffle, <4 x i64> zeroinitializer1542 ret <4 x i64> %11543}1544 1545define zeroext i8 @test_mm_test_epi32_mask(<2 x i64> %__A, <2 x i64> %__B) {1546; CHECK-LABEL: test_mm_test_epi32_mask:1547; CHECK: # %bb.0: # %entry1548; CHECK-NEXT: vptestmd %xmm0, %xmm1, %k01549; CHECK-NEXT: kmovw %k0, %eax1550; CHECK-NEXT: # kill: def $al killed $al killed $eax1551; CHECK-NEXT: ret{{[l|q]}}1552entry:1553 %and.i.i = and <2 x i64> %__B, %__A1554 %0 = bitcast <2 x i64> %and.i.i to <4 x i32>1555 %1 = icmp ne <4 x i32> %0, zeroinitializer1556 %2 = shufflevector <4 x i1> %1, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1557 %3 = bitcast <8 x i1> %2 to i81558 ret i8 %31559}1560 1561define zeroext i8 @test_mm_mask_test_epi32_mask(i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) {1562; X86-LABEL: test_mm_mask_test_epi32_mask:1563; X86: # %bb.0: # %entry1564; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1565; X86-NEXT: kmovw %eax, %k11566; X86-NEXT: vptestmd %xmm0, %xmm1, %k0 {%k1}1567; X86-NEXT: kmovw %k0, %eax1568; X86-NEXT: # kill: def $al killed $al killed $eax1569; X86-NEXT: retl1570;1571; X64-LABEL: test_mm_mask_test_epi32_mask:1572; X64: # %bb.0: # %entry1573; X64-NEXT: kmovw %edi, %k11574; X64-NEXT: vptestmd %xmm0, %xmm1, %k0 {%k1}1575; X64-NEXT: kmovw %k0, %eax1576; X64-NEXT: # kill: def $al killed $al killed $eax1577; X64-NEXT: retq1578entry:1579 %and.i.i = and <2 x i64> %__B, %__A1580 %0 = bitcast <2 x i64> %and.i.i to <4 x i32>1581 %1 = icmp ne <4 x i32> %0, zeroinitializer1582 %2 = bitcast i8 %__U to <8 x i1>1583 %extract.i = shufflevector <8 x i1> %2, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1584 %3 = and <4 x i1> %1, %extract.i1585 %4 = shufflevector <4 x i1> %3, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1586 %5 = bitcast <8 x i1> %4 to i81587 ret i8 %51588}1589 1590define zeroext i8 @test_mm256_test_epi32_mask(<4 x i64> %__A, <4 x i64> %__B) {1591; CHECK-LABEL: test_mm256_test_epi32_mask:1592; CHECK: # %bb.0: # %entry1593; CHECK-NEXT: vptestmd %ymm0, %ymm1, %k01594; CHECK-NEXT: kmovw %k0, %eax1595; CHECK-NEXT: # kill: def $al killed $al killed $eax1596; CHECK-NEXT: vzeroupper1597; CHECK-NEXT: ret{{[l|q]}}1598entry:1599 %and.i.i = and <4 x i64> %__B, %__A1600 %0 = bitcast <4 x i64> %and.i.i to <8 x i32>1601 %1 = icmp ne <8 x i32> %0, zeroinitializer1602 %2 = bitcast <8 x i1> %1 to i81603 ret i8 %21604}1605 1606define zeroext i8 @test_mm256_mask_test_epi32_mask(i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) {1607; X86-LABEL: test_mm256_mask_test_epi32_mask:1608; X86: # %bb.0: # %entry1609; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1610; X86-NEXT: kmovw %eax, %k11611; X86-NEXT: vptestmd %ymm0, %ymm1, %k0 {%k1}1612; X86-NEXT: kmovw %k0, %eax1613; X86-NEXT: # kill: def $al killed $al killed $eax1614; X86-NEXT: vzeroupper1615; X86-NEXT: retl1616;1617; X64-LABEL: test_mm256_mask_test_epi32_mask:1618; X64: # %bb.0: # %entry1619; X64-NEXT: kmovw %edi, %k11620; X64-NEXT: vptestmd %ymm0, %ymm1, %k0 {%k1}1621; X64-NEXT: kmovw %k0, %eax1622; X64-NEXT: # kill: def $al killed $al killed $eax1623; X64-NEXT: vzeroupper1624; X64-NEXT: retq1625entry:1626 %and.i.i = and <4 x i64> %__B, %__A1627 %0 = bitcast <4 x i64> %and.i.i to <8 x i32>1628 %1 = icmp ne <8 x i32> %0, zeroinitializer1629 %2 = bitcast i8 %__U to <8 x i1>1630 %3 = and <8 x i1> %1, %21631 %4 = bitcast <8 x i1> %3 to i81632 ret i8 %41633}1634 1635define zeroext i8 @test_mm_test_epi64_mask(<2 x i64> %__A, <2 x i64> %__B) {1636; CHECK-LABEL: test_mm_test_epi64_mask:1637; CHECK: # %bb.0: # %entry1638; CHECK-NEXT: vptestmq %xmm0, %xmm1, %k01639; CHECK-NEXT: kmovw %k0, %eax1640; CHECK-NEXT: # kill: def $al killed $al killed $eax1641; CHECK-NEXT: ret{{[l|q]}}1642entry:1643 %and.i.i = and <2 x i64> %__B, %__A1644 %0 = icmp ne <2 x i64> %and.i.i, zeroinitializer1645 %1 = shufflevector <2 x i1> %0, <2 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3>1646 %2 = bitcast <8 x i1> %1 to i81647 ret i8 %21648}1649 1650define zeroext i8 @test_mm_mask_test_epi64_mask(i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) {1651; X86-LABEL: test_mm_mask_test_epi64_mask:1652; X86: # %bb.0: # %entry1653; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1654; X86-NEXT: kmovw %eax, %k11655; X86-NEXT: vptestmq %xmm0, %xmm1, %k0 {%k1}1656; X86-NEXT: kmovw %k0, %eax1657; X86-NEXT: # kill: def $al killed $al killed $eax1658; X86-NEXT: retl1659;1660; X64-LABEL: test_mm_mask_test_epi64_mask:1661; X64: # %bb.0: # %entry1662; X64-NEXT: kmovw %edi, %k11663; X64-NEXT: vptestmq %xmm0, %xmm1, %k0 {%k1}1664; X64-NEXT: kmovw %k0, %eax1665; X64-NEXT: # kill: def $al killed $al killed $eax1666; X64-NEXT: retq1667entry:1668 %and.i.i = and <2 x i64> %__B, %__A1669 %0 = icmp ne <2 x i64> %and.i.i, zeroinitializer1670 %1 = bitcast i8 %__U to <8 x i1>1671 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>1672 %2 = and <2 x i1> %0, %extract.i1673 %3 = shufflevector <2 x i1> %2, <2 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3>1674 %4 = bitcast <8 x i1> %3 to i81675 ret i8 %41676}1677 1678define zeroext i8 @test_mm256_test_epi64_mask(<4 x i64> %__A, <4 x i64> %__B) {1679; CHECK-LABEL: test_mm256_test_epi64_mask:1680; CHECK: # %bb.0: # %entry1681; CHECK-NEXT: vptestmq %ymm0, %ymm1, %k01682; CHECK-NEXT: kmovw %k0, %eax1683; CHECK-NEXT: # kill: def $al killed $al killed $eax1684; CHECK-NEXT: vzeroupper1685; CHECK-NEXT: ret{{[l|q]}}1686entry:1687 %and.i.i = and <4 x i64> %__B, %__A1688 %0 = icmp ne <4 x i64> %and.i.i, zeroinitializer1689 %1 = shufflevector <4 x i1> %0, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1690 %2 = bitcast <8 x i1> %1 to i81691 ret i8 %21692}1693 1694define zeroext i8 @test_mm256_mask_test_epi64_mask(i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) {1695; X86-LABEL: test_mm256_mask_test_epi64_mask:1696; X86: # %bb.0: # %entry1697; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1698; X86-NEXT: kmovw %eax, %k11699; X86-NEXT: vptestmq %ymm0, %ymm1, %k0 {%k1}1700; X86-NEXT: kmovw %k0, %eax1701; X86-NEXT: # kill: def $al killed $al killed $eax1702; X86-NEXT: vzeroupper1703; X86-NEXT: retl1704;1705; X64-LABEL: test_mm256_mask_test_epi64_mask:1706; X64: # %bb.0: # %entry1707; X64-NEXT: kmovw %edi, %k11708; X64-NEXT: vptestmq %ymm0, %ymm1, %k0 {%k1}1709; X64-NEXT: kmovw %k0, %eax1710; X64-NEXT: # kill: def $al killed $al killed $eax1711; X64-NEXT: vzeroupper1712; X64-NEXT: retq1713entry:1714 %and.i.i = and <4 x i64> %__B, %__A1715 %0 = icmp ne <4 x i64> %and.i.i, zeroinitializer1716 %1 = bitcast i8 %__U to <8 x i1>1717 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1718 %2 = and <4 x i1> %0, %extract.i1719 %3 = shufflevector <4 x i1> %2, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1720 %4 = bitcast <8 x i1> %3 to i81721 ret i8 %41722}1723 1724define zeroext i8 @test_mm_testn_epi32_mask(<2 x i64> %__A, <2 x i64> %__B) {1725; CHECK-LABEL: test_mm_testn_epi32_mask:1726; CHECK: # %bb.0: # %entry1727; CHECK-NEXT: vptestnmd %xmm0, %xmm1, %k01728; CHECK-NEXT: kmovw %k0, %eax1729; CHECK-NEXT: # kill: def $al killed $al killed $eax1730; CHECK-NEXT: ret{{[l|q]}}1731entry:1732 %and.i.i = and <2 x i64> %__B, %__A1733 %0 = bitcast <2 x i64> %and.i.i to <4 x i32>1734 %1 = icmp eq <4 x i32> %0, zeroinitializer1735 %2 = shufflevector <4 x i1> %1, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1736 %3 = bitcast <8 x i1> %2 to i81737 ret i8 %31738}1739 1740define zeroext i8 @test_mm_mask_testn_epi32_mask(i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) {1741; X86-LABEL: test_mm_mask_testn_epi32_mask:1742; X86: # %bb.0: # %entry1743; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1744; X86-NEXT: kmovw %eax, %k11745; X86-NEXT: vptestnmd %xmm0, %xmm1, %k0 {%k1}1746; X86-NEXT: kmovw %k0, %eax1747; X86-NEXT: # kill: def $al killed $al killed $eax1748; X86-NEXT: retl1749;1750; X64-LABEL: test_mm_mask_testn_epi32_mask:1751; X64: # %bb.0: # %entry1752; X64-NEXT: kmovw %edi, %k11753; X64-NEXT: vptestnmd %xmm0, %xmm1, %k0 {%k1}1754; X64-NEXT: kmovw %k0, %eax1755; X64-NEXT: # kill: def $al killed $al killed $eax1756; X64-NEXT: retq1757entry:1758 %and.i.i = and <2 x i64> %__B, %__A1759 %0 = bitcast <2 x i64> %and.i.i to <4 x i32>1760 %1 = icmp eq <4 x i32> %0, zeroinitializer1761 %2 = bitcast i8 %__U to <8 x i1>1762 %extract.i = shufflevector <8 x i1> %2, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1763 %3 = and <4 x i1> %1, %extract.i1764 %4 = shufflevector <4 x i1> %3, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1765 %5 = bitcast <8 x i1> %4 to i81766 ret i8 %51767}1768 1769define zeroext i8 @test_mm256_testn_epi32_mask(<4 x i64> %__A, <4 x i64> %__B) {1770; CHECK-LABEL: test_mm256_testn_epi32_mask:1771; CHECK: # %bb.0: # %entry1772; CHECK-NEXT: vptestnmd %ymm0, %ymm1, %k01773; CHECK-NEXT: kmovw %k0, %eax1774; CHECK-NEXT: # kill: def $al killed $al killed $eax1775; CHECK-NEXT: vzeroupper1776; CHECK-NEXT: ret{{[l|q]}}1777entry:1778 %and.i.i = and <4 x i64> %__B, %__A1779 %0 = bitcast <4 x i64> %and.i.i to <8 x i32>1780 %1 = icmp eq <8 x i32> %0, zeroinitializer1781 %2 = bitcast <8 x i1> %1 to i81782 ret i8 %21783}1784 1785define zeroext i8 @test_mm256_mask_testn_epi32_mask(i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) {1786; X86-LABEL: test_mm256_mask_testn_epi32_mask:1787; X86: # %bb.0: # %entry1788; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1789; X86-NEXT: kmovw %eax, %k11790; X86-NEXT: vptestnmd %ymm0, %ymm1, %k0 {%k1}1791; X86-NEXT: kmovw %k0, %eax1792; X86-NEXT: # kill: def $al killed $al killed $eax1793; X86-NEXT: vzeroupper1794; X86-NEXT: retl1795;1796; X64-LABEL: test_mm256_mask_testn_epi32_mask:1797; X64: # %bb.0: # %entry1798; X64-NEXT: kmovw %edi, %k11799; X64-NEXT: vptestnmd %ymm0, %ymm1, %k0 {%k1}1800; X64-NEXT: kmovw %k0, %eax1801; X64-NEXT: # kill: def $al killed $al killed $eax1802; X64-NEXT: vzeroupper1803; X64-NEXT: retq1804entry:1805 %and.i.i = and <4 x i64> %__B, %__A1806 %0 = bitcast <4 x i64> %and.i.i to <8 x i32>1807 %1 = icmp eq <8 x i32> %0, zeroinitializer1808 %2 = bitcast i8 %__U to <8 x i1>1809 %3 = and <8 x i1> %1, %21810 %4 = bitcast <8 x i1> %3 to i81811 ret i8 %41812}1813 1814define zeroext i8 @test_mm_testn_epi64_mask(<2 x i64> %__A, <2 x i64> %__B) {1815; CHECK-LABEL: test_mm_testn_epi64_mask:1816; CHECK: # %bb.0: # %entry1817; CHECK-NEXT: vptestnmq %xmm0, %xmm1, %k01818; CHECK-NEXT: kmovw %k0, %eax1819; CHECK-NEXT: # kill: def $al killed $al killed $eax1820; CHECK-NEXT: ret{{[l|q]}}1821entry:1822 %and.i.i = and <2 x i64> %__B, %__A1823 %0 = icmp eq <2 x i64> %and.i.i, zeroinitializer1824 %1 = shufflevector <2 x i1> %0, <2 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3>1825 %2 = bitcast <8 x i1> %1 to i81826 ret i8 %21827}1828 1829define zeroext i8 @test_mm_mask_testn_epi64_mask(i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) {1830; X86-LABEL: test_mm_mask_testn_epi64_mask:1831; X86: # %bb.0: # %entry1832; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1833; X86-NEXT: kmovw %eax, %k11834; X86-NEXT: vptestnmq %xmm0, %xmm1, %k0 {%k1}1835; X86-NEXT: kmovw %k0, %eax1836; X86-NEXT: # kill: def $al killed $al killed $eax1837; X86-NEXT: retl1838;1839; X64-LABEL: test_mm_mask_testn_epi64_mask:1840; X64: # %bb.0: # %entry1841; X64-NEXT: kmovw %edi, %k11842; X64-NEXT: vptestnmq %xmm0, %xmm1, %k0 {%k1}1843; X64-NEXT: kmovw %k0, %eax1844; X64-NEXT: # kill: def $al killed $al killed $eax1845; X64-NEXT: retq1846entry:1847 %and.i.i = and <2 x i64> %__B, %__A1848 %0 = icmp eq <2 x i64> %and.i.i, zeroinitializer1849 %1 = bitcast i8 %__U to <8 x i1>1850 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>1851 %2 = and <2 x i1> %0, %extract.i1852 %3 = shufflevector <2 x i1> %2, <2 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3>1853 %4 = bitcast <8 x i1> %3 to i81854 ret i8 %41855}1856 1857define zeroext i8 @test_mm256_testn_epi64_mask(<4 x i64> %__A, <4 x i64> %__B) {1858; CHECK-LABEL: test_mm256_testn_epi64_mask:1859; CHECK: # %bb.0: # %entry1860; CHECK-NEXT: vptestnmq %ymm0, %ymm1, %k01861; CHECK-NEXT: kmovw %k0, %eax1862; CHECK-NEXT: # kill: def $al killed $al killed $eax1863; CHECK-NEXT: vzeroupper1864; CHECK-NEXT: ret{{[l|q]}}1865entry:1866 %and.i.i = and <4 x i64> %__B, %__A1867 %0 = icmp eq <4 x i64> %and.i.i, zeroinitializer1868 %1 = shufflevector <4 x i1> %0, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1869 %2 = bitcast <8 x i1> %1 to i81870 ret i8 %21871}1872 1873define zeroext i8 @test_mm256_mask_testn_epi64_mask(i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) {1874; X86-LABEL: test_mm256_mask_testn_epi64_mask:1875; X86: # %bb.0: # %entry1876; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1877; X86-NEXT: kmovw %eax, %k11878; X86-NEXT: vptestnmq %ymm0, %ymm1, %k0 {%k1}1879; X86-NEXT: kmovw %k0, %eax1880; X86-NEXT: # kill: def $al killed $al killed $eax1881; X86-NEXT: vzeroupper1882; X86-NEXT: retl1883;1884; X64-LABEL: test_mm256_mask_testn_epi64_mask:1885; X64: # %bb.0: # %entry1886; X64-NEXT: kmovw %edi, %k11887; X64-NEXT: vptestnmq %ymm0, %ymm1, %k0 {%k1}1888; X64-NEXT: kmovw %k0, %eax1889; X64-NEXT: # kill: def $al killed $al killed $eax1890; X64-NEXT: vzeroupper1891; X64-NEXT: retq1892entry:1893 %and.i.i = and <4 x i64> %__B, %__A1894 %0 = icmp eq <4 x i64> %and.i.i, zeroinitializer1895 %1 = bitcast i8 %__U to <8 x i1>1896 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1897 %2 = and <4 x i1> %0, %extract.i1898 %3 = shufflevector <4 x i1> %2, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1899 %4 = bitcast <8 x i1> %3 to i81900 ret i8 %41901}1902 1903define <2 x i64> @test_mm_mask_set1_epi32(<2 x i64> %__O, i8 zeroext %__M) {1904; X86-LABEL: test_mm_mask_set1_epi32:1905; X86: # %bb.0: # %entry1906; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1907; X86-NEXT: kmovw %eax, %k11908; X86-NEXT: vpbroadcastd {{.*#+}} xmm0 {%k1} = [5,5,5,5]1909; X86-NEXT: retl1910;1911; X64-LABEL: test_mm_mask_set1_epi32:1912; X64: # %bb.0: # %entry1913; X64-NEXT: kmovw %edi, %k11914; X64-NEXT: vpbroadcastd {{.*#+}} xmm0 {%k1} = [5,5,5,5]1915; X64-NEXT: retq1916entry:1917 %0 = bitcast <2 x i64> %__O to <4 x i32>1918 %1 = bitcast i8 %__M to <8 x i1>1919 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1920 %2 = select <4 x i1> %extract.i, <4 x i32> <i32 5, i32 5, i32 5, i32 5>, <4 x i32> %01921 %3 = bitcast <4 x i32> %2 to <2 x i64>1922 ret <2 x i64> %31923}1924 1925define <2 x i64> @test_mm_maskz_set1_epi32(i8 zeroext %__M) {1926; X86-LABEL: test_mm_maskz_set1_epi32:1927; X86: # %bb.0: # %entry1928; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1929; X86-NEXT: kmovw %eax, %k11930; X86-NEXT: vpbroadcastd {{.*#+}} xmm0 {%k1} {z} = [5,5,5,5]1931; X86-NEXT: retl1932;1933; X64-LABEL: test_mm_maskz_set1_epi32:1934; X64: # %bb.0: # %entry1935; X64-NEXT: kmovw %edi, %k11936; X64-NEXT: vpbroadcastd {{.*#+}} xmm0 {%k1} {z} = [5,5,5,5]1937; X64-NEXT: retq1938entry:1939 %0 = bitcast i8 %__M to <8 x i1>1940 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>1941 %1 = select <4 x i1> %extract.i, <4 x i32> <i32 5, i32 5, i32 5, i32 5>, <4 x i32> zeroinitializer1942 %2 = bitcast <4 x i32> %1 to <2 x i64>1943 ret <2 x i64> %21944}1945 1946define <4 x i64> @test_mm256_mask_set1_epi32(<4 x i64> %__O, i8 zeroext %__M) {1947; X86-LABEL: test_mm256_mask_set1_epi32:1948; X86: # %bb.0: # %entry1949; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1950; X86-NEXT: kmovw %eax, %k11951; X86-NEXT: vpbroadcastd {{.*#+}} ymm0 {%k1} = [5,5,5,5,5,5,5,5]1952; X86-NEXT: retl1953;1954; X64-LABEL: test_mm256_mask_set1_epi32:1955; X64: # %bb.0: # %entry1956; X64-NEXT: kmovw %edi, %k11957; X64-NEXT: vpbroadcastd {{.*#+}} ymm0 {%k1} = [5,5,5,5,5,5,5,5]1958; X64-NEXT: retq1959entry:1960 %0 = bitcast <4 x i64> %__O to <8 x i32>1961 %1 = bitcast i8 %__M to <8 x i1>1962 %2 = select <8 x i1> %1, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>, <8 x i32> %01963 %3 = bitcast <8 x i32> %2 to <4 x i64>1964 ret <4 x i64> %31965}1966 1967define <4 x i64> @test_mm256_maskz_set1_epi32(i8 zeroext %__M) {1968; X86-LABEL: test_mm256_maskz_set1_epi32:1969; X86: # %bb.0: # %entry1970; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1971; X86-NEXT: kmovw %eax, %k11972; X86-NEXT: vpbroadcastd {{.*#+}} ymm0 {%k1} {z} = [5,5,5,5,5,5,5,5]1973; X86-NEXT: retl1974;1975; X64-LABEL: test_mm256_maskz_set1_epi32:1976; X64: # %bb.0: # %entry1977; X64-NEXT: kmovw %edi, %k11978; X64-NEXT: vpbroadcastd {{.*#+}} ymm0 {%k1} {z} = [5,5,5,5,5,5,5,5]1979; X64-NEXT: retq1980entry:1981 %0 = bitcast i8 %__M to <8 x i1>1982 %1 = select <8 x i1> %0, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>, <8 x i32> zeroinitializer1983 %2 = bitcast <8 x i32> %1 to <4 x i64>1984 ret <4 x i64> %21985}1986 1987define <2 x i64> @test_mm_mask_set1_epi64(<2 x i64> %__O, i8 zeroext %__M, i64 %__A) {1988; X86-LABEL: test_mm_mask_set1_epi64:1989; X86: # %bb.0: # %entry1990; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax1991; X86-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero1992; X86-NEXT: vpinsrd $1, {{[0-9]+}}(%esp), %xmm1, %xmm11993; X86-NEXT: kmovw %eax, %k11994; X86-NEXT: vpbroadcastq %xmm1, %xmm0 {%k1}1995; X86-NEXT: retl1996;1997; X64-LABEL: test_mm_mask_set1_epi64:1998; X64: # %bb.0: # %entry1999; X64-NEXT: kmovw %edi, %k12000; X64-NEXT: vpbroadcastq %rsi, %xmm0 {%k1}2001; X64-NEXT: retq2002entry:2003 %vecinit.i.i.i = insertelement <2 x i64> undef, i64 %__A, i32 02004 %vecinit1.i.i.i = shufflevector <2 x i64> %vecinit.i.i.i, <2 x i64> undef, <2 x i32> zeroinitializer2005 %0 = bitcast i8 %__M to <8 x i1>2006 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>2007 %1 = select <2 x i1> %extract.i, <2 x i64> %vecinit1.i.i.i, <2 x i64> %__O2008 ret <2 x i64> %12009}2010 2011define <2 x i64> @test_mm_maskz_set1_epi64(i8 zeroext %__M, i64 %__A) {2012; X86-LABEL: test_mm_maskz_set1_epi64:2013; X86: # %bb.0: # %entry2014; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2015; X86-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero2016; X86-NEXT: vpinsrd $1, {{[0-9]+}}(%esp), %xmm0, %xmm02017; X86-NEXT: kmovw %eax, %k12018; X86-NEXT: vpbroadcastq %xmm0, %xmm0 {%k1} {z}2019; X86-NEXT: retl2020;2021; X64-LABEL: test_mm_maskz_set1_epi64:2022; X64: # %bb.0: # %entry2023; X64-NEXT: kmovw %edi, %k12024; X64-NEXT: vpbroadcastq %rsi, %xmm0 {%k1} {z}2025; X64-NEXT: retq2026entry:2027 %vecinit.i.i.i = insertelement <2 x i64> undef, i64 %__A, i32 02028 %vecinit1.i.i.i = shufflevector <2 x i64> %vecinit.i.i.i, <2 x i64> undef, <2 x i32> zeroinitializer2029 %0 = bitcast i8 %__M to <8 x i1>2030 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>2031 %1 = select <2 x i1> %extract.i, <2 x i64> %vecinit1.i.i.i, <2 x i64> zeroinitializer2032 ret <2 x i64> %12033}2034 2035 2036define <4 x i64> @test_mm256_mask_set1_epi64(<4 x i64> %__O, i8 zeroext %__M, i64 %__A) {2037; X86-LABEL: test_mm256_mask_set1_epi64:2038; X86: # %bb.0: # %entry2039; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2040; X86-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero2041; X86-NEXT: vpinsrd $1, {{[0-9]+}}(%esp), %xmm1, %xmm12042; X86-NEXT: kmovw %eax, %k12043; X86-NEXT: vpbroadcastq %xmm1, %ymm0 {%k1}2044; X86-NEXT: retl2045;2046; X64-LABEL: test_mm256_mask_set1_epi64:2047; X64: # %bb.0: # %entry2048; X64-NEXT: kmovw %edi, %k12049; X64-NEXT: vpbroadcastq %rsi, %ymm0 {%k1}2050; X64-NEXT: retq2051entry:2052 %vecinit.i.i = insertelement <4 x i64> undef, i64 %__A, i32 02053 %vecinit3.i.i = shufflevector <4 x i64> %vecinit.i.i, <4 x i64> undef, <4 x i32> zeroinitializer2054 %0 = bitcast i8 %__M to <8 x i1>2055 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2056 %1 = select <4 x i1> %extract.i, <4 x i64> %vecinit3.i.i, <4 x i64> %__O2057 ret <4 x i64> %12058}2059 2060define <4 x i64> @test_mm256_maskz_set1_epi64(i8 zeroext %__M, i64 %__A) {2061; X86-LABEL: test_mm256_maskz_set1_epi64:2062; X86: # %bb.0: # %entry2063; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2064; X86-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero2065; X86-NEXT: vpinsrd $1, {{[0-9]+}}(%esp), %xmm0, %xmm02066; X86-NEXT: kmovw %eax, %k12067; X86-NEXT: vpbroadcastq %xmm0, %ymm0 {%k1} {z}2068; X86-NEXT: retl2069;2070; X64-LABEL: test_mm256_maskz_set1_epi64:2071; X64: # %bb.0: # %entry2072; X64-NEXT: kmovw %edi, %k12073; X64-NEXT: vpbroadcastq %rsi, %ymm0 {%k1} {z}2074; X64-NEXT: retq2075entry:2076 %vecinit.i.i = insertelement <4 x i64> undef, i64 %__A, i32 02077 %vecinit3.i.i = shufflevector <4 x i64> %vecinit.i.i, <4 x i64> undef, <4 x i32> zeroinitializer2078 %0 = bitcast i8 %__M to <8 x i1>2079 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2080 %1 = select <4 x i1> %extract.i, <4 x i64> %vecinit3.i.i, <4 x i64> zeroinitializer2081 ret <4 x i64> %12082}2083 2084define <2 x i64> @test_mm_broadcastd_epi32(<2 x i64> %a0) {2085; CHECK-LABEL: test_mm_broadcastd_epi32:2086; CHECK: # %bb.0:2087; CHECK-NEXT: vbroadcastss %xmm0, %xmm02088; CHECK-NEXT: ret{{[l|q]}}2089 %arg0 = bitcast <2 x i64> %a0 to <4 x i32>2090 %res0 = shufflevector <4 x i32> %arg0, <4 x i32> undef, <4 x i32> zeroinitializer2091 %res1 = bitcast <4 x i32> %res0 to <2 x i64>2092 ret <2 x i64> %res12093}2094 2095define <2 x i64> @test_mm_mask_broadcastd_epi32(<2 x i64> %__O, i8 zeroext %__M, <2 x i64> %__A) {2096; X86-LABEL: test_mm_mask_broadcastd_epi32:2097; X86: # %bb.0: # %entry2098; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2099; X86-NEXT: kmovw %eax, %k12100; X86-NEXT: vpbroadcastd %xmm1, %xmm0 {%k1}2101; X86-NEXT: retl2102;2103; X64-LABEL: test_mm_mask_broadcastd_epi32:2104; X64: # %bb.0: # %entry2105; X64-NEXT: kmovw %edi, %k12106; X64-NEXT: vpbroadcastd %xmm1, %xmm0 {%k1}2107; X64-NEXT: retq2108entry:2109 %0 = bitcast <2 x i64> %__A to <4 x i32>2110 %shuffle.i.i = shufflevector <4 x i32> %0, <4 x i32> undef, <4 x i32> zeroinitializer2111 %1 = bitcast <2 x i64> %__O to <4 x i32>2112 %2 = bitcast i8 %__M to <8 x i1>2113 %extract.i = shufflevector <8 x i1> %2, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2114 %3 = select <4 x i1> %extract.i, <4 x i32> %shuffle.i.i, <4 x i32> %12115 %4 = bitcast <4 x i32> %3 to <2 x i64>2116 ret <2 x i64> %42117}2118 2119define <2 x i64> @test_mm_maskz_broadcastd_epi32(i8 zeroext %__M, <2 x i64> %__A) {2120; X86-LABEL: test_mm_maskz_broadcastd_epi32:2121; X86: # %bb.0: # %entry2122; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2123; X86-NEXT: kmovw %eax, %k12124; X86-NEXT: vpbroadcastd %xmm0, %xmm0 {%k1} {z}2125; X86-NEXT: retl2126;2127; X64-LABEL: test_mm_maskz_broadcastd_epi32:2128; X64: # %bb.0: # %entry2129; X64-NEXT: kmovw %edi, %k12130; X64-NEXT: vpbroadcastd %xmm0, %xmm0 {%k1} {z}2131; X64-NEXT: retq2132entry:2133 %0 = bitcast <2 x i64> %__A to <4 x i32>2134 %shuffle.i.i = shufflevector <4 x i32> %0, <4 x i32> undef, <4 x i32> zeroinitializer2135 %1 = bitcast i8 %__M to <8 x i1>2136 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2137 %2 = select <4 x i1> %extract.i, <4 x i32> %shuffle.i.i, <4 x i32> zeroinitializer2138 %3 = bitcast <4 x i32> %2 to <2 x i64>2139 ret <2 x i64> %32140}2141 2142define <4 x i64> @test_mm256_broadcastd_epi32(<2 x i64> %a0) {2143; CHECK-LABEL: test_mm256_broadcastd_epi32:2144; CHECK: # %bb.0:2145; CHECK-NEXT: vbroadcastss %xmm0, %ymm02146; CHECK-NEXT: ret{{[l|q]}}2147 %arg0 = bitcast <2 x i64> %a0 to <4 x i32>2148 %res0 = shufflevector <4 x i32> %arg0, <4 x i32> undef, <8 x i32> zeroinitializer2149 %res1 = bitcast <8 x i32> %res0 to <4 x i64>2150 ret <4 x i64> %res12151}2152 2153define <4 x i64> @test_mm256_mask_broadcastd_epi32(<4 x i64> %a0, i8 %a1, <2 x i64> %a2) {2154; X86-LABEL: test_mm256_mask_broadcastd_epi32:2155; X86: # %bb.0:2156; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2157; X86-NEXT: kmovw %eax, %k12158; X86-NEXT: vpbroadcastd %xmm1, %ymm0 {%k1}2159; X86-NEXT: retl2160;2161; X64-LABEL: test_mm256_mask_broadcastd_epi32:2162; X64: # %bb.0:2163; X64-NEXT: kmovw %edi, %k12164; X64-NEXT: vpbroadcastd %xmm1, %ymm0 {%k1}2165; X64-NEXT: retq2166 %arg0 = bitcast <4 x i64> %a0 to <8 x i32>2167 %arg1 = bitcast i8 %a1 to <8 x i1>2168 %arg2 = bitcast <2 x i64> %a2 to <4 x i32>2169 %res0 = shufflevector <4 x i32> %arg2, <4 x i32> undef, <8 x i32> zeroinitializer2170 %res1 = select <8 x i1> %arg1, <8 x i32> %res0, <8 x i32> %arg02171 %res2 = bitcast <8 x i32> %res1 to <4 x i64>2172 ret <4 x i64> %res22173}2174 2175define <4 x i64> @test_mm256_maskz_broadcastd_epi32(i8 %a0, <2 x i64> %a1) {2176; X86-LABEL: test_mm256_maskz_broadcastd_epi32:2177; X86: # %bb.0:2178; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2179; X86-NEXT: kmovw %eax, %k12180; X86-NEXT: vpbroadcastd %xmm0, %ymm0 {%k1} {z}2181; X86-NEXT: retl2182;2183; X64-LABEL: test_mm256_maskz_broadcastd_epi32:2184; X64: # %bb.0:2185; X64-NEXT: kmovw %edi, %k12186; X64-NEXT: vpbroadcastd %xmm0, %ymm0 {%k1} {z}2187; X64-NEXT: retq2188 %arg0 = bitcast i8 %a0 to <8 x i1>2189 %arg1 = bitcast <2 x i64> %a1 to <4 x i32>2190 %res0 = shufflevector <4 x i32> %arg1, <4 x i32> undef, <8 x i32> zeroinitializer2191 %res1 = select <8 x i1> %arg0, <8 x i32> %res0, <8 x i32> zeroinitializer2192 %res2 = bitcast <8 x i32> %res1 to <4 x i64>2193 ret <4 x i64> %res22194}2195 2196define <2 x i64> @test_mm_broadcastq_epi64(<2 x i64> %a0) {2197; CHECK-LABEL: test_mm_broadcastq_epi64:2198; CHECK: # %bb.0:2199; CHECK-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0]2200; CHECK-NEXT: ret{{[l|q]}}2201 %res = shufflevector <2 x i64> %a0, <2 x i64> undef, <2 x i32> zeroinitializer2202 ret <2 x i64> %res2203}2204 2205define <2 x i64> @test_mm_mask_broadcastq_epi64(<2 x i64> %__O, i8 zeroext %__M, <2 x i64> %__A) {2206; X86-LABEL: test_mm_mask_broadcastq_epi64:2207; X86: # %bb.0: # %entry2208; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2209; X86-NEXT: kmovw %eax, %k12210; X86-NEXT: vpbroadcastq %xmm1, %xmm0 {%k1}2211; X86-NEXT: retl2212;2213; X64-LABEL: test_mm_mask_broadcastq_epi64:2214; X64: # %bb.0: # %entry2215; X64-NEXT: kmovw %edi, %k12216; X64-NEXT: vpbroadcastq %xmm1, %xmm0 {%k1}2217; X64-NEXT: retq2218entry:2219 %shuffle.i.i = shufflevector <2 x i64> %__A, <2 x i64> undef, <2 x i32> zeroinitializer2220 %0 = bitcast i8 %__M to <8 x i1>2221 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>2222 %1 = select <2 x i1> %extract.i, <2 x i64> %shuffle.i.i, <2 x i64> %__O2223 ret <2 x i64> %12224}2225 2226define <2 x i64> @test_mm_maskz_broadcastq_epi64(i8 zeroext %__M, <2 x i64> %__A) {2227; X86-LABEL: test_mm_maskz_broadcastq_epi64:2228; X86: # %bb.0: # %entry2229; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2230; X86-NEXT: kmovw %eax, %k12231; X86-NEXT: vpbroadcastq %xmm0, %xmm0 {%k1} {z}2232; X86-NEXT: retl2233;2234; X64-LABEL: test_mm_maskz_broadcastq_epi64:2235; X64: # %bb.0: # %entry2236; X64-NEXT: kmovw %edi, %k12237; X64-NEXT: vpbroadcastq %xmm0, %xmm0 {%k1} {z}2238; X64-NEXT: retq2239entry:2240 %shuffle.i.i = shufflevector <2 x i64> %__A, <2 x i64> undef, <2 x i32> zeroinitializer2241 %0 = bitcast i8 %__M to <8 x i1>2242 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>2243 %1 = select <2 x i1> %extract.i, <2 x i64> %shuffle.i.i, <2 x i64> zeroinitializer2244 ret <2 x i64> %12245}2246 2247define <4 x i64> @test_mm256_broadcastq_epi64(<2 x i64> %a0) {2248; CHECK-LABEL: test_mm256_broadcastq_epi64:2249; CHECK: # %bb.0:2250; CHECK-NEXT: vbroadcastsd %xmm0, %ymm02251; CHECK-NEXT: ret{{[l|q]}}2252 %res = shufflevector <2 x i64> %a0, <2 x i64> undef, <4 x i32> zeroinitializer2253 ret <4 x i64> %res2254}2255 2256define <4 x i64> @test_mm256_mask_broadcastq_epi64(<4 x i64> %__O, i8 zeroext %__M, <2 x i64> %__A) {2257; X86-LABEL: test_mm256_mask_broadcastq_epi64:2258; X86: # %bb.0: # %entry2259; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2260; X86-NEXT: kmovw %eax, %k12261; X86-NEXT: vpbroadcastq %xmm1, %ymm0 {%k1}2262; X86-NEXT: retl2263;2264; X64-LABEL: test_mm256_mask_broadcastq_epi64:2265; X64: # %bb.0: # %entry2266; X64-NEXT: kmovw %edi, %k12267; X64-NEXT: vpbroadcastq %xmm1, %ymm0 {%k1}2268; X64-NEXT: retq2269entry:2270 %shuffle.i.i = shufflevector <2 x i64> %__A, <2 x i64> undef, <4 x i32> zeroinitializer2271 %0 = bitcast i8 %__M to <8 x i1>2272 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2273 %1 = select <4 x i1> %extract.i, <4 x i64> %shuffle.i.i, <4 x i64> %__O2274 ret <4 x i64> %12275}2276 2277define <4 x i64> @test_mm256_maskz_broadcastq_epi64(i8 zeroext %__M, <2 x i64> %__A) {2278; X86-LABEL: test_mm256_maskz_broadcastq_epi64:2279; X86: # %bb.0: # %entry2280; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2281; X86-NEXT: kmovw %eax, %k12282; X86-NEXT: vpbroadcastq %xmm0, %ymm0 {%k1} {z}2283; X86-NEXT: retl2284;2285; X64-LABEL: test_mm256_maskz_broadcastq_epi64:2286; X64: # %bb.0: # %entry2287; X64-NEXT: kmovw %edi, %k12288; X64-NEXT: vpbroadcastq %xmm0, %ymm0 {%k1} {z}2289; X64-NEXT: retq2290entry:2291 %shuffle.i.i = shufflevector <2 x i64> %__A, <2 x i64> undef, <4 x i32> zeroinitializer2292 %0 = bitcast i8 %__M to <8 x i1>2293 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2294 %1 = select <4 x i1> %extract.i, <4 x i64> %shuffle.i.i, <4 x i64> zeroinitializer2295 ret <4 x i64> %12296}2297 2298define <4 x double> @test_mm256_broadcastsd_pd(<2 x double> %a0) {2299; CHECK-LABEL: test_mm256_broadcastsd_pd:2300; CHECK: # %bb.0:2301; CHECK-NEXT: vbroadcastsd %xmm0, %ymm02302; CHECK-NEXT: ret{{[l|q]}}2303 %res = shufflevector <2 x double> %a0, <2 x double> undef, <4 x i32> zeroinitializer2304 ret <4 x double> %res2305}2306 2307define <4 x double> @test_mm256_mask_broadcastsd_pd(<4 x double> %__O, i8 zeroext %__M, <2 x double> %__A) {2308; X86-LABEL: test_mm256_mask_broadcastsd_pd:2309; X86: # %bb.0: # %entry2310; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2311; X86-NEXT: kmovw %eax, %k12312; X86-NEXT: vbroadcastsd %xmm1, %ymm0 {%k1}2313; X86-NEXT: retl2314;2315; X64-LABEL: test_mm256_mask_broadcastsd_pd:2316; X64: # %bb.0: # %entry2317; X64-NEXT: kmovw %edi, %k12318; X64-NEXT: vbroadcastsd %xmm1, %ymm0 {%k1}2319; X64-NEXT: retq2320entry:2321 %shuffle.i.i = shufflevector <2 x double> %__A, <2 x double> undef, <4 x i32> zeroinitializer2322 %0 = bitcast i8 %__M to <8 x i1>2323 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2324 %1 = select <4 x i1> %extract.i, <4 x double> %shuffle.i.i, <4 x double> %__O2325 ret <4 x double> %12326}2327 2328define <4 x double> @test_mm256_maskz_broadcastsd_pd(i8 zeroext %__M, <2 x double> %__A) {2329; X86-LABEL: test_mm256_maskz_broadcastsd_pd:2330; X86: # %bb.0: # %entry2331; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2332; X86-NEXT: kmovw %eax, %k12333; X86-NEXT: vbroadcastsd %xmm0, %ymm0 {%k1} {z}2334; X86-NEXT: retl2335;2336; X64-LABEL: test_mm256_maskz_broadcastsd_pd:2337; X64: # %bb.0: # %entry2338; X64-NEXT: kmovw %edi, %k12339; X64-NEXT: vbroadcastsd %xmm0, %ymm0 {%k1} {z}2340; X64-NEXT: retq2341entry:2342 %shuffle.i.i = shufflevector <2 x double> %__A, <2 x double> undef, <4 x i32> zeroinitializer2343 %0 = bitcast i8 %__M to <8 x i1>2344 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2345 %1 = select <4 x i1> %extract.i, <4 x double> %shuffle.i.i, <4 x double> zeroinitializer2346 ret <4 x double> %12347}2348 2349define <4 x float> @test_mm_broadcastss_ps(<4 x float> %a0) {2350; CHECK-LABEL: test_mm_broadcastss_ps:2351; CHECK: # %bb.0:2352; CHECK-NEXT: vbroadcastss %xmm0, %xmm02353; CHECK-NEXT: ret{{[l|q]}}2354 %res = shufflevector <4 x float> %a0, <4 x float> undef, <4 x i32> zeroinitializer2355 ret <4 x float> %res2356}2357 2358define <4 x float> @test_mm_mask_broadcastss_ps(<4 x float> %__O, i8 zeroext %__M, <4 x float> %__A) {2359; X86-LABEL: test_mm_mask_broadcastss_ps:2360; X86: # %bb.0: # %entry2361; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2362; X86-NEXT: kmovw %eax, %k12363; X86-NEXT: vbroadcastss %xmm1, %xmm0 {%k1}2364; X86-NEXT: retl2365;2366; X64-LABEL: test_mm_mask_broadcastss_ps:2367; X64: # %bb.0: # %entry2368; X64-NEXT: kmovw %edi, %k12369; X64-NEXT: vbroadcastss %xmm1, %xmm0 {%k1}2370; X64-NEXT: retq2371entry:2372 %shuffle.i.i = shufflevector <4 x float> %__A, <4 x float> undef, <4 x i32> zeroinitializer2373 %0 = bitcast i8 %__M to <8 x i1>2374 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2375 %1 = select <4 x i1> %extract.i, <4 x float> %shuffle.i.i, <4 x float> %__O2376 ret <4 x float> %12377}2378 2379define <4 x float> @test_mm_maskz_broadcastss_ps(i8 zeroext %__M, <4 x float> %__A) {2380; X86-LABEL: test_mm_maskz_broadcastss_ps:2381; X86: # %bb.0: # %entry2382; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2383; X86-NEXT: kmovw %eax, %k12384; X86-NEXT: vbroadcastss %xmm0, %xmm0 {%k1} {z}2385; X86-NEXT: retl2386;2387; X64-LABEL: test_mm_maskz_broadcastss_ps:2388; X64: # %bb.0: # %entry2389; X64-NEXT: kmovw %edi, %k12390; X64-NEXT: vbroadcastss %xmm0, %xmm0 {%k1} {z}2391; X64-NEXT: retq2392entry:2393 %shuffle.i.i = shufflevector <4 x float> %__A, <4 x float> undef, <4 x i32> zeroinitializer2394 %0 = bitcast i8 %__M to <8 x i1>2395 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2396 %1 = select <4 x i1> %extract.i, <4 x float> %shuffle.i.i, <4 x float> zeroinitializer2397 ret <4 x float> %12398}2399 2400define <8 x float> @test_mm256_broadcastss_ps(<4 x float> %a0) {2401; CHECK-LABEL: test_mm256_broadcastss_ps:2402; CHECK: # %bb.0:2403; CHECK-NEXT: vbroadcastss %xmm0, %ymm02404; CHECK-NEXT: ret{{[l|q]}}2405 %res = shufflevector <4 x float> %a0, <4 x float> undef, <8 x i32> zeroinitializer2406 ret <8 x float> %res2407}2408 2409define <8 x float> @test_mm256_mask_broadcastss_ps(<8 x float> %a0, i8 %a1, <4 x float> %a2) {2410; X86-LABEL: test_mm256_mask_broadcastss_ps:2411; X86: # %bb.0:2412; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2413; X86-NEXT: kmovw %eax, %k12414; X86-NEXT: vbroadcastss %xmm1, %ymm0 {%k1}2415; X86-NEXT: retl2416;2417; X64-LABEL: test_mm256_mask_broadcastss_ps:2418; X64: # %bb.0:2419; X64-NEXT: kmovw %edi, %k12420; X64-NEXT: vbroadcastss %xmm1, %ymm0 {%k1}2421; X64-NEXT: retq2422 %arg1 = bitcast i8 %a1 to <8 x i1>2423 %res0 = shufflevector <4 x float> %a2, <4 x float> undef, <8 x i32> zeroinitializer2424 %res1 = select <8 x i1> %arg1, <8 x float> %res0, <8 x float> %a02425 ret <8 x float> %res12426}2427 2428define <8 x float> @test_mm256_maskz_broadcastss_ps(i8 %a0, <4 x float> %a1) {2429; X86-LABEL: test_mm256_maskz_broadcastss_ps:2430; X86: # %bb.0:2431; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2432; X86-NEXT: kmovw %eax, %k12433; X86-NEXT: vbroadcastss %xmm0, %ymm0 {%k1} {z}2434; X86-NEXT: retl2435;2436; X64-LABEL: test_mm256_maskz_broadcastss_ps:2437; X64: # %bb.0:2438; X64-NEXT: kmovw %edi, %k12439; X64-NEXT: vbroadcastss %xmm0, %ymm0 {%k1} {z}2440; X64-NEXT: retq2441 %arg0 = bitcast i8 %a0 to <8 x i1>2442 %res0 = shufflevector <4 x float> %a1, <4 x float> undef, <8 x i32> zeroinitializer2443 %res1 = select <8 x i1> %arg0, <8 x float> %res0, <8 x float> zeroinitializer2444 ret <8 x float> %res12445}2446 2447define <2 x double> @test_mm_movddup_pd(<2 x double> %a0) {2448; CHECK-LABEL: test_mm_movddup_pd:2449; CHECK: # %bb.0:2450; CHECK-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0]2451; CHECK-NEXT: ret{{[l|q]}}2452 %res = shufflevector <2 x double> %a0, <2 x double> undef, <2 x i32> zeroinitializer2453 ret <2 x double> %res2454}2455 2456define <2 x double> @test_mm_mask_movedup_pd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A) {2457; X86-LABEL: test_mm_mask_movedup_pd:2458; X86: # %bb.0: # %entry2459; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2460; X86-NEXT: kmovw %eax, %k12461; X86-NEXT: vmovddup {{.*#+}} xmm0 {%k1} = xmm1[0,0]2462; X86-NEXT: retl2463;2464; X64-LABEL: test_mm_mask_movedup_pd:2465; X64: # %bb.0: # %entry2466; X64-NEXT: kmovw %edi, %k12467; X64-NEXT: vmovddup {{.*#+}} xmm0 {%k1} = xmm1[0,0]2468; X64-NEXT: retq2469entry:2470 %shuffle.i.i = shufflevector <2 x double> %__A, <2 x double> undef, <2 x i32> zeroinitializer2471 %0 = bitcast i8 %__U to <8 x i1>2472 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>2473 %1 = select <2 x i1> %extract.i, <2 x double> %shuffle.i.i, <2 x double> %__W2474 ret <2 x double> %12475}2476 2477define <2 x double> @test_mm_maskz_movedup_pd(i8 zeroext %__U, <2 x double> %__A) {2478; X86-LABEL: test_mm_maskz_movedup_pd:2479; X86: # %bb.0: # %entry2480; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2481; X86-NEXT: kmovw %eax, %k12482; X86-NEXT: vmovddup {{.*#+}} xmm0 {%k1} {z} = xmm0[0,0]2483; X86-NEXT: retl2484;2485; X64-LABEL: test_mm_maskz_movedup_pd:2486; X64: # %bb.0: # %entry2487; X64-NEXT: kmovw %edi, %k12488; X64-NEXT: vmovddup {{.*#+}} xmm0 {%k1} {z} = xmm0[0,0]2489; X64-NEXT: retq2490entry:2491 %shuffle.i.i = shufflevector <2 x double> %__A, <2 x double> undef, <2 x i32> zeroinitializer2492 %0 = bitcast i8 %__U to <8 x i1>2493 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>2494 %1 = select <2 x i1> %extract.i, <2 x double> %shuffle.i.i, <2 x double> zeroinitializer2495 ret <2 x double> %12496}2497 2498define <4 x double> @test_mm256_movddup_pd(<4 x double> %a0) {2499; CHECK-LABEL: test_mm256_movddup_pd:2500; CHECK: # %bb.0:2501; CHECK-NEXT: vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]2502; CHECK-NEXT: ret{{[l|q]}}2503 %res = shufflevector <4 x double> %a0, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>2504 ret <4 x double> %res2505}2506 2507define <4 x double> @test_mm256_mask_movedup_pd(<4 x double> %__W, i8 zeroext %__U, <4 x double> %__A) {2508; X86-LABEL: test_mm256_mask_movedup_pd:2509; X86: # %bb.0: # %entry2510; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2511; X86-NEXT: kmovw %eax, %k12512; X86-NEXT: vmovddup {{.*#+}} ymm0 {%k1} = ymm1[0,0,2,2]2513; X86-NEXT: retl2514;2515; X64-LABEL: test_mm256_mask_movedup_pd:2516; X64: # %bb.0: # %entry2517; X64-NEXT: kmovw %edi, %k12518; X64-NEXT: vmovddup {{.*#+}} ymm0 {%k1} = ymm1[0,0,2,2]2519; X64-NEXT: retq2520entry:2521 %shuffle.i.i = shufflevector <4 x double> %__A, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>2522 %0 = bitcast i8 %__U to <8 x i1>2523 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2524 %1 = select <4 x i1> %extract.i, <4 x double> %shuffle.i.i, <4 x double> %__W2525 ret <4 x double> %12526}2527 2528define <4 x double> @test_mm256_maskz_movedup_pd(i8 zeroext %__U, <4 x double> %__A) {2529; X86-LABEL: test_mm256_maskz_movedup_pd:2530; X86: # %bb.0: # %entry2531; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2532; X86-NEXT: kmovw %eax, %k12533; X86-NEXT: vmovddup {{.*#+}} ymm0 {%k1} {z} = ymm0[0,0,2,2]2534; X86-NEXT: retl2535;2536; X64-LABEL: test_mm256_maskz_movedup_pd:2537; X64: # %bb.0: # %entry2538; X64-NEXT: kmovw %edi, %k12539; X64-NEXT: vmovddup {{.*#+}} ymm0 {%k1} {z} = ymm0[0,0,2,2]2540; X64-NEXT: retq2541entry:2542 %shuffle.i.i = shufflevector <4 x double> %__A, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>2543 %0 = bitcast i8 %__U to <8 x i1>2544 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2545 %1 = select <4 x i1> %extract.i, <4 x double> %shuffle.i.i, <4 x double> zeroinitializer2546 ret <4 x double> %12547}2548 2549define <4 x float> @test_mm_movehdup_ps(<4 x float> %a0) {2550; CHECK-LABEL: test_mm_movehdup_ps:2551; CHECK: # %bb.0:2552; CHECK-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]2553; CHECK-NEXT: ret{{[l|q]}}2554 %res = shufflevector <4 x float> %a0, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>2555 ret <4 x float> %res2556}2557 2558define <4 x float> @test_mm_mask_movehdup_ps(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A) {2559; X86-LABEL: test_mm_mask_movehdup_ps:2560; X86: # %bb.0: # %entry2561; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2562; X86-NEXT: kmovw %eax, %k12563; X86-NEXT: vmovshdup {{.*#+}} xmm0 {%k1} = xmm1[1,1,3,3]2564; X86-NEXT: retl2565;2566; X64-LABEL: test_mm_mask_movehdup_ps:2567; X64: # %bb.0: # %entry2568; X64-NEXT: kmovw %edi, %k12569; X64-NEXT: vmovshdup {{.*#+}} xmm0 {%k1} = xmm1[1,1,3,3]2570; X64-NEXT: retq2571entry:2572 %shuffle.i.i = shufflevector <4 x float> %__A, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>2573 %0 = bitcast i8 %__U to <8 x i1>2574 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2575 %1 = select <4 x i1> %extract.i, <4 x float> %shuffle.i.i, <4 x float> %__W2576 ret <4 x float> %12577}2578 2579define <4 x float> @test_mm_maskz_movehdup_ps(i8 zeroext %__U, <4 x float> %__A) {2580; X86-LABEL: test_mm_maskz_movehdup_ps:2581; X86: # %bb.0: # %entry2582; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2583; X86-NEXT: kmovw %eax, %k12584; X86-NEXT: vmovshdup {{.*#+}} xmm0 {%k1} {z} = xmm0[1,1,3,3]2585; X86-NEXT: retl2586;2587; X64-LABEL: test_mm_maskz_movehdup_ps:2588; X64: # %bb.0: # %entry2589; X64-NEXT: kmovw %edi, %k12590; X64-NEXT: vmovshdup {{.*#+}} xmm0 {%k1} {z} = xmm0[1,1,3,3]2591; X64-NEXT: retq2592entry:2593 %shuffle.i.i = shufflevector <4 x float> %__A, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>2594 %0 = bitcast i8 %__U to <8 x i1>2595 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2596 %1 = select <4 x i1> %extract.i, <4 x float> %shuffle.i.i, <4 x float> zeroinitializer2597 ret <4 x float> %12598}2599 2600define <8 x float> @test_mm256_movehdup_ps(<8 x float> %a0) {2601; CHECK-LABEL: test_mm256_movehdup_ps:2602; CHECK: # %bb.0:2603; CHECK-NEXT: vmovshdup {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7]2604; CHECK-NEXT: ret{{[l|q]}}2605 %res = shufflevector <8 x float> %a0, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>2606 ret <8 x float> %res2607}2608 2609define <8 x float> @test_mm256_mask_movehdup_ps(<8 x float> %a0, i8 %a1, <8 x float> %a2) {2610; X86-LABEL: test_mm256_mask_movehdup_ps:2611; X86: # %bb.0:2612; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2613; X86-NEXT: kmovw %eax, %k12614; X86-NEXT: vmovshdup {{.*#+}} ymm0 {%k1} = ymm1[1,1,3,3,5,5,7,7]2615; X86-NEXT: retl2616;2617; X64-LABEL: test_mm256_mask_movehdup_ps:2618; X64: # %bb.0:2619; X64-NEXT: kmovw %edi, %k12620; X64-NEXT: vmovshdup {{.*#+}} ymm0 {%k1} = ymm1[1,1,3,3,5,5,7,7]2621; X64-NEXT: retq2622 %arg1 = bitcast i8 %a1 to <8 x i1>2623 %res0 = shufflevector <8 x float> %a2, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>2624 %res1 = select <8 x i1> %arg1, <8 x float> %res0, <8 x float> %a02625 ret <8 x float> %res12626}2627 2628define <8 x float> @test_mm256_maskz_movehdup_ps(i8 %a0, <8 x float> %a1) {2629; X86-LABEL: test_mm256_maskz_movehdup_ps:2630; X86: # %bb.0:2631; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2632; X86-NEXT: kmovw %eax, %k12633; X86-NEXT: vmovshdup {{.*#+}} ymm0 {%k1} {z} = ymm0[1,1,3,3,5,5,7,7]2634; X86-NEXT: retl2635;2636; X64-LABEL: test_mm256_maskz_movehdup_ps:2637; X64: # %bb.0:2638; X64-NEXT: kmovw %edi, %k12639; X64-NEXT: vmovshdup {{.*#+}} ymm0 {%k1} {z} = ymm0[1,1,3,3,5,5,7,7]2640; X64-NEXT: retq2641 %arg0 = bitcast i8 %a0 to <8 x i1>2642 %res0 = shufflevector <8 x float> %a1, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>2643 %res1 = select <8 x i1> %arg0, <8 x float> %res0, <8 x float> zeroinitializer2644 ret <8 x float> %res12645}2646 2647define <4 x float> @test_mm_moveldup_ps(<4 x float> %a0) {2648; CHECK-LABEL: test_mm_moveldup_ps:2649; CHECK: # %bb.0:2650; CHECK-NEXT: vmovsldup {{.*#+}} xmm0 = xmm0[0,0,2,2]2651; CHECK-NEXT: ret{{[l|q]}}2652 %res = shufflevector <4 x float> %a0, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>2653 ret <4 x float> %res2654}2655 2656define <4 x float> @test_mm_mask_moveldup_ps(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A) {2657; X86-LABEL: test_mm_mask_moveldup_ps:2658; X86: # %bb.0: # %entry2659; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2660; X86-NEXT: kmovw %eax, %k12661; X86-NEXT: vmovsldup {{.*#+}} xmm0 {%k1} = xmm1[0,0,2,2]2662; X86-NEXT: retl2663;2664; X64-LABEL: test_mm_mask_moveldup_ps:2665; X64: # %bb.0: # %entry2666; X64-NEXT: kmovw %edi, %k12667; X64-NEXT: vmovsldup {{.*#+}} xmm0 {%k1} = xmm1[0,0,2,2]2668; X64-NEXT: retq2669entry:2670 %shuffle.i.i = shufflevector <4 x float> %__A, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>2671 %0 = bitcast i8 %__U to <8 x i1>2672 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2673 %1 = select <4 x i1> %extract.i, <4 x float> %shuffle.i.i, <4 x float> %__W2674 ret <4 x float> %12675}2676 2677define <4 x float> @test_mm_maskz_moveldup_ps(i8 zeroext %__U, <4 x float> %__A) {2678; X86-LABEL: test_mm_maskz_moveldup_ps:2679; X86: # %bb.0: # %entry2680; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2681; X86-NEXT: kmovw %eax, %k12682; X86-NEXT: vmovsldup {{.*#+}} xmm0 {%k1} {z} = xmm0[0,0,2,2]2683; X86-NEXT: retl2684;2685; X64-LABEL: test_mm_maskz_moveldup_ps:2686; X64: # %bb.0: # %entry2687; X64-NEXT: kmovw %edi, %k12688; X64-NEXT: vmovsldup {{.*#+}} xmm0 {%k1} {z} = xmm0[0,0,2,2]2689; X64-NEXT: retq2690entry:2691 %shuffle.i.i = shufflevector <4 x float> %__A, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>2692 %0 = bitcast i8 %__U to <8 x i1>2693 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2694 %1 = select <4 x i1> %extract.i, <4 x float> %shuffle.i.i, <4 x float> zeroinitializer2695 ret <4 x float> %12696}2697 2698define <8 x float> @test_mm256_moveldup_ps(<8 x float> %a0) {2699; CHECK-LABEL: test_mm256_moveldup_ps:2700; CHECK: # %bb.0:2701; CHECK-NEXT: vmovsldup {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6]2702; CHECK-NEXT: ret{{[l|q]}}2703 %res = shufflevector <8 x float> %a0, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>2704 ret <8 x float> %res2705}2706 2707define <8 x float> @test_mm256_mask_moveldup_ps(<8 x float> %a0, i8 %a1, <8 x float> %a2) {2708; X86-LABEL: test_mm256_mask_moveldup_ps:2709; X86: # %bb.0:2710; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2711; X86-NEXT: kmovw %eax, %k12712; X86-NEXT: vmovsldup {{.*#+}} ymm0 {%k1} = ymm1[0,0,2,2,4,4,6,6]2713; X86-NEXT: retl2714;2715; X64-LABEL: test_mm256_mask_moveldup_ps:2716; X64: # %bb.0:2717; X64-NEXT: kmovw %edi, %k12718; X64-NEXT: vmovsldup {{.*#+}} ymm0 {%k1} = ymm1[0,0,2,2,4,4,6,6]2719; X64-NEXT: retq2720 %arg1 = bitcast i8 %a1 to <8 x i1>2721 %res0 = shufflevector <8 x float> %a2, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>2722 %res1 = select <8 x i1> %arg1, <8 x float> %res0, <8 x float> %a02723 ret <8 x float> %res12724}2725 2726define <8 x float> @test_mm256_maskz_moveldup_ps(i8 %a0, <8 x float> %a1) {2727; X86-LABEL: test_mm256_maskz_moveldup_ps:2728; X86: # %bb.0:2729; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2730; X86-NEXT: kmovw %eax, %k12731; X86-NEXT: vmovsldup {{.*#+}} ymm0 {%k1} {z} = ymm0[0,0,2,2,4,4,6,6]2732; X86-NEXT: retl2733;2734; X64-LABEL: test_mm256_maskz_moveldup_ps:2735; X64: # %bb.0:2736; X64-NEXT: kmovw %edi, %k12737; X64-NEXT: vmovsldup {{.*#+}} ymm0 {%k1} {z} = ymm0[0,0,2,2,4,4,6,6]2738; X64-NEXT: retq2739 %arg0 = bitcast i8 %a0 to <8 x i1>2740 %res0 = shufflevector <8 x float> %a1, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>2741 %res1 = select <8 x i1> %arg0, <8 x float> %res0, <8 x float> zeroinitializer2742 ret <8 x float> %res12743}2744 2745define <4 x i64> @test_mm256_permutex_epi64(<4 x i64> %a0) {2746; CHECK-LABEL: test_mm256_permutex_epi64:2747; CHECK: # %bb.0:2748; CHECK-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[3,0,0,0]2749; CHECK-NEXT: ret{{[l|q]}}2750 %res = shufflevector <4 x i64> %a0, <4 x i64> undef, <4 x i32> <i32 3, i32 0, i32 0, i32 0>2751 ret <4 x i64> %res2752}2753 2754define <4 x i64> @test_mm256_mask_permutex_epi64(<4 x i64> %__W, i8 zeroext %__M, <4 x i64> %__X) {2755; X86-LABEL: test_mm256_mask_permutex_epi64:2756; X86: # %bb.0: # %entry2757; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2758; X86-NEXT: kmovw %eax, %k12759; X86-NEXT: vpermq {{.*#+}} ymm0 {%k1} = ymm1[3,0,0,0]2760; X86-NEXT: retl2761;2762; X64-LABEL: test_mm256_mask_permutex_epi64:2763; X64: # %bb.0: # %entry2764; X64-NEXT: kmovw %edi, %k12765; X64-NEXT: vpermq {{.*#+}} ymm0 {%k1} = ymm1[3,0,0,0]2766; X64-NEXT: retq2767entry:2768 %perm = shufflevector <4 x i64> %__X, <4 x i64> undef, <4 x i32> <i32 3, i32 0, i32 0, i32 0>2769 %0 = bitcast i8 %__M to <8 x i1>2770 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2771 %1 = select <4 x i1> %extract, <4 x i64> %perm, <4 x i64> %__W2772 ret <4 x i64> %12773}2774 2775define <4 x i64> @test_mm256_maskz_permutex_epi64(i8 zeroext %__M, <4 x i64> %__X) {2776; X86-LABEL: test_mm256_maskz_permutex_epi64:2777; X86: # %bb.0: # %entry2778; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2779; X86-NEXT: kmovw %eax, %k12780; X86-NEXT: vpermq {{.*#+}} ymm0 {%k1} {z} = ymm0[3,0,0,0]2781; X86-NEXT: retl2782;2783; X64-LABEL: test_mm256_maskz_permutex_epi64:2784; X64: # %bb.0: # %entry2785; X64-NEXT: kmovw %edi, %k12786; X64-NEXT: vpermq {{.*#+}} ymm0 {%k1} {z} = ymm0[3,0,0,0]2787; X64-NEXT: retq2788entry:2789 %perm = shufflevector <4 x i64> %__X, <4 x i64> undef, <4 x i32> <i32 3, i32 0, i32 0, i32 0>2790 %0 = bitcast i8 %__M to <8 x i1>2791 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2792 %1 = select <4 x i1> %extract, <4 x i64> %perm, <4 x i64> zeroinitializer2793 ret <4 x i64> %12794}2795 2796define <4 x double> @test_mm256_permutex_pd(<4 x double> %a0) {2797; CHECK-LABEL: test_mm256_permutex_pd:2798; CHECK: # %bb.0:2799; CHECK-NEXT: vpermpd {{.*#+}} ymm0 = ymm0[3,0,0,0]2800; CHECK-NEXT: ret{{[l|q]}}2801 %res = shufflevector <4 x double> %a0, <4 x double> undef, <4 x i32> <i32 3, i32 0, i32 0, i32 0>2802 ret <4 x double> %res2803}2804 2805define <4 x double> @test_mm256_mask_permutex_pd(<4 x double> %__W, i8 zeroext %__U, <4 x double> %__X) {2806; X86-LABEL: test_mm256_mask_permutex_pd:2807; X86: # %bb.0: # %entry2808; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2809; X86-NEXT: kmovw %eax, %k12810; X86-NEXT: vpermpd {{.*#+}} ymm0 {%k1} = ymm1[1,0,0,0]2811; X86-NEXT: retl2812;2813; X64-LABEL: test_mm256_mask_permutex_pd:2814; X64: # %bb.0: # %entry2815; X64-NEXT: kmovw %edi, %k12816; X64-NEXT: vpermpd {{.*#+}} ymm0 {%k1} = ymm1[1,0,0,0]2817; X64-NEXT: retq2818entry:2819 %perm = shufflevector <4 x double> %__X, <4 x double> undef, <4 x i32> <i32 1, i32 0, i32 0, i32 0>2820 %0 = bitcast i8 %__U to <8 x i1>2821 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2822 %1 = select <4 x i1> %extract, <4 x double> %perm, <4 x double> %__W2823 ret <4 x double> %12824}2825 2826define <4 x double> @test_mm256_maskz_permutex_pd(i8 zeroext %__U, <4 x double> %__X) {2827; X86-LABEL: test_mm256_maskz_permutex_pd:2828; X86: # %bb.0: # %entry2829; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2830; X86-NEXT: kmovw %eax, %k12831; X86-NEXT: vpermpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1,0,0,0]2832; X86-NEXT: retl2833;2834; X64-LABEL: test_mm256_maskz_permutex_pd:2835; X64: # %bb.0: # %entry2836; X64-NEXT: kmovw %edi, %k12837; X64-NEXT: vpermpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1,0,0,0]2838; X64-NEXT: retq2839entry:2840 %perm = shufflevector <4 x double> %__X, <4 x double> undef, <4 x i32> <i32 1, i32 0, i32 0, i32 0>2841 %0 = bitcast i8 %__U to <8 x i1>2842 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2843 %1 = select <4 x i1> %extract, <4 x double> %perm, <4 x double> zeroinitializer2844 ret <4 x double> %12845}2846 2847define <2 x double> @test_mm_shuffle_pd(<2 x double> %a0, <2 x double> %a1) {2848; CHECK-LABEL: test_mm_shuffle_pd:2849; CHECK: # %bb.0:2850; CHECK-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]2851; CHECK-NEXT: ret{{[l|q]}}2852 %res = shufflevector <2 x double> %a0, <2 x double> %a1, <2 x i32> <i32 1, i32 3>2853 ret <2 x double> %res2854}2855 2856define <2 x double> @test_mm_mask_shuffle_pd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {2857; X86-LABEL: test_mm_mask_shuffle_pd:2858; X86: # %bb.0: # %entry2859; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2860; X86-NEXT: kmovw %eax, %k12861; X86-NEXT: vunpckhpd {{.*#+}} xmm0 {%k1} = xmm1[1],xmm2[1]2862; X86-NEXT: retl2863;2864; X64-LABEL: test_mm_mask_shuffle_pd:2865; X64: # %bb.0: # %entry2866; X64-NEXT: kmovw %edi, %k12867; X64-NEXT: vunpckhpd {{.*#+}} xmm0 {%k1} = xmm1[1],xmm2[1]2868; X64-NEXT: retq2869entry:2870 %shufp = shufflevector <2 x double> %__A, <2 x double> %__B, <2 x i32> <i32 1, i32 3>2871 %0 = bitcast i8 %__U to <8 x i1>2872 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>2873 %1 = select <2 x i1> %extract, <2 x double> %shufp, <2 x double> %__W2874 ret <2 x double> %12875}2876 2877define <2 x double> @test_mm_maskz_shuffle_pd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B) {2878; X86-LABEL: test_mm_maskz_shuffle_pd:2879; X86: # %bb.0: # %entry2880; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2881; X86-NEXT: kmovw %eax, %k12882; X86-NEXT: vunpckhpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],xmm1[1]2883; X86-NEXT: retl2884;2885; X64-LABEL: test_mm_maskz_shuffle_pd:2886; X64: # %bb.0: # %entry2887; X64-NEXT: kmovw %edi, %k12888; X64-NEXT: vunpckhpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],xmm1[1]2889; X64-NEXT: retq2890entry:2891 %shufp = shufflevector <2 x double> %__A, <2 x double> %__B, <2 x i32> <i32 1, i32 3>2892 %0 = bitcast i8 %__U to <8 x i1>2893 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>2894 %1 = select <2 x i1> %extract, <2 x double> %shufp, <2 x double> zeroinitializer2895 ret <2 x double> %12896}2897 2898define <4 x double> @test_mm256_shuffle_pd(<4 x double> %a0, <4 x double> %a1) {2899; CHECK-LABEL: test_mm256_shuffle_pd:2900; CHECK: # %bb.0:2901; CHECK-NEXT: vshufpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[2],ymm1[2]2902; CHECK-NEXT: ret{{[l|q]}}2903 %res = shufflevector <4 x double> %a0, <4 x double> %a1, <4 x i32> <i32 1, i32 5, i32 2, i32 6>2904 ret <4 x double> %res2905}2906 2907define <4 x double> @test_mm256_mask_shuffle_pd(<4 x double> %__W, i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B) {2908; X86-LABEL: test_mm256_mask_shuffle_pd:2909; X86: # %bb.0: # %entry2910; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2911; X86-NEXT: kmovw %eax, %k12912; X86-NEXT: vshufpd {{.*#+}} ymm0 {%k1} = ymm1[1],ymm2[1],ymm1[2],ymm2[2]2913; X86-NEXT: retl2914;2915; X64-LABEL: test_mm256_mask_shuffle_pd:2916; X64: # %bb.0: # %entry2917; X64-NEXT: kmovw %edi, %k12918; X64-NEXT: vshufpd {{.*#+}} ymm0 {%k1} = ymm1[1],ymm2[1],ymm1[2],ymm2[2]2919; X64-NEXT: retq2920entry:2921 %shufp = shufflevector <4 x double> %__A, <4 x double> %__B, <4 x i32> <i32 1, i32 5, i32 2, i32 6>2922 %0 = bitcast i8 %__U to <8 x i1>2923 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2924 %1 = select <4 x i1> %extract, <4 x double> %shufp, <4 x double> %__W2925 ret <4 x double> %12926}2927 2928define <4 x double> @test_mm256_maskz_shuffle_pd(i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B) {2929; X86-LABEL: test_mm256_maskz_shuffle_pd:2930; X86: # %bb.0: # %entry2931; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2932; X86-NEXT: kmovw %eax, %k12933; X86-NEXT: vshufpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],ymm1[1],ymm0[2],ymm1[2]2934; X86-NEXT: retl2935;2936; X64-LABEL: test_mm256_maskz_shuffle_pd:2937; X64: # %bb.0: # %entry2938; X64-NEXT: kmovw %edi, %k12939; X64-NEXT: vshufpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],ymm1[1],ymm0[2],ymm1[2]2940; X64-NEXT: retq2941entry:2942 %shufp = shufflevector <4 x double> %__A, <4 x double> %__B, <4 x i32> <i32 1, i32 5, i32 2, i32 6>2943 %0 = bitcast i8 %__U to <8 x i1>2944 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2945 %1 = select <4 x i1> %extract, <4 x double> %shufp, <4 x double> zeroinitializer2946 ret <4 x double> %12947}2948 2949define <4 x float> @test_mm_shuffle_ps(<4 x float> %a0, <4 x float> %a1) {2950; CHECK-LABEL: test_mm_shuffle_ps:2951; CHECK: # %bb.0:2952; CHECK-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0,0]2953; CHECK-NEXT: ret{{[l|q]}}2954 %res = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 1, i32 4, i32 4>2955 ret <4 x float> %res2956}2957 2958define <4 x float> @test_mm_mask_shuffle_ps(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {2959; X86-LABEL: test_mm_mask_shuffle_ps:2960; X86: # %bb.0: # %entry2961; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2962; X86-NEXT: kmovw %eax, %k12963; X86-NEXT: vshufps {{.*#+}} xmm0 {%k1} = xmm1[0,1],xmm2[0,0]2964; X86-NEXT: retl2965;2966; X64-LABEL: test_mm_mask_shuffle_ps:2967; X64: # %bb.0: # %entry2968; X64-NEXT: kmovw %edi, %k12969; X64-NEXT: vshufps {{.*#+}} xmm0 {%k1} = xmm1[0,1],xmm2[0,0]2970; X64-NEXT: retq2971entry:2972 %shufp = shufflevector <4 x float> %__A, <4 x float> %__B, <4 x i32> <i32 0, i32 1, i32 4, i32 4>2973 %0 = bitcast i8 %__U to <8 x i1>2974 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2975 %1 = select <4 x i1> %extract, <4 x float> %shufp, <4 x float> %__W2976 ret <4 x float> %12977}2978 2979define <4 x float> @test_mm_maskz_shuffle_ps(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B) {2980; X86-LABEL: test_mm_maskz_shuffle_ps:2981; X86: # %bb.0: # %entry2982; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax2983; X86-NEXT: kmovw %eax, %k12984; X86-NEXT: vshufps {{.*#+}} xmm0 {%k1} {z} = xmm0[0,1],xmm1[0,0]2985; X86-NEXT: retl2986;2987; X64-LABEL: test_mm_maskz_shuffle_ps:2988; X64: # %bb.0: # %entry2989; X64-NEXT: kmovw %edi, %k12990; X64-NEXT: vshufps {{.*#+}} xmm0 {%k1} {z} = xmm0[0,1],xmm1[0,0]2991; X64-NEXT: retq2992entry:2993 %shufp = shufflevector <4 x float> %__A, <4 x float> %__B, <4 x i32> <i32 0, i32 1, i32 4, i32 4>2994 %0 = bitcast i8 %__U to <8 x i1>2995 %extract = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>2996 %1 = select <4 x i1> %extract, <4 x float> %shufp, <4 x float> zeroinitializer2997 ret <4 x float> %12998}2999 3000define <8 x float> @test_mm256_shuffle_ps(<8 x float> %a0, <8 x float> %a1) {3001; CHECK-LABEL: test_mm256_shuffle_ps:3002; CHECK: # %bb.0:3003; CHECK-NEXT: vshufps {{.*#+}} ymm0 = ymm0[0,1],ymm1[0,0],ymm0[4,5],ymm1[4,4]3004; CHECK-NEXT: ret{{[l|q]}}3005 %res = shufflevector <8 x float> %a0, <8 x float> %a1, <8 x i32> <i32 0, i32 1, i32 8, i32 8, i32 4, i32 5, i32 12, i32 12>3006 ret <8 x float> %res3007}3008 3009define <8 x float> @test_mm256_mask_shuffle_ps(<8 x float> %a0, i8 %a1, <8 x float> %a2, <8 x float> %a3) {3010; X86-LABEL: test_mm256_mask_shuffle_ps:3011; X86: # %bb.0:3012; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3013; X86-NEXT: kmovw %eax, %k13014; X86-NEXT: vshufps {{.*#+}} ymm0 {%k1} = ymm1[0,1],ymm2[0,0],ymm1[4,5],ymm2[4,4]3015; X86-NEXT: retl3016;3017; X64-LABEL: test_mm256_mask_shuffle_ps:3018; X64: # %bb.0:3019; X64-NEXT: kmovw %edi, %k13020; X64-NEXT: vshufps {{.*#+}} ymm0 {%k1} = ymm1[0,1],ymm2[0,0],ymm1[4,5],ymm2[4,4]3021; X64-NEXT: retq3022 %arg1 = bitcast i8 %a1 to <8 x i1>3023 %res0 = shufflevector <8 x float> %a2, <8 x float> %a3, <8 x i32> <i32 0, i32 1, i32 8, i32 8, i32 4, i32 5, i32 12, i32 12>3024 %res1 = select <8 x i1> %arg1, <8 x float> %res0, <8 x float> %a03025 ret <8 x float> %res13026}3027 3028define <8 x float> @test_mm256_maskz_shuffle_ps(i8 %a0, <8 x float> %a1, <8 x float> %a2) {3029; X86-LABEL: test_mm256_maskz_shuffle_ps:3030; X86: # %bb.0:3031; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3032; X86-NEXT: kmovw %eax, %k13033; X86-NEXT: vshufps {{.*#+}} ymm0 {%k1} {z} = ymm0[0,1],ymm1[0,0],ymm0[4,5],ymm1[4,4]3034; X86-NEXT: retl3035;3036; X64-LABEL: test_mm256_maskz_shuffle_ps:3037; X64: # %bb.0:3038; X64-NEXT: kmovw %edi, %k13039; X64-NEXT: vshufps {{.*#+}} ymm0 {%k1} {z} = ymm0[0,1],ymm1[0,0],ymm0[4,5],ymm1[4,4]3040; X64-NEXT: retq3041 %arg0 = bitcast i8 %a0 to <8 x i1>3042 %res0 = shufflevector <8 x float> %a1, <8 x float> %a2, <8 x i32> <i32 0, i32 1, i32 8, i32 8, i32 4, i32 5, i32 12, i32 12>3043 %res1 = select <8 x i1> %arg0, <8 x float> %res0, <8 x float> zeroinitializer3044 ret <8 x float> %res13045}3046 3047define <4 x i64> @test_mm256_mask_mul_epi32(<4 x i64> %__W, i8 zeroext %__M, <4 x i64> %__X, <4 x i64> %__Y) nounwind {3048; X86-LABEL: test_mm256_mask_mul_epi32:3049; X86: # %bb.0: # %entry3050; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3051; X86-NEXT: kmovw %eax, %k13052; X86-NEXT: vpmuldq %ymm1, %ymm2, %ymm0 {%k1}3053; X86-NEXT: retl3054;3055; X64-LABEL: test_mm256_mask_mul_epi32:3056; X64: # %bb.0: # %entry3057; X64-NEXT: kmovw %edi, %k13058; X64-NEXT: vpmuldq %ymm1, %ymm2, %ymm0 {%k1}3059; X64-NEXT: retq3060entry:3061 %tmp = shl <4 x i64> %__X, <i64 32, i64 32, i64 32, i64 32>3062 %tmp1 = ashr exact <4 x i64> %tmp, <i64 32, i64 32, i64 32, i64 32>3063 %tmp2 = shl <4 x i64> %__Y, <i64 32, i64 32, i64 32, i64 32>3064 %tmp3 = ashr exact <4 x i64> %tmp2, <i64 32, i64 32, i64 32, i64 32>3065 %tmp4 = mul nsw <4 x i64> %tmp3, %tmp13066 %tmp5 = bitcast i8 %__M to <8 x i1>3067 %extract.i = shufflevector <8 x i1> %tmp5, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3068 %tmp6 = select <4 x i1> %extract.i, <4 x i64> %tmp4, <4 x i64> %__W3069 ret <4 x i64> %tmp63070}3071 3072define <4 x i64> @test_mm256_maskz_mul_epi32(i8 zeroext %__M, <4 x i64> %__X, <4 x i64> %__Y) nounwind {3073; X86-LABEL: test_mm256_maskz_mul_epi32:3074; X86: # %bb.0:3075; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3076; X86-NEXT: kmovw %eax, %k13077; X86-NEXT: vpmuldq %ymm0, %ymm1, %ymm0 {%k1} {z}3078; X86-NEXT: retl3079;3080; X64-LABEL: test_mm256_maskz_mul_epi32:3081; X64: # %bb.0:3082; X64-NEXT: kmovw %edi, %k13083; X64-NEXT: vpmuldq %ymm0, %ymm1, %ymm0 {%k1} {z}3084; X64-NEXT: retq3085 %tmp = shl <4 x i64> %__X, <i64 32, i64 32, i64 32, i64 32>3086 %tmp1 = ashr exact <4 x i64> %tmp, <i64 32, i64 32, i64 32, i64 32>3087 %tmp2 = shl <4 x i64> %__Y, <i64 32, i64 32, i64 32, i64 32>3088 %tmp3 = ashr exact <4 x i64> %tmp2, <i64 32, i64 32, i64 32, i64 32>3089 %tmp4 = mul nsw <4 x i64> %tmp3, %tmp13090 %tmp5 = bitcast i8 %__M to <8 x i1>3091 %extract.i = shufflevector <8 x i1> %tmp5, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3092 %tmp6 = select <4 x i1> %extract.i, <4 x i64> %tmp4, <4 x i64> zeroinitializer3093 ret <4 x i64> %tmp63094}3095 3096define <2 x i64> @test_mm_mask_mul_epi32(<2 x i64> %__W, i8 zeroext %__M, <2 x i64> %__X, <2 x i64> %__Y) nounwind {3097; X86-LABEL: test_mm_mask_mul_epi32:3098; X86: # %bb.0:3099; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3100; X86-NEXT: kmovw %eax, %k13101; X86-NEXT: vpmuldq %xmm1, %xmm2, %xmm0 {%k1}3102; X86-NEXT: retl3103;3104; X64-LABEL: test_mm_mask_mul_epi32:3105; X64: # %bb.0:3106; X64-NEXT: kmovw %edi, %k13107; X64-NEXT: vpmuldq %xmm1, %xmm2, %xmm0 {%k1}3108; X64-NEXT: retq3109 %tmp = shl <2 x i64> %__X, <i64 32, i64 32>3110 %tmp1 = ashr exact <2 x i64> %tmp, <i64 32, i64 32>3111 %tmp2 = shl <2 x i64> %__Y, <i64 32, i64 32>3112 %tmp3 = ashr exact <2 x i64> %tmp2, <i64 32, i64 32>3113 %tmp4 = mul nsw <2 x i64> %tmp3, %tmp13114 %tmp5 = bitcast i8 %__M to <8 x i1>3115 %extract.i = shufflevector <8 x i1> %tmp5, <8 x i1> undef, <2 x i32> <i32 0, i32 1>3116 %tmp6 = select <2 x i1> %extract.i, <2 x i64> %tmp4, <2 x i64> %__W3117 ret <2 x i64> %tmp63118}3119 3120define <2 x i64> @test_mm_maskz_mul_epi32(i8 zeroext %__M, <2 x i64> %__X, <2 x i64> %__Y) nounwind {3121; X86-LABEL: test_mm_maskz_mul_epi32:3122; X86: # %bb.0:3123; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3124; X86-NEXT: kmovw %eax, %k13125; X86-NEXT: vpmuldq %xmm0, %xmm1, %xmm0 {%k1} {z}3126; X86-NEXT: retl3127;3128; X64-LABEL: test_mm_maskz_mul_epi32:3129; X64: # %bb.0:3130; X64-NEXT: kmovw %edi, %k13131; X64-NEXT: vpmuldq %xmm0, %xmm1, %xmm0 {%k1} {z}3132; X64-NEXT: retq3133 %tmp = shl <2 x i64> %__X, <i64 32, i64 32>3134 %tmp1 = ashr exact <2 x i64> %tmp, <i64 32, i64 32>3135 %tmp2 = shl <2 x i64> %__Y, <i64 32, i64 32>3136 %tmp3 = ashr exact <2 x i64> %tmp2, <i64 32, i64 32>3137 %tmp4 = mul nsw <2 x i64> %tmp3, %tmp13138 %tmp5 = bitcast i8 %__M to <8 x i1>3139 %extract.i = shufflevector <8 x i1> %tmp5, <8 x i1> undef, <2 x i32> <i32 0, i32 1>3140 %tmp6 = select <2 x i1> %extract.i, <2 x i64> %tmp4, <2 x i64> zeroinitializer3141 ret <2 x i64> %tmp63142}3143 3144define <4 x i64> @test_mm256_mask_mul_epu32(<4 x i64> %__W, i8 zeroext %__M, <4 x i64> %__X, <4 x i64> %__Y) nounwind {3145; X86-LABEL: test_mm256_mask_mul_epu32:3146; X86: # %bb.0: # %entry3147; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3148; X86-NEXT: kmovw %eax, %k13149; X86-NEXT: vpmuludq %ymm1, %ymm2, %ymm0 {%k1}3150; X86-NEXT: retl3151;3152; X64-LABEL: test_mm256_mask_mul_epu32:3153; X64: # %bb.0: # %entry3154; X64-NEXT: kmovw %edi, %k13155; X64-NEXT: vpmuludq %ymm1, %ymm2, %ymm0 {%k1}3156; X64-NEXT: retq3157entry:3158 %tmp = and <4 x i64> %__X, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>3159 %tmp1 = and <4 x i64> %__Y, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>3160 %tmp2 = mul nuw <4 x i64> %tmp1, %tmp3161 %tmp3 = bitcast i8 %__M to <8 x i1>3162 %extract.i = shufflevector <8 x i1> %tmp3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3163 %tmp4 = select <4 x i1> %extract.i, <4 x i64> %tmp2, <4 x i64> %__W3164 ret <4 x i64> %tmp43165}3166 3167define <4 x i64> @test_mm256_maskz_mul_epu32(i8 zeroext %__M, <4 x i64> %__X, <4 x i64> %__Y) nounwind {3168; X86-LABEL: test_mm256_maskz_mul_epu32:3169; X86: # %bb.0: # %entry3170; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3171; X86-NEXT: kmovw %eax, %k13172; X86-NEXT: vpmuludq %ymm0, %ymm1, %ymm0 {%k1} {z}3173; X86-NEXT: retl3174;3175; X64-LABEL: test_mm256_maskz_mul_epu32:3176; X64: # %bb.0: # %entry3177; X64-NEXT: kmovw %edi, %k13178; X64-NEXT: vpmuludq %ymm0, %ymm1, %ymm0 {%k1} {z}3179; X64-NEXT: retq3180entry:3181 %tmp = and <4 x i64> %__X, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>3182 %tmp1 = and <4 x i64> %__Y, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>3183 %tmp2 = mul nuw <4 x i64> %tmp1, %tmp3184 %tmp3 = bitcast i8 %__M to <8 x i1>3185 %extract.i = shufflevector <8 x i1> %tmp3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3186 %tmp4 = select <4 x i1> %extract.i, <4 x i64> %tmp2, <4 x i64> zeroinitializer3187 ret <4 x i64> %tmp43188}3189 3190define <2 x i64> @test_mm_mask_mul_epu32(<2 x i64> %__W, i8 zeroext %__M, <2 x i64> %__X, <2 x i64> %__Y) nounwind {3191; X86-LABEL: test_mm_mask_mul_epu32:3192; X86: # %bb.0: # %entry3193; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3194; X86-NEXT: kmovw %eax, %k13195; X86-NEXT: vpmuludq %xmm1, %xmm2, %xmm0 {%k1}3196; X86-NEXT: retl3197;3198; X64-LABEL: test_mm_mask_mul_epu32:3199; X64: # %bb.0: # %entry3200; X64-NEXT: kmovw %edi, %k13201; X64-NEXT: vpmuludq %xmm1, %xmm2, %xmm0 {%k1}3202; X64-NEXT: retq3203entry:3204 %tmp = and <2 x i64> %__X, <i64 4294967295, i64 4294967295>3205 %tmp1 = and <2 x i64> %__Y, <i64 4294967295, i64 4294967295>3206 %tmp2 = mul nuw <2 x i64> %tmp1, %tmp3207 %tmp3 = bitcast i8 %__M to <8 x i1>3208 %extract.i = shufflevector <8 x i1> %tmp3, <8 x i1> undef, <2 x i32> <i32 0, i32 1>3209 %tmp4 = select <2 x i1> %extract.i, <2 x i64> %tmp2, <2 x i64> %__W3210 ret <2 x i64> %tmp43211}3212 3213define <2 x i64> @test_mm_maskz_mul_epu32(i8 zeroext %__M, <2 x i64> %__X, <2 x i64> %__Y) nounwind {3214; X86-LABEL: test_mm_maskz_mul_epu32:3215; X86: # %bb.0: # %entry3216; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3217; X86-NEXT: kmovw %eax, %k13218; X86-NEXT: vpmuludq %xmm0, %xmm1, %xmm0 {%k1} {z}3219; X86-NEXT: retl3220;3221; X64-LABEL: test_mm_maskz_mul_epu32:3222; X64: # %bb.0: # %entry3223; X64-NEXT: kmovw %edi, %k13224; X64-NEXT: vpmuludq %xmm0, %xmm1, %xmm0 {%k1} {z}3225; X64-NEXT: retq3226entry:3227 %tmp = and <2 x i64> %__X, <i64 4294967295, i64 4294967295>3228 %tmp1 = and <2 x i64> %__Y, <i64 4294967295, i64 4294967295>3229 %tmp2 = mul nuw <2 x i64> %tmp1, %tmp3230 %tmp3 = bitcast i8 %__M to <8 x i1>3231 %extract.i = shufflevector <8 x i1> %tmp3, <8 x i1> undef, <2 x i32> <i32 0, i32 1>3232 %tmp4 = select <2 x i1> %extract.i, <2 x i64> %tmp2, <2 x i64> zeroinitializer3233 ret <2 x i64> %tmp43234}3235 3236define <2 x i64> @test_mm_cvtepi32_epi8(<2 x i64> %__A) {3237; CHECK-LABEL: test_mm_cvtepi32_epi8:3238; CHECK: # %bb.0: # %entry3239; CHECK-NEXT: vpmovdb %xmm0, %xmm03240; CHECK-NEXT: ret{{[l|q]}}3241entry:3242 %0 = bitcast <2 x i64> %__A to <4 x i32>3243 %conv.i = trunc <4 x i32> %0 to <4 x i8>3244 %shuf.i = shufflevector <4 x i8> %conv.i, <4 x i8> zeroinitializer, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7>3245 %1 = bitcast <16 x i8> %shuf.i to <2 x i64>3246 ret <2 x i64> %13247}3248 3249define <2 x i64> @test_mm_cvtepi32_epi16(<2 x i64> %__A) {3250; CHECK-LABEL: test_mm_cvtepi32_epi16:3251; CHECK: # %bb.0: # %entry3252; CHECK-NEXT: vpmovdw %xmm0, %xmm03253; CHECK-NEXT: ret{{[l|q]}}3254entry:3255 %0 = bitcast <2 x i64> %__A to <4 x i32>3256 %conv.i = trunc <4 x i32> %0 to <4 x i16>3257 %shuf.i = shufflevector <4 x i16> %conv.i, <4 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>3258 %1 = bitcast <8 x i16> %shuf.i to <2 x i64>3259 ret <2 x i64> %13260}3261 3262define <2 x i64> @test_mm_cvtepi64_epi8(<2 x i64> %__A) {3263; CHECK-LABEL: test_mm_cvtepi64_epi8:3264; CHECK: # %bb.0: # %entry3265; CHECK-NEXT: vpmovqb %xmm0, %xmm03266; CHECK-NEXT: ret{{[l|q]}}3267entry:3268 %conv.i = trunc <2 x i64> %__A to <2 x i8>3269 %shuf.i = shufflevector <2 x i8> %conv.i, <2 x i8> zeroinitializer, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3>3270 %0 = bitcast <16 x i8> %shuf.i to <2 x i64>3271 ret <2 x i64> %03272}3273 3274define <2 x i64> @test_mm_cvtepi64_epi16(<2 x i64> %__A) {3275; CHECK-LABEL: test_mm_cvtepi64_epi16:3276; CHECK: # %bb.0: # %entry3277; CHECK-NEXT: vpmovqw %xmm0, %xmm03278; CHECK-NEXT: ret{{[l|q]}}3279entry:3280 %conv.i = trunc <2 x i64> %__A to <2 x i16>3281 %shuf.i = shufflevector <2 x i16> %conv.i, <2 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3>3282 %0 = bitcast <8 x i16> %shuf.i to <2 x i64>3283 ret <2 x i64> %03284}3285 3286define <2 x i64> @test_mm_cvtepi64_epi32(<2 x i64> %__A) {3287; CHECK-LABEL: test_mm_cvtepi64_epi32:3288; CHECK: # %bb.0: # %entry3289; CHECK-NEXT: vpmovqd %xmm0, %xmm03290; CHECK-NEXT: ret{{[l|q]}}3291entry:3292 %conv.i = trunc <2 x i64> %__A to <2 x i32>3293 %shuf.i = shufflevector <2 x i32> %conv.i, <2 x i32> zeroinitializer, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3294 %0 = bitcast <4 x i32> %shuf.i to <2 x i64>3295 ret <2 x i64> %03296}3297 3298define <2 x i64> @test_mm256_cvtepi32_epi16(<4 x i64> %__A) local_unnamed_addr #0 {3299; CHECK-LABEL: test_mm256_cvtepi32_epi16:3300; CHECK: # %bb.0: # %entry3301; CHECK-NEXT: vpmovdw %ymm0, %xmm03302; CHECK-NEXT: vzeroupper3303; CHECK-NEXT: ret{{[l|q]}}3304entry:3305 %0 = bitcast <4 x i64> %__A to <8 x i32>3306 %conv.i = trunc <8 x i32> %0 to <8 x i16>3307 %1 = bitcast <8 x i16> %conv.i to <2 x i64>3308 ret <2 x i64> %13309}3310 3311define <2 x i64> @test_mm256_mask_cvtepi32_epi16(<2 x i64> %__O, i8 zeroext %__M, <4 x i64> %__A) {3312; X86-LABEL: test_mm256_mask_cvtepi32_epi16:3313; X86: # %bb.0: # %entry3314; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3315; X86-NEXT: kmovw %eax, %k13316; X86-NEXT: vpmovdw %ymm1, %xmm0 {%k1}3317; X86-NEXT: vzeroupper3318; X86-NEXT: retl3319;3320; X64-LABEL: test_mm256_mask_cvtepi32_epi16:3321; X64: # %bb.0: # %entry3322; X64-NEXT: kmovw %edi, %k13323; X64-NEXT: vpmovdw %ymm1, %xmm0 {%k1}3324; X64-NEXT: vzeroupper3325; X64-NEXT: retq3326entry:3327 %0 = bitcast <4 x i64> %__A to <8 x i32>3328 %1 = bitcast <2 x i64> %__O to <8 x i16>3329 %2 = tail call <8 x i16> @llvm.x86.avx512.mask.pmov.dw.256(<8 x i32> %0, <8 x i16> %1, i8 %__M)3330 %3 = bitcast <8 x i16> %2 to <2 x i64>3331 ret <2 x i64> %33332}3333 3334define <2 x i64> @test_mm256_maskz_cvtepi32_epi16(i8 zeroext %__M, <4 x i64> %__A) {3335; X86-LABEL: test_mm256_maskz_cvtepi32_epi16:3336; X86: # %bb.0: # %entry3337; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3338; X86-NEXT: kmovw %eax, %k13339; X86-NEXT: vpmovdw %ymm0, %xmm0 {%k1} {z}3340; X86-NEXT: vzeroupper3341; X86-NEXT: retl3342;3343; X64-LABEL: test_mm256_maskz_cvtepi32_epi16:3344; X64: # %bb.0: # %entry3345; X64-NEXT: kmovw %edi, %k13346; X64-NEXT: vpmovdw %ymm0, %xmm0 {%k1} {z}3347; X64-NEXT: vzeroupper3348; X64-NEXT: retq3349entry:3350 %0 = bitcast <4 x i64> %__A to <8 x i32>3351 %1 = tail call <8 x i16> @llvm.x86.avx512.mask.pmov.dw.256(<8 x i32> %0, <8 x i16> zeroinitializer, i8 %__M)3352 %2 = bitcast <8 x i16> %1 to <2 x i64>3353 ret <2 x i64> %23354}3355 3356define <2 x i64> @test_mm256_cvtepi64_epi32(<4 x i64> %__A) local_unnamed_addr #0 {3357; CHECK-LABEL: test_mm256_cvtepi64_epi32:3358; CHECK: # %bb.0: # %entry3359; CHECK-NEXT: vpmovqd %ymm0, %xmm03360; CHECK-NEXT: vzeroupper3361; CHECK-NEXT: ret{{[l|q]}}3362entry:3363 %conv.i = trunc <4 x i64> %__A to <4 x i32>3364 %0 = bitcast <4 x i32> %conv.i to <2 x i64>3365 ret <2 x i64> %03366}3367 3368define <2 x i64> @test_mm256_mask_cvtepi64_epi32(<2 x i64> %__O, i8 zeroext %__M, <4 x i64> %__A) {3369; X86-LABEL: test_mm256_mask_cvtepi64_epi32:3370; X86: # %bb.0: # %entry3371; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3372; X86-NEXT: kmovw %eax, %k13373; X86-NEXT: vpmovqd %ymm1, %xmm0 {%k1}3374; X86-NEXT: vzeroupper3375; X86-NEXT: retl3376;3377; X64-LABEL: test_mm256_mask_cvtepi64_epi32:3378; X64: # %bb.0: # %entry3379; X64-NEXT: kmovw %edi, %k13380; X64-NEXT: vpmovqd %ymm1, %xmm0 {%k1}3381; X64-NEXT: vzeroupper3382; X64-NEXT: retq3383entry:3384 %conv.i.i = trunc <4 x i64> %__A to <4 x i32>3385 %0 = bitcast <2 x i64> %__O to <4 x i32>3386 %1 = bitcast i8 %__M to <8 x i1>3387 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3388 %2 = select <4 x i1> %extract.i, <4 x i32> %conv.i.i, <4 x i32> %03389 %3 = bitcast <4 x i32> %2 to <2 x i64>3390 ret <2 x i64> %33391}3392 3393define <2 x i64> @test_mm256_maskz_cvtepi64_epi32(i8 zeroext %__M, <4 x i64> %__A) {3394; X86-LABEL: test_mm256_maskz_cvtepi64_epi32:3395; X86: # %bb.0: # %entry3396; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3397; X86-NEXT: kmovw %eax, %k13398; X86-NEXT: vpmovqd %ymm0, %xmm0 {%k1} {z}3399; X86-NEXT: vzeroupper3400; X86-NEXT: retl3401;3402; X64-LABEL: test_mm256_maskz_cvtepi64_epi32:3403; X64: # %bb.0: # %entry3404; X64-NEXT: kmovw %edi, %k13405; X64-NEXT: vpmovqd %ymm0, %xmm0 {%k1} {z}3406; X64-NEXT: vzeroupper3407; X64-NEXT: retq3408entry:3409 %conv.i.i = trunc <4 x i64> %__A to <4 x i32>3410 %0 = bitcast i8 %__M to <8 x i1>3411 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3412 %1 = select <4 x i1> %extract.i, <4 x i32> %conv.i.i, <4 x i32> zeroinitializer3413 %2 = bitcast <4 x i32> %1 to <2 x i64>3414 ret <2 x i64> %23415}3416 3417define <2 x i64> @test_mm256_cvtepi64_epi8(<4 x i64> %__A) {3418; CHECK-LABEL: test_mm256_cvtepi64_epi8:3419; CHECK: # %bb.0: # %entry3420; CHECK-NEXT: vpmovqb %ymm0, %xmm03421; CHECK-NEXT: vzeroupper3422; CHECK-NEXT: ret{{[l|q]}}3423entry:3424 %conv.i = trunc <4 x i64> %__A to <4 x i8>3425 %shuf.i = shufflevector <4 x i8> %conv.i, <4 x i8> zeroinitializer, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7>3426 %0 = bitcast <16 x i8> %shuf.i to <2 x i64>3427 ret <2 x i64> %03428}3429 3430define <2 x i64> @test_mm256_cvtepi64_epi16(<4 x i64> %__A) {3431; CHECK-LABEL: test_mm256_cvtepi64_epi16:3432; CHECK: # %bb.0: # %entry3433; CHECK-NEXT: vpmovqw %ymm0, %xmm03434; CHECK-NEXT: vzeroupper3435; CHECK-NEXT: ret{{[l|q]}}3436entry:3437 %conv.i = trunc <4 x i64> %__A to <4 x i16>3438 %shuf.i = shufflevector <4 x i16> %conv.i, <4 x i16> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>3439 %0 = bitcast <8 x i16> %shuf.i to <2 x i64>3440 ret <2 x i64> %03441}3442 3443define <2 x i64> @test_mm256_cvtepi32_epi8(<4 x i64> %__A) {3444; CHECK-LABEL: test_mm256_cvtepi32_epi8:3445; CHECK: # %bb.0: # %entry3446; CHECK-NEXT: vpmovdb %ymm0, %xmm03447; CHECK-NEXT: vzeroupper3448; CHECK-NEXT: ret{{[l|q]}}3449entry:3450 %0 = bitcast <4 x i64> %__A to <8 x i32>3451 %conv.i = trunc <8 x i32> %0 to <8 x i8>3452 %shuf.i = shufflevector <8 x i8> %conv.i, <8 x i8> zeroinitializer, <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>3453 %1 = bitcast <16 x i8> %shuf.i to <2 x i64>3454 ret <2 x i64> %13455}3456 3457define <2 x i64> @test_mm_ternarylogic_epi32(<2 x i64> %__A, <2 x i64> %__B, <2 x i64> %__C) {3458; CHECK-LABEL: test_mm_ternarylogic_epi32:3459; CHECK: # %bb.0: # %entry3460; CHECK-NEXT: vpternlogd {{.*#+}} xmm0 = xmm1 & ~(xmm0 | xmm2)3461; CHECK-NEXT: ret{{[l|q]}}3462entry:3463 %0 = bitcast <2 x i64> %__A to <4 x i32>3464 %1 = bitcast <2 x i64> %__B to <4 x i32>3465 %2 = bitcast <2 x i64> %__C to <4 x i32>3466 %3 = tail call <4 x i32> @llvm.x86.avx512.pternlog.d.128(<4 x i32> %0, <4 x i32> %1, <4 x i32> %2, i32 4)3467 %4 = bitcast <4 x i32> %3 to <2 x i64>3468 ret <2 x i64> %43469}3470 3471declare <4 x i32> @llvm.x86.avx512.pternlog.d.128(<4 x i32>, <4 x i32>, <4 x i32>, i32) #23472 3473define <2 x i64> @test_mm_mask_ternarylogic_epi32(<2 x i64> %__A, i8 zeroext %__U, <2 x i64> %__B, <2 x i64> %__C) {3474; X86-LABEL: test_mm_mask_ternarylogic_epi32:3475; X86: # %bb.0: # %entry3476; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3477; X86-NEXT: kmovw %eax, %k13478; X86-NEXT: vpternlogd {{.*#+}} xmm0 {%k1} = xmm1 & ~(xmm0 | xmm2)3479; X86-NEXT: retl3480;3481; X64-LABEL: test_mm_mask_ternarylogic_epi32:3482; X64: # %bb.0: # %entry3483; X64-NEXT: kmovw %edi, %k13484; X64-NEXT: vpternlogd {{.*#+}} xmm0 {%k1} = xmm1 & ~(xmm0 | xmm2)3485; X64-NEXT: retq3486entry:3487 %0 = bitcast <2 x i64> %__A to <4 x i32>3488 %1 = bitcast <2 x i64> %__B to <4 x i32>3489 %2 = bitcast <2 x i64> %__C to <4 x i32>3490 %3 = tail call <4 x i32> @llvm.x86.avx512.pternlog.d.128(<4 x i32> %0, <4 x i32> %1, <4 x i32> %2, i32 4)3491 %4 = bitcast i8 %__U to <8 x i1>3492 %extract = shufflevector <8 x i1> %4, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3493 %5 = select <4 x i1> %extract, <4 x i32> %3, <4 x i32> %03494 %6 = bitcast <4 x i32> %5 to <2 x i64>3495 ret <2 x i64> %63496}3497 3498define <2 x i64> @test_mm_maskz_ternarylogic_epi32(i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B, <2 x i64> %__C) {3499; X86-LABEL: test_mm_maskz_ternarylogic_epi32:3500; X86: # %bb.0: # %entry3501; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3502; X86-NEXT: kmovw %eax, %k13503; X86-NEXT: vpternlogd {{.*#+}} xmm0 {%k1} {z} = xmm1 & ~(xmm0 | xmm2)3504; X86-NEXT: retl3505;3506; X64-LABEL: test_mm_maskz_ternarylogic_epi32:3507; X64: # %bb.0: # %entry3508; X64-NEXT: kmovw %edi, %k13509; X64-NEXT: vpternlogd {{.*#+}} xmm0 {%k1} {z} = xmm1 & ~(xmm0 | xmm2)3510; X64-NEXT: retq3511entry:3512 %0 = bitcast <2 x i64> %__A to <4 x i32>3513 %1 = bitcast <2 x i64> %__B to <4 x i32>3514 %2 = bitcast <2 x i64> %__C to <4 x i32>3515 %3 = tail call <4 x i32> @llvm.x86.avx512.pternlog.d.128(<4 x i32> %0, <4 x i32> %1, <4 x i32> %2, i32 4)3516 %4 = bitcast i8 %__U to <8 x i1>3517 %extract = shufflevector <8 x i1> %4, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3518 %5 = select <4 x i1> %extract, <4 x i32> %3, <4 x i32> zeroinitializer3519 %6 = bitcast <4 x i32> %5 to <2 x i64>3520 ret <2 x i64> %63521}3522 3523define <4 x i64> @test_mm256_ternarylogic_epi32(<4 x i64> %__A, <4 x i64> %__B, <4 x i64> %__C) {3524; CHECK-LABEL: test_mm256_ternarylogic_epi32:3525; CHECK: # %bb.0: # %entry3526; CHECK-NEXT: vpternlogd {{.*#+}} ymm0 = ymm1 & ~(ymm0 | ymm2)3527; CHECK-NEXT: ret{{[l|q]}}3528entry:3529 %0 = bitcast <4 x i64> %__A to <8 x i32>3530 %1 = bitcast <4 x i64> %__B to <8 x i32>3531 %2 = bitcast <4 x i64> %__C to <8 x i32>3532 %3 = tail call <8 x i32> @llvm.x86.avx512.pternlog.d.256(<8 x i32> %0, <8 x i32> %1, <8 x i32> %2, i32 4)3533 %4 = bitcast <8 x i32> %3 to <4 x i64>3534 ret <4 x i64> %43535}3536 3537declare <8 x i32> @llvm.x86.avx512.pternlog.d.256(<8 x i32>, <8 x i32>, <8 x i32>, i32) #23538 3539define <4 x i64> @test_mm256_mask_ternarylogic_epi32(<4 x i64> %__A, i8 zeroext %__U, <4 x i64> %__B, <4 x i64> %__C) {3540; X86-LABEL: test_mm256_mask_ternarylogic_epi32:3541; X86: # %bb.0: # %entry3542; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3543; X86-NEXT: kmovw %eax, %k13544; X86-NEXT: vpternlogd {{.*#+}} ymm0 {%k1} = ymm1 & ~(ymm0 | ymm2)3545; X86-NEXT: retl3546;3547; X64-LABEL: test_mm256_mask_ternarylogic_epi32:3548; X64: # %bb.0: # %entry3549; X64-NEXT: kmovw %edi, %k13550; X64-NEXT: vpternlogd {{.*#+}} ymm0 {%k1} = ymm1 & ~(ymm0 | ymm2)3551; X64-NEXT: retq3552entry:3553 %0 = bitcast <4 x i64> %__A to <8 x i32>3554 %1 = bitcast <4 x i64> %__B to <8 x i32>3555 %2 = bitcast <4 x i64> %__C to <8 x i32>3556 %3 = tail call <8 x i32> @llvm.x86.avx512.pternlog.d.256(<8 x i32> %0, <8 x i32> %1, <8 x i32> %2, i32 4)3557 %4 = bitcast i8 %__U to <8 x i1>3558 %5 = select <8 x i1> %4, <8 x i32> %3, <8 x i32> %03559 %6 = bitcast <8 x i32> %5 to <4 x i64>3560 ret <4 x i64> %63561}3562 3563define <4 x i64> @test_mm256_maskz_ternarylogic_epi32(i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B, <4 x i64> %__C) {3564; X86-LABEL: test_mm256_maskz_ternarylogic_epi32:3565; X86: # %bb.0: # %entry3566; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3567; X86-NEXT: kmovw %eax, %k13568; X86-NEXT: vpternlogd {{.*#+}} ymm0 {%k1} {z} = ymm1 & ~(ymm0 | ymm2)3569; X86-NEXT: retl3570;3571; X64-LABEL: test_mm256_maskz_ternarylogic_epi32:3572; X64: # %bb.0: # %entry3573; X64-NEXT: kmovw %edi, %k13574; X64-NEXT: vpternlogd {{.*#+}} ymm0 {%k1} {z} = ymm1 & ~(ymm0 | ymm2)3575; X64-NEXT: retq3576entry:3577 %0 = bitcast <4 x i64> %__A to <8 x i32>3578 %1 = bitcast <4 x i64> %__B to <8 x i32>3579 %2 = bitcast <4 x i64> %__C to <8 x i32>3580 %3 = tail call <8 x i32> @llvm.x86.avx512.pternlog.d.256(<8 x i32> %0, <8 x i32> %1, <8 x i32> %2, i32 4)3581 %4 = bitcast i8 %__U to <8 x i1>3582 %5 = select <8 x i1> %4, <8 x i32> %3, <8 x i32> zeroinitializer3583 %6 = bitcast <8 x i32> %5 to <4 x i64>3584 ret <4 x i64> %63585}3586 3587define <2 x i64> @test_mm_ternarylogic_epi64(<2 x i64> %__A, <2 x i64> %__B, <2 x i64> %__C) {3588; CHECK-LABEL: test_mm_ternarylogic_epi64:3589; CHECK: # %bb.0: # %entry3590; CHECK-NEXT: vpternlogq {{.*#+}} xmm0 = xmm1 & ~(xmm0 | xmm2)3591; CHECK-NEXT: ret{{[l|q]}}3592entry:3593 %0 = tail call <2 x i64> @llvm.x86.avx512.pternlog.q.128(<2 x i64> %__A, <2 x i64> %__B, <2 x i64> %__C, i32 4)3594 ret <2 x i64> %03595}3596 3597declare <2 x i64> @llvm.x86.avx512.pternlog.q.128(<2 x i64>, <2 x i64>, <2 x i64>, i32) #23598 3599define <2 x i64> @test_mm_mask_ternarylogic_epi64(<2 x i64> %__A, i8 zeroext %__U, <2 x i64> %__B, <2 x i64> %__C) {3600; X86-LABEL: test_mm_mask_ternarylogic_epi64:3601; X86: # %bb.0: # %entry3602; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3603; X86-NEXT: kmovw %eax, %k13604; X86-NEXT: vpternlogq {{.*#+}} xmm0 {%k1} = xmm1 & ~(xmm0 | xmm2)3605; X86-NEXT: retl3606;3607; X64-LABEL: test_mm_mask_ternarylogic_epi64:3608; X64: # %bb.0: # %entry3609; X64-NEXT: kmovw %edi, %k13610; X64-NEXT: vpternlogq {{.*#+}} xmm0 {%k1} = xmm1 & ~(xmm0 | xmm2)3611; X64-NEXT: retq3612entry:3613 %0 = tail call <2 x i64> @llvm.x86.avx512.pternlog.q.128(<2 x i64> %__A, <2 x i64> %__B, <2 x i64> %__C, i32 4)3614 %1 = bitcast i8 %__U to <8 x i1>3615 %extract = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>3616 %2 = select <2 x i1> %extract, <2 x i64> %0, <2 x i64> %__A3617 ret <2 x i64> %23618}3619 3620define <2 x i64> @test_mm_maskz_ternarylogic_epi64(i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B, <2 x i64> %__C) {3621; X86-LABEL: test_mm_maskz_ternarylogic_epi64:3622; X86: # %bb.0: # %entry3623; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3624; X86-NEXT: kmovw %eax, %k13625; X86-NEXT: vpternlogq {{.*#+}} xmm0 {%k1} {z} = xmm1 & ~(xmm0 | xmm2)3626; X86-NEXT: retl3627;3628; X64-LABEL: test_mm_maskz_ternarylogic_epi64:3629; X64: # %bb.0: # %entry3630; X64-NEXT: kmovw %edi, %k13631; X64-NEXT: vpternlogq {{.*#+}} xmm0 {%k1} {z} = xmm1 & ~(xmm0 | xmm2)3632; X64-NEXT: retq3633entry:3634 %0 = tail call <2 x i64> @llvm.x86.avx512.pternlog.q.128(<2 x i64> %__A, <2 x i64> %__B, <2 x i64> %__C, i32 4)3635 %1 = bitcast i8 %__U to <8 x i1>3636 %extract = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>3637 %2 = select <2 x i1> %extract, <2 x i64> %0, <2 x i64> zeroinitializer3638 ret <2 x i64> %23639}3640 3641define <4 x i64> @test_mm256_ternarylogic_epi64(<4 x i64> %__A, <4 x i64> %__B, <4 x i64> %__C) {3642; CHECK-LABEL: test_mm256_ternarylogic_epi64:3643; CHECK: # %bb.0: # %entry3644; CHECK-NEXT: vpternlogq {{.*#+}} ymm0 = ymm1 & ~(ymm0 | ymm2)3645; CHECK-NEXT: ret{{[l|q]}}3646entry:3647 %0 = tail call <4 x i64> @llvm.x86.avx512.pternlog.q.256(<4 x i64> %__A, <4 x i64> %__B, <4 x i64> %__C, i32 4)3648 ret <4 x i64> %03649}3650 3651declare <4 x i64> @llvm.x86.avx512.pternlog.q.256(<4 x i64>, <4 x i64>, <4 x i64>, i32) #23652 3653define <4 x i64> @test_mm256_mask_ternarylogic_epi64(<4 x i64> %__A, i8 zeroext %__U, <4 x i64> %__B, <4 x i64> %__C) {3654; X86-LABEL: test_mm256_mask_ternarylogic_epi64:3655; X86: # %bb.0: # %entry3656; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3657; X86-NEXT: kmovw %eax, %k13658; X86-NEXT: vpternlogq {{.*#+}} ymm0 {%k1} = ymm1 & ~(ymm0 | ymm2)3659; X86-NEXT: retl3660;3661; X64-LABEL: test_mm256_mask_ternarylogic_epi64:3662; X64: # %bb.0: # %entry3663; X64-NEXT: kmovw %edi, %k13664; X64-NEXT: vpternlogq {{.*#+}} ymm0 {%k1} = ymm1 & ~(ymm0 | ymm2)3665; X64-NEXT: retq3666entry:3667 %0 = tail call <4 x i64> @llvm.x86.avx512.pternlog.q.256(<4 x i64> %__A, <4 x i64> %__B, <4 x i64> %__C, i32 4)3668 %1 = bitcast i8 %__U to <8 x i1>3669 %extract = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3670 %2 = select <4 x i1> %extract, <4 x i64> %0, <4 x i64> %__A3671 ret <4 x i64> %23672}3673 3674define <4 x i64> @test_mm256_maskz_ternarylogic_epi64(i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B, <4 x i64> %__C) {3675; X86-LABEL: test_mm256_maskz_ternarylogic_epi64:3676; X86: # %bb.0: # %entry3677; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3678; X86-NEXT: kmovw %eax, %k13679; X86-NEXT: vpternlogq {{.*#+}} ymm0 {%k1} {z} = ymm1 & ~(ymm0 | ymm2)3680; X86-NEXT: retl3681;3682; X64-LABEL: test_mm256_maskz_ternarylogic_epi64:3683; X64: # %bb.0: # %entry3684; X64-NEXT: kmovw %edi, %k13685; X64-NEXT: vpternlogq {{.*#+}} ymm0 {%k1} {z} = ymm1 & ~(ymm0 | ymm2)3686; X64-NEXT: retq3687entry:3688 %0 = tail call <4 x i64> @llvm.x86.avx512.pternlog.q.256(<4 x i64> %__A, <4 x i64> %__B, <4 x i64> %__C, i32 4)3689 %1 = bitcast i8 %__U to <8 x i1>3690 %extract = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3691 %2 = select <4 x i1> %extract, <4 x i64> %0, <4 x i64> zeroinitializer3692 ret <4 x i64> %23693}3694 3695define <2 x i64> @test_mm_mask2_permutex2var_epi32(<2 x i64> %__A, <2 x i64> %__I, i8 zeroext %__U, <2 x i64> %__B) {3696; X86-LABEL: test_mm_mask2_permutex2var_epi32:3697; X86: # %bb.0: # %entry3698; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3699; X86-NEXT: kmovw %eax, %k13700; X86-NEXT: vpermi2d %xmm2, %xmm0, %xmm1 {%k1}3701; X86-NEXT: vmovdqa %xmm1, %xmm03702; X86-NEXT: retl3703;3704; X64-LABEL: test_mm_mask2_permutex2var_epi32:3705; X64: # %bb.0: # %entry3706; X64-NEXT: kmovw %edi, %k13707; X64-NEXT: vpermi2d %xmm2, %xmm0, %xmm1 {%k1}3708; X64-NEXT: vmovdqa %xmm1, %xmm03709; X64-NEXT: retq3710entry:3711 %0 = bitcast <2 x i64> %__A to <4 x i32>3712 %1 = bitcast <2 x i64> %__I to <4 x i32>3713 %2 = bitcast <2 x i64> %__B to <4 x i32>3714 %3 = tail call <4 x i32> @llvm.x86.avx512.vpermi2var.d.128(<4 x i32> %0, <4 x i32> %1, <4 x i32> %2)3715 %4 = bitcast i8 %__U to <8 x i1>3716 %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3717 %5 = select <4 x i1> %extract.i, <4 x i32> %3, <4 x i32> %13718 %6 = bitcast <4 x i32> %5 to <2 x i64>3719 ret <2 x i64> %63720}3721 3722define <4 x i64> @test_mm256_mask2_permutex2var_epi32(<4 x i64> %__A, <4 x i64> %__I, i8 zeroext %__U, <4 x i64> %__B) {3723; X86-LABEL: test_mm256_mask2_permutex2var_epi32:3724; X86: # %bb.0: # %entry3725; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3726; X86-NEXT: kmovw %eax, %k13727; X86-NEXT: vpermi2d %ymm2, %ymm0, %ymm1 {%k1}3728; X86-NEXT: vmovdqa %ymm1, %ymm03729; X86-NEXT: retl3730;3731; X64-LABEL: test_mm256_mask2_permutex2var_epi32:3732; X64: # %bb.0: # %entry3733; X64-NEXT: kmovw %edi, %k13734; X64-NEXT: vpermi2d %ymm2, %ymm0, %ymm1 {%k1}3735; X64-NEXT: vmovdqa %ymm1, %ymm03736; X64-NEXT: retq3737entry:3738 %0 = bitcast <4 x i64> %__A to <8 x i32>3739 %1 = bitcast <4 x i64> %__I to <8 x i32>3740 %2 = bitcast <4 x i64> %__B to <8 x i32>3741 %3 = tail call <8 x i32> @llvm.x86.avx512.vpermi2var.d.256(<8 x i32> %0, <8 x i32> %1, <8 x i32> %2)3742 %4 = bitcast i8 %__U to <8 x i1>3743 %5 = select <8 x i1> %4, <8 x i32> %3, <8 x i32> %13744 %6 = bitcast <8 x i32> %5 to <4 x i64>3745 ret <4 x i64> %63746}3747 3748define <2 x double> @test_mm_mask2_permutex2var_pd(<2 x double> %__A, <2 x i64> %__I, i8 zeroext %__U, <2 x double> %__B) {3749; X86-LABEL: test_mm_mask2_permutex2var_pd:3750; X86: # %bb.0: # %entry3751; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3752; X86-NEXT: kmovw %eax, %k13753; X86-NEXT: vpermi2pd %xmm2, %xmm0, %xmm1 {%k1}3754; X86-NEXT: vmovapd %xmm1, %xmm03755; X86-NEXT: retl3756;3757; X64-LABEL: test_mm_mask2_permutex2var_pd:3758; X64: # %bb.0: # %entry3759; X64-NEXT: kmovw %edi, %k13760; X64-NEXT: vpermi2pd %xmm2, %xmm0, %xmm1 {%k1}3761; X64-NEXT: vmovapd %xmm1, %xmm03762; X64-NEXT: retq3763entry:3764 %0 = tail call <2 x double> @llvm.x86.avx512.vpermi2var.pd.128(<2 x double> %__A, <2 x i64> %__I, <2 x double> %__B)3765 %1 = bitcast <2 x i64> %__I to <2 x double>3766 %2 = bitcast i8 %__U to <8 x i1>3767 %extract.i = shufflevector <8 x i1> %2, <8 x i1> undef, <2 x i32> <i32 0, i32 1>3768 %3 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> %13769 ret <2 x double> %33770}3771 3772define <4 x double> @test_mm256_mask2_permutex2var_pd(<4 x double> %__A, <4 x i64> %__I, i8 zeroext %__U, <4 x double> %__B) {3773; X86-LABEL: test_mm256_mask2_permutex2var_pd:3774; X86: # %bb.0: # %entry3775; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3776; X86-NEXT: kmovw %eax, %k13777; X86-NEXT: vpermi2pd %ymm2, %ymm0, %ymm1 {%k1}3778; X86-NEXT: vmovapd %ymm1, %ymm03779; X86-NEXT: retl3780;3781; X64-LABEL: test_mm256_mask2_permutex2var_pd:3782; X64: # %bb.0: # %entry3783; X64-NEXT: kmovw %edi, %k13784; X64-NEXT: vpermi2pd %ymm2, %ymm0, %ymm1 {%k1}3785; X64-NEXT: vmovapd %ymm1, %ymm03786; X64-NEXT: retq3787entry:3788 %0 = tail call <4 x double> @llvm.x86.avx512.vpermi2var.pd.256(<4 x double> %__A, <4 x i64> %__I, <4 x double> %__B)3789 %1 = bitcast <4 x i64> %__I to <4 x double>3790 %2 = bitcast i8 %__U to <8 x i1>3791 %extract.i = shufflevector <8 x i1> %2, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3792 %3 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> %13793 ret <4 x double> %33794}3795 3796define <4 x float> @test_mm_mask2_permutex2var_ps(<4 x float> %__A, <2 x i64> %__I, i8 zeroext %__U, <4 x float> %__B) {3797; X86-LABEL: test_mm_mask2_permutex2var_ps:3798; X86: # %bb.0: # %entry3799; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3800; X86-NEXT: kmovw %eax, %k13801; X86-NEXT: vpermi2ps %xmm2, %xmm0, %xmm1 {%k1}3802; X86-NEXT: vmovaps %xmm1, %xmm03803; X86-NEXT: retl3804;3805; X64-LABEL: test_mm_mask2_permutex2var_ps:3806; X64: # %bb.0: # %entry3807; X64-NEXT: kmovw %edi, %k13808; X64-NEXT: vpermi2ps %xmm2, %xmm0, %xmm1 {%k1}3809; X64-NEXT: vmovaps %xmm1, %xmm03810; X64-NEXT: retq3811entry:3812 %0 = bitcast <2 x i64> %__I to <4 x i32>3813 %1 = tail call <4 x float> @llvm.x86.avx512.vpermi2var.ps.128(<4 x float> %__A, <4 x i32> %0, <4 x float> %__B)3814 %2 = bitcast <2 x i64> %__I to <4 x float>3815 %3 = bitcast i8 %__U to <8 x i1>3816 %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3817 %4 = select <4 x i1> %extract.i, <4 x float> %1, <4 x float> %23818 ret <4 x float> %43819}3820 3821define <8 x float> @test_mm256_mask2_permutex2var_ps(<8 x float> %__A, <4 x i64> %__I, i8 zeroext %__U, <8 x float> %__B) {3822; X86-LABEL: test_mm256_mask2_permutex2var_ps:3823; X86: # %bb.0: # %entry3824; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3825; X86-NEXT: kmovw %eax, %k13826; X86-NEXT: vpermi2ps %ymm2, %ymm0, %ymm1 {%k1}3827; X86-NEXT: vmovaps %ymm1, %ymm03828; X86-NEXT: retl3829;3830; X64-LABEL: test_mm256_mask2_permutex2var_ps:3831; X64: # %bb.0: # %entry3832; X64-NEXT: kmovw %edi, %k13833; X64-NEXT: vpermi2ps %ymm2, %ymm0, %ymm1 {%k1}3834; X64-NEXT: vmovaps %ymm1, %ymm03835; X64-NEXT: retq3836entry:3837 %0 = bitcast <4 x i64> %__I to <8 x i32>3838 %1 = tail call <8 x float> @llvm.x86.avx512.vpermi2var.ps.256(<8 x float> %__A, <8 x i32> %0, <8 x float> %__B)3839 %2 = bitcast <4 x i64> %__I to <8 x float>3840 %3 = bitcast i8 %__U to <8 x i1>3841 %4 = select <8 x i1> %3, <8 x float> %1, <8 x float> %23842 ret <8 x float> %43843}3844 3845define <2 x i64> @test_mm_mask2_permutex2var_epi64(<2 x i64> %__A, <2 x i64> %__I, i8 zeroext %__U, <2 x i64> %__B) {3846; X86-LABEL: test_mm_mask2_permutex2var_epi64:3847; X86: # %bb.0: # %entry3848; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3849; X86-NEXT: kmovw %eax, %k13850; X86-NEXT: vpermi2q %xmm2, %xmm0, %xmm1 {%k1}3851; X86-NEXT: vmovdqa %xmm1, %xmm03852; X86-NEXT: retl3853;3854; X64-LABEL: test_mm_mask2_permutex2var_epi64:3855; X64: # %bb.0: # %entry3856; X64-NEXT: kmovw %edi, %k13857; X64-NEXT: vpermi2q %xmm2, %xmm0, %xmm1 {%k1}3858; X64-NEXT: vmovdqa %xmm1, %xmm03859; X64-NEXT: retq3860entry:3861 %0 = tail call <2 x i64> @llvm.x86.avx512.vpermi2var.q.128(<2 x i64> %__A, <2 x i64> %__I, <2 x i64> %__B)3862 %1 = bitcast i8 %__U to <8 x i1>3863 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>3864 %2 = select <2 x i1> %extract.i, <2 x i64> %0, <2 x i64> %__I3865 ret <2 x i64> %23866}3867 3868define <4 x i64> @test_mm256_mask2_permutex2var_epi64(<4 x i64> %__A, <4 x i64> %__I, i8 zeroext %__U, <4 x i64> %__B) {3869; X86-LABEL: test_mm256_mask2_permutex2var_epi64:3870; X86: # %bb.0: # %entry3871; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3872; X86-NEXT: kmovw %eax, %k13873; X86-NEXT: vpermi2q %ymm2, %ymm0, %ymm1 {%k1}3874; X86-NEXT: vmovdqa %ymm1, %ymm03875; X86-NEXT: retl3876;3877; X64-LABEL: test_mm256_mask2_permutex2var_epi64:3878; X64: # %bb.0: # %entry3879; X64-NEXT: kmovw %edi, %k13880; X64-NEXT: vpermi2q %ymm2, %ymm0, %ymm1 {%k1}3881; X64-NEXT: vmovdqa %ymm1, %ymm03882; X64-NEXT: retq3883entry:3884 %0 = tail call <4 x i64> @llvm.x86.avx512.vpermi2var.q.256(<4 x i64> %__A, <4 x i64> %__I, <4 x i64> %__B)3885 %1 = bitcast i8 %__U to <8 x i1>3886 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3887 %2 = select <4 x i1> %extract.i, <4 x i64> %0, <4 x i64> %__I3888 ret <4 x i64> %23889}3890 3891define <2 x i64> @test_mm_permutex2var_epi32(<2 x i64> %__A, <2 x i64> %__I, <2 x i64> %__B) {3892; CHECK-LABEL: test_mm_permutex2var_epi32:3893; CHECK: # %bb.0: # %entry3894; CHECK-NEXT: vpermt2d %xmm2, %xmm1, %xmm03895; CHECK-NEXT: ret{{[l|q]}}3896entry:3897 %0 = bitcast <2 x i64> %__A to <4 x i32>3898 %1 = bitcast <2 x i64> %__I to <4 x i32>3899 %2 = bitcast <2 x i64> %__B to <4 x i32>3900 %3 = tail call <4 x i32> @llvm.x86.avx512.vpermi2var.d.128(<4 x i32> %0, <4 x i32> %1, <4 x i32> %2)3901 %4 = bitcast <4 x i32> %3 to <2 x i64>3902 ret <2 x i64> %43903}3904 3905define <2 x i64> @test_mm_mask_permutex2var_epi32(<2 x i64> %__A, i8 zeroext %__U, <2 x i64> %__I, <2 x i64> %__B) {3906; X86-LABEL: test_mm_mask_permutex2var_epi32:3907; X86: # %bb.0: # %entry3908; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3909; X86-NEXT: kmovw %eax, %k13910; X86-NEXT: vpermt2d %xmm2, %xmm1, %xmm0 {%k1}3911; X86-NEXT: retl3912;3913; X64-LABEL: test_mm_mask_permutex2var_epi32:3914; X64: # %bb.0: # %entry3915; X64-NEXT: kmovw %edi, %k13916; X64-NEXT: vpermt2d %xmm2, %xmm1, %xmm0 {%k1}3917; X64-NEXT: retq3918entry:3919 %0 = bitcast <2 x i64> %__A to <4 x i32>3920 %1 = bitcast <2 x i64> %__I to <4 x i32>3921 %2 = bitcast <2 x i64> %__B to <4 x i32>3922 %3 = tail call <4 x i32> @llvm.x86.avx512.vpermi2var.d.128(<4 x i32> %0, <4 x i32> %1, <4 x i32> %2)3923 %4 = bitcast i8 %__U to <8 x i1>3924 %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3925 %5 = select <4 x i1> %extract.i, <4 x i32> %3, <4 x i32> %03926 %6 = bitcast <4 x i32> %5 to <2 x i64>3927 ret <2 x i64> %63928}3929 3930define <2 x i64> @test_mm_maskz_permutex2var_epi32(i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__I, <2 x i64> %__B) {3931; X86-LABEL: test_mm_maskz_permutex2var_epi32:3932; X86: # %bb.0: # %entry3933; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3934; X86-NEXT: kmovw %eax, %k13935; X86-NEXT: vpermt2d %xmm2, %xmm1, %xmm0 {%k1} {z}3936; X86-NEXT: retl3937;3938; X64-LABEL: test_mm_maskz_permutex2var_epi32:3939; X64: # %bb.0: # %entry3940; X64-NEXT: kmovw %edi, %k13941; X64-NEXT: vpermt2d %xmm2, %xmm1, %xmm0 {%k1} {z}3942; X64-NEXT: retq3943entry:3944 %0 = bitcast <2 x i64> %__A to <4 x i32>3945 %1 = bitcast <2 x i64> %__I to <4 x i32>3946 %2 = bitcast <2 x i64> %__B to <4 x i32>3947 %3 = tail call <4 x i32> @llvm.x86.avx512.vpermi2var.d.128(<4 x i32> %0, <4 x i32> %1, <4 x i32> %2)3948 %4 = bitcast i8 %__U to <8 x i1>3949 %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>3950 %5 = select <4 x i1> %extract.i, <4 x i32> %3, <4 x i32> zeroinitializer3951 %6 = bitcast <4 x i32> %5 to <2 x i64>3952 ret <2 x i64> %63953}3954 3955define <4 x i64> @test_mm256_permutex2var_epi32(<4 x i64> %__A, <4 x i64> %__I, <4 x i64> %__B) {3956; CHECK-LABEL: test_mm256_permutex2var_epi32:3957; CHECK: # %bb.0: # %entry3958; CHECK-NEXT: vpermt2d %ymm2, %ymm1, %ymm03959; CHECK-NEXT: ret{{[l|q]}}3960entry:3961 %0 = bitcast <4 x i64> %__A to <8 x i32>3962 %1 = bitcast <4 x i64> %__I to <8 x i32>3963 %2 = bitcast <4 x i64> %__B to <8 x i32>3964 %3 = tail call <8 x i32> @llvm.x86.avx512.vpermi2var.d.256(<8 x i32> %0, <8 x i32> %1, <8 x i32> %2)3965 %4 = bitcast <8 x i32> %3 to <4 x i64>3966 ret <4 x i64> %43967}3968 3969define <4 x i64> @test_mm256_mask_permutex2var_epi32(<4 x i64> %__A, i8 zeroext %__U, <4 x i64> %__I, <4 x i64> %__B) {3970; X86-LABEL: test_mm256_mask_permutex2var_epi32:3971; X86: # %bb.0: # %entry3972; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3973; X86-NEXT: kmovw %eax, %k13974; X86-NEXT: vpermt2d %ymm2, %ymm1, %ymm0 {%k1}3975; X86-NEXT: retl3976;3977; X64-LABEL: test_mm256_mask_permutex2var_epi32:3978; X64: # %bb.0: # %entry3979; X64-NEXT: kmovw %edi, %k13980; X64-NEXT: vpermt2d %ymm2, %ymm1, %ymm0 {%k1}3981; X64-NEXT: retq3982entry:3983 %0 = bitcast <4 x i64> %__A to <8 x i32>3984 %1 = bitcast <4 x i64> %__I to <8 x i32>3985 %2 = bitcast <4 x i64> %__B to <8 x i32>3986 %3 = tail call <8 x i32> @llvm.x86.avx512.vpermi2var.d.256(<8 x i32> %0, <8 x i32> %1, <8 x i32> %2)3987 %4 = bitcast i8 %__U to <8 x i1>3988 %5 = select <8 x i1> %4, <8 x i32> %3, <8 x i32> %03989 %6 = bitcast <8 x i32> %5 to <4 x i64>3990 ret <4 x i64> %63991}3992 3993define <4 x i64> @test_mm256_maskz_permutex2var_epi32(i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__I, <4 x i64> %__B) {3994; X86-LABEL: test_mm256_maskz_permutex2var_epi32:3995; X86: # %bb.0: # %entry3996; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax3997; X86-NEXT: kmovw %eax, %k13998; X86-NEXT: vpermt2d %ymm2, %ymm1, %ymm0 {%k1} {z}3999; X86-NEXT: retl4000;4001; X64-LABEL: test_mm256_maskz_permutex2var_epi32:4002; X64: # %bb.0: # %entry4003; X64-NEXT: kmovw %edi, %k14004; X64-NEXT: vpermt2d %ymm2, %ymm1, %ymm0 {%k1} {z}4005; X64-NEXT: retq4006entry:4007 %0 = bitcast <4 x i64> %__A to <8 x i32>4008 %1 = bitcast <4 x i64> %__I to <8 x i32>4009 %2 = bitcast <4 x i64> %__B to <8 x i32>4010 %3 = tail call <8 x i32> @llvm.x86.avx512.vpermi2var.d.256(<8 x i32> %0, <8 x i32> %1, <8 x i32> %2)4011 %4 = bitcast i8 %__U to <8 x i1>4012 %5 = select <8 x i1> %4, <8 x i32> %3, <8 x i32> zeroinitializer4013 %6 = bitcast <8 x i32> %5 to <4 x i64>4014 ret <4 x i64> %64015}4016 4017define <2 x double> @test_mm_permutex2var_pd(<2 x double> %__A, <2 x i64> %__I, <2 x double> %__B) {4018; CHECK-LABEL: test_mm_permutex2var_pd:4019; CHECK: # %bb.0: # %entry4020; CHECK-NEXT: vpermt2pd %xmm2, %xmm1, %xmm04021; CHECK-NEXT: ret{{[l|q]}}4022entry:4023 %0 = tail call <2 x double> @llvm.x86.avx512.vpermi2var.pd.128(<2 x double> %__A, <2 x i64> %__I, <2 x double> %__B)4024 ret <2 x double> %04025}4026 4027define <2 x double> @test_mm_mask_permutex2var_pd(<2 x double> %__A, i8 zeroext %__U, <2 x i64> %__I, <2 x double> %__B) {4028; X86-LABEL: test_mm_mask_permutex2var_pd:4029; X86: # %bb.0: # %entry4030; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4031; X86-NEXT: kmovw %eax, %k14032; X86-NEXT: vpermt2pd %xmm2, %xmm1, %xmm0 {%k1}4033; X86-NEXT: retl4034;4035; X64-LABEL: test_mm_mask_permutex2var_pd:4036; X64: # %bb.0: # %entry4037; X64-NEXT: kmovw %edi, %k14038; X64-NEXT: vpermt2pd %xmm2, %xmm1, %xmm0 {%k1}4039; X64-NEXT: retq4040entry:4041 %0 = tail call <2 x double> @llvm.x86.avx512.vpermi2var.pd.128(<2 x double> %__A, <2 x i64> %__I, <2 x double> %__B)4042 %1 = bitcast i8 %__U to <8 x i1>4043 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>4044 %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> %__A4045 ret <2 x double> %24046}4047 4048define <2 x double> @test_mm_maskz_permutex2var_pd(i8 zeroext %__U, <2 x double> %__A, <2 x i64> %__I, <2 x double> %__B) {4049; X86-LABEL: test_mm_maskz_permutex2var_pd:4050; X86: # %bb.0: # %entry4051; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4052; X86-NEXT: kmovw %eax, %k14053; X86-NEXT: vpermt2pd %xmm2, %xmm1, %xmm0 {%k1} {z}4054; X86-NEXT: retl4055;4056; X64-LABEL: test_mm_maskz_permutex2var_pd:4057; X64: # %bb.0: # %entry4058; X64-NEXT: kmovw %edi, %k14059; X64-NEXT: vpermt2pd %xmm2, %xmm1, %xmm0 {%k1} {z}4060; X64-NEXT: retq4061entry:4062 %0 = tail call <2 x double> @llvm.x86.avx512.vpermi2var.pd.128(<2 x double> %__A, <2 x i64> %__I, <2 x double> %__B)4063 %1 = bitcast i8 %__U to <8 x i1>4064 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>4065 %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> zeroinitializer4066 ret <2 x double> %24067}4068 4069define <4 x double> @test_mm256_permutex2var_pd(<4 x double> %__A, <4 x i64> %__I, <4 x double> %__B) {4070; CHECK-LABEL: test_mm256_permutex2var_pd:4071; CHECK: # %bb.0: # %entry4072; CHECK-NEXT: vpermt2pd %ymm2, %ymm1, %ymm04073; CHECK-NEXT: ret{{[l|q]}}4074entry:4075 %0 = tail call <4 x double> @llvm.x86.avx512.vpermi2var.pd.256(<4 x double> %__A, <4 x i64> %__I, <4 x double> %__B)4076 ret <4 x double> %04077}4078 4079define <4 x double> @test_mm256_mask_permutex2var_pd(<4 x double> %__A, i8 zeroext %__U, <4 x i64> %__I, <4 x double> %__B) {4080; X86-LABEL: test_mm256_mask_permutex2var_pd:4081; X86: # %bb.0: # %entry4082; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4083; X86-NEXT: kmovw %eax, %k14084; X86-NEXT: vpermt2pd %ymm2, %ymm1, %ymm0 {%k1}4085; X86-NEXT: retl4086;4087; X64-LABEL: test_mm256_mask_permutex2var_pd:4088; X64: # %bb.0: # %entry4089; X64-NEXT: kmovw %edi, %k14090; X64-NEXT: vpermt2pd %ymm2, %ymm1, %ymm0 {%k1}4091; X64-NEXT: retq4092entry:4093 %0 = tail call <4 x double> @llvm.x86.avx512.vpermi2var.pd.256(<4 x double> %__A, <4 x i64> %__I, <4 x double> %__B)4094 %1 = bitcast i8 %__U to <8 x i1>4095 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4096 %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> %__A4097 ret <4 x double> %24098}4099 4100define <4 x double> @test_mm256_maskz_permutex2var_pd(i8 zeroext %__U, <4 x double> %__A, <4 x i64> %__I, <4 x double> %__B) {4101; X86-LABEL: test_mm256_maskz_permutex2var_pd:4102; X86: # %bb.0: # %entry4103; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4104; X86-NEXT: kmovw %eax, %k14105; X86-NEXT: vpermt2pd %ymm2, %ymm1, %ymm0 {%k1} {z}4106; X86-NEXT: retl4107;4108; X64-LABEL: test_mm256_maskz_permutex2var_pd:4109; X64: # %bb.0: # %entry4110; X64-NEXT: kmovw %edi, %k14111; X64-NEXT: vpermt2pd %ymm2, %ymm1, %ymm0 {%k1} {z}4112; X64-NEXT: retq4113entry:4114 %0 = tail call <4 x double> @llvm.x86.avx512.vpermi2var.pd.256(<4 x double> %__A, <4 x i64> %__I, <4 x double> %__B)4115 %1 = bitcast i8 %__U to <8 x i1>4116 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4117 %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> zeroinitializer4118 ret <4 x double> %24119}4120 4121define <4 x float> @test_mm_permutex2var_ps(<4 x float> %__A, <2 x i64> %__I, <4 x float> %__B) {4122; CHECK-LABEL: test_mm_permutex2var_ps:4123; CHECK: # %bb.0: # %entry4124; CHECK-NEXT: vpermt2ps %xmm2, %xmm1, %xmm04125; CHECK-NEXT: ret{{[l|q]}}4126entry:4127 %0 = bitcast <2 x i64> %__I to <4 x i32>4128 %1 = tail call <4 x float> @llvm.x86.avx512.vpermi2var.ps.128(<4 x float> %__A, <4 x i32> %0, <4 x float> %__B)4129 ret <4 x float> %14130}4131 4132define <4 x float> @test_mm_mask_permutex2var_ps(<4 x float> %__A, i8 zeroext %__U, <2 x i64> %__I, <4 x float> %__B) {4133; X86-LABEL: test_mm_mask_permutex2var_ps:4134; X86: # %bb.0: # %entry4135; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4136; X86-NEXT: kmovw %eax, %k14137; X86-NEXT: vpermt2ps %xmm2, %xmm1, %xmm0 {%k1}4138; X86-NEXT: retl4139;4140; X64-LABEL: test_mm_mask_permutex2var_ps:4141; X64: # %bb.0: # %entry4142; X64-NEXT: kmovw %edi, %k14143; X64-NEXT: vpermt2ps %xmm2, %xmm1, %xmm0 {%k1}4144; X64-NEXT: retq4145entry:4146 %0 = bitcast <2 x i64> %__I to <4 x i32>4147 %1 = tail call <4 x float> @llvm.x86.avx512.vpermi2var.ps.128(<4 x float> %__A, <4 x i32> %0, <4 x float> %__B)4148 %2 = bitcast i8 %__U to <8 x i1>4149 %extract.i = shufflevector <8 x i1> %2, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4150 %3 = select <4 x i1> %extract.i, <4 x float> %1, <4 x float> %__A4151 ret <4 x float> %34152}4153 4154define <4 x float> @test_mm_maskz_permutex2var_ps(i8 zeroext %__U, <4 x float> %__A, <2 x i64> %__I, <4 x float> %__B) {4155; X86-LABEL: test_mm_maskz_permutex2var_ps:4156; X86: # %bb.0: # %entry4157; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4158; X86-NEXT: kmovw %eax, %k14159; X86-NEXT: vpermt2ps %xmm2, %xmm1, %xmm0 {%k1} {z}4160; X86-NEXT: retl4161;4162; X64-LABEL: test_mm_maskz_permutex2var_ps:4163; X64: # %bb.0: # %entry4164; X64-NEXT: kmovw %edi, %k14165; X64-NEXT: vpermt2ps %xmm2, %xmm1, %xmm0 {%k1} {z}4166; X64-NEXT: retq4167entry:4168 %0 = bitcast <2 x i64> %__I to <4 x i32>4169 %1 = tail call <4 x float> @llvm.x86.avx512.vpermi2var.ps.128(<4 x float> %__A, <4 x i32> %0, <4 x float> %__B)4170 %2 = bitcast i8 %__U to <8 x i1>4171 %extract.i = shufflevector <8 x i1> %2, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4172 %3 = select <4 x i1> %extract.i, <4 x float> %1, <4 x float> zeroinitializer4173 ret <4 x float> %34174}4175 4176define <8 x float> @test_mm256_permutex2var_ps(<8 x float> %__A, <4 x i64> %__I, <8 x float> %__B) {4177; CHECK-LABEL: test_mm256_permutex2var_ps:4178; CHECK: # %bb.0: # %entry4179; CHECK-NEXT: vpermt2ps %ymm2, %ymm1, %ymm04180; CHECK-NEXT: ret{{[l|q]}}4181entry:4182 %0 = bitcast <4 x i64> %__I to <8 x i32>4183 %1 = tail call <8 x float> @llvm.x86.avx512.vpermi2var.ps.256(<8 x float> %__A, <8 x i32> %0, <8 x float> %__B)4184 ret <8 x float> %14185}4186 4187define <8 x float> @test_mm256_mask_permutex2var_ps(<8 x float> %__A, i8 zeroext %__U, <4 x i64> %__I, <8 x float> %__B) {4188; X86-LABEL: test_mm256_mask_permutex2var_ps:4189; X86: # %bb.0: # %entry4190; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4191; X86-NEXT: kmovw %eax, %k14192; X86-NEXT: vpermt2ps %ymm2, %ymm1, %ymm0 {%k1}4193; X86-NEXT: retl4194;4195; X64-LABEL: test_mm256_mask_permutex2var_ps:4196; X64: # %bb.0: # %entry4197; X64-NEXT: kmovw %edi, %k14198; X64-NEXT: vpermt2ps %ymm2, %ymm1, %ymm0 {%k1}4199; X64-NEXT: retq4200entry:4201 %0 = bitcast <4 x i64> %__I to <8 x i32>4202 %1 = tail call <8 x float> @llvm.x86.avx512.vpermi2var.ps.256(<8 x float> %__A, <8 x i32> %0, <8 x float> %__B)4203 %2 = bitcast i8 %__U to <8 x i1>4204 %3 = select <8 x i1> %2, <8 x float> %1, <8 x float> %__A4205 ret <8 x float> %34206}4207 4208define <8 x float> @test_mm256_maskz_permutex2var_ps(i8 zeroext %__U, <8 x float> %__A, <4 x i64> %__I, <8 x float> %__B) {4209; X86-LABEL: test_mm256_maskz_permutex2var_ps:4210; X86: # %bb.0: # %entry4211; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4212; X86-NEXT: kmovw %eax, %k14213; X86-NEXT: vpermt2ps %ymm2, %ymm1, %ymm0 {%k1} {z}4214; X86-NEXT: retl4215;4216; X64-LABEL: test_mm256_maskz_permutex2var_ps:4217; X64: # %bb.0: # %entry4218; X64-NEXT: kmovw %edi, %k14219; X64-NEXT: vpermt2ps %ymm2, %ymm1, %ymm0 {%k1} {z}4220; X64-NEXT: retq4221entry:4222 %0 = bitcast <4 x i64> %__I to <8 x i32>4223 %1 = tail call <8 x float> @llvm.x86.avx512.vpermi2var.ps.256(<8 x float> %__A, <8 x i32> %0, <8 x float> %__B)4224 %2 = bitcast i8 %__U to <8 x i1>4225 %3 = select <8 x i1> %2, <8 x float> %1, <8 x float> zeroinitializer4226 ret <8 x float> %34227}4228 4229define <2 x i64> @test_mm_permutex2var_epi64(<2 x i64> %__A, <2 x i64> %__I, <2 x i64> %__B) {4230; CHECK-LABEL: test_mm_permutex2var_epi64:4231; CHECK: # %bb.0: # %entry4232; CHECK-NEXT: vpermt2q %xmm2, %xmm1, %xmm04233; CHECK-NEXT: ret{{[l|q]}}4234entry:4235 %0 = tail call <2 x i64> @llvm.x86.avx512.vpermi2var.q.128(<2 x i64> %__A, <2 x i64> %__I, <2 x i64> %__B)4236 ret <2 x i64> %04237}4238 4239define <2 x i64> @test_mm_mask_permutex2var_epi64(<2 x i64> %__A, i8 zeroext %__U, <2 x i64> %__I, <2 x i64> %__B) {4240; X86-LABEL: test_mm_mask_permutex2var_epi64:4241; X86: # %bb.0: # %entry4242; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4243; X86-NEXT: kmovw %eax, %k14244; X86-NEXT: vpermt2q %xmm2, %xmm1, %xmm0 {%k1}4245; X86-NEXT: retl4246;4247; X64-LABEL: test_mm_mask_permutex2var_epi64:4248; X64: # %bb.0: # %entry4249; X64-NEXT: kmovw %edi, %k14250; X64-NEXT: vpermt2q %xmm2, %xmm1, %xmm0 {%k1}4251; X64-NEXT: retq4252entry:4253 %0 = tail call <2 x i64> @llvm.x86.avx512.vpermi2var.q.128(<2 x i64> %__A, <2 x i64> %__I, <2 x i64> %__B)4254 %1 = bitcast i8 %__U to <8 x i1>4255 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>4256 %2 = select <2 x i1> %extract.i, <2 x i64> %0, <2 x i64> %__A4257 ret <2 x i64> %24258}4259 4260define <2 x i64> @test_mm_maskz_permutex2var_epi64(i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__I, <2 x i64> %__B) {4261; X86-LABEL: test_mm_maskz_permutex2var_epi64:4262; X86: # %bb.0: # %entry4263; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4264; X86-NEXT: kmovw %eax, %k14265; X86-NEXT: vpermt2q %xmm2, %xmm1, %xmm0 {%k1} {z}4266; X86-NEXT: retl4267;4268; X64-LABEL: test_mm_maskz_permutex2var_epi64:4269; X64: # %bb.0: # %entry4270; X64-NEXT: kmovw %edi, %k14271; X64-NEXT: vpermt2q %xmm2, %xmm1, %xmm0 {%k1} {z}4272; X64-NEXT: retq4273entry:4274 %0 = tail call <2 x i64> @llvm.x86.avx512.vpermi2var.q.128(<2 x i64> %__A, <2 x i64> %__I, <2 x i64> %__B)4275 %1 = bitcast i8 %__U to <8 x i1>4276 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>4277 %2 = select <2 x i1> %extract.i, <2 x i64> %0, <2 x i64> zeroinitializer4278 ret <2 x i64> %24279}4280 4281define <4 x i64> @test_mm256_permutex2var_epi64(<4 x i64> %__A, <4 x i64> %__I, <4 x i64> %__B) {4282; CHECK-LABEL: test_mm256_permutex2var_epi64:4283; CHECK: # %bb.0: # %entry4284; CHECK-NEXT: vpermt2q %ymm2, %ymm1, %ymm04285; CHECK-NEXT: ret{{[l|q]}}4286entry:4287 %0 = tail call <4 x i64> @llvm.x86.avx512.vpermi2var.q.256(<4 x i64> %__A, <4 x i64> %__I, <4 x i64> %__B)4288 ret <4 x i64> %04289}4290 4291define <4 x i64> @test_mm256_mask_permutex2var_epi64(<4 x i64> %__A, i8 zeroext %__U, <4 x i64> %__I, <4 x i64> %__B) {4292; X86-LABEL: test_mm256_mask_permutex2var_epi64:4293; X86: # %bb.0: # %entry4294; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4295; X86-NEXT: kmovw %eax, %k14296; X86-NEXT: vpermt2q %ymm2, %ymm1, %ymm0 {%k1}4297; X86-NEXT: retl4298;4299; X64-LABEL: test_mm256_mask_permutex2var_epi64:4300; X64: # %bb.0: # %entry4301; X64-NEXT: kmovw %edi, %k14302; X64-NEXT: vpermt2q %ymm2, %ymm1, %ymm0 {%k1}4303; X64-NEXT: retq4304entry:4305 %0 = tail call <4 x i64> @llvm.x86.avx512.vpermi2var.q.256(<4 x i64> %__A, <4 x i64> %__I, <4 x i64> %__B)4306 %1 = bitcast i8 %__U to <8 x i1>4307 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4308 %2 = select <4 x i1> %extract.i, <4 x i64> %0, <4 x i64> %__A4309 ret <4 x i64> %24310}4311 4312define <4 x i64> @test_mm256_maskz_permutex2var_epi64(i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__I, <4 x i64> %__B) {4313; X86-LABEL: test_mm256_maskz_permutex2var_epi64:4314; X86: # %bb.0: # %entry4315; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4316; X86-NEXT: kmovw %eax, %k14317; X86-NEXT: vpermt2q %ymm2, %ymm1, %ymm0 {%k1} {z}4318; X86-NEXT: retl4319;4320; X64-LABEL: test_mm256_maskz_permutex2var_epi64:4321; X64: # %bb.0: # %entry4322; X64-NEXT: kmovw %edi, %k14323; X64-NEXT: vpermt2q %ymm2, %ymm1, %ymm0 {%k1} {z}4324; X64-NEXT: retq4325entry:4326 %0 = tail call <4 x i64> @llvm.x86.avx512.vpermi2var.q.256(<4 x i64> %__A, <4 x i64> %__I, <4 x i64> %__B)4327 %1 = bitcast i8 %__U to <8 x i1>4328 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4329 %2 = select <4 x i1> %extract.i, <4 x i64> %0, <4 x i64> zeroinitializer4330 ret <4 x i64> %24331}4332 4333 4334define <2 x double> @test_mm_mask_fmadd_pd(<2 x double> %__A, i8 zeroext %__U, <2 x double> %__B, <2 x double> %__C) {4335; X86-LABEL: test_mm_mask_fmadd_pd:4336; X86: # %bb.0: # %entry4337; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4338; X86-NEXT: kmovw %eax, %k14339; X86-NEXT: vfmadd132pd {{.*#+}} xmm0 {%k1} = (xmm0 * xmm1) + xmm24340; X86-NEXT: retl4341;4342; X64-LABEL: test_mm_mask_fmadd_pd:4343; X64: # %bb.0: # %entry4344; X64-NEXT: kmovw %edi, %k14345; X64-NEXT: vfmadd132pd {{.*#+}} xmm0 {%k1} = (xmm0 * xmm1) + xmm24346; X64-NEXT: retq4347entry:4348 %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C) #94349 %1 = bitcast i8 %__U to <8 x i1>4350 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>4351 %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> %__A4352 ret <2 x double> %24353}4354 4355define <2 x double> @test_mm_mask_fmsub_pd(<2 x double> %__A, i8 zeroext %__U, <2 x double> %__B, <2 x double> %__C) {4356; X86-LABEL: test_mm_mask_fmsub_pd:4357; X86: # %bb.0: # %entry4358; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4359; X86-NEXT: kmovw %eax, %k14360; X86-NEXT: vfmsub132pd {{.*#+}} xmm0 {%k1} = (xmm0 * xmm1) - xmm24361; X86-NEXT: retl4362;4363; X64-LABEL: test_mm_mask_fmsub_pd:4364; X64: # %bb.0: # %entry4365; X64-NEXT: kmovw %edi, %k14366; X64-NEXT: vfmsub132pd {{.*#+}} xmm0 {%k1} = (xmm0 * xmm1) - xmm24367; X64-NEXT: retq4368entry:4369 %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C4370 %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %sub.i) #94371 %1 = bitcast i8 %__U to <8 x i1>4372 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>4373 %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> %__A4374 ret <2 x double> %24375}4376 4377define <2 x double> @test_mm_mask3_fmadd_pd(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C, i8 zeroext %__U) {4378; X86-LABEL: test_mm_mask3_fmadd_pd:4379; X86: # %bb.0: # %entry4380; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4381; X86-NEXT: kmovw %eax, %k14382; X86-NEXT: vfmadd231pd {{.*#+}} xmm2 {%k1} = (xmm0 * xmm1) + xmm24383; X86-NEXT: vmovapd %xmm2, %xmm04384; X86-NEXT: retl4385;4386; X64-LABEL: test_mm_mask3_fmadd_pd:4387; X64: # %bb.0: # %entry4388; X64-NEXT: kmovw %edi, %k14389; X64-NEXT: vfmadd231pd {{.*#+}} xmm2 {%k1} = (xmm0 * xmm1) + xmm24390; X64-NEXT: vmovapd %xmm2, %xmm04391; X64-NEXT: retq4392entry:4393 %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C) #94394 %1 = bitcast i8 %__U to <8 x i1>4395 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>4396 %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> %__C4397 ret <2 x double> %24398}4399 4400define <2 x double> @test_mm_mask3_fnmadd_pd(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C, i8 zeroext %__U) {4401; X86-LABEL: test_mm_mask3_fnmadd_pd:4402; X86: # %bb.0: # %entry4403; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4404; X86-NEXT: kmovw %eax, %k14405; X86-NEXT: vfnmadd231pd {{.*#+}} xmm2 {%k1} = -(xmm0 * xmm1) + xmm24406; X86-NEXT: vmovapd %xmm2, %xmm04407; X86-NEXT: retl4408;4409; X64-LABEL: test_mm_mask3_fnmadd_pd:4410; X64: # %bb.0: # %entry4411; X64-NEXT: kmovw %edi, %k14412; X64-NEXT: vfnmadd231pd {{.*#+}} xmm2 {%k1} = -(xmm0 * xmm1) + xmm24413; X64-NEXT: vmovapd %xmm2, %xmm04414; X64-NEXT: retq4415entry:4416 %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__A4417 %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %sub.i, <2 x double> %__B, <2 x double> %__C) #94418 %1 = bitcast i8 %__U to <8 x i1>4419 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>4420 %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> %__C4421 ret <2 x double> %24422}4423 4424define <2 x double> @test_mm_maskz_fmadd_pd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {4425; X86-LABEL: test_mm_maskz_fmadd_pd:4426; X86: # %bb.0: # %entry4427; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4428; X86-NEXT: kmovw %eax, %k14429; X86-NEXT: vfmadd213pd {{.*#+}} xmm0 {%k1} {z} = (xmm1 * xmm0) + xmm24430; X86-NEXT: retl4431;4432; X64-LABEL: test_mm_maskz_fmadd_pd:4433; X64: # %bb.0: # %entry4434; X64-NEXT: kmovw %edi, %k14435; X64-NEXT: vfmadd213pd {{.*#+}} xmm0 {%k1} {z} = (xmm1 * xmm0) + xmm24436; X64-NEXT: retq4437entry:4438 %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C) #94439 %1 = bitcast i8 %__U to <8 x i1>4440 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>4441 %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> zeroinitializer4442 ret <2 x double> %24443}4444 4445define <2 x double> @test_mm_maskz_fmsub_pd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {4446; X86-LABEL: test_mm_maskz_fmsub_pd:4447; X86: # %bb.0: # %entry4448; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4449; X86-NEXT: kmovw %eax, %k14450; X86-NEXT: vfmsub213pd {{.*#+}} xmm0 {%k1} {z} = (xmm1 * xmm0) - xmm24451; X86-NEXT: retl4452;4453; X64-LABEL: test_mm_maskz_fmsub_pd:4454; X64: # %bb.0: # %entry4455; X64-NEXT: kmovw %edi, %k14456; X64-NEXT: vfmsub213pd {{.*#+}} xmm0 {%k1} {z} = (xmm1 * xmm0) - xmm24457; X64-NEXT: retq4458entry:4459 %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C4460 %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %sub.i) #94461 %1 = bitcast i8 %__U to <8 x i1>4462 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>4463 %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> zeroinitializer4464 ret <2 x double> %24465}4466 4467define <2 x double> @test_mm_maskz_fnmadd_pd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {4468; X86-LABEL: test_mm_maskz_fnmadd_pd:4469; X86: # %bb.0: # %entry4470; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4471; X86-NEXT: kmovw %eax, %k14472; X86-NEXT: vfnmadd213pd {{.*#+}} xmm0 {%k1} {z} = -(xmm1 * xmm0) + xmm24473; X86-NEXT: retl4474;4475; X64-LABEL: test_mm_maskz_fnmadd_pd:4476; X64: # %bb.0: # %entry4477; X64-NEXT: kmovw %edi, %k14478; X64-NEXT: vfnmadd213pd {{.*#+}} xmm0 {%k1} {z} = -(xmm1 * xmm0) + xmm24479; X64-NEXT: retq4480entry:4481 %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__A4482 %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %sub.i, <2 x double> %__B, <2 x double> %__C) #94483 %1 = bitcast i8 %__U to <8 x i1>4484 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>4485 %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> zeroinitializer4486 ret <2 x double> %24487}4488 4489define <2 x double> @test_mm_maskz_fnmsub_pd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {4490; X86-LABEL: test_mm_maskz_fnmsub_pd:4491; X86: # %bb.0: # %entry4492; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4493; X86-NEXT: kmovw %eax, %k14494; X86-NEXT: vfnmsub213pd {{.*#+}} xmm0 {%k1} {z} = -(xmm1 * xmm0) - xmm24495; X86-NEXT: retl4496;4497; X64-LABEL: test_mm_maskz_fnmsub_pd:4498; X64: # %bb.0: # %entry4499; X64-NEXT: kmovw %edi, %k14500; X64-NEXT: vfnmsub213pd {{.*#+}} xmm0 {%k1} {z} = -(xmm1 * xmm0) - xmm24501; X64-NEXT: retq4502entry:4503 %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__A4504 %sub1.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C4505 %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %sub.i, <2 x double> %__B, <2 x double> %sub1.i) #94506 %1 = bitcast i8 %__U to <8 x i1>4507 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>4508 %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> zeroinitializer4509 ret <2 x double> %24510}4511 4512define <4 x double> @test_mm256_mask_fmadd_pd(<4 x double> %__A, i8 zeroext %__U, <4 x double> %__B, <4 x double> %__C) {4513; X86-LABEL: test_mm256_mask_fmadd_pd:4514; X86: # %bb.0: # %entry4515; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4516; X86-NEXT: kmovw %eax, %k14517; X86-NEXT: vfmadd132pd {{.*#+}} ymm0 {%k1} = (ymm0 * ymm1) + ymm24518; X86-NEXT: retl4519;4520; X64-LABEL: test_mm256_mask_fmadd_pd:4521; X64: # %bb.0: # %entry4522; X64-NEXT: kmovw %edi, %k14523; X64-NEXT: vfmadd132pd {{.*#+}} ymm0 {%k1} = (ymm0 * ymm1) + ymm24524; X64-NEXT: retq4525entry:4526 %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C) #94527 %1 = bitcast i8 %__U to <8 x i1>4528 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4529 %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> %__A4530 ret <4 x double> %24531}4532 4533define <4 x double> @test_mm256_mask_fmsub_pd(<4 x double> %__A, i8 zeroext %__U, <4 x double> %__B, <4 x double> %__C) {4534; X86-LABEL: test_mm256_mask_fmsub_pd:4535; X86: # %bb.0: # %entry4536; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4537; X86-NEXT: kmovw %eax, %k14538; X86-NEXT: vfmsub132pd {{.*#+}} ymm0 {%k1} = (ymm0 * ymm1) - ymm24539; X86-NEXT: retl4540;4541; X64-LABEL: test_mm256_mask_fmsub_pd:4542; X64: # %bb.0: # %entry4543; X64-NEXT: kmovw %edi, %k14544; X64-NEXT: vfmsub132pd {{.*#+}} ymm0 {%k1} = (ymm0 * ymm1) - ymm24545; X64-NEXT: retq4546entry:4547 %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C4548 %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %sub.i) #94549 %1 = bitcast i8 %__U to <8 x i1>4550 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4551 %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> %__A4552 ret <4 x double> %24553}4554 4555define <4 x double> @test_mm256_mask3_fmadd_pd(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C, i8 zeroext %__U) {4556; X86-LABEL: test_mm256_mask3_fmadd_pd:4557; X86: # %bb.0: # %entry4558; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4559; X86-NEXT: kmovw %eax, %k14560; X86-NEXT: vfmadd231pd {{.*#+}} ymm2 {%k1} = (ymm0 * ymm1) + ymm24561; X86-NEXT: vmovapd %ymm2, %ymm04562; X86-NEXT: retl4563;4564; X64-LABEL: test_mm256_mask3_fmadd_pd:4565; X64: # %bb.0: # %entry4566; X64-NEXT: kmovw %edi, %k14567; X64-NEXT: vfmadd231pd {{.*#+}} ymm2 {%k1} = (ymm0 * ymm1) + ymm24568; X64-NEXT: vmovapd %ymm2, %ymm04569; X64-NEXT: retq4570entry:4571 %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C) #94572 %1 = bitcast i8 %__U to <8 x i1>4573 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4574 %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> %__C4575 ret <4 x double> %24576}4577 4578define <4 x double> @test_mm256_mask3_fnmadd_pd(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C, i8 zeroext %__U) {4579; X86-LABEL: test_mm256_mask3_fnmadd_pd:4580; X86: # %bb.0: # %entry4581; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4582; X86-NEXT: kmovw %eax, %k14583; X86-NEXT: vfnmadd231pd {{.*#+}} ymm2 {%k1} = -(ymm0 * ymm1) + ymm24584; X86-NEXT: vmovapd %ymm2, %ymm04585; X86-NEXT: retl4586;4587; X64-LABEL: test_mm256_mask3_fnmadd_pd:4588; X64: # %bb.0: # %entry4589; X64-NEXT: kmovw %edi, %k14590; X64-NEXT: vfnmadd231pd {{.*#+}} ymm2 {%k1} = -(ymm0 * ymm1) + ymm24591; X64-NEXT: vmovapd %ymm2, %ymm04592; X64-NEXT: retq4593entry:4594 %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__A4595 %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %sub.i, <4 x double> %__B, <4 x double> %__C) #94596 %1 = bitcast i8 %__U to <8 x i1>4597 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4598 %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> %__C4599 ret <4 x double> %24600}4601 4602define <4 x double> @test_mm256_maskz_fmadd_pd(i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B, <4 x double> %__C) {4603; X86-LABEL: test_mm256_maskz_fmadd_pd:4604; X86: # %bb.0: # %entry4605; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4606; X86-NEXT: kmovw %eax, %k14607; X86-NEXT: vfmadd213pd {{.*#+}} ymm0 {%k1} {z} = (ymm1 * ymm0) + ymm24608; X86-NEXT: retl4609;4610; X64-LABEL: test_mm256_maskz_fmadd_pd:4611; X64: # %bb.0: # %entry4612; X64-NEXT: kmovw %edi, %k14613; X64-NEXT: vfmadd213pd {{.*#+}} ymm0 {%k1} {z} = (ymm1 * ymm0) + ymm24614; X64-NEXT: retq4615entry:4616 %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C) #94617 %1 = bitcast i8 %__U to <8 x i1>4618 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4619 %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> zeroinitializer4620 ret <4 x double> %24621}4622 4623define <4 x double> @test_mm256_maskz_fmsub_pd(i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B, <4 x double> %__C) {4624; X86-LABEL: test_mm256_maskz_fmsub_pd:4625; X86: # %bb.0: # %entry4626; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4627; X86-NEXT: kmovw %eax, %k14628; X86-NEXT: vfmsub213pd {{.*#+}} ymm0 {%k1} {z} = (ymm1 * ymm0) - ymm24629; X86-NEXT: retl4630;4631; X64-LABEL: test_mm256_maskz_fmsub_pd:4632; X64: # %bb.0: # %entry4633; X64-NEXT: kmovw %edi, %k14634; X64-NEXT: vfmsub213pd {{.*#+}} ymm0 {%k1} {z} = (ymm1 * ymm0) - ymm24635; X64-NEXT: retq4636entry:4637 %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C4638 %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %sub.i) #94639 %1 = bitcast i8 %__U to <8 x i1>4640 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4641 %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> zeroinitializer4642 ret <4 x double> %24643}4644 4645define <4 x double> @test_mm256_maskz_fnmadd_pd(i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B, <4 x double> %__C) {4646; X86-LABEL: test_mm256_maskz_fnmadd_pd:4647; X86: # %bb.0: # %entry4648; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4649; X86-NEXT: kmovw %eax, %k14650; X86-NEXT: vfnmadd213pd {{.*#+}} ymm0 {%k1} {z} = -(ymm1 * ymm0) + ymm24651; X86-NEXT: retl4652;4653; X64-LABEL: test_mm256_maskz_fnmadd_pd:4654; X64: # %bb.0: # %entry4655; X64-NEXT: kmovw %edi, %k14656; X64-NEXT: vfnmadd213pd {{.*#+}} ymm0 {%k1} {z} = -(ymm1 * ymm0) + ymm24657; X64-NEXT: retq4658entry:4659 %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__A4660 %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %sub.i, <4 x double> %__B, <4 x double> %__C) #94661 %1 = bitcast i8 %__U to <8 x i1>4662 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4663 %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> zeroinitializer4664 ret <4 x double> %24665}4666 4667define <4 x double> @test_mm256_maskz_fnmsub_pd(i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B, <4 x double> %__C) {4668; X86-LABEL: test_mm256_maskz_fnmsub_pd:4669; X86: # %bb.0: # %entry4670; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4671; X86-NEXT: kmovw %eax, %k14672; X86-NEXT: vfnmsub213pd {{.*#+}} ymm0 {%k1} {z} = -(ymm1 * ymm0) - ymm24673; X86-NEXT: retl4674;4675; X64-LABEL: test_mm256_maskz_fnmsub_pd:4676; X64: # %bb.0: # %entry4677; X64-NEXT: kmovw %edi, %k14678; X64-NEXT: vfnmsub213pd {{.*#+}} ymm0 {%k1} {z} = -(ymm1 * ymm0) - ymm24679; X64-NEXT: retq4680entry:4681 %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__A4682 %sub1.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C4683 %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %sub.i, <4 x double> %__B, <4 x double> %sub1.i) #94684 %1 = bitcast i8 %__U to <8 x i1>4685 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4686 %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> zeroinitializer4687 ret <4 x double> %24688}4689 4690define <4 x float> @test_mm_mask_fmadd_ps(<4 x float> %__A, i8 zeroext %__U, <4 x float> %__B, <4 x float> %__C) {4691; X86-LABEL: test_mm_mask_fmadd_ps:4692; X86: # %bb.0: # %entry4693; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4694; X86-NEXT: kmovw %eax, %k14695; X86-NEXT: vfmadd132ps {{.*#+}} xmm0 {%k1} = (xmm0 * xmm1) + xmm24696; X86-NEXT: retl4697;4698; X64-LABEL: test_mm_mask_fmadd_ps:4699; X64: # %bb.0: # %entry4700; X64-NEXT: kmovw %edi, %k14701; X64-NEXT: vfmadd132ps {{.*#+}} xmm0 {%k1} = (xmm0 * xmm1) + xmm24702; X64-NEXT: retq4703entry:4704 %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C) #94705 %1 = bitcast i8 %__U to <8 x i1>4706 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4707 %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> %__A4708 ret <4 x float> %24709}4710 4711define <4 x float> @test_mm_mask_fmsub_ps(<4 x float> %__A, i8 zeroext %__U, <4 x float> %__B, <4 x float> %__C) {4712; X86-LABEL: test_mm_mask_fmsub_ps:4713; X86: # %bb.0: # %entry4714; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4715; X86-NEXT: kmovw %eax, %k14716; X86-NEXT: vfmsub132ps {{.*#+}} xmm0 {%k1} = (xmm0 * xmm1) - xmm24717; X86-NEXT: retl4718;4719; X64-LABEL: test_mm_mask_fmsub_ps:4720; X64: # %bb.0: # %entry4721; X64-NEXT: kmovw %edi, %k14722; X64-NEXT: vfmsub132ps {{.*#+}} xmm0 {%k1} = (xmm0 * xmm1) - xmm24723; X64-NEXT: retq4724entry:4725 %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C4726 %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %sub.i) #94727 %1 = bitcast i8 %__U to <8 x i1>4728 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4729 %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> %__A4730 ret <4 x float> %24731}4732 4733define <4 x float> @test_mm_mask3_fmadd_ps(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C, i8 zeroext %__U) {4734; X86-LABEL: test_mm_mask3_fmadd_ps:4735; X86: # %bb.0: # %entry4736; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4737; X86-NEXT: kmovw %eax, %k14738; X86-NEXT: vfmadd231ps {{.*#+}} xmm2 {%k1} = (xmm0 * xmm1) + xmm24739; X86-NEXT: vmovaps %xmm2, %xmm04740; X86-NEXT: retl4741;4742; X64-LABEL: test_mm_mask3_fmadd_ps:4743; X64: # %bb.0: # %entry4744; X64-NEXT: kmovw %edi, %k14745; X64-NEXT: vfmadd231ps {{.*#+}} xmm2 {%k1} = (xmm0 * xmm1) + xmm24746; X64-NEXT: vmovaps %xmm2, %xmm04747; X64-NEXT: retq4748entry:4749 %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C) #94750 %1 = bitcast i8 %__U to <8 x i1>4751 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4752 %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> %__C4753 ret <4 x float> %24754}4755 4756define <4 x float> @test_mm_mask3_fnmadd_ps(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C, i8 zeroext %__U) {4757; X86-LABEL: test_mm_mask3_fnmadd_ps:4758; X86: # %bb.0: # %entry4759; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4760; X86-NEXT: kmovw %eax, %k14761; X86-NEXT: vfnmadd231ps {{.*#+}} xmm2 {%k1} = -(xmm0 * xmm1) + xmm24762; X86-NEXT: vmovaps %xmm2, %xmm04763; X86-NEXT: retl4764;4765; X64-LABEL: test_mm_mask3_fnmadd_ps:4766; X64: # %bb.0: # %entry4767; X64-NEXT: kmovw %edi, %k14768; X64-NEXT: vfnmadd231ps {{.*#+}} xmm2 {%k1} = -(xmm0 * xmm1) + xmm24769; X64-NEXT: vmovaps %xmm2, %xmm04770; X64-NEXT: retq4771entry:4772 %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__A4773 %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %sub.i, <4 x float> %__B, <4 x float> %__C) #94774 %1 = bitcast i8 %__U to <8 x i1>4775 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4776 %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> %__C4777 ret <4 x float> %24778}4779 4780define <4 x float> @test_mm_maskz_fmadd_ps(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {4781; X86-LABEL: test_mm_maskz_fmadd_ps:4782; X86: # %bb.0: # %entry4783; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4784; X86-NEXT: kmovw %eax, %k14785; X86-NEXT: vfmadd213ps {{.*#+}} xmm0 {%k1} {z} = (xmm1 * xmm0) + xmm24786; X86-NEXT: retl4787;4788; X64-LABEL: test_mm_maskz_fmadd_ps:4789; X64: # %bb.0: # %entry4790; X64-NEXT: kmovw %edi, %k14791; X64-NEXT: vfmadd213ps {{.*#+}} xmm0 {%k1} {z} = (xmm1 * xmm0) + xmm24792; X64-NEXT: retq4793entry:4794 %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C) #94795 %1 = bitcast i8 %__U to <8 x i1>4796 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4797 %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> zeroinitializer4798 ret <4 x float> %24799}4800 4801define <4 x float> @test_mm_maskz_fmsub_ps(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {4802; X86-LABEL: test_mm_maskz_fmsub_ps:4803; X86: # %bb.0: # %entry4804; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4805; X86-NEXT: kmovw %eax, %k14806; X86-NEXT: vfmsub213ps {{.*#+}} xmm0 {%k1} {z} = (xmm1 * xmm0) - xmm24807; X86-NEXT: retl4808;4809; X64-LABEL: test_mm_maskz_fmsub_ps:4810; X64: # %bb.0: # %entry4811; X64-NEXT: kmovw %edi, %k14812; X64-NEXT: vfmsub213ps {{.*#+}} xmm0 {%k1} {z} = (xmm1 * xmm0) - xmm24813; X64-NEXT: retq4814entry:4815 %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C4816 %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %sub.i) #94817 %1 = bitcast i8 %__U to <8 x i1>4818 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4819 %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> zeroinitializer4820 ret <4 x float> %24821}4822 4823define <4 x float> @test_mm_maskz_fnmadd_ps(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {4824; X86-LABEL: test_mm_maskz_fnmadd_ps:4825; X86: # %bb.0: # %entry4826; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4827; X86-NEXT: kmovw %eax, %k14828; X86-NEXT: vfnmadd213ps {{.*#+}} xmm0 {%k1} {z} = -(xmm1 * xmm0) + xmm24829; X86-NEXT: retl4830;4831; X64-LABEL: test_mm_maskz_fnmadd_ps:4832; X64: # %bb.0: # %entry4833; X64-NEXT: kmovw %edi, %k14834; X64-NEXT: vfnmadd213ps {{.*#+}} xmm0 {%k1} {z} = -(xmm1 * xmm0) + xmm24835; X64-NEXT: retq4836entry:4837 %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__A4838 %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %sub.i, <4 x float> %__B, <4 x float> %__C) #94839 %1 = bitcast i8 %__U to <8 x i1>4840 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4841 %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> zeroinitializer4842 ret <4 x float> %24843}4844 4845define <4 x float> @test_mm_maskz_fnmsub_ps(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {4846; X86-LABEL: test_mm_maskz_fnmsub_ps:4847; X86: # %bb.0: # %entry4848; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4849; X86-NEXT: kmovw %eax, %k14850; X86-NEXT: vfnmsub213ps {{.*#+}} xmm0 {%k1} {z} = -(xmm1 * xmm0) - xmm24851; X86-NEXT: retl4852;4853; X64-LABEL: test_mm_maskz_fnmsub_ps:4854; X64: # %bb.0: # %entry4855; X64-NEXT: kmovw %edi, %k14856; X64-NEXT: vfnmsub213ps {{.*#+}} xmm0 {%k1} {z} = -(xmm1 * xmm0) - xmm24857; X64-NEXT: retq4858entry:4859 %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__A4860 %sub1.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C4861 %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %sub.i, <4 x float> %__B, <4 x float> %sub1.i) #94862 %1 = bitcast i8 %__U to <8 x i1>4863 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>4864 %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> zeroinitializer4865 ret <4 x float> %24866}4867 4868define <8 x float> @test_mm256_mask_fmadd_ps(<8 x float> %__A, i8 zeroext %__U, <8 x float> %__B, <8 x float> %__C) {4869; X86-LABEL: test_mm256_mask_fmadd_ps:4870; X86: # %bb.0: # %entry4871; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4872; X86-NEXT: kmovw %eax, %k14873; X86-NEXT: vfmadd132ps {{.*#+}} ymm0 {%k1} = (ymm0 * ymm1) + ymm24874; X86-NEXT: retl4875;4876; X64-LABEL: test_mm256_mask_fmadd_ps:4877; X64: # %bb.0: # %entry4878; X64-NEXT: kmovw %edi, %k14879; X64-NEXT: vfmadd132ps {{.*#+}} ymm0 {%k1} = (ymm0 * ymm1) + ymm24880; X64-NEXT: retq4881entry:4882 %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C) #94883 %1 = bitcast i8 %__U to <8 x i1>4884 %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> %__A4885 ret <8 x float> %24886}4887 4888define <8 x float> @test_mm256_mask_fmsub_ps(<8 x float> %__A, i8 zeroext %__U, <8 x float> %__B, <8 x float> %__C) {4889; X86-LABEL: test_mm256_mask_fmsub_ps:4890; X86: # %bb.0: # %entry4891; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4892; X86-NEXT: kmovw %eax, %k14893; X86-NEXT: vfmsub132ps {{.*#+}} ymm0 {%k1} = (ymm0 * ymm1) - ymm24894; X86-NEXT: retl4895;4896; X64-LABEL: test_mm256_mask_fmsub_ps:4897; X64: # %bb.0: # %entry4898; X64-NEXT: kmovw %edi, %k14899; X64-NEXT: vfmsub132ps {{.*#+}} ymm0 {%k1} = (ymm0 * ymm1) - ymm24900; X64-NEXT: retq4901entry:4902 %sub.i = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C4903 %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %sub.i) #94904 %1 = bitcast i8 %__U to <8 x i1>4905 %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> %__A4906 ret <8 x float> %24907}4908 4909define <8 x float> @test_mm256_mask3_fmadd_ps(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C, i8 zeroext %__U) {4910; X86-LABEL: test_mm256_mask3_fmadd_ps:4911; X86: # %bb.0: # %entry4912; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4913; X86-NEXT: kmovw %eax, %k14914; X86-NEXT: vfmadd231ps {{.*#+}} ymm2 {%k1} = (ymm0 * ymm1) + ymm24915; X86-NEXT: vmovaps %ymm2, %ymm04916; X86-NEXT: retl4917;4918; X64-LABEL: test_mm256_mask3_fmadd_ps:4919; X64: # %bb.0: # %entry4920; X64-NEXT: kmovw %edi, %k14921; X64-NEXT: vfmadd231ps {{.*#+}} ymm2 {%k1} = (ymm0 * ymm1) + ymm24922; X64-NEXT: vmovaps %ymm2, %ymm04923; X64-NEXT: retq4924entry:4925 %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C) #94926 %1 = bitcast i8 %__U to <8 x i1>4927 %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> %__C4928 ret <8 x float> %24929}4930 4931define <8 x float> @test_mm256_mask3_fnmadd_ps(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C, i8 zeroext %__U) {4932; X86-LABEL: test_mm256_mask3_fnmadd_ps:4933; X86: # %bb.0: # %entry4934; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4935; X86-NEXT: kmovw %eax, %k14936; X86-NEXT: vfnmadd231ps {{.*#+}} ymm2 {%k1} = -(ymm0 * ymm1) + ymm24937; X86-NEXT: vmovaps %ymm2, %ymm04938; X86-NEXT: retl4939;4940; X64-LABEL: test_mm256_mask3_fnmadd_ps:4941; X64: # %bb.0: # %entry4942; X64-NEXT: kmovw %edi, %k14943; X64-NEXT: vfnmadd231ps {{.*#+}} ymm2 {%k1} = -(ymm0 * ymm1) + ymm24944; X64-NEXT: vmovaps %ymm2, %ymm04945; X64-NEXT: retq4946entry:4947 %sub.i = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__A4948 %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %sub.i, <8 x float> %__B, <8 x float> %__C) #94949 %1 = bitcast i8 %__U to <8 x i1>4950 %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> %__C4951 ret <8 x float> %24952}4953 4954define <8 x float> @test_mm256_maskz_fmadd_ps(i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B, <8 x float> %__C) {4955; X86-LABEL: test_mm256_maskz_fmadd_ps:4956; X86: # %bb.0: # %entry4957; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4958; X86-NEXT: kmovw %eax, %k14959; X86-NEXT: vfmadd213ps {{.*#+}} ymm0 {%k1} {z} = (ymm1 * ymm0) + ymm24960; X86-NEXT: retl4961;4962; X64-LABEL: test_mm256_maskz_fmadd_ps:4963; X64: # %bb.0: # %entry4964; X64-NEXT: kmovw %edi, %k14965; X64-NEXT: vfmadd213ps {{.*#+}} ymm0 {%k1} {z} = (ymm1 * ymm0) + ymm24966; X64-NEXT: retq4967entry:4968 %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C) #94969 %1 = bitcast i8 %__U to <8 x i1>4970 %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> zeroinitializer4971 ret <8 x float> %24972}4973 4974define <8 x float> @test_mm256_maskz_fmsub_ps(i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B, <8 x float> %__C) {4975; X86-LABEL: test_mm256_maskz_fmsub_ps:4976; X86: # %bb.0: # %entry4977; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4978; X86-NEXT: kmovw %eax, %k14979; X86-NEXT: vfmsub213ps {{.*#+}} ymm0 {%k1} {z} = (ymm1 * ymm0) - ymm24980; X86-NEXT: retl4981;4982; X64-LABEL: test_mm256_maskz_fmsub_ps:4983; X64: # %bb.0: # %entry4984; X64-NEXT: kmovw %edi, %k14985; X64-NEXT: vfmsub213ps {{.*#+}} ymm0 {%k1} {z} = (ymm1 * ymm0) - ymm24986; X64-NEXT: retq4987entry:4988 %sub.i = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C4989 %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %sub.i) #94990 %1 = bitcast i8 %__U to <8 x i1>4991 %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> zeroinitializer4992 ret <8 x float> %24993}4994 4995define <8 x float> @test_mm256_maskz_fnmadd_ps(i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B, <8 x float> %__C) {4996; X86-LABEL: test_mm256_maskz_fnmadd_ps:4997; X86: # %bb.0: # %entry4998; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax4999; X86-NEXT: kmovw %eax, %k15000; X86-NEXT: vfnmadd213ps {{.*#+}} ymm0 {%k1} {z} = -(ymm1 * ymm0) + ymm25001; X86-NEXT: retl5002;5003; X64-LABEL: test_mm256_maskz_fnmadd_ps:5004; X64: # %bb.0: # %entry5005; X64-NEXT: kmovw %edi, %k15006; X64-NEXT: vfnmadd213ps {{.*#+}} ymm0 {%k1} {z} = -(ymm1 * ymm0) + ymm25007; X64-NEXT: retq5008entry:5009 %sub.i = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__A5010 %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %sub.i, <8 x float> %__B, <8 x float> %__C) #95011 %1 = bitcast i8 %__U to <8 x i1>5012 %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> zeroinitializer5013 ret <8 x float> %25014}5015 5016define <8 x float> @test_mm256_maskz_fnmsub_ps(i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B, <8 x float> %__C) {5017; X86-LABEL: test_mm256_maskz_fnmsub_ps:5018; X86: # %bb.0: # %entry5019; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5020; X86-NEXT: kmovw %eax, %k15021; X86-NEXT: vfnmsub213ps {{.*#+}} ymm0 {%k1} {z} = -(ymm1 * ymm0) - ymm25022; X86-NEXT: retl5023;5024; X64-LABEL: test_mm256_maskz_fnmsub_ps:5025; X64: # %bb.0: # %entry5026; X64-NEXT: kmovw %edi, %k15027; X64-NEXT: vfnmsub213ps {{.*#+}} ymm0 {%k1} {z} = -(ymm1 * ymm0) - ymm25028; X64-NEXT: retq5029entry:5030 %sub.i = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__A5031 %sub1.i = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C5032 %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %sub.i, <8 x float> %__B, <8 x float> %sub1.i) #95033 %1 = bitcast i8 %__U to <8 x i1>5034 %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> zeroinitializer5035 ret <8 x float> %25036}5037 5038define <2 x double> @test_mm_mask_fmaddsub_pd(<2 x double> %__A, i8 zeroext %__U, <2 x double> %__B, <2 x double> %__C) {5039; X86-LABEL: test_mm_mask_fmaddsub_pd:5040; X86: # %bb.0: # %entry5041; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5042; X86-NEXT: kmovw %eax, %k15043; X86-NEXT: vfmaddsub132pd {{.*#+}} xmm0 {%k1} = (xmm0 * xmm1) +/- xmm25044; X86-NEXT: retl5045;5046; X64-LABEL: test_mm_mask_fmaddsub_pd:5047; X64: # %bb.0: # %entry5048; X64-NEXT: kmovw %edi, %k15049; X64-NEXT: vfmaddsub132pd {{.*#+}} xmm0 {%k1} = (xmm0 * xmm1) +/- xmm25050; X64-NEXT: retq5051entry:5052 %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C) #95053 %1 = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C5054 %2 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %1) #95055 %3 = shufflevector <2 x double> %2, <2 x double> %0, <2 x i32> <i32 0, i32 3>5056 %4 = bitcast i8 %__U to <8 x i1>5057 %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <2 x i32> <i32 0, i32 1>5058 %5 = select <2 x i1> %extract.i, <2 x double> %3, <2 x double> %__A5059 ret <2 x double> %55060}5061 5062define <2 x double> @test_mm_mask_fmsubadd_pd(<2 x double> %__A, i8 zeroext %__U, <2 x double> %__B, <2 x double> %__C) {5063; X86-LABEL: test_mm_mask_fmsubadd_pd:5064; X86: # %bb.0: # %entry5065; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5066; X86-NEXT: kmovw %eax, %k15067; X86-NEXT: vfmsubadd132pd {{.*#+}} xmm0 {%k1} = (xmm0 * xmm1) -/+ xmm25068; X86-NEXT: retl5069;5070; X64-LABEL: test_mm_mask_fmsubadd_pd:5071; X64: # %bb.0: # %entry5072; X64-NEXT: kmovw %edi, %k15073; X64-NEXT: vfmsubadd132pd {{.*#+}} xmm0 {%k1} = (xmm0 * xmm1) -/+ xmm25074; X64-NEXT: retq5075entry:5076 %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C5077 %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %sub.i) #95078 %1 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C) #95079 %2 = shufflevector <2 x double> %1, <2 x double> %0, <2 x i32> <i32 0, i32 3>5080 %3 = bitcast i8 %__U to <8 x i1>5081 %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <2 x i32> <i32 0, i32 1>5082 %4 = select <2 x i1> %extract.i, <2 x double> %2, <2 x double> %__A5083 ret <2 x double> %45084}5085 5086define <2 x double> @test_mm_mask3_fmaddsub_pd(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C, i8 zeroext %__U) {5087; X86-LABEL: test_mm_mask3_fmaddsub_pd:5088; X86: # %bb.0: # %entry5089; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5090; X86-NEXT: kmovw %eax, %k15091; X86-NEXT: vfmaddsub231pd {{.*#+}} xmm2 {%k1} = (xmm0 * xmm1) +/- xmm25092; X86-NEXT: vmovapd %xmm2, %xmm05093; X86-NEXT: retl5094;5095; X64-LABEL: test_mm_mask3_fmaddsub_pd:5096; X64: # %bb.0: # %entry5097; X64-NEXT: kmovw %edi, %k15098; X64-NEXT: vfmaddsub231pd {{.*#+}} xmm2 {%k1} = (xmm0 * xmm1) +/- xmm25099; X64-NEXT: vmovapd %xmm2, %xmm05100; X64-NEXT: retq5101entry:5102 %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C) #95103 %1 = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C5104 %2 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %1) #95105 %3 = shufflevector <2 x double> %2, <2 x double> %0, <2 x i32> <i32 0, i32 3>5106 %4 = bitcast i8 %__U to <8 x i1>5107 %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <2 x i32> <i32 0, i32 1>5108 %5 = select <2 x i1> %extract.i, <2 x double> %3, <2 x double> %__C5109 ret <2 x double> %55110}5111 5112define <2 x double> @test_mm_maskz_fmaddsub_pd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {5113; X86-LABEL: test_mm_maskz_fmaddsub_pd:5114; X86: # %bb.0: # %entry5115; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5116; X86-NEXT: kmovw %eax, %k15117; X86-NEXT: vfmaddsub213pd {{.*#+}} xmm0 {%k1} {z} = (xmm1 * xmm0) +/- xmm25118; X86-NEXT: retl5119;5120; X64-LABEL: test_mm_maskz_fmaddsub_pd:5121; X64: # %bb.0: # %entry5122; X64-NEXT: kmovw %edi, %k15123; X64-NEXT: vfmaddsub213pd {{.*#+}} xmm0 {%k1} {z} = (xmm1 * xmm0) +/- xmm25124; X64-NEXT: retq5125entry:5126 %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C) #95127 %1 = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C5128 %2 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %1) #95129 %3 = shufflevector <2 x double> %2, <2 x double> %0, <2 x i32> <i32 0, i32 3>5130 %4 = bitcast i8 %__U to <8 x i1>5131 %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <2 x i32> <i32 0, i32 1>5132 %5 = select <2 x i1> %extract.i, <2 x double> %3, <2 x double> zeroinitializer5133 ret <2 x double> %55134}5135 5136define <2 x double> @test_mm_maskz_fmsubadd_pd(i8 zeroext %__U, <2 x double> %__A, <2 x double> %__B, <2 x double> %__C) {5137; X86-LABEL: test_mm_maskz_fmsubadd_pd:5138; X86: # %bb.0: # %entry5139; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5140; X86-NEXT: kmovw %eax, %k15141; X86-NEXT: vfmsubadd213pd {{.*#+}} xmm0 {%k1} {z} = (xmm1 * xmm0) -/+ xmm25142; X86-NEXT: retl5143;5144; X64-LABEL: test_mm_maskz_fmsubadd_pd:5145; X64: # %bb.0: # %entry5146; X64-NEXT: kmovw %edi, %k15147; X64-NEXT: vfmsubadd213pd {{.*#+}} xmm0 {%k1} {z} = (xmm1 * xmm0) -/+ xmm25148; X64-NEXT: retq5149entry:5150 %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C5151 %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %sub.i) #95152 %1 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C) #95153 %2 = shufflevector <2 x double> %1, <2 x double> %0, <2 x i32> <i32 0, i32 3>5154 %3 = bitcast i8 %__U to <8 x i1>5155 %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <2 x i32> <i32 0, i32 1>5156 %4 = select <2 x i1> %extract.i, <2 x double> %2, <2 x double> zeroinitializer5157 ret <2 x double> %45158}5159 5160define <4 x double> @test_mm256_mask_fmaddsub_pd(<4 x double> %__A, i8 zeroext %__U, <4 x double> %__B, <4 x double> %__C) {5161; X86-LABEL: test_mm256_mask_fmaddsub_pd:5162; X86: # %bb.0: # %entry5163; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5164; X86-NEXT: kmovw %eax, %k15165; X86-NEXT: vfmaddsub132pd {{.*#+}} ymm0 {%k1} = (ymm0 * ymm1) +/- ymm25166; X86-NEXT: retl5167;5168; X64-LABEL: test_mm256_mask_fmaddsub_pd:5169; X64: # %bb.0: # %entry5170; X64-NEXT: kmovw %edi, %k15171; X64-NEXT: vfmaddsub132pd {{.*#+}} ymm0 {%k1} = (ymm0 * ymm1) +/- ymm25172; X64-NEXT: retq5173entry:5174 %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C) #95175 %1 = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C5176 %2 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %1) #95177 %3 = shufflevector <4 x double> %2, <4 x double> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>5178 %4 = bitcast i8 %__U to <8 x i1>5179 %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5180 %5 = select <4 x i1> %extract.i, <4 x double> %3, <4 x double> %__A5181 ret <4 x double> %55182}5183 5184define <4 x double> @test_mm256_mask_fmsubadd_pd(<4 x double> %__A, i8 zeroext %__U, <4 x double> %__B, <4 x double> %__C) {5185; X86-LABEL: test_mm256_mask_fmsubadd_pd:5186; X86: # %bb.0: # %entry5187; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5188; X86-NEXT: kmovw %eax, %k15189; X86-NEXT: vfmsubadd132pd {{.*#+}} ymm0 {%k1} = (ymm0 * ymm1) -/+ ymm25190; X86-NEXT: retl5191;5192; X64-LABEL: test_mm256_mask_fmsubadd_pd:5193; X64: # %bb.0: # %entry5194; X64-NEXT: kmovw %edi, %k15195; X64-NEXT: vfmsubadd132pd {{.*#+}} ymm0 {%k1} = (ymm0 * ymm1) -/+ ymm25196; X64-NEXT: retq5197entry:5198 %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C5199 %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %sub.i) #95200 %1 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C) #95201 %2 = shufflevector <4 x double> %1, <4 x double> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>5202 %3 = bitcast i8 %__U to <8 x i1>5203 %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5204 %4 = select <4 x i1> %extract.i, <4 x double> %2, <4 x double> %__A5205 ret <4 x double> %45206}5207 5208define <4 x double> @test_mm256_mask3_fmaddsub_pd(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C, i8 zeroext %__U) {5209; X86-LABEL: test_mm256_mask3_fmaddsub_pd:5210; X86: # %bb.0: # %entry5211; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5212; X86-NEXT: kmovw %eax, %k15213; X86-NEXT: vfmaddsub231pd {{.*#+}} ymm2 {%k1} = (ymm0 * ymm1) +/- ymm25214; X86-NEXT: vmovapd %ymm2, %ymm05215; X86-NEXT: retl5216;5217; X64-LABEL: test_mm256_mask3_fmaddsub_pd:5218; X64: # %bb.0: # %entry5219; X64-NEXT: kmovw %edi, %k15220; X64-NEXT: vfmaddsub231pd {{.*#+}} ymm2 {%k1} = (ymm0 * ymm1) +/- ymm25221; X64-NEXT: vmovapd %ymm2, %ymm05222; X64-NEXT: retq5223entry:5224 %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C) #95225 %1 = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C5226 %2 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %1) #95227 %3 = shufflevector <4 x double> %2, <4 x double> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>5228 %4 = bitcast i8 %__U to <8 x i1>5229 %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5230 %5 = select <4 x i1> %extract.i, <4 x double> %3, <4 x double> %__C5231 ret <4 x double> %55232}5233 5234define <4 x double> @test_mm256_maskz_fmaddsub_pd(i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B, <4 x double> %__C) {5235; X86-LABEL: test_mm256_maskz_fmaddsub_pd:5236; X86: # %bb.0: # %entry5237; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5238; X86-NEXT: kmovw %eax, %k15239; X86-NEXT: vfmaddsub213pd {{.*#+}} ymm0 {%k1} {z} = (ymm1 * ymm0) +/- ymm25240; X86-NEXT: retl5241;5242; X64-LABEL: test_mm256_maskz_fmaddsub_pd:5243; X64: # %bb.0: # %entry5244; X64-NEXT: kmovw %edi, %k15245; X64-NEXT: vfmaddsub213pd {{.*#+}} ymm0 {%k1} {z} = (ymm1 * ymm0) +/- ymm25246; X64-NEXT: retq5247entry:5248 %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C) #95249 %1 = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C5250 %2 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %1) #95251 %3 = shufflevector <4 x double> %2, <4 x double> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>5252 %4 = bitcast i8 %__U to <8 x i1>5253 %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5254 %5 = select <4 x i1> %extract.i, <4 x double> %3, <4 x double> zeroinitializer5255 ret <4 x double> %55256}5257 5258define <4 x double> @test_mm256_maskz_fmsubadd_pd(i8 zeroext %__U, <4 x double> %__A, <4 x double> %__B, <4 x double> %__C) {5259; X86-LABEL: test_mm256_maskz_fmsubadd_pd:5260; X86: # %bb.0: # %entry5261; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5262; X86-NEXT: kmovw %eax, %k15263; X86-NEXT: vfmsubadd213pd {{.*#+}} ymm0 {%k1} {z} = (ymm1 * ymm0) -/+ ymm25264; X86-NEXT: retl5265;5266; X64-LABEL: test_mm256_maskz_fmsubadd_pd:5267; X64: # %bb.0: # %entry5268; X64-NEXT: kmovw %edi, %k15269; X64-NEXT: vfmsubadd213pd {{.*#+}} ymm0 {%k1} {z} = (ymm1 * ymm0) -/+ ymm25270; X64-NEXT: retq5271entry:5272 %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C5273 %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %sub.i) #95274 %1 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C) #95275 %2 = shufflevector <4 x double> %1, <4 x double> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>5276 %3 = bitcast i8 %__U to <8 x i1>5277 %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5278 %4 = select <4 x i1> %extract.i, <4 x double> %2, <4 x double> zeroinitializer5279 ret <4 x double> %45280}5281 5282define <4 x float> @test_mm_mask_fmaddsub_ps(<4 x float> %__A, i8 zeroext %__U, <4 x float> %__B, <4 x float> %__C) {5283; X86-LABEL: test_mm_mask_fmaddsub_ps:5284; X86: # %bb.0: # %entry5285; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5286; X86-NEXT: kmovw %eax, %k15287; X86-NEXT: vfmaddsub132ps {{.*#+}} xmm0 {%k1} = (xmm0 * xmm1) +/- xmm25288; X86-NEXT: retl5289;5290; X64-LABEL: test_mm_mask_fmaddsub_ps:5291; X64: # %bb.0: # %entry5292; X64-NEXT: kmovw %edi, %k15293; X64-NEXT: vfmaddsub132ps {{.*#+}} xmm0 {%k1} = (xmm0 * xmm1) +/- xmm25294; X64-NEXT: retq5295entry:5296 %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C) #95297 %1 = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C5298 %2 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %1) #95299 %3 = shufflevector <4 x float> %2, <4 x float> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>5300 %4 = bitcast i8 %__U to <8 x i1>5301 %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5302 %5 = select <4 x i1> %extract.i, <4 x float> %3, <4 x float> %__A5303 ret <4 x float> %55304}5305 5306define <4 x float> @test_mm_mask_fmsubadd_ps(<4 x float> %__A, i8 zeroext %__U, <4 x float> %__B, <4 x float> %__C) {5307; X86-LABEL: test_mm_mask_fmsubadd_ps:5308; X86: # %bb.0: # %entry5309; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5310; X86-NEXT: kmovw %eax, %k15311; X86-NEXT: vfmsubadd132ps {{.*#+}} xmm0 {%k1} = (xmm0 * xmm1) -/+ xmm25312; X86-NEXT: retl5313;5314; X64-LABEL: test_mm_mask_fmsubadd_ps:5315; X64: # %bb.0: # %entry5316; X64-NEXT: kmovw %edi, %k15317; X64-NEXT: vfmsubadd132ps {{.*#+}} xmm0 {%k1} = (xmm0 * xmm1) -/+ xmm25318; X64-NEXT: retq5319entry:5320 %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C5321 %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %sub.i) #95322 %1 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C) #95323 %2 = shufflevector <4 x float> %1, <4 x float> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>5324 %3 = bitcast i8 %__U to <8 x i1>5325 %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5326 %4 = select <4 x i1> %extract.i, <4 x float> %2, <4 x float> %__A5327 ret <4 x float> %45328}5329 5330define <4 x float> @test_mm_mask3_fmaddsub_ps(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C, i8 zeroext %__U) {5331; X86-LABEL: test_mm_mask3_fmaddsub_ps:5332; X86: # %bb.0: # %entry5333; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5334; X86-NEXT: kmovw %eax, %k15335; X86-NEXT: vfmaddsub231ps {{.*#+}} xmm2 {%k1} = (xmm0 * xmm1) +/- xmm25336; X86-NEXT: vmovaps %xmm2, %xmm05337; X86-NEXT: retl5338;5339; X64-LABEL: test_mm_mask3_fmaddsub_ps:5340; X64: # %bb.0: # %entry5341; X64-NEXT: kmovw %edi, %k15342; X64-NEXT: vfmaddsub231ps {{.*#+}} xmm2 {%k1} = (xmm0 * xmm1) +/- xmm25343; X64-NEXT: vmovaps %xmm2, %xmm05344; X64-NEXT: retq5345entry:5346 %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C) #95347 %1 = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C5348 %2 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %1) #95349 %3 = shufflevector <4 x float> %2, <4 x float> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>5350 %4 = bitcast i8 %__U to <8 x i1>5351 %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5352 %5 = select <4 x i1> %extract.i, <4 x float> %3, <4 x float> %__C5353 ret <4 x float> %55354}5355 5356define <4 x float> @test_mm_maskz_fmaddsub_ps(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {5357; X86-LABEL: test_mm_maskz_fmaddsub_ps:5358; X86: # %bb.0: # %entry5359; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5360; X86-NEXT: kmovw %eax, %k15361; X86-NEXT: vfmaddsub213ps {{.*#+}} xmm0 {%k1} {z} = (xmm1 * xmm0) +/- xmm25362; X86-NEXT: retl5363;5364; X64-LABEL: test_mm_maskz_fmaddsub_ps:5365; X64: # %bb.0: # %entry5366; X64-NEXT: kmovw %edi, %k15367; X64-NEXT: vfmaddsub213ps {{.*#+}} xmm0 {%k1} {z} = (xmm1 * xmm0) +/- xmm25368; X64-NEXT: retq5369entry:5370 %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C) #95371 %1 = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C5372 %2 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %1) #95373 %3 = shufflevector <4 x float> %2, <4 x float> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>5374 %4 = bitcast i8 %__U to <8 x i1>5375 %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5376 %5 = select <4 x i1> %extract.i, <4 x float> %3, <4 x float> zeroinitializer5377 ret <4 x float> %55378}5379 5380define <4 x float> @test_mm_maskz_fmsubadd_ps(i8 zeroext %__U, <4 x float> %__A, <4 x float> %__B, <4 x float> %__C) {5381; X86-LABEL: test_mm_maskz_fmsubadd_ps:5382; X86: # %bb.0: # %entry5383; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5384; X86-NEXT: kmovw %eax, %k15385; X86-NEXT: vfmsubadd213ps {{.*#+}} xmm0 {%k1} {z} = (xmm1 * xmm0) -/+ xmm25386; X86-NEXT: retl5387;5388; X64-LABEL: test_mm_maskz_fmsubadd_ps:5389; X64: # %bb.0: # %entry5390; X64-NEXT: kmovw %edi, %k15391; X64-NEXT: vfmsubadd213ps {{.*#+}} xmm0 {%k1} {z} = (xmm1 * xmm0) -/+ xmm25392; X64-NEXT: retq5393entry:5394 %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C5395 %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %sub.i) #95396 %1 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C) #95397 %2 = shufflevector <4 x float> %1, <4 x float> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>5398 %3 = bitcast i8 %__U to <8 x i1>5399 %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5400 %4 = select <4 x i1> %extract.i, <4 x float> %2, <4 x float> zeroinitializer5401 ret <4 x float> %45402}5403 5404define <8 x float> @test_mm256_mask_fmaddsub_ps(<8 x float> %__A, i8 zeroext %__U, <8 x float> %__B, <8 x float> %__C) {5405; X86-LABEL: test_mm256_mask_fmaddsub_ps:5406; X86: # %bb.0: # %entry5407; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5408; X86-NEXT: kmovw %eax, %k15409; X86-NEXT: vfmaddsub132ps {{.*#+}} ymm0 {%k1} = (ymm0 * ymm1) +/- ymm25410; X86-NEXT: retl5411;5412; X64-LABEL: test_mm256_mask_fmaddsub_ps:5413; X64: # %bb.0: # %entry5414; X64-NEXT: kmovw %edi, %k15415; X64-NEXT: vfmaddsub132ps {{.*#+}} ymm0 {%k1} = (ymm0 * ymm1) +/- ymm25416; X64-NEXT: retq5417entry:5418 %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C) #95419 %1 = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C5420 %2 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %1) #95421 %3 = shufflevector <8 x float> %2, <8 x float> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>5422 %4 = bitcast i8 %__U to <8 x i1>5423 %5 = select <8 x i1> %4, <8 x float> %3, <8 x float> %__A5424 ret <8 x float> %55425}5426 5427define <8 x float> @test_mm256_mask_fmsubadd_ps(<8 x float> %__A, i8 zeroext %__U, <8 x float> %__B, <8 x float> %__C) {5428; X86-LABEL: test_mm256_mask_fmsubadd_ps:5429; X86: # %bb.0: # %entry5430; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5431; X86-NEXT: kmovw %eax, %k15432; X86-NEXT: vfmsubadd132ps {{.*#+}} ymm0 {%k1} = (ymm0 * ymm1) -/+ ymm25433; X86-NEXT: retl5434;5435; X64-LABEL: test_mm256_mask_fmsubadd_ps:5436; X64: # %bb.0: # %entry5437; X64-NEXT: kmovw %edi, %k15438; X64-NEXT: vfmsubadd132ps {{.*#+}} ymm0 {%k1} = (ymm0 * ymm1) -/+ ymm25439; X64-NEXT: retq5440entry:5441 %sub.i = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C5442 %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %sub.i) #95443 %1 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C) #95444 %2 = shufflevector <8 x float> %1, <8 x float> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>5445 %3 = bitcast i8 %__U to <8 x i1>5446 %4 = select <8 x i1> %3, <8 x float> %2, <8 x float> %__A5447 ret <8 x float> %45448}5449 5450define <8 x float> @test_mm256_mask3_fmaddsub_ps(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C, i8 zeroext %__U) {5451; X86-LABEL: test_mm256_mask3_fmaddsub_ps:5452; X86: # %bb.0: # %entry5453; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5454; X86-NEXT: kmovw %eax, %k15455; X86-NEXT: vfmaddsub231ps {{.*#+}} ymm2 {%k1} = (ymm0 * ymm1) +/- ymm25456; X86-NEXT: vmovaps %ymm2, %ymm05457; X86-NEXT: retl5458;5459; X64-LABEL: test_mm256_mask3_fmaddsub_ps:5460; X64: # %bb.0: # %entry5461; X64-NEXT: kmovw %edi, %k15462; X64-NEXT: vfmaddsub231ps {{.*#+}} ymm2 {%k1} = (ymm0 * ymm1) +/- ymm25463; X64-NEXT: vmovaps %ymm2, %ymm05464; X64-NEXT: retq5465entry:5466 %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C) #95467 %1 = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C5468 %2 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %1) #95469 %3 = shufflevector <8 x float> %2, <8 x float> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>5470 %4 = bitcast i8 %__U to <8 x i1>5471 %5 = select <8 x i1> %4, <8 x float> %3, <8 x float> %__C5472 ret <8 x float> %55473}5474 5475define <8 x float> @test_mm256_maskz_fmaddsub_ps(i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B, <8 x float> %__C) {5476; X86-LABEL: test_mm256_maskz_fmaddsub_ps:5477; X86: # %bb.0: # %entry5478; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5479; X86-NEXT: kmovw %eax, %k15480; X86-NEXT: vfmaddsub213ps {{.*#+}} ymm0 {%k1} {z} = (ymm1 * ymm0) +/- ymm25481; X86-NEXT: retl5482;5483; X64-LABEL: test_mm256_maskz_fmaddsub_ps:5484; X64: # %bb.0: # %entry5485; X64-NEXT: kmovw %edi, %k15486; X64-NEXT: vfmaddsub213ps {{.*#+}} ymm0 {%k1} {z} = (ymm1 * ymm0) +/- ymm25487; X64-NEXT: retq5488entry:5489 %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C) #95490 %1 = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C5491 %2 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %1) #95492 %3 = shufflevector <8 x float> %2, <8 x float> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>5493 %4 = bitcast i8 %__U to <8 x i1>5494 %5 = select <8 x i1> %4, <8 x float> %3, <8 x float> zeroinitializer5495 ret <8 x float> %55496}5497 5498define <8 x float> @test_mm256_maskz_fmsubadd_ps(i8 zeroext %__U, <8 x float> %__A, <8 x float> %__B, <8 x float> %__C) {5499; X86-LABEL: test_mm256_maskz_fmsubadd_ps:5500; X86: # %bb.0: # %entry5501; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5502; X86-NEXT: kmovw %eax, %k15503; X86-NEXT: vfmsubadd213ps {{.*#+}} ymm0 {%k1} {z} = (ymm1 * ymm0) -/+ ymm25504; X86-NEXT: retl5505;5506; X64-LABEL: test_mm256_maskz_fmsubadd_ps:5507; X64: # %bb.0: # %entry5508; X64-NEXT: kmovw %edi, %k15509; X64-NEXT: vfmsubadd213ps {{.*#+}} ymm0 {%k1} {z} = (ymm1 * ymm0) -/+ ymm25510; X64-NEXT: retq5511entry:5512 %sub.i = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C5513 %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %sub.i) #95514 %1 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C) #95515 %2 = shufflevector <8 x float> %1, <8 x float> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>5516 %3 = bitcast i8 %__U to <8 x i1>5517 %4 = select <8 x i1> %3, <8 x float> %2, <8 x float> zeroinitializer5518 ret <8 x float> %45519}5520 5521define <2 x double> @test_mm_mask3_fmsub_pd(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C, i8 zeroext %__U) {5522; X86-LABEL: test_mm_mask3_fmsub_pd:5523; X86: # %bb.0: # %entry5524; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5525; X86-NEXT: kmovw %eax, %k15526; X86-NEXT: vfmsub231pd {{.*#+}} xmm2 {%k1} = (xmm0 * xmm1) - xmm25527; X86-NEXT: vmovapd %xmm2, %xmm05528; X86-NEXT: retl5529;5530; X64-LABEL: test_mm_mask3_fmsub_pd:5531; X64: # %bb.0: # %entry5532; X64-NEXT: kmovw %edi, %k15533; X64-NEXT: vfmsub231pd {{.*#+}} xmm2 {%k1} = (xmm0 * xmm1) - xmm25534; X64-NEXT: vmovapd %xmm2, %xmm05535; X64-NEXT: retq5536entry:5537 %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C5538 %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %sub.i) #95539 %1 = bitcast i8 %__U to <8 x i1>5540 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>5541 %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> %__C5542 ret <2 x double> %25543}5544 5545define <4 x double> @test_mm256_mask3_fmsub_pd(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C, i8 zeroext %__U) {5546; X86-LABEL: test_mm256_mask3_fmsub_pd:5547; X86: # %bb.0: # %entry5548; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5549; X86-NEXT: kmovw %eax, %k15550; X86-NEXT: vfmsub231pd {{.*#+}} ymm2 {%k1} = (ymm0 * ymm1) - ymm25551; X86-NEXT: vmovapd %ymm2, %ymm05552; X86-NEXT: retl5553;5554; X64-LABEL: test_mm256_mask3_fmsub_pd:5555; X64: # %bb.0: # %entry5556; X64-NEXT: kmovw %edi, %k15557; X64-NEXT: vfmsub231pd {{.*#+}} ymm2 {%k1} = (ymm0 * ymm1) - ymm25558; X64-NEXT: vmovapd %ymm2, %ymm05559; X64-NEXT: retq5560entry:5561 %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C5562 %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %sub.i) #95563 %1 = bitcast i8 %__U to <8 x i1>5564 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5565 %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> %__C5566 ret <4 x double> %25567}5568 5569define <4 x float> @test_mm_mask3_fmsub_ps(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C, i8 zeroext %__U) {5570; X86-LABEL: test_mm_mask3_fmsub_ps:5571; X86: # %bb.0: # %entry5572; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5573; X86-NEXT: kmovw %eax, %k15574; X86-NEXT: vfmsub231ps {{.*#+}} xmm2 {%k1} = (xmm0 * xmm1) - xmm25575; X86-NEXT: vmovaps %xmm2, %xmm05576; X86-NEXT: retl5577;5578; X64-LABEL: test_mm_mask3_fmsub_ps:5579; X64: # %bb.0: # %entry5580; X64-NEXT: kmovw %edi, %k15581; X64-NEXT: vfmsub231ps {{.*#+}} xmm2 {%k1} = (xmm0 * xmm1) - xmm25582; X64-NEXT: vmovaps %xmm2, %xmm05583; X64-NEXT: retq5584entry:5585 %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C5586 %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %sub.i) #95587 %1 = bitcast i8 %__U to <8 x i1>5588 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5589 %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> %__C5590 ret <4 x float> %25591}5592 5593define <8 x float> @test_mm256_mask3_fmsub_ps(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C, i8 zeroext %__U) {5594; X86-LABEL: test_mm256_mask3_fmsub_ps:5595; X86: # %bb.0: # %entry5596; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5597; X86-NEXT: kmovw %eax, %k15598; X86-NEXT: vfmsub231ps {{.*#+}} ymm2 {%k1} = (ymm0 * ymm1) - ymm25599; X86-NEXT: vmovaps %ymm2, %ymm05600; X86-NEXT: retl5601;5602; X64-LABEL: test_mm256_mask3_fmsub_ps:5603; X64: # %bb.0: # %entry5604; X64-NEXT: kmovw %edi, %k15605; X64-NEXT: vfmsub231ps {{.*#+}} ymm2 {%k1} = (ymm0 * ymm1) - ymm25606; X64-NEXT: vmovaps %ymm2, %ymm05607; X64-NEXT: retq5608entry:5609 %sub.i = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C5610 %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %sub.i) #95611 %1 = bitcast i8 %__U to <8 x i1>5612 %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> %__C5613 ret <8 x float> %25614}5615 5616define <2 x double> @test_mm_mask3_fmsubadd_pd(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C, i8 zeroext %__U) {5617; X86-LABEL: test_mm_mask3_fmsubadd_pd:5618; X86: # %bb.0: # %entry5619; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5620; X86-NEXT: kmovw %eax, %k15621; X86-NEXT: vfmsubadd231pd {{.*#+}} xmm2 {%k1} = (xmm0 * xmm1) -/+ xmm25622; X86-NEXT: vmovapd %xmm2, %xmm05623; X86-NEXT: retl5624;5625; X64-LABEL: test_mm_mask3_fmsubadd_pd:5626; X64: # %bb.0: # %entry5627; X64-NEXT: kmovw %edi, %k15628; X64-NEXT: vfmsubadd231pd {{.*#+}} xmm2 {%k1} = (xmm0 * xmm1) -/+ xmm25629; X64-NEXT: vmovapd %xmm2, %xmm05630; X64-NEXT: retq5631entry:5632 %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C5633 %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %sub.i) #95634 %1 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C) #95635 %2 = shufflevector <2 x double> %1, <2 x double> %0, <2 x i32> <i32 0, i32 3>5636 %3 = bitcast i8 %__U to <8 x i1>5637 %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <2 x i32> <i32 0, i32 1>5638 %4 = select <2 x i1> %extract.i, <2 x double> %2, <2 x double> %__C5639 ret <2 x double> %45640}5641 5642define <4 x double> @test_mm256_mask3_fmsubadd_pd(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C, i8 zeroext %__U) {5643; X86-LABEL: test_mm256_mask3_fmsubadd_pd:5644; X86: # %bb.0: # %entry5645; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5646; X86-NEXT: kmovw %eax, %k15647; X86-NEXT: vfmsubadd231pd {{.*#+}} ymm2 {%k1} = (ymm0 * ymm1) -/+ ymm25648; X86-NEXT: vmovapd %ymm2, %ymm05649; X86-NEXT: retl5650;5651; X64-LABEL: test_mm256_mask3_fmsubadd_pd:5652; X64: # %bb.0: # %entry5653; X64-NEXT: kmovw %edi, %k15654; X64-NEXT: vfmsubadd231pd {{.*#+}} ymm2 {%k1} = (ymm0 * ymm1) -/+ ymm25655; X64-NEXT: vmovapd %ymm2, %ymm05656; X64-NEXT: retq5657entry:5658 %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C5659 %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %sub.i) #95660 %1 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C) #95661 %2 = shufflevector <4 x double> %1, <4 x double> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>5662 %3 = bitcast i8 %__U to <8 x i1>5663 %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5664 %4 = select <4 x i1> %extract.i, <4 x double> %2, <4 x double> %__C5665 ret <4 x double> %45666}5667 5668define <4 x float> @test_mm_mask3_fmsubadd_ps(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C, i8 zeroext %__U) {5669; X86-LABEL: test_mm_mask3_fmsubadd_ps:5670; X86: # %bb.0: # %entry5671; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5672; X86-NEXT: kmovw %eax, %k15673; X86-NEXT: vfmsubadd231ps {{.*#+}} xmm2 {%k1} = (xmm0 * xmm1) -/+ xmm25674; X86-NEXT: vmovaps %xmm2, %xmm05675; X86-NEXT: retl5676;5677; X64-LABEL: test_mm_mask3_fmsubadd_ps:5678; X64: # %bb.0: # %entry5679; X64-NEXT: kmovw %edi, %k15680; X64-NEXT: vfmsubadd231ps {{.*#+}} xmm2 {%k1} = (xmm0 * xmm1) -/+ xmm25681; X64-NEXT: vmovaps %xmm2, %xmm05682; X64-NEXT: retq5683entry:5684 %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C5685 %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %sub.i) #95686 %1 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C) #95687 %2 = shufflevector <4 x float> %1, <4 x float> %0, <4 x i32> <i32 0, i32 5, i32 2, i32 7>5688 %3 = bitcast i8 %__U to <8 x i1>5689 %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5690 %4 = select <4 x i1> %extract.i, <4 x float> %2, <4 x float> %__C5691 ret <4 x float> %45692}5693 5694define <8 x float> @test_mm256_mask3_fmsubadd_ps(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C, i8 zeroext %__U) {5695; X86-LABEL: test_mm256_mask3_fmsubadd_ps:5696; X86: # %bb.0: # %entry5697; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5698; X86-NEXT: kmovw %eax, %k15699; X86-NEXT: vfmsubadd231ps {{.*#+}} ymm2 {%k1} = (ymm0 * ymm1) -/+ ymm25700; X86-NEXT: vmovaps %ymm2, %ymm05701; X86-NEXT: retl5702;5703; X64-LABEL: test_mm256_mask3_fmsubadd_ps:5704; X64: # %bb.0: # %entry5705; X64-NEXT: kmovw %edi, %k15706; X64-NEXT: vfmsubadd231ps {{.*#+}} ymm2 {%k1} = (ymm0 * ymm1) -/+ ymm25707; X64-NEXT: vmovaps %ymm2, %ymm05708; X64-NEXT: retq5709entry:5710 %sub.i = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C5711 %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %sub.i) #95712 %1 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C) #95713 %2 = shufflevector <8 x float> %1, <8 x float> %0, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>5714 %3 = bitcast i8 %__U to <8 x i1>5715 %4 = select <8 x i1> %3, <8 x float> %2, <8 x float> %__C5716 ret <8 x float> %45717}5718 5719define <2 x double> @test_mm_mask_fnmadd_pd(<2 x double> %__A, i8 zeroext %__U, <2 x double> %__B, <2 x double> %__C) {5720; X86-LABEL: test_mm_mask_fnmadd_pd:5721; X86: # %bb.0: # %entry5722; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5723; X86-NEXT: kmovw %eax, %k15724; X86-NEXT: vfnmadd132pd {{.*#+}} xmm0 {%k1} = -(xmm0 * xmm1) + xmm25725; X86-NEXT: retl5726;5727; X64-LABEL: test_mm_mask_fnmadd_pd:5728; X64: # %bb.0: # %entry5729; X64-NEXT: kmovw %edi, %k15730; X64-NEXT: vfnmadd132pd {{.*#+}} xmm0 {%k1} = -(xmm0 * xmm1) + xmm25731; X64-NEXT: retq5732entry:5733 %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__B5734 %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %sub.i, <2 x double> %__C) #95735 %1 = bitcast i8 %__U to <8 x i1>5736 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>5737 %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> %__A5738 ret <2 x double> %25739}5740 5741define <4 x double> @test_mm256_mask_fnmadd_pd(<4 x double> %__A, i8 zeroext %__U, <4 x double> %__B, <4 x double> %__C) {5742; X86-LABEL: test_mm256_mask_fnmadd_pd:5743; X86: # %bb.0: # %entry5744; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5745; X86-NEXT: kmovw %eax, %k15746; X86-NEXT: vfnmadd132pd {{.*#+}} ymm0 {%k1} = -(ymm0 * ymm1) + ymm25747; X86-NEXT: retl5748;5749; X64-LABEL: test_mm256_mask_fnmadd_pd:5750; X64: # %bb.0: # %entry5751; X64-NEXT: kmovw %edi, %k15752; X64-NEXT: vfnmadd132pd {{.*#+}} ymm0 {%k1} = -(ymm0 * ymm1) + ymm25753; X64-NEXT: retq5754entry:5755 %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__B5756 %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %sub.i, <4 x double> %__C) #95757 %1 = bitcast i8 %__U to <8 x i1>5758 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5759 %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> %__A5760 ret <4 x double> %25761}5762 5763define <4 x float> @test_mm_mask_fnmadd_ps(<4 x float> %__A, i8 zeroext %__U, <4 x float> %__B, <4 x float> %__C) {5764; X86-LABEL: test_mm_mask_fnmadd_ps:5765; X86: # %bb.0: # %entry5766; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5767; X86-NEXT: kmovw %eax, %k15768; X86-NEXT: vfnmadd132ps {{.*#+}} xmm0 {%k1} = -(xmm0 * xmm1) + xmm25769; X86-NEXT: retl5770;5771; X64-LABEL: test_mm_mask_fnmadd_ps:5772; X64: # %bb.0: # %entry5773; X64-NEXT: kmovw %edi, %k15774; X64-NEXT: vfnmadd132ps {{.*#+}} xmm0 {%k1} = -(xmm0 * xmm1) + xmm25775; X64-NEXT: retq5776entry:5777 %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__B5778 %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %sub.i, <4 x float> %__C) #95779 %1 = bitcast i8 %__U to <8 x i1>5780 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5781 %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> %__A5782 ret <4 x float> %25783}5784 5785define <8 x float> @test_mm256_mask_fnmadd_ps(<8 x float> %__A, i8 zeroext %__U, <8 x float> %__B, <8 x float> %__C) {5786; X86-LABEL: test_mm256_mask_fnmadd_ps:5787; X86: # %bb.0: # %entry5788; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5789; X86-NEXT: kmovw %eax, %k15790; X86-NEXT: vfnmadd132ps {{.*#+}} ymm0 {%k1} = -(ymm0 * ymm1) + ymm25791; X86-NEXT: retl5792;5793; X64-LABEL: test_mm256_mask_fnmadd_ps:5794; X64: # %bb.0: # %entry5795; X64-NEXT: kmovw %edi, %k15796; X64-NEXT: vfnmadd132ps {{.*#+}} ymm0 {%k1} = -(ymm0 * ymm1) + ymm25797; X64-NEXT: retq5798entry:5799 %sub.i = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__B5800 %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %sub.i, <8 x float> %__C) #95801 %1 = bitcast i8 %__U to <8 x i1>5802 %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> %__A5803 ret <8 x float> %25804}5805 5806define <2 x double> @test_mm_mask_fnmsub_pd(<2 x double> %__A, i8 zeroext %__U, <2 x double> %__B, <2 x double> %__C) {5807; X86-LABEL: test_mm_mask_fnmsub_pd:5808; X86: # %bb.0: # %entry5809; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5810; X86-NEXT: kmovw %eax, %k15811; X86-NEXT: vfnmsub132pd {{.*#+}} xmm0 {%k1} = -(xmm0 * xmm1) - xmm25812; X86-NEXT: retl5813;5814; X64-LABEL: test_mm_mask_fnmsub_pd:5815; X64: # %bb.0: # %entry5816; X64-NEXT: kmovw %edi, %k15817; X64-NEXT: vfnmsub132pd {{.*#+}} xmm0 {%k1} = -(xmm0 * xmm1) - xmm25818; X64-NEXT: retq5819entry:5820 %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__B5821 %sub1.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C5822 %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %sub.i, <2 x double> %sub1.i) #95823 %1 = bitcast i8 %__U to <8 x i1>5824 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>5825 %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> %__A5826 ret <2 x double> %25827}5828 5829define <2 x double> @test_mm_mask3_fnmsub_pd(<2 x double> %__A, <2 x double> %__B, <2 x double> %__C, i8 zeroext %__U) {5830; X86-LABEL: test_mm_mask3_fnmsub_pd:5831; X86: # %bb.0: # %entry5832; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5833; X86-NEXT: kmovw %eax, %k15834; X86-NEXT: vfnmsub231pd {{.*#+}} xmm2 {%k1} = -(xmm0 * xmm1) - xmm25835; X86-NEXT: vmovapd %xmm2, %xmm05836; X86-NEXT: retl5837;5838; X64-LABEL: test_mm_mask3_fnmsub_pd:5839; X64: # %bb.0: # %entry5840; X64-NEXT: kmovw %edi, %k15841; X64-NEXT: vfnmsub231pd {{.*#+}} xmm2 {%k1} = -(xmm0 * xmm1) - xmm25842; X64-NEXT: vmovapd %xmm2, %xmm05843; X64-NEXT: retq5844entry:5845 %sub.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__B5846 %sub1.i = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %__C5847 %0 = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %__A, <2 x double> %sub.i, <2 x double> %sub1.i) #95848 %1 = bitcast i8 %__U to <8 x i1>5849 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>5850 %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> %__C5851 ret <2 x double> %25852}5853 5854define <4 x double> @test_mm256_mask_fnmsub_pd(<4 x double> %__A, i8 zeroext %__U, <4 x double> %__B, <4 x double> %__C) {5855; X86-LABEL: test_mm256_mask_fnmsub_pd:5856; X86: # %bb.0: # %entry5857; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5858; X86-NEXT: kmovw %eax, %k15859; X86-NEXT: vfnmsub132pd {{.*#+}} ymm0 {%k1} = -(ymm0 * ymm1) - ymm25860; X86-NEXT: retl5861;5862; X64-LABEL: test_mm256_mask_fnmsub_pd:5863; X64: # %bb.0: # %entry5864; X64-NEXT: kmovw %edi, %k15865; X64-NEXT: vfnmsub132pd {{.*#+}} ymm0 {%k1} = -(ymm0 * ymm1) - ymm25866; X64-NEXT: retq5867entry:5868 %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__B5869 %sub1.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C5870 %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %sub.i, <4 x double> %sub1.i) #95871 %1 = bitcast i8 %__U to <8 x i1>5872 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5873 %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> %__A5874 ret <4 x double> %25875}5876 5877define <4 x double> @test_mm256_mask3_fnmsub_pd(<4 x double> %__A, <4 x double> %__B, <4 x double> %__C, i8 zeroext %__U) {5878; X86-LABEL: test_mm256_mask3_fnmsub_pd:5879; X86: # %bb.0: # %entry5880; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5881; X86-NEXT: kmovw %eax, %k15882; X86-NEXT: vfnmsub231pd {{.*#+}} ymm2 {%k1} = -(ymm0 * ymm1) - ymm25883; X86-NEXT: vmovapd %ymm2, %ymm05884; X86-NEXT: retl5885;5886; X64-LABEL: test_mm256_mask3_fnmsub_pd:5887; X64: # %bb.0: # %entry5888; X64-NEXT: kmovw %edi, %k15889; X64-NEXT: vfnmsub231pd {{.*#+}} ymm2 {%k1} = -(ymm0 * ymm1) - ymm25890; X64-NEXT: vmovapd %ymm2, %ymm05891; X64-NEXT: retq5892entry:5893 %sub.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__B5894 %sub1.i = fsub <4 x double> <double -0.000000e+00, double -0.000000e+00, double -0.000000e+00, double -0.000000e+00>, %__C5895 %0 = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %__A, <4 x double> %sub.i, <4 x double> %sub1.i) #95896 %1 = bitcast i8 %__U to <8 x i1>5897 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5898 %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> %__C5899 ret <4 x double> %25900}5901 5902define <4 x float> @test_mm_mask_fnmsub_ps(<4 x float> %__A, i8 zeroext %__U, <4 x float> %__B, <4 x float> %__C) {5903; X86-LABEL: test_mm_mask_fnmsub_ps:5904; X86: # %bb.0: # %entry5905; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5906; X86-NEXT: kmovw %eax, %k15907; X86-NEXT: vfnmsub132ps {{.*#+}} xmm0 {%k1} = -(xmm0 * xmm1) - xmm25908; X86-NEXT: retl5909;5910; X64-LABEL: test_mm_mask_fnmsub_ps:5911; X64: # %bb.0: # %entry5912; X64-NEXT: kmovw %edi, %k15913; X64-NEXT: vfnmsub132ps {{.*#+}} xmm0 {%k1} = -(xmm0 * xmm1) - xmm25914; X64-NEXT: retq5915entry:5916 %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__B5917 %sub1.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C5918 %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %sub.i, <4 x float> %sub1.i) #95919 %1 = bitcast i8 %__U to <8 x i1>5920 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5921 %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> %__A5922 ret <4 x float> %25923}5924 5925define <4 x float> @test_mm_mask3_fnmsub_ps(<4 x float> %__A, <4 x float> %__B, <4 x float> %__C, i8 zeroext %__U) {5926; X86-LABEL: test_mm_mask3_fnmsub_ps:5927; X86: # %bb.0: # %entry5928; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5929; X86-NEXT: kmovw %eax, %k15930; X86-NEXT: vfnmsub231ps {{.*#+}} xmm2 {%k1} = -(xmm0 * xmm1) - xmm25931; X86-NEXT: vmovaps %xmm2, %xmm05932; X86-NEXT: retl5933;5934; X64-LABEL: test_mm_mask3_fnmsub_ps:5935; X64: # %bb.0: # %entry5936; X64-NEXT: kmovw %edi, %k15937; X64-NEXT: vfnmsub231ps {{.*#+}} xmm2 {%k1} = -(xmm0 * xmm1) - xmm25938; X64-NEXT: vmovaps %xmm2, %xmm05939; X64-NEXT: retq5940entry:5941 %sub.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__B5942 %sub1.i = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C5943 %0 = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %__A, <4 x float> %sub.i, <4 x float> %sub1.i) #95944 %1 = bitcast i8 %__U to <8 x i1>5945 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>5946 %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> %__C5947 ret <4 x float> %25948}5949 5950define <8 x float> @test_mm256_mask_fnmsub_ps(<8 x float> %__A, i8 zeroext %__U, <8 x float> %__B, <8 x float> %__C) {5951; X86-LABEL: test_mm256_mask_fnmsub_ps:5952; X86: # %bb.0: # %entry5953; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5954; X86-NEXT: kmovw %eax, %k15955; X86-NEXT: vfnmsub132ps {{.*#+}} ymm0 {%k1} = -(ymm0 * ymm1) - ymm25956; X86-NEXT: retl5957;5958; X64-LABEL: test_mm256_mask_fnmsub_ps:5959; X64: # %bb.0: # %entry5960; X64-NEXT: kmovw %edi, %k15961; X64-NEXT: vfnmsub132ps {{.*#+}} ymm0 {%k1} = -(ymm0 * ymm1) - ymm25962; X64-NEXT: retq5963entry:5964 %sub.i = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__B5965 %sub1.i = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C5966 %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %sub.i, <8 x float> %sub1.i) #95967 %1 = bitcast i8 %__U to <8 x i1>5968 %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> %__A5969 ret <8 x float> %25970}5971 5972define <8 x float> @test_mm256_mask3_fnmsub_ps(<8 x float> %__A, <8 x float> %__B, <8 x float> %__C, i8 zeroext %__U) {5973; X86-LABEL: test_mm256_mask3_fnmsub_ps:5974; X86: # %bb.0: # %entry5975; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax5976; X86-NEXT: kmovw %eax, %k15977; X86-NEXT: vfnmsub231ps {{.*#+}} ymm2 {%k1} = -(ymm0 * ymm1) - ymm25978; X86-NEXT: vmovaps %ymm2, %ymm05979; X86-NEXT: retl5980;5981; X64-LABEL: test_mm256_mask3_fnmsub_ps:5982; X64: # %bb.0: # %entry5983; X64-NEXT: kmovw %edi, %k15984; X64-NEXT: vfnmsub231ps {{.*#+}} ymm2 {%k1} = -(ymm0 * ymm1) - ymm25985; X64-NEXT: vmovaps %ymm2, %ymm05986; X64-NEXT: retq5987entry:5988 %sub.i = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__B5989 %sub1.i = fsub <8 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %__C5990 %0 = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %__A, <8 x float> %sub.i, <8 x float> %sub1.i) #95991 %1 = bitcast i8 %__U to <8 x i1>5992 %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> %__C5993 ret <8 x float> %25994}5995 5996define <2 x double> @test_mm_mask_expandloadu_pd(<2 x double> %__W, i8 zeroext %__U, ptr readonly %__P) {5997; X86-LABEL: test_mm_mask_expandloadu_pd:5998; X86: # %bb.0: # %entry5999; X86-NEXT: movl {{[0-9]+}}(%esp), %eax6000; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx6001; X86-NEXT: kmovw %ecx, %k16002; X86-NEXT: vexpandpd (%eax), %xmm0 {%k1}6003; X86-NEXT: retl6004;6005; X64-LABEL: test_mm_mask_expandloadu_pd:6006; X64: # %bb.0: # %entry6007; X64-NEXT: kmovw %edi, %k16008; X64-NEXT: vexpandpd (%rsi), %xmm0 {%k1}6009; X64-NEXT: retq6010entry:6011 %0 = bitcast i8 %__U to <8 x i1>6012 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>6013 %1 = tail call <2 x double> @llvm.masked.expandload.v2f64(ptr %__P, <2 x i1> %extract.i, <2 x double> %__W)6014 ret <2 x double> %16015}6016 6017define <2 x double> @test_mm_maskz_expandloadu_pd(i8 zeroext %__U, ptr readonly %__P) {6018; X86-LABEL: test_mm_maskz_expandloadu_pd:6019; X86: # %bb.0: # %entry6020; X86-NEXT: movl {{[0-9]+}}(%esp), %eax6021; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx6022; X86-NEXT: kmovw %ecx, %k16023; X86-NEXT: vexpandpd (%eax), %xmm0 {%k1} {z}6024; X86-NEXT: retl6025;6026; X64-LABEL: test_mm_maskz_expandloadu_pd:6027; X64: # %bb.0: # %entry6028; X64-NEXT: kmovw %edi, %k16029; X64-NEXT: vexpandpd (%rsi), %xmm0 {%k1} {z}6030; X64-NEXT: retq6031entry:6032 %0 = bitcast i8 %__U to <8 x i1>6033 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>6034 %1 = tail call <2 x double> @llvm.masked.expandload.v2f64(ptr %__P, <2 x i1> %extract.i, <2 x double> zeroinitializer)6035 ret <2 x double> %16036}6037 6038define <4 x double> @test_mm256_mask_expandloadu_pd(<4 x double> %__W, i8 zeroext %__U, ptr readonly %__P) {6039; X86-LABEL: test_mm256_mask_expandloadu_pd:6040; X86: # %bb.0: # %entry6041; X86-NEXT: movl {{[0-9]+}}(%esp), %eax6042; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx6043; X86-NEXT: kmovw %ecx, %k16044; X86-NEXT: vexpandpd (%eax), %ymm0 {%k1}6045; X86-NEXT: retl6046;6047; X64-LABEL: test_mm256_mask_expandloadu_pd:6048; X64: # %bb.0: # %entry6049; X64-NEXT: kmovw %edi, %k16050; X64-NEXT: vexpandpd (%rsi), %ymm0 {%k1}6051; X64-NEXT: retq6052entry:6053 %0 = bitcast i8 %__U to <8 x i1>6054 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6055 %1 = tail call <4 x double> @llvm.masked.expandload.v4f64(ptr %__P, <4 x i1> %extract.i, <4 x double> %__W)6056 ret <4 x double> %16057}6058 6059define <4 x double> @test_mm256_maskz_expandloadu_pd(i8 zeroext %__U, ptr readonly %__P) {6060; X86-LABEL: test_mm256_maskz_expandloadu_pd:6061; X86: # %bb.0: # %entry6062; X86-NEXT: movl {{[0-9]+}}(%esp), %eax6063; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx6064; X86-NEXT: kmovw %ecx, %k16065; X86-NEXT: vexpandpd (%eax), %ymm0 {%k1} {z}6066; X86-NEXT: retl6067;6068; X64-LABEL: test_mm256_maskz_expandloadu_pd:6069; X64: # %bb.0: # %entry6070; X64-NEXT: kmovw %edi, %k16071; X64-NEXT: vexpandpd (%rsi), %ymm0 {%k1} {z}6072; X64-NEXT: retq6073entry:6074 %0 = bitcast i8 %__U to <8 x i1>6075 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6076 %1 = tail call <4 x double> @llvm.masked.expandload.v4f64(ptr %__P, <4 x i1> %extract.i, <4 x double> zeroinitializer)6077 ret <4 x double> %16078}6079 6080define <2 x i64> @test_mm_mask_expandloadu_epi64(<2 x i64> %__W, i8 zeroext %__U, ptr readonly %__P) {6081; X86-LABEL: test_mm_mask_expandloadu_epi64:6082; X86: # %bb.0: # %entry6083; X86-NEXT: movl {{[0-9]+}}(%esp), %eax6084; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx6085; X86-NEXT: kmovw %ecx, %k16086; X86-NEXT: vpexpandq (%eax), %xmm0 {%k1}6087; X86-NEXT: retl6088;6089; X64-LABEL: test_mm_mask_expandloadu_epi64:6090; X64: # %bb.0: # %entry6091; X64-NEXT: kmovw %edi, %k16092; X64-NEXT: vpexpandq (%rsi), %xmm0 {%k1}6093; X64-NEXT: retq6094entry:6095 %0 = bitcast i8 %__U to <8 x i1>6096 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>6097 %1 = tail call <2 x i64> @llvm.masked.expandload.v2i64(ptr %__P, <2 x i1> %extract.i, <2 x i64> %__W) #106098 ret <2 x i64> %16099}6100 6101define <2 x i64> @test_mm_maskz_expandloadu_epi64(i8 zeroext %__U, ptr readonly %__P) {6102; X86-LABEL: test_mm_maskz_expandloadu_epi64:6103; X86: # %bb.0: # %entry6104; X86-NEXT: movl {{[0-9]+}}(%esp), %eax6105; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx6106; X86-NEXT: kmovw %ecx, %k16107; X86-NEXT: vpexpandq (%eax), %xmm0 {%k1} {z}6108; X86-NEXT: retl6109;6110; X64-LABEL: test_mm_maskz_expandloadu_epi64:6111; X64: # %bb.0: # %entry6112; X64-NEXT: kmovw %edi, %k16113; X64-NEXT: vpexpandq (%rsi), %xmm0 {%k1} {z}6114; X64-NEXT: retq6115entry:6116 %0 = bitcast i8 %__U to <8 x i1>6117 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>6118 %1 = tail call <2 x i64> @llvm.masked.expandload.v2i64(ptr %__P, <2 x i1> %extract.i, <2 x i64> zeroinitializer)6119 ret <2 x i64> %16120}6121 6122define <4 x i64> @test_mm256_mask_expandloadu_epi64(<4 x i64> %__W, i8 zeroext %__U, ptr readonly %__P) {6123; X86-LABEL: test_mm256_mask_expandloadu_epi64:6124; X86: # %bb.0: # %entry6125; X86-NEXT: movl {{[0-9]+}}(%esp), %eax6126; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx6127; X86-NEXT: kmovw %ecx, %k16128; X86-NEXT: vpexpandq (%eax), %ymm0 {%k1}6129; X86-NEXT: retl6130;6131; X64-LABEL: test_mm256_mask_expandloadu_epi64:6132; X64: # %bb.0: # %entry6133; X64-NEXT: kmovw %edi, %k16134; X64-NEXT: vpexpandq (%rsi), %ymm0 {%k1}6135; X64-NEXT: retq6136entry:6137 %0 = bitcast i8 %__U to <8 x i1>6138 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6139 %1 = tail call <4 x i64> @llvm.masked.expandload.v4i64(ptr %__P, <4 x i1> %extract.i, <4 x i64> %__W) #106140 ret <4 x i64> %16141}6142 6143define <4 x i64> @test_mm256_maskz_expandloadu_epi64(i8 zeroext %__U, ptr readonly %__P) {6144; X86-LABEL: test_mm256_maskz_expandloadu_epi64:6145; X86: # %bb.0: # %entry6146; X86-NEXT: movl {{[0-9]+}}(%esp), %eax6147; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx6148; X86-NEXT: kmovw %ecx, %k16149; X86-NEXT: vpexpandq (%eax), %ymm0 {%k1} {z}6150; X86-NEXT: retl6151;6152; X64-LABEL: test_mm256_maskz_expandloadu_epi64:6153; X64: # %bb.0: # %entry6154; X64-NEXT: kmovw %edi, %k16155; X64-NEXT: vpexpandq (%rsi), %ymm0 {%k1} {z}6156; X64-NEXT: retq6157entry:6158 %0 = bitcast i8 %__U to <8 x i1>6159 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6160 %1 = tail call <4 x i64> @llvm.masked.expandload.v4i64(ptr %__P, <4 x i1> %extract.i, <4 x i64> zeroinitializer)6161 ret <4 x i64> %16162}6163 6164define <4 x float> @test_mm_mask_expandloadu_ps(<4 x float> %__W, i8 zeroext %__U, ptr readonly %__P) {6165; X86-LABEL: test_mm_mask_expandloadu_ps:6166; X86: # %bb.0: # %entry6167; X86-NEXT: movl {{[0-9]+}}(%esp), %eax6168; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx6169; X86-NEXT: kmovw %ecx, %k16170; X86-NEXT: vexpandps (%eax), %xmm0 {%k1}6171; X86-NEXT: retl6172;6173; X64-LABEL: test_mm_mask_expandloadu_ps:6174; X64: # %bb.0: # %entry6175; X64-NEXT: kmovw %edi, %k16176; X64-NEXT: vexpandps (%rsi), %xmm0 {%k1}6177; X64-NEXT: retq6178entry:6179 %0 = bitcast i8 %__U to <8 x i1>6180 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6181 %1 = tail call <4 x float> @llvm.masked.expandload.v4f32(ptr %__P, <4 x i1> %extract.i, <4 x float> %__W)6182 ret <4 x float> %16183}6184 6185define <4 x float> @test_mm_maskz_expandloadu_ps(i8 zeroext %__U, ptr readonly %__P) {6186; X86-LABEL: test_mm_maskz_expandloadu_ps:6187; X86: # %bb.0: # %entry6188; X86-NEXT: movl {{[0-9]+}}(%esp), %eax6189; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx6190; X86-NEXT: kmovw %ecx, %k16191; X86-NEXT: vexpandps (%eax), %xmm0 {%k1} {z}6192; X86-NEXT: retl6193;6194; X64-LABEL: test_mm_maskz_expandloadu_ps:6195; X64: # %bb.0: # %entry6196; X64-NEXT: kmovw %edi, %k16197; X64-NEXT: vexpandps (%rsi), %xmm0 {%k1} {z}6198; X64-NEXT: retq6199entry:6200 %0 = bitcast i8 %__U to <8 x i1>6201 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6202 %1 = tail call <4 x float> @llvm.masked.expandload.v4f32(ptr %__P, <4 x i1> %extract.i, <4 x float> zeroinitializer)6203 ret <4 x float> %16204}6205 6206define <8 x float> @test_mm256_mask_expandloadu_ps(<8 x float> %__W, i8 zeroext %__U, ptr readonly %__P) {6207; X86-LABEL: test_mm256_mask_expandloadu_ps:6208; X86: # %bb.0: # %entry6209; X86-NEXT: movl {{[0-9]+}}(%esp), %eax6210; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx6211; X86-NEXT: kmovw %ecx, %k16212; X86-NEXT: vexpandps (%eax), %ymm0 {%k1}6213; X86-NEXT: retl6214;6215; X64-LABEL: test_mm256_mask_expandloadu_ps:6216; X64: # %bb.0: # %entry6217; X64-NEXT: kmovw %edi, %k16218; X64-NEXT: vexpandps (%rsi), %ymm0 {%k1}6219; X64-NEXT: retq6220entry:6221 %0 = bitcast i8 %__U to <8 x i1>6222 %1 = tail call <8 x float> @llvm.masked.expandload.v8f32(ptr %__P, <8 x i1> %0, <8 x float> %__W)6223 ret <8 x float> %16224}6225 6226define <8 x float> @test_mm256_maskz_expandloadu_ps(i8 zeroext %__U, ptr readonly %__P) {6227; X86-LABEL: test_mm256_maskz_expandloadu_ps:6228; X86: # %bb.0: # %entry6229; X86-NEXT: movl {{[0-9]+}}(%esp), %eax6230; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx6231; X86-NEXT: kmovw %ecx, %k16232; X86-NEXT: vexpandps (%eax), %ymm0 {%k1} {z}6233; X86-NEXT: retl6234;6235; X64-LABEL: test_mm256_maskz_expandloadu_ps:6236; X64: # %bb.0: # %entry6237; X64-NEXT: kmovw %edi, %k16238; X64-NEXT: vexpandps (%rsi), %ymm0 {%k1} {z}6239; X64-NEXT: retq6240entry:6241 %0 = bitcast i8 %__U to <8 x i1>6242 %1 = tail call <8 x float> @llvm.masked.expandload.v8f32(ptr %__P, <8 x i1> %0, <8 x float> zeroinitializer)6243 ret <8 x float> %16244}6245 6246define <2 x i64> @test_mm_mask_expandloadu_epi32(<2 x i64> %__W, i8 zeroext %__U, ptr readonly %__P) {6247; X86-LABEL: test_mm_mask_expandloadu_epi32:6248; X86: # %bb.0: # %entry6249; X86-NEXT: movl {{[0-9]+}}(%esp), %eax6250; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx6251; X86-NEXT: kmovw %ecx, %k16252; X86-NEXT: vpexpandd (%eax), %xmm0 {%k1}6253; X86-NEXT: retl6254;6255; X64-LABEL: test_mm_mask_expandloadu_epi32:6256; X64: # %bb.0: # %entry6257; X64-NEXT: kmovw %edi, %k16258; X64-NEXT: vpexpandd (%rsi), %xmm0 {%k1}6259; X64-NEXT: retq6260entry:6261 %0 = bitcast <2 x i64> %__W to <4 x i32>6262 %1 = bitcast i8 %__U to <8 x i1>6263 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6264 %2 = tail call <4 x i32> @llvm.masked.expandload.v4i32(ptr %__P, <4 x i1> %extract.i, <4 x i32> %0)6265 %3 = bitcast <4 x i32> %2 to <2 x i64>6266 ret <2 x i64> %36267}6268 6269define <2 x i64> @test_mm_maskz_expandloadu_epi32(i8 zeroext %__U, ptr readonly %__P) {6270; X86-LABEL: test_mm_maskz_expandloadu_epi32:6271; X86: # %bb.0: # %entry6272; X86-NEXT: movl {{[0-9]+}}(%esp), %eax6273; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx6274; X86-NEXT: kmovw %ecx, %k16275; X86-NEXT: vpexpandd (%eax), %xmm0 {%k1} {z}6276; X86-NEXT: retl6277;6278; X64-LABEL: test_mm_maskz_expandloadu_epi32:6279; X64: # %bb.0: # %entry6280; X64-NEXT: kmovw %edi, %k16281; X64-NEXT: vpexpandd (%rsi), %xmm0 {%k1} {z}6282; X64-NEXT: retq6283entry:6284 %0 = bitcast i8 %__U to <8 x i1>6285 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6286 %1 = tail call <4 x i32> @llvm.masked.expandload.v4i32(ptr %__P, <4 x i1> %extract.i, <4 x i32> zeroinitializer)6287 %2 = bitcast <4 x i32> %1 to <2 x i64>6288 ret <2 x i64> %26289}6290 6291define <4 x i64> @test_mm256_mask_expandloadu_epi32(<4 x i64> %__W, i8 zeroext %__U, ptr readonly %__P) {6292; X86-LABEL: test_mm256_mask_expandloadu_epi32:6293; X86: # %bb.0: # %entry6294; X86-NEXT: movl {{[0-9]+}}(%esp), %eax6295; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx6296; X86-NEXT: kmovw %ecx, %k16297; X86-NEXT: vpexpandd (%eax), %ymm0 {%k1}6298; X86-NEXT: retl6299;6300; X64-LABEL: test_mm256_mask_expandloadu_epi32:6301; X64: # %bb.0: # %entry6302; X64-NEXT: kmovw %edi, %k16303; X64-NEXT: vpexpandd (%rsi), %ymm0 {%k1}6304; X64-NEXT: retq6305entry:6306 %0 = bitcast <4 x i64> %__W to <8 x i32>6307 %1 = bitcast i8 %__U to <8 x i1>6308 %2 = tail call <8 x i32> @llvm.masked.expandload.v8i32(ptr %__P, <8 x i1> %1, <8 x i32> %0)6309 %3 = bitcast <8 x i32> %2 to <4 x i64>6310 ret <4 x i64> %36311}6312 6313define <4 x i64> @test_mm256_maskz_expandloadu_epi32(i8 zeroext %__U, ptr readonly %__P) {6314; X86-LABEL: test_mm256_maskz_expandloadu_epi32:6315; X86: # %bb.0: # %entry6316; X86-NEXT: movl {{[0-9]+}}(%esp), %eax6317; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx6318; X86-NEXT: kmovw %ecx, %k16319; X86-NEXT: vpexpandd (%eax), %ymm0 {%k1} {z}6320; X86-NEXT: retl6321;6322; X64-LABEL: test_mm256_maskz_expandloadu_epi32:6323; X64: # %bb.0: # %entry6324; X64-NEXT: kmovw %edi, %k16325; X64-NEXT: vpexpandd (%rsi), %ymm0 {%k1} {z}6326; X64-NEXT: retq6327entry:6328 %0 = bitcast i8 %__U to <8 x i1>6329 %1 = tail call <8 x i32> @llvm.masked.expandload.v8i32(ptr %__P, <8 x i1> %0, <8 x i32> zeroinitializer)6330 %2 = bitcast <8 x i32> %1 to <4 x i64>6331 ret <4 x i64> %26332}6333 6334define void @test_mm_mask_compressstoreu_pd(ptr %__P, i8 zeroext %__U, <2 x double> %__A) {6335; X86-LABEL: test_mm_mask_compressstoreu_pd:6336; X86: # %bb.0: # %entry6337; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6338; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx6339; X86-NEXT: kmovw %eax, %k16340; X86-NEXT: vcompresspd %xmm0, (%ecx) {%k1}6341; X86-NEXT: retl6342;6343; X64-LABEL: test_mm_mask_compressstoreu_pd:6344; X64: # %bb.0: # %entry6345; X64-NEXT: kmovw %esi, %k16346; X64-NEXT: vcompresspd %xmm0, (%rdi) {%k1}6347; X64-NEXT: retq6348entry:6349 %0 = bitcast i8 %__U to <8 x i1>6350 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>6351 tail call void @llvm.masked.compressstore.v2f64(<2 x double> %__A, ptr %__P, <2 x i1> %extract.i)6352 ret void6353}6354 6355define void @test_mm256_mask_compressstoreu_pd(ptr %__P, i8 zeroext %__U, <4 x double> %__A) {6356; X86-LABEL: test_mm256_mask_compressstoreu_pd:6357; X86: # %bb.0: # %entry6358; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6359; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx6360; X86-NEXT: kmovw %eax, %k16361; X86-NEXT: vcompresspd %ymm0, (%ecx) {%k1}6362; X86-NEXT: vzeroupper6363; X86-NEXT: retl6364;6365; X64-LABEL: test_mm256_mask_compressstoreu_pd:6366; X64: # %bb.0: # %entry6367; X64-NEXT: kmovw %esi, %k16368; X64-NEXT: vcompresspd %ymm0, (%rdi) {%k1}6369; X64-NEXT: vzeroupper6370; X64-NEXT: retq6371entry:6372 %0 = bitcast i8 %__U to <8 x i1>6373 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6374 tail call void @llvm.masked.compressstore.v4f64(<4 x double> %__A, ptr %__P, <4 x i1> %extract.i)6375 ret void6376}6377 6378define void @test_mm_mask_compressstoreu_epi64(ptr %__P, i8 zeroext %__U, <2 x i64> %__A) {6379; X86-LABEL: test_mm_mask_compressstoreu_epi64:6380; X86: # %bb.0: # %entry6381; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6382; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx6383; X86-NEXT: kmovw %eax, %k16384; X86-NEXT: vpcompressq %xmm0, (%ecx) {%k1}6385; X86-NEXT: retl6386;6387; X64-LABEL: test_mm_mask_compressstoreu_epi64:6388; X64: # %bb.0: # %entry6389; X64-NEXT: kmovw %esi, %k16390; X64-NEXT: vpcompressq %xmm0, (%rdi) {%k1}6391; X64-NEXT: retq6392entry:6393 %0 = bitcast i8 %__U to <8 x i1>6394 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <2 x i32> <i32 0, i32 1>6395 tail call void @llvm.masked.compressstore.v2i64(<2 x i64> %__A, ptr %__P, <2 x i1> %extract.i)6396 ret void6397}6398 6399define void @test_mm256_mask_compressstoreu_epi64(ptr %__P, i8 zeroext %__U, <4 x i64> %__A) {6400; X86-LABEL: test_mm256_mask_compressstoreu_epi64:6401; X86: # %bb.0: # %entry6402; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6403; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx6404; X86-NEXT: kmovw %eax, %k16405; X86-NEXT: vpcompressq %ymm0, (%ecx) {%k1}6406; X86-NEXT: vzeroupper6407; X86-NEXT: retl6408;6409; X64-LABEL: test_mm256_mask_compressstoreu_epi64:6410; X64: # %bb.0: # %entry6411; X64-NEXT: kmovw %esi, %k16412; X64-NEXT: vpcompressq %ymm0, (%rdi) {%k1}6413; X64-NEXT: vzeroupper6414; X64-NEXT: retq6415entry:6416 %0 = bitcast i8 %__U to <8 x i1>6417 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6418 tail call void @llvm.masked.compressstore.v4i64(<4 x i64> %__A, ptr %__P, <4 x i1> %extract.i)6419 ret void6420}6421 6422define void @test_mm_mask_compressstoreu_ps(ptr %__P, i8 zeroext %__U, <4 x float> %__A) {6423; X86-LABEL: test_mm_mask_compressstoreu_ps:6424; X86: # %bb.0: # %entry6425; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6426; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx6427; X86-NEXT: kmovw %eax, %k16428; X86-NEXT: vcompressps %xmm0, (%ecx) {%k1}6429; X86-NEXT: retl6430;6431; X64-LABEL: test_mm_mask_compressstoreu_ps:6432; X64: # %bb.0: # %entry6433; X64-NEXT: kmovw %esi, %k16434; X64-NEXT: vcompressps %xmm0, (%rdi) {%k1}6435; X64-NEXT: retq6436entry:6437 %0 = bitcast i8 %__U to <8 x i1>6438 %extract.i = shufflevector <8 x i1> %0, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6439 tail call void @llvm.masked.compressstore.v4f32(<4 x float> %__A, ptr %__P, <4 x i1> %extract.i)6440 ret void6441}6442 6443define void @test_mm256_mask_compressstoreu_ps(ptr %__P, i8 zeroext %__U, <8 x float> %__A) {6444; X86-LABEL: test_mm256_mask_compressstoreu_ps:6445; X86: # %bb.0: # %entry6446; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6447; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx6448; X86-NEXT: kmovw %eax, %k16449; X86-NEXT: vcompressps %ymm0, (%ecx) {%k1}6450; X86-NEXT: vzeroupper6451; X86-NEXT: retl6452;6453; X64-LABEL: test_mm256_mask_compressstoreu_ps:6454; X64: # %bb.0: # %entry6455; X64-NEXT: kmovw %esi, %k16456; X64-NEXT: vcompressps %ymm0, (%rdi) {%k1}6457; X64-NEXT: vzeroupper6458; X64-NEXT: retq6459entry:6460 %0 = bitcast i8 %__U to <8 x i1>6461 tail call void @llvm.masked.compressstore.v8f32(<8 x float> %__A, ptr %__P, <8 x i1> %0)6462 ret void6463}6464 6465define void @test_mm_mask_compressstoreu_epi32(ptr %__P, i8 zeroext %__U, <2 x i64> %__A) {6466; X86-LABEL: test_mm_mask_compressstoreu_epi32:6467; X86: # %bb.0: # %entry6468; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6469; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx6470; X86-NEXT: kmovw %eax, %k16471; X86-NEXT: vpcompressd %xmm0, (%ecx) {%k1}6472; X86-NEXT: retl6473;6474; X64-LABEL: test_mm_mask_compressstoreu_epi32:6475; X64: # %bb.0: # %entry6476; X64-NEXT: kmovw %esi, %k16477; X64-NEXT: vpcompressd %xmm0, (%rdi) {%k1}6478; X64-NEXT: retq6479entry:6480 %0 = bitcast <2 x i64> %__A to <4 x i32>6481 %1 = bitcast i8 %__U to <8 x i1>6482 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6483 tail call void @llvm.masked.compressstore.v4i32(<4 x i32> %0, ptr %__P, <4 x i1> %extract.i)6484 ret void6485}6486 6487define void @test_mm256_mask_compressstoreu_epi32(ptr %__P, i8 zeroext %__U, <4 x i64> %__A) {6488; X86-LABEL: test_mm256_mask_compressstoreu_epi32:6489; X86: # %bb.0: # %entry6490; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6491; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx6492; X86-NEXT: kmovw %eax, %k16493; X86-NEXT: vpcompressd %ymm0, (%ecx) {%k1}6494; X86-NEXT: vzeroupper6495; X86-NEXT: retl6496;6497; X64-LABEL: test_mm256_mask_compressstoreu_epi32:6498; X64: # %bb.0: # %entry6499; X64-NEXT: kmovw %esi, %k16500; X64-NEXT: vpcompressd %ymm0, (%rdi) {%k1}6501; X64-NEXT: vzeroupper6502; X64-NEXT: retq6503entry:6504 %0 = bitcast <4 x i64> %__A to <8 x i32>6505 %1 = bitcast i8 %__U to <8 x i1>6506 tail call void @llvm.masked.compressstore.v8i32(<8 x i32> %0, ptr %__P, <8 x i1> %1) #106507 ret void6508}6509 6510 6511declare <2 x double> @llvm.fma.v2f64(<2 x double>, <2 x double>, <2 x double>) #86512declare <4 x double> @llvm.fma.v4f64(<4 x double>, <4 x double>, <4 x double>) #86513declare <4 x float> @llvm.fma.v4f32(<4 x float>, <4 x float>, <4 x float>) #86514declare <8 x float> @llvm.fma.v8f32(<8 x float>, <8 x float>, <8 x float>) #86515 6516define <2 x double> @test_mm_mask_sqrt_pd(<2 x double> %__W, i8 zeroext %__U, <2 x double> %__A) {6517; X86-LABEL: test_mm_mask_sqrt_pd:6518; X86: # %bb.0: # %entry6519; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6520; X86-NEXT: kmovw %eax, %k16521; X86-NEXT: vsqrtpd %xmm1, %xmm0 {%k1}6522; X86-NEXT: retl6523;6524; X64-LABEL: test_mm_mask_sqrt_pd:6525; X64: # %bb.0: # %entry6526; X64-NEXT: kmovw %edi, %k16527; X64-NEXT: vsqrtpd %xmm1, %xmm0 {%k1}6528; X64-NEXT: retq6529entry:6530 %0 = tail call <2 x double> @llvm.sqrt.v2f64(<2 x double> %__A) #26531 %1 = bitcast i8 %__U to <8 x i1>6532 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>6533 %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> %__W6534 ret <2 x double> %26535}6536 6537declare <2 x double> @llvm.sqrt.v2f64(<2 x double>)6538 6539define <2 x double> @test_mm_maskz_sqrt_pd(i8 zeroext %__U, <2 x double> %__A) {6540; X86-LABEL: test_mm_maskz_sqrt_pd:6541; X86: # %bb.0: # %entry6542; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6543; X86-NEXT: kmovw %eax, %k16544; X86-NEXT: vsqrtpd %xmm0, %xmm0 {%k1} {z}6545; X86-NEXT: retl6546;6547; X64-LABEL: test_mm_maskz_sqrt_pd:6548; X64: # %bb.0: # %entry6549; X64-NEXT: kmovw %edi, %k16550; X64-NEXT: vsqrtpd %xmm0, %xmm0 {%k1} {z}6551; X64-NEXT: retq6552entry:6553 %0 = tail call <2 x double> @llvm.sqrt.v2f64(<2 x double> %__A) #26554 %1 = bitcast i8 %__U to <8 x i1>6555 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>6556 %2 = select <2 x i1> %extract.i, <2 x double> %0, <2 x double> zeroinitializer6557 ret <2 x double> %26558}6559 6560define <4 x double> @test_mm256_mask_sqrt_pd(<4 x double> %__W, i8 zeroext %__U, <4 x double> %__A) {6561; X86-LABEL: test_mm256_mask_sqrt_pd:6562; X86: # %bb.0: # %entry6563; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6564; X86-NEXT: kmovw %eax, %k16565; X86-NEXT: vsqrtpd %ymm1, %ymm0 {%k1}6566; X86-NEXT: retl6567;6568; X64-LABEL: test_mm256_mask_sqrt_pd:6569; X64: # %bb.0: # %entry6570; X64-NEXT: kmovw %edi, %k16571; X64-NEXT: vsqrtpd %ymm1, %ymm0 {%k1}6572; X64-NEXT: retq6573entry:6574 %0 = tail call <4 x double> @llvm.sqrt.v4f64(<4 x double> %__A) #26575 %1 = bitcast i8 %__U to <8 x i1>6576 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6577 %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> %__W6578 ret <4 x double> %26579}6580 6581declare <4 x double> @llvm.sqrt.v4f64(<4 x double>)6582 6583define <4 x double> @test_mm256_maskz_sqrt_pd(i8 zeroext %__U, <4 x double> %__A) {6584; X86-LABEL: test_mm256_maskz_sqrt_pd:6585; X86: # %bb.0: # %entry6586; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6587; X86-NEXT: kmovw %eax, %k16588; X86-NEXT: vsqrtpd %ymm0, %ymm0 {%k1} {z}6589; X86-NEXT: retl6590;6591; X64-LABEL: test_mm256_maskz_sqrt_pd:6592; X64: # %bb.0: # %entry6593; X64-NEXT: kmovw %edi, %k16594; X64-NEXT: vsqrtpd %ymm0, %ymm0 {%k1} {z}6595; X64-NEXT: retq6596entry:6597 %0 = tail call <4 x double> @llvm.sqrt.v4f64(<4 x double> %__A) #26598 %1 = bitcast i8 %__U to <8 x i1>6599 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6600 %2 = select <4 x i1> %extract.i, <4 x double> %0, <4 x double> zeroinitializer6601 ret <4 x double> %26602}6603 6604define <4 x float> @test_mm_mask_sqrt_ps(<4 x float> %__W, i8 zeroext %__U, <4 x float> %__A) {6605; X86-LABEL: test_mm_mask_sqrt_ps:6606; X86: # %bb.0: # %entry6607; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6608; X86-NEXT: kmovw %eax, %k16609; X86-NEXT: vsqrtps %xmm1, %xmm0 {%k1}6610; X86-NEXT: retl6611;6612; X64-LABEL: test_mm_mask_sqrt_ps:6613; X64: # %bb.0: # %entry6614; X64-NEXT: kmovw %edi, %k16615; X64-NEXT: vsqrtps %xmm1, %xmm0 {%k1}6616; X64-NEXT: retq6617entry:6618 %0 = tail call <4 x float> @llvm.sqrt.v4f32(<4 x float> %__A) #26619 %1 = bitcast i8 %__U to <8 x i1>6620 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6621 %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> %__W6622 ret <4 x float> %26623}6624 6625declare <4 x float> @llvm.sqrt.v4f32(<4 x float>)6626 6627define <4 x float> @test_mm_maskz_sqrt_ps(i8 zeroext %__U, <4 x float> %__A) {6628; X86-LABEL: test_mm_maskz_sqrt_ps:6629; X86: # %bb.0: # %entry6630; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6631; X86-NEXT: kmovw %eax, %k16632; X86-NEXT: vsqrtps %xmm0, %xmm0 {%k1} {z}6633; X86-NEXT: retl6634;6635; X64-LABEL: test_mm_maskz_sqrt_ps:6636; X64: # %bb.0: # %entry6637; X64-NEXT: kmovw %edi, %k16638; X64-NEXT: vsqrtps %xmm0, %xmm0 {%k1} {z}6639; X64-NEXT: retq6640entry:6641 %0 = tail call <4 x float> @llvm.sqrt.v4f32(<4 x float> %__A) #26642 %1 = bitcast i8 %__U to <8 x i1>6643 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6644 %2 = select <4 x i1> %extract.i, <4 x float> %0, <4 x float> zeroinitializer6645 ret <4 x float> %26646}6647 6648define <8 x float> @test_mm256_mask_sqrt_ps(<8 x float> %__W, i8 zeroext %__U, <8 x float> %__A) {6649; X86-LABEL: test_mm256_mask_sqrt_ps:6650; X86: # %bb.0: # %entry6651; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6652; X86-NEXT: kmovw %eax, %k16653; X86-NEXT: vsqrtps %ymm1, %ymm0 {%k1}6654; X86-NEXT: retl6655;6656; X64-LABEL: test_mm256_mask_sqrt_ps:6657; X64: # %bb.0: # %entry6658; X64-NEXT: kmovw %edi, %k16659; X64-NEXT: vsqrtps %ymm1, %ymm0 {%k1}6660; X64-NEXT: retq6661entry:6662 %0 = tail call <8 x float> @llvm.sqrt.v8f32(<8 x float> %__A) #26663 %1 = bitcast i8 %__U to <8 x i1>6664 %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> %__W6665 ret <8 x float> %26666}6667 6668define <8 x float> @test_mm256_maskz_sqrt_ps(i8 zeroext %__U, <8 x float> %__A) {6669; X86-LABEL: test_mm256_maskz_sqrt_ps:6670; X86: # %bb.0: # %entry6671; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6672; X86-NEXT: kmovw %eax, %k16673; X86-NEXT: vsqrtps %ymm0, %ymm0 {%k1} {z}6674; X86-NEXT: retl6675;6676; X64-LABEL: test_mm256_maskz_sqrt_ps:6677; X64: # %bb.0: # %entry6678; X64-NEXT: kmovw %edi, %k16679; X64-NEXT: vsqrtps %ymm0, %ymm0 {%k1} {z}6680; X64-NEXT: retq6681entry:6682 %0 = tail call <8 x float> @llvm.sqrt.v8f32(<8 x float> %__A) #26683 %1 = bitcast i8 %__U to <8 x i1>6684 %2 = select <8 x i1> %1, <8 x float> %0, <8 x float> zeroinitializer6685 ret <8 x float> %26686}6687 6688declare <8 x float> @llvm.sqrt.v8f32(<8 x float>)6689 6690define <2 x i64> @test_mm_rol_epi32(<2 x i64> %__A) {6691; CHECK-LABEL: test_mm_rol_epi32:6692; CHECK: # %bb.0: # %entry6693; CHECK-NEXT: vprold $5, %xmm0, %xmm06694; CHECK-NEXT: ret{{[l|q]}}6695entry:6696 %0 = bitcast <2 x i64> %__A to <4 x i32>6697 %1 = tail call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %0, <4 x i32> %0, <4 x i32> <i32 5, i32 5, i32 5, i32 5>)6698 %2 = bitcast <4 x i32> %1 to <2 x i64>6699 ret <2 x i64> %26700}6701 6702define <2 x i64> @test_mm_mask_rol_epi32(<2 x i64> %__W, i8 zeroext %__U, <2 x i64> %__A) {6703; X86-LABEL: test_mm_mask_rol_epi32:6704; X86: # %bb.0: # %entry6705; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6706; X86-NEXT: kmovw %eax, %k16707; X86-NEXT: vprold $5, %xmm1, %xmm0 {%k1}6708; X86-NEXT: retl6709;6710; X64-LABEL: test_mm_mask_rol_epi32:6711; X64: # %bb.0: # %entry6712; X64-NEXT: kmovw %edi, %k16713; X64-NEXT: vprold $5, %xmm1, %xmm0 {%k1}6714; X64-NEXT: retq6715entry:6716 %0 = bitcast <2 x i64> %__A to <4 x i32>6717 %1 = tail call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %0, <4 x i32> %0, <4 x i32> <i32 5, i32 5, i32 5, i32 5>)6718 %2 = bitcast <2 x i64> %__W to <4 x i32>6719 %3 = bitcast i8 %__U to <8 x i1>6720 %extract = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6721 %4 = select <4 x i1> %extract, <4 x i32> %1, <4 x i32> %26722 %5 = bitcast <4 x i32> %4 to <2 x i64>6723 ret <2 x i64> %56724}6725 6726define <2 x i64> @test_mm_maskz_rol_epi32(i8 zeroext %__U, <2 x i64> %__A) {6727; X86-LABEL: test_mm_maskz_rol_epi32:6728; X86: # %bb.0: # %entry6729; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6730; X86-NEXT: kmovw %eax, %k16731; X86-NEXT: vprold $5, %xmm0, %xmm0 {%k1} {z}6732; X86-NEXT: retl6733;6734; X64-LABEL: test_mm_maskz_rol_epi32:6735; X64: # %bb.0: # %entry6736; X64-NEXT: kmovw %edi, %k16737; X64-NEXT: vprold $5, %xmm0, %xmm0 {%k1} {z}6738; X64-NEXT: retq6739entry:6740 %0 = bitcast <2 x i64> %__A to <4 x i32>6741 %1 = tail call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %0, <4 x i32> %0, <4 x i32> <i32 5, i32 5, i32 5, i32 5>)6742 %2 = bitcast i8 %__U to <8 x i1>6743 %extract = shufflevector <8 x i1> %2, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6744 %3 = select <4 x i1> %extract, <4 x i32> %1, <4 x i32> zeroinitializer6745 %4 = bitcast <4 x i32> %3 to <2 x i64>6746 ret <2 x i64> %46747}6748 6749define <4 x i64> @test_mm256_rol_epi32(<4 x i64> %__A) {6750; CHECK-LABEL: test_mm256_rol_epi32:6751; CHECK: # %bb.0: # %entry6752; CHECK-NEXT: vprold $5, %ymm0, %ymm06753; CHECK-NEXT: ret{{[l|q]}}6754entry:6755 %0 = bitcast <4 x i64> %__A to <8 x i32>6756 %1 = tail call <8 x i32> @llvm.fshl.v8i32(<8 x i32> %0, <8 x i32> %0, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>)6757 %2 = bitcast <8 x i32> %1 to <4 x i64>6758 ret <4 x i64> %26759}6760 6761define <4 x i64> @test_mm256_mask_rol_epi32(<4 x i64> %__W, i8 zeroext %__U, <4 x i64> %__A) {6762; X86-LABEL: test_mm256_mask_rol_epi32:6763; X86: # %bb.0: # %entry6764; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6765; X86-NEXT: kmovw %eax, %k16766; X86-NEXT: vprold $5, %ymm1, %ymm0 {%k1}6767; X86-NEXT: retl6768;6769; X64-LABEL: test_mm256_mask_rol_epi32:6770; X64: # %bb.0: # %entry6771; X64-NEXT: kmovw %edi, %k16772; X64-NEXT: vprold $5, %ymm1, %ymm0 {%k1}6773; X64-NEXT: retq6774entry:6775 %0 = bitcast <4 x i64> %__A to <8 x i32>6776 %1 = tail call <8 x i32> @llvm.fshl.v8i32(<8 x i32> %0, <8 x i32> %0, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>)6777 %2 = bitcast <4 x i64> %__W to <8 x i32>6778 %3 = bitcast i8 %__U to <8 x i1>6779 %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %26780 %5 = bitcast <8 x i32> %4 to <4 x i64>6781 ret <4 x i64> %56782}6783 6784define <4 x i64> @test_mm256_maskz_rol_epi32(i8 zeroext %__U, <4 x i64> %__A) {6785; X86-LABEL: test_mm256_maskz_rol_epi32:6786; X86: # %bb.0: # %entry6787; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6788; X86-NEXT: kmovw %eax, %k16789; X86-NEXT: vprold $5, %ymm0, %ymm0 {%k1} {z}6790; X86-NEXT: retl6791;6792; X64-LABEL: test_mm256_maskz_rol_epi32:6793; X64: # %bb.0: # %entry6794; X64-NEXT: kmovw %edi, %k16795; X64-NEXT: vprold $5, %ymm0, %ymm0 {%k1} {z}6796; X64-NEXT: retq6797entry:6798 %0 = bitcast <4 x i64> %__A to <8 x i32>6799 %1 = tail call <8 x i32> @llvm.fshl.v8i32(<8 x i32> %0, <8 x i32> %0, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>)6800 %2 = bitcast i8 %__U to <8 x i1>6801 %3 = select <8 x i1> %2, <8 x i32> %1, <8 x i32> zeroinitializer6802 %4 = bitcast <8 x i32> %3 to <4 x i64>6803 ret <4 x i64> %46804}6805 6806define <2 x i64> @test_mm_rol_epi64(<2 x i64> %__A) {6807; CHECK-LABEL: test_mm_rol_epi64:6808; CHECK: # %bb.0: # %entry6809; CHECK-NEXT: vprolq $5, %xmm0, %xmm06810; CHECK-NEXT: ret{{[l|q]}}6811entry:6812 %0 = tail call <2 x i64> @llvm.fshl.v2i64(<2 x i64> %__A, <2 x i64> %__A, <2 x i64> <i64 5, i64 5>)6813 ret <2 x i64> %06814}6815 6816define <2 x i64> @test_mm_mask_rol_epi64(<2 x i64> %__W, i8 zeroext %__U, <2 x i64> %__A) {6817; X86-LABEL: test_mm_mask_rol_epi64:6818; X86: # %bb.0: # %entry6819; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6820; X86-NEXT: kmovw %eax, %k16821; X86-NEXT: vprolq $5, %xmm1, %xmm0 {%k1}6822; X86-NEXT: retl6823;6824; X64-LABEL: test_mm_mask_rol_epi64:6825; X64: # %bb.0: # %entry6826; X64-NEXT: kmovw %edi, %k16827; X64-NEXT: vprolq $5, %xmm1, %xmm0 {%k1}6828; X64-NEXT: retq6829entry:6830 %0 = tail call <2 x i64> @llvm.fshl.v2i64(<2 x i64> %__A, <2 x i64> %__A, <2 x i64> <i64 5, i64 5>)6831 %1 = bitcast i8 %__U to <8 x i1>6832 %extract = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>6833 %2 = select <2 x i1> %extract, <2 x i64> %0, <2 x i64> %__W6834 ret <2 x i64> %26835}6836 6837define <2 x i64> @test_mm_maskz_rol_epi64(i8 zeroext %__U, <2 x i64> %__A) {6838; X86-LABEL: test_mm_maskz_rol_epi64:6839; X86: # %bb.0: # %entry6840; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6841; X86-NEXT: kmovw %eax, %k16842; X86-NEXT: vprolq $5, %xmm0, %xmm0 {%k1} {z}6843; X86-NEXT: retl6844;6845; X64-LABEL: test_mm_maskz_rol_epi64:6846; X64: # %bb.0: # %entry6847; X64-NEXT: kmovw %edi, %k16848; X64-NEXT: vprolq $5, %xmm0, %xmm0 {%k1} {z}6849; X64-NEXT: retq6850entry:6851 %0 = tail call <2 x i64> @llvm.fshl.v2i64(<2 x i64> %__A, <2 x i64> %__A, <2 x i64> <i64 5, i64 5>)6852 %1 = bitcast i8 %__U to <8 x i1>6853 %extract = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>6854 %2 = select <2 x i1> %extract, <2 x i64> %0, <2 x i64> zeroinitializer6855 ret <2 x i64> %26856}6857 6858define <4 x i64> @test_mm256_rol_epi64(<4 x i64> %__A) {6859; CHECK-LABEL: test_mm256_rol_epi64:6860; CHECK: # %bb.0: # %entry6861; CHECK-NEXT: vprolq $5, %ymm0, %ymm06862; CHECK-NEXT: ret{{[l|q]}}6863entry:6864 %0 = tail call <4 x i64> @llvm.fshl.v4i64(<4 x i64> %__A, <4 x i64> %__A, <4 x i64> <i64 5, i64 5,i64 5, i64 5>)6865 ret <4 x i64> %06866}6867 6868define <4 x i64> @test_mm256_mask_rol_epi64(<4 x i64> %__W, i8 zeroext %__U, <4 x i64> %__A) {6869; X86-LABEL: test_mm256_mask_rol_epi64:6870; X86: # %bb.0: # %entry6871; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6872; X86-NEXT: kmovw %eax, %k16873; X86-NEXT: vprolq $5, %ymm1, %ymm0 {%k1}6874; X86-NEXT: retl6875;6876; X64-LABEL: test_mm256_mask_rol_epi64:6877; X64: # %bb.0: # %entry6878; X64-NEXT: kmovw %edi, %k16879; X64-NEXT: vprolq $5, %ymm1, %ymm0 {%k1}6880; X64-NEXT: retq6881entry:6882 %0 = tail call <4 x i64> @llvm.fshl.v4i64(<4 x i64> %__A, <4 x i64> %__A, <4 x i64> <i64 5, i64 5,i64 5, i64 5>)6883 %1 = bitcast i8 %__U to <8 x i1>6884 %extract = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6885 %2 = select <4 x i1> %extract, <4 x i64> %0, <4 x i64> %__W6886 ret <4 x i64> %26887}6888 6889define <4 x i64> @test_mm256_maskz_rol_epi64(i8 zeroext %__U, <4 x i64> %__A) {6890; X86-LABEL: test_mm256_maskz_rol_epi64:6891; X86: # %bb.0: # %entry6892; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6893; X86-NEXT: kmovw %eax, %k16894; X86-NEXT: vprolq $5, %ymm0, %ymm0 {%k1} {z}6895; X86-NEXT: retl6896;6897; X64-LABEL: test_mm256_maskz_rol_epi64:6898; X64: # %bb.0: # %entry6899; X64-NEXT: kmovw %edi, %k16900; X64-NEXT: vprolq $5, %ymm0, %ymm0 {%k1} {z}6901; X64-NEXT: retq6902entry:6903 %0 = tail call <4 x i64> @llvm.fshl.v4i64(<4 x i64> %__A, <4 x i64> %__A, <4 x i64> <i64 5, i64 5,i64 5, i64 5>)6904 %1 = bitcast i8 %__U to <8 x i1>6905 %extract = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6906 %2 = select <4 x i1> %extract, <4 x i64> %0, <4 x i64> zeroinitializer6907 ret <4 x i64> %26908}6909 6910define <2 x i64> @test_mm_rolv_epi32(<2 x i64> %__A, <2 x i64> %__B) {6911; CHECK-LABEL: test_mm_rolv_epi32:6912; CHECK: # %bb.0: # %entry6913; CHECK-NEXT: vprolvd %xmm1, %xmm0, %xmm06914; CHECK-NEXT: ret{{[l|q]}}6915entry:6916 %0 = bitcast <2 x i64> %__A to <4 x i32>6917 %1 = bitcast <2 x i64> %__B to <4 x i32>6918 %2 = tail call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %0, <4 x i32> %0, <4 x i32> %1)6919 %3 = bitcast <4 x i32> %2 to <2 x i64>6920 ret <2 x i64> %36921}6922 6923define <2 x i64> @test_mm_mask_rolv_epi32(<2 x i64> %__W, i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) {6924; X86-LABEL: test_mm_mask_rolv_epi32:6925; X86: # %bb.0: # %entry6926; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6927; X86-NEXT: kmovw %eax, %k16928; X86-NEXT: vprolvd %xmm2, %xmm1, %xmm0 {%k1}6929; X86-NEXT: retl6930;6931; X64-LABEL: test_mm_mask_rolv_epi32:6932; X64: # %bb.0: # %entry6933; X64-NEXT: kmovw %edi, %k16934; X64-NEXT: vprolvd %xmm2, %xmm1, %xmm0 {%k1}6935; X64-NEXT: retq6936entry:6937 %0 = bitcast <2 x i64> %__A to <4 x i32>6938 %1 = bitcast <2 x i64> %__B to <4 x i32>6939 %2 = tail call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %0, <4 x i32> %0, <4 x i32> %1)6940 %3 = bitcast <2 x i64> %__W to <4 x i32>6941 %4 = bitcast i8 %__U to <8 x i1>6942 %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6943 %5 = select <4 x i1> %extract.i, <4 x i32> %2, <4 x i32> %36944 %6 = bitcast <4 x i32> %5 to <2 x i64>6945 ret <2 x i64> %66946}6947 6948define <2 x i64> @test_mm_maskz_rolv_epi32(i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) {6949; X86-LABEL: test_mm_maskz_rolv_epi32:6950; X86: # %bb.0: # %entry6951; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6952; X86-NEXT: kmovw %eax, %k16953; X86-NEXT: vprolvd %xmm1, %xmm0, %xmm0 {%k1} {z}6954; X86-NEXT: retl6955;6956; X64-LABEL: test_mm_maskz_rolv_epi32:6957; X64: # %bb.0: # %entry6958; X64-NEXT: kmovw %edi, %k16959; X64-NEXT: vprolvd %xmm1, %xmm0, %xmm0 {%k1} {z}6960; X64-NEXT: retq6961entry:6962 %0 = bitcast <2 x i64> %__A to <4 x i32>6963 %1 = bitcast <2 x i64> %__B to <4 x i32>6964 %2 = tail call <4 x i32> @llvm.fshl.v4i32(<4 x i32> %0, <4 x i32> %0, <4 x i32> %1)6965 %3 = bitcast i8 %__U to <8 x i1>6966 %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>6967 %4 = select <4 x i1> %extract.i, <4 x i32> %2, <4 x i32> zeroinitializer6968 %5 = bitcast <4 x i32> %4 to <2 x i64>6969 ret <2 x i64> %56970}6971 6972define <4 x i64> @test_mm256_rolv_epi32(<4 x i64> %__A, <4 x i64> %__B) {6973; CHECK-LABEL: test_mm256_rolv_epi32:6974; CHECK: # %bb.0: # %entry6975; CHECK-NEXT: vprolvd %ymm1, %ymm0, %ymm06976; CHECK-NEXT: ret{{[l|q]}}6977entry:6978 %0 = bitcast <4 x i64> %__A to <8 x i32>6979 %1 = bitcast <4 x i64> %__B to <8 x i32>6980 %2 = tail call <8 x i32> @llvm.fshl.v8i32(<8 x i32> %0, <8 x i32> %0, <8 x i32> %1)6981 %3 = bitcast <8 x i32> %2 to <4 x i64>6982 ret <4 x i64> %36983}6984 6985define <4 x i64> @test_mm256_mask_rolv_epi32(<4 x i64> %__W, i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) {6986; X86-LABEL: test_mm256_mask_rolv_epi32:6987; X86: # %bb.0: # %entry6988; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax6989; X86-NEXT: kmovw %eax, %k16990; X86-NEXT: vprolvd %ymm2, %ymm1, %ymm0 {%k1}6991; X86-NEXT: retl6992;6993; X64-LABEL: test_mm256_mask_rolv_epi32:6994; X64: # %bb.0: # %entry6995; X64-NEXT: kmovw %edi, %k16996; X64-NEXT: vprolvd %ymm2, %ymm1, %ymm0 {%k1}6997; X64-NEXT: retq6998entry:6999 %0 = bitcast <4 x i64> %__A to <8 x i32>7000 %1 = bitcast <4 x i64> %__B to <8 x i32>7001 %2 = tail call <8 x i32> @llvm.fshl.v8i32(<8 x i32> %0, <8 x i32> %0, <8 x i32> %1)7002 %3 = bitcast <4 x i64> %__W to <8 x i32>7003 %4 = bitcast i8 %__U to <8 x i1>7004 %5 = select <8 x i1> %4, <8 x i32> %2, <8 x i32> %37005 %6 = bitcast <8 x i32> %5 to <4 x i64>7006 ret <4 x i64> %67007}7008 7009define <4 x i64> @test_mm256_maskz_rolv_epi32(i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) {7010; X86-LABEL: test_mm256_maskz_rolv_epi32:7011; X86: # %bb.0: # %entry7012; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7013; X86-NEXT: kmovw %eax, %k17014; X86-NEXT: vprolvd %ymm1, %ymm0, %ymm0 {%k1} {z}7015; X86-NEXT: retl7016;7017; X64-LABEL: test_mm256_maskz_rolv_epi32:7018; X64: # %bb.0: # %entry7019; X64-NEXT: kmovw %edi, %k17020; X64-NEXT: vprolvd %ymm1, %ymm0, %ymm0 {%k1} {z}7021; X64-NEXT: retq7022entry:7023 %0 = bitcast <4 x i64> %__A to <8 x i32>7024 %1 = bitcast <4 x i64> %__B to <8 x i32>7025 %2 = tail call <8 x i32> @llvm.fshl.v8i32(<8 x i32> %0, <8 x i32> %0, <8 x i32> %1)7026 %3 = bitcast i8 %__U to <8 x i1>7027 %4 = select <8 x i1> %3, <8 x i32> %2, <8 x i32> zeroinitializer7028 %5 = bitcast <8 x i32> %4 to <4 x i64>7029 ret <4 x i64> %57030}7031 7032define <2 x i64> @test_mm_rolv_epi64(<2 x i64> %__A, <2 x i64> %__B) {7033; CHECK-LABEL: test_mm_rolv_epi64:7034; CHECK: # %bb.0: # %entry7035; CHECK-NEXT: vprolvq %xmm1, %xmm0, %xmm07036; CHECK-NEXT: ret{{[l|q]}}7037entry:7038 %0 = tail call <2 x i64> @llvm.fshl.v2i64(<2 x i64> %__A, <2 x i64> %__A, <2 x i64> %__B)7039 ret <2 x i64> %07040}7041 7042define <2 x i64> @test_mm_mask_rolv_epi64(<2 x i64> %__W, i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) {7043; X86-LABEL: test_mm_mask_rolv_epi64:7044; X86: # %bb.0: # %entry7045; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7046; X86-NEXT: kmovw %eax, %k17047; X86-NEXT: vprolvq %xmm2, %xmm1, %xmm0 {%k1}7048; X86-NEXT: retl7049;7050; X64-LABEL: test_mm_mask_rolv_epi64:7051; X64: # %bb.0: # %entry7052; X64-NEXT: kmovw %edi, %k17053; X64-NEXT: vprolvq %xmm2, %xmm1, %xmm0 {%k1}7054; X64-NEXT: retq7055entry:7056 %0 = tail call <2 x i64> @llvm.fshl.v2i64(<2 x i64> %__A, <2 x i64> %__A, <2 x i64> %__B)7057 %1 = bitcast i8 %__U to <8 x i1>7058 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>7059 %2 = select <2 x i1> %extract.i, <2 x i64> %0, <2 x i64> %__W7060 ret <2 x i64> %27061}7062 7063define <2 x i64> @test_mm_maskz_rolv_epi64(i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) {7064; X86-LABEL: test_mm_maskz_rolv_epi64:7065; X86: # %bb.0: # %entry7066; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7067; X86-NEXT: kmovw %eax, %k17068; X86-NEXT: vprolvq %xmm1, %xmm0, %xmm0 {%k1} {z}7069; X86-NEXT: retl7070;7071; X64-LABEL: test_mm_maskz_rolv_epi64:7072; X64: # %bb.0: # %entry7073; X64-NEXT: kmovw %edi, %k17074; X64-NEXT: vprolvq %xmm1, %xmm0, %xmm0 {%k1} {z}7075; X64-NEXT: retq7076entry:7077 %0 = tail call <2 x i64> @llvm.fshl.v2i64(<2 x i64> %__A, <2 x i64> %__A, <2 x i64> %__B)7078 %1 = bitcast i8 %__U to <8 x i1>7079 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>7080 %2 = select <2 x i1> %extract.i, <2 x i64> %0, <2 x i64> zeroinitializer7081 ret <2 x i64> %27082}7083 7084define <4 x i64> @test_mm256_rolv_epi64(<4 x i64> %__A, <4 x i64> %__B) {7085; CHECK-LABEL: test_mm256_rolv_epi64:7086; CHECK: # %bb.0: # %entry7087; CHECK-NEXT: vprolvq %ymm1, %ymm0, %ymm07088; CHECK-NEXT: ret{{[l|q]}}7089entry:7090 %0 = tail call <4 x i64> @llvm.fshl.v4i64(<4 x i64> %__A, <4 x i64> %__A, <4 x i64> %__B)7091 ret <4 x i64> %07092}7093 7094define <4 x i64> @test_mm256_mask_rolv_epi64(<4 x i64> %__W, i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) {7095; X86-LABEL: test_mm256_mask_rolv_epi64:7096; X86: # %bb.0: # %entry7097; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7098; X86-NEXT: kmovw %eax, %k17099; X86-NEXT: vprolvq %ymm2, %ymm1, %ymm0 {%k1}7100; X86-NEXT: retl7101;7102; X64-LABEL: test_mm256_mask_rolv_epi64:7103; X64: # %bb.0: # %entry7104; X64-NEXT: kmovw %edi, %k17105; X64-NEXT: vprolvq %ymm2, %ymm1, %ymm0 {%k1}7106; X64-NEXT: retq7107entry:7108 %0 = tail call <4 x i64> @llvm.fshl.v4i64(<4 x i64> %__A, <4 x i64> %__A, <4 x i64> %__B)7109 %1 = bitcast i8 %__U to <8 x i1>7110 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>7111 %2 = select <4 x i1> %extract.i, <4 x i64> %0, <4 x i64> %__W7112 ret <4 x i64> %27113}7114 7115define <4 x i64> @test_mm256_maskz_rolv_epi64(i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) {7116; X86-LABEL: test_mm256_maskz_rolv_epi64:7117; X86: # %bb.0: # %entry7118; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7119; X86-NEXT: kmovw %eax, %k17120; X86-NEXT: vprolvq %ymm1, %ymm0, %ymm0 {%k1} {z}7121; X86-NEXT: retl7122;7123; X64-LABEL: test_mm256_maskz_rolv_epi64:7124; X64: # %bb.0: # %entry7125; X64-NEXT: kmovw %edi, %k17126; X64-NEXT: vprolvq %ymm1, %ymm0, %ymm0 {%k1} {z}7127; X64-NEXT: retq7128entry:7129 %0 = tail call <4 x i64> @llvm.fshl.v4i64(<4 x i64> %__A, <4 x i64> %__A, <4 x i64> %__B)7130 %1 = bitcast i8 %__U to <8 x i1>7131 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>7132 %2 = select <4 x i1> %extract.i, <4 x i64> %0, <4 x i64> zeroinitializer7133 ret <4 x i64> %27134}7135 7136define <2 x i64> @test_mm_ror_epi32(<2 x i64> %__A) {7137; CHECK-LABEL: test_mm_ror_epi32:7138; CHECK: # %bb.0: # %entry7139; CHECK-NEXT: vprord $5, %xmm0, %xmm07140; CHECK-NEXT: ret{{[l|q]}}7141entry:7142 %0 = bitcast <2 x i64> %__A to <4 x i32>7143 %1 = tail call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %0, <4 x i32> %0, <4 x i32> <i32 5, i32 5, i32 5, i32 5>)7144 %2 = bitcast <4 x i32> %1 to <2 x i64>7145 ret <2 x i64> %27146}7147 7148define <2 x i64> @test_mm_mask_ror_epi32(<2 x i64> %__W, i8 zeroext %__U, <2 x i64> %__A) {7149; X86-LABEL: test_mm_mask_ror_epi32:7150; X86: # %bb.0: # %entry7151; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7152; X86-NEXT: kmovw %eax, %k17153; X86-NEXT: vprord $5, %xmm1, %xmm0 {%k1}7154; X86-NEXT: retl7155;7156; X64-LABEL: test_mm_mask_ror_epi32:7157; X64: # %bb.0: # %entry7158; X64-NEXT: kmovw %edi, %k17159; X64-NEXT: vprord $5, %xmm1, %xmm0 {%k1}7160; X64-NEXT: retq7161entry:7162 %0 = bitcast <2 x i64> %__A to <4 x i32>7163 %1 = tail call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %0, <4 x i32> %0, <4 x i32> <i32 5, i32 5, i32 5, i32 5>)7164 %2 = bitcast <2 x i64> %__W to <4 x i32>7165 %3 = bitcast i8 %__U to <8 x i1>7166 %extract = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>7167 %4 = select <4 x i1> %extract, <4 x i32> %1, <4 x i32> %27168 %5 = bitcast <4 x i32> %4 to <2 x i64>7169 ret <2 x i64> %57170}7171 7172define <2 x i64> @test_mm_maskz_ror_epi32(i8 zeroext %__U, <2 x i64> %__A) {7173; X86-LABEL: test_mm_maskz_ror_epi32:7174; X86: # %bb.0: # %entry7175; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7176; X86-NEXT: kmovw %eax, %k17177; X86-NEXT: vprord $5, %xmm0, %xmm0 {%k1} {z}7178; X86-NEXT: retl7179;7180; X64-LABEL: test_mm_maskz_ror_epi32:7181; X64: # %bb.0: # %entry7182; X64-NEXT: kmovw %edi, %k17183; X64-NEXT: vprord $5, %xmm0, %xmm0 {%k1} {z}7184; X64-NEXT: retq7185entry:7186 %0 = bitcast <2 x i64> %__A to <4 x i32>7187 %1 = tail call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %0, <4 x i32> %0, <4 x i32> <i32 5, i32 5, i32 5, i32 5>)7188 %2 = bitcast i8 %__U to <8 x i1>7189 %extract = shufflevector <8 x i1> %2, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>7190 %3 = select <4 x i1> %extract, <4 x i32> %1, <4 x i32> zeroinitializer7191 %4 = bitcast <4 x i32> %3 to <2 x i64>7192 ret <2 x i64> %47193}7194 7195define <4 x i64> @test_mm256_ror_epi32(<4 x i64> %__A) {7196; CHECK-LABEL: test_mm256_ror_epi32:7197; CHECK: # %bb.0: # %entry7198; CHECK-NEXT: vprord $5, %ymm0, %ymm07199; CHECK-NEXT: ret{{[l|q]}}7200entry:7201 %0 = bitcast <4 x i64> %__A to <8 x i32>7202 %1 = tail call <8 x i32> @llvm.fshr.v8i32(<8 x i32> %0, <8 x i32> %0, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>)7203 %2 = bitcast <8 x i32> %1 to <4 x i64>7204 ret <4 x i64> %27205}7206 7207define <4 x i64> @test_mm256_mask_ror_epi32(<4 x i64> %__W, i8 zeroext %__U, <4 x i64> %__A) {7208; X86-LABEL: test_mm256_mask_ror_epi32:7209; X86: # %bb.0: # %entry7210; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7211; X86-NEXT: kmovw %eax, %k17212; X86-NEXT: vprord $5, %ymm1, %ymm0 {%k1}7213; X86-NEXT: retl7214;7215; X64-LABEL: test_mm256_mask_ror_epi32:7216; X64: # %bb.0: # %entry7217; X64-NEXT: kmovw %edi, %k17218; X64-NEXT: vprord $5, %ymm1, %ymm0 {%k1}7219; X64-NEXT: retq7220entry:7221 %0 = bitcast <4 x i64> %__A to <8 x i32>7222 %1 = tail call <8 x i32> @llvm.fshr.v8i32(<8 x i32> %0, <8 x i32> %0, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>)7223 %2 = bitcast <4 x i64> %__W to <8 x i32>7224 %3 = bitcast i8 %__U to <8 x i1>7225 %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %27226 %5 = bitcast <8 x i32> %4 to <4 x i64>7227 ret <4 x i64> %57228}7229 7230define <4 x i64> @test_mm256_maskz_ror_epi32(i8 zeroext %__U, <4 x i64> %__A) {7231; X86-LABEL: test_mm256_maskz_ror_epi32:7232; X86: # %bb.0: # %entry7233; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7234; X86-NEXT: kmovw %eax, %k17235; X86-NEXT: vprord $5, %ymm0, %ymm0 {%k1} {z}7236; X86-NEXT: retl7237;7238; X64-LABEL: test_mm256_maskz_ror_epi32:7239; X64: # %bb.0: # %entry7240; X64-NEXT: kmovw %edi, %k17241; X64-NEXT: vprord $5, %ymm0, %ymm0 {%k1} {z}7242; X64-NEXT: retq7243entry:7244 %0 = bitcast <4 x i64> %__A to <8 x i32>7245 %1 = tail call <8 x i32> @llvm.fshr.v8i32(<8 x i32> %0, <8 x i32> %0, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>)7246 %2 = bitcast i8 %__U to <8 x i1>7247 %3 = select <8 x i1> %2, <8 x i32> %1, <8 x i32> zeroinitializer7248 %4 = bitcast <8 x i32> %3 to <4 x i64>7249 ret <4 x i64> %47250}7251 7252define <2 x i64> @test_mm_ror_epi64(<2 x i64> %__A) {7253; CHECK-LABEL: test_mm_ror_epi64:7254; CHECK: # %bb.0: # %entry7255; CHECK-NEXT: vprorq $5, %xmm0, %xmm07256; CHECK-NEXT: ret{{[l|q]}}7257entry:7258 %0 = tail call <2 x i64> @llvm.fshr.v2i64(<2 x i64> %__A, <2 x i64> %__A, <2 x i64> <i64 5, i64 5>)7259 ret <2 x i64> %07260}7261 7262define <2 x i64> @test_mm_mask_ror_epi64(<2 x i64> %__W, i8 zeroext %__U, <2 x i64> %__A) {7263; X86-LABEL: test_mm_mask_ror_epi64:7264; X86: # %bb.0: # %entry7265; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7266; X86-NEXT: kmovw %eax, %k17267; X86-NEXT: vprorq $5, %xmm1, %xmm0 {%k1}7268; X86-NEXT: retl7269;7270; X64-LABEL: test_mm_mask_ror_epi64:7271; X64: # %bb.0: # %entry7272; X64-NEXT: kmovw %edi, %k17273; X64-NEXT: vprorq $5, %xmm1, %xmm0 {%k1}7274; X64-NEXT: retq7275entry:7276 %0 = tail call <2 x i64> @llvm.fshr.v2i64(<2 x i64> %__A, <2 x i64> %__A, <2 x i64> <i64 5, i64 5>)7277 %1 = bitcast i8 %__U to <8 x i1>7278 %extract = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>7279 %2 = select <2 x i1> %extract, <2 x i64> %0, <2 x i64> %__W7280 ret <2 x i64> %27281}7282 7283define <2 x i64> @test_mm_maskz_ror_epi64(i8 zeroext %__U, <2 x i64> %__A) {7284; X86-LABEL: test_mm_maskz_ror_epi64:7285; X86: # %bb.0: # %entry7286; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7287; X86-NEXT: kmovw %eax, %k17288; X86-NEXT: vprorq $5, %xmm0, %xmm0 {%k1} {z}7289; X86-NEXT: retl7290;7291; X64-LABEL: test_mm_maskz_ror_epi64:7292; X64: # %bb.0: # %entry7293; X64-NEXT: kmovw %edi, %k17294; X64-NEXT: vprorq $5, %xmm0, %xmm0 {%k1} {z}7295; X64-NEXT: retq7296entry:7297 %0 = tail call <2 x i64> @llvm.fshr.v2i64(<2 x i64> %__A, <2 x i64> %__A, <2 x i64> <i64 5, i64 5>)7298 %1 = bitcast i8 %__U to <8 x i1>7299 %extract = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>7300 %2 = select <2 x i1> %extract, <2 x i64> %0, <2 x i64> zeroinitializer7301 ret <2 x i64> %27302}7303 7304define <4 x i64> @test_mm256_ror_epi64(<4 x i64> %__A) {7305; CHECK-LABEL: test_mm256_ror_epi64:7306; CHECK: # %bb.0: # %entry7307; CHECK-NEXT: vprorq $5, %ymm0, %ymm07308; CHECK-NEXT: ret{{[l|q]}}7309entry:7310 %0 = tail call <4 x i64> @llvm.fshr.v4i64(<4 x i64> %__A, <4 x i64> %__A, <4 x i64> <i64 5, i64 5, i64 5, i64 5>)7311 ret <4 x i64> %07312}7313 7314define <4 x i64> @test_mm256_mask_ror_epi64(<4 x i64> %__W, i8 zeroext %__U, <4 x i64> %__A) {7315; X86-LABEL: test_mm256_mask_ror_epi64:7316; X86: # %bb.0: # %entry7317; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7318; X86-NEXT: kmovw %eax, %k17319; X86-NEXT: vprorq $5, %ymm1, %ymm0 {%k1}7320; X86-NEXT: retl7321;7322; X64-LABEL: test_mm256_mask_ror_epi64:7323; X64: # %bb.0: # %entry7324; X64-NEXT: kmovw %edi, %k17325; X64-NEXT: vprorq $5, %ymm1, %ymm0 {%k1}7326; X64-NEXT: retq7327entry:7328 %0 = tail call <4 x i64> @llvm.fshr.v4i64(<4 x i64> %__A, <4 x i64> %__A, <4 x i64> <i64 5, i64 5, i64 5, i64 5>)7329 %1 = bitcast i8 %__U to <8 x i1>7330 %extract = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>7331 %2 = select <4 x i1> %extract, <4 x i64> %0, <4 x i64> %__W7332 ret <4 x i64> %27333}7334 7335define <4 x i64> @test_mm256_maskz_ror_epi64(i8 zeroext %__U, <4 x i64> %__A) {7336; X86-LABEL: test_mm256_maskz_ror_epi64:7337; X86: # %bb.0: # %entry7338; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7339; X86-NEXT: kmovw %eax, %k17340; X86-NEXT: vprorq $5, %ymm0, %ymm0 {%k1} {z}7341; X86-NEXT: retl7342;7343; X64-LABEL: test_mm256_maskz_ror_epi64:7344; X64: # %bb.0: # %entry7345; X64-NEXT: kmovw %edi, %k17346; X64-NEXT: vprorq $5, %ymm0, %ymm0 {%k1} {z}7347; X64-NEXT: retq7348entry:7349 %0 = tail call <4 x i64> @llvm.fshr.v4i64(<4 x i64> %__A, <4 x i64> %__A, <4 x i64> <i64 5, i64 5, i64 5, i64 5>)7350 %1 = bitcast i8 %__U to <8 x i1>7351 %extract = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>7352 %2 = select <4 x i1> %extract, <4 x i64> %0, <4 x i64> zeroinitializer7353 ret <4 x i64> %27354}7355 7356define <2 x i64> @test_mm_rorv_epi32(<2 x i64> %__A, <2 x i64> %__B) {7357; CHECK-LABEL: test_mm_rorv_epi32:7358; CHECK: # %bb.0: # %entry7359; CHECK-NEXT: vprorvd %xmm1, %xmm0, %xmm07360; CHECK-NEXT: ret{{[l|q]}}7361entry:7362 %0 = bitcast <2 x i64> %__A to <4 x i32>7363 %1 = bitcast <2 x i64> %__B to <4 x i32>7364 %2 = tail call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %0, <4 x i32> %0, <4 x i32> %1)7365 %3 = bitcast <4 x i32> %2 to <2 x i64>7366 ret <2 x i64> %37367}7368 7369define <2 x i64> @test_mm_mask_rorv_epi32(<2 x i64> %__W, i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) {7370; X86-LABEL: test_mm_mask_rorv_epi32:7371; X86: # %bb.0: # %entry7372; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7373; X86-NEXT: kmovw %eax, %k17374; X86-NEXT: vprorvd %xmm2, %xmm1, %xmm0 {%k1}7375; X86-NEXT: retl7376;7377; X64-LABEL: test_mm_mask_rorv_epi32:7378; X64: # %bb.0: # %entry7379; X64-NEXT: kmovw %edi, %k17380; X64-NEXT: vprorvd %xmm2, %xmm1, %xmm0 {%k1}7381; X64-NEXT: retq7382entry:7383 %0 = bitcast <2 x i64> %__A to <4 x i32>7384 %1 = bitcast <2 x i64> %__B to <4 x i32>7385 %2 = tail call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %0, <4 x i32> %0, <4 x i32> %1)7386 %3 = bitcast <2 x i64> %__W to <4 x i32>7387 %4 = bitcast i8 %__U to <8 x i1>7388 %extract.i = shufflevector <8 x i1> %4, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>7389 %5 = select <4 x i1> %extract.i, <4 x i32> %2, <4 x i32> %37390 %6 = bitcast <4 x i32> %5 to <2 x i64>7391 ret <2 x i64> %67392}7393 7394define <2 x i64> @test_mm_maskz_rorv_epi32(i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) {7395; X86-LABEL: test_mm_maskz_rorv_epi32:7396; X86: # %bb.0: # %entry7397; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7398; X86-NEXT: kmovw %eax, %k17399; X86-NEXT: vprorvd %xmm1, %xmm0, %xmm0 {%k1} {z}7400; X86-NEXT: retl7401;7402; X64-LABEL: test_mm_maskz_rorv_epi32:7403; X64: # %bb.0: # %entry7404; X64-NEXT: kmovw %edi, %k17405; X64-NEXT: vprorvd %xmm1, %xmm0, %xmm0 {%k1} {z}7406; X64-NEXT: retq7407entry:7408 %0 = bitcast <2 x i64> %__A to <4 x i32>7409 %1 = bitcast <2 x i64> %__B to <4 x i32>7410 %2 = tail call <4 x i32> @llvm.fshr.v4i32(<4 x i32> %0, <4 x i32> %0, <4 x i32> %1)7411 %3 = bitcast i8 %__U to <8 x i1>7412 %extract.i = shufflevector <8 x i1> %3, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>7413 %4 = select <4 x i1> %extract.i, <4 x i32> %2, <4 x i32> zeroinitializer7414 %5 = bitcast <4 x i32> %4 to <2 x i64>7415 ret <2 x i64> %57416}7417 7418define <4 x i64> @test_mm256_rorv_epi32(<4 x i64> %__A, <4 x i64> %__B) {7419; CHECK-LABEL: test_mm256_rorv_epi32:7420; CHECK: # %bb.0: # %entry7421; CHECK-NEXT: vprorvd %ymm1, %ymm0, %ymm07422; CHECK-NEXT: ret{{[l|q]}}7423entry:7424 %0 = bitcast <4 x i64> %__A to <8 x i32>7425 %1 = bitcast <4 x i64> %__B to <8 x i32>7426 %2 = tail call <8 x i32> @llvm.fshr.v8i32(<8 x i32> %0, <8 x i32> %0, <8 x i32> %1)7427 %3 = bitcast <8 x i32> %2 to <4 x i64>7428 ret <4 x i64> %37429}7430 7431define <4 x i64> @test_mm256_mask_rorv_epi32(<4 x i64> %__W, i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) {7432; X86-LABEL: test_mm256_mask_rorv_epi32:7433; X86: # %bb.0: # %entry7434; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7435; X86-NEXT: kmovw %eax, %k17436; X86-NEXT: vprorvd %ymm2, %ymm1, %ymm0 {%k1}7437; X86-NEXT: retl7438;7439; X64-LABEL: test_mm256_mask_rorv_epi32:7440; X64: # %bb.0: # %entry7441; X64-NEXT: kmovw %edi, %k17442; X64-NEXT: vprorvd %ymm2, %ymm1, %ymm0 {%k1}7443; X64-NEXT: retq7444entry:7445 %0 = bitcast <4 x i64> %__A to <8 x i32>7446 %1 = bitcast <4 x i64> %__B to <8 x i32>7447 %2 = tail call <8 x i32> @llvm.fshr.v8i32(<8 x i32> %0, <8 x i32> %0, <8 x i32> %1)7448 %3 = bitcast <4 x i64> %__W to <8 x i32>7449 %4 = bitcast i8 %__U to <8 x i1>7450 %5 = select <8 x i1> %4, <8 x i32> %2, <8 x i32> %37451 %6 = bitcast <8 x i32> %5 to <4 x i64>7452 ret <4 x i64> %67453}7454 7455define <4 x i64> @test_mm256_maskz_rorv_epi32(i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) {7456; X86-LABEL: test_mm256_maskz_rorv_epi32:7457; X86: # %bb.0: # %entry7458; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7459; X86-NEXT: kmovw %eax, %k17460; X86-NEXT: vprorvd %ymm1, %ymm0, %ymm0 {%k1} {z}7461; X86-NEXT: retl7462;7463; X64-LABEL: test_mm256_maskz_rorv_epi32:7464; X64: # %bb.0: # %entry7465; X64-NEXT: kmovw %edi, %k17466; X64-NEXT: vprorvd %ymm1, %ymm0, %ymm0 {%k1} {z}7467; X64-NEXT: retq7468entry:7469 %0 = bitcast <4 x i64> %__A to <8 x i32>7470 %1 = bitcast <4 x i64> %__B to <8 x i32>7471 %2 = tail call <8 x i32> @llvm.fshr.v8i32(<8 x i32> %0, <8 x i32> %0, <8 x i32> %1)7472 %3 = bitcast i8 %__U to <8 x i1>7473 %4 = select <8 x i1> %3, <8 x i32> %2, <8 x i32> zeroinitializer7474 %5 = bitcast <8 x i32> %4 to <4 x i64>7475 ret <4 x i64> %57476}7477 7478define <2 x i64> @test_mm_rorv_epi64(<2 x i64> %__A, <2 x i64> %__B) {7479; CHECK-LABEL: test_mm_rorv_epi64:7480; CHECK: # %bb.0: # %entry7481; CHECK-NEXT: vprorvq %xmm1, %xmm0, %xmm07482; CHECK-NEXT: ret{{[l|q]}}7483entry:7484 %0 = tail call <2 x i64> @llvm.fshr.v2i64(<2 x i64> %__A, <2 x i64> %__A, <2 x i64> %__B)7485 ret <2 x i64> %07486}7487 7488define <2 x i64> @test_mm_mask_rorv_epi64(<2 x i64> %__W, i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) {7489; X86-LABEL: test_mm_mask_rorv_epi64:7490; X86: # %bb.0: # %entry7491; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7492; X86-NEXT: kmovw %eax, %k17493; X86-NEXT: vprorvq %xmm2, %xmm1, %xmm0 {%k1}7494; X86-NEXT: retl7495;7496; X64-LABEL: test_mm_mask_rorv_epi64:7497; X64: # %bb.0: # %entry7498; X64-NEXT: kmovw %edi, %k17499; X64-NEXT: vprorvq %xmm2, %xmm1, %xmm0 {%k1}7500; X64-NEXT: retq7501entry:7502 %0 = tail call <2 x i64> @llvm.fshr.v2i64(<2 x i64> %__A, <2 x i64> %__A, <2 x i64> %__B)7503 %1 = bitcast i8 %__U to <8 x i1>7504 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>7505 %2 = select <2 x i1> %extract.i, <2 x i64> %0, <2 x i64> %__W7506 ret <2 x i64> %27507}7508 7509define <2 x i64> @test_mm_maskz_rorv_epi64(i8 zeroext %__U, <2 x i64> %__A, <2 x i64> %__B) {7510; X86-LABEL: test_mm_maskz_rorv_epi64:7511; X86: # %bb.0: # %entry7512; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7513; X86-NEXT: kmovw %eax, %k17514; X86-NEXT: vprorvq %xmm1, %xmm0, %xmm0 {%k1} {z}7515; X86-NEXT: retl7516;7517; X64-LABEL: test_mm_maskz_rorv_epi64:7518; X64: # %bb.0: # %entry7519; X64-NEXT: kmovw %edi, %k17520; X64-NEXT: vprorvq %xmm1, %xmm0, %xmm0 {%k1} {z}7521; X64-NEXT: retq7522entry:7523 %0 = tail call <2 x i64> @llvm.fshr.v2i64(<2 x i64> %__A, <2 x i64> %__A, <2 x i64> %__B)7524 %1 = bitcast i8 %__U to <8 x i1>7525 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <2 x i32> <i32 0, i32 1>7526 %2 = select <2 x i1> %extract.i, <2 x i64> %0, <2 x i64> zeroinitializer7527 ret <2 x i64> %27528}7529 7530define <4 x i64> @test_mm256_rorv_epi64(<4 x i64> %__A, <4 x i64> %__B) {7531; CHECK-LABEL: test_mm256_rorv_epi64:7532; CHECK: # %bb.0: # %entry7533; CHECK-NEXT: vprorvq %ymm1, %ymm0, %ymm07534; CHECK-NEXT: ret{{[l|q]}}7535entry:7536 %0 = tail call <4 x i64> @llvm.fshr.v4i64(<4 x i64> %__A, <4 x i64> %__A, <4 x i64> %__B)7537 ret <4 x i64> %07538}7539 7540define <4 x i64> @test_mm256_mask_rorv_epi64(<4 x i64> %__W, i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) {7541; X86-LABEL: test_mm256_mask_rorv_epi64:7542; X86: # %bb.0: # %entry7543; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7544; X86-NEXT: kmovw %eax, %k17545; X86-NEXT: vprorvq %ymm2, %ymm1, %ymm0 {%k1}7546; X86-NEXT: retl7547;7548; X64-LABEL: test_mm256_mask_rorv_epi64:7549; X64: # %bb.0: # %entry7550; X64-NEXT: kmovw %edi, %k17551; X64-NEXT: vprorvq %ymm2, %ymm1, %ymm0 {%k1}7552; X64-NEXT: retq7553entry:7554 %0 = tail call <4 x i64> @llvm.fshr.v4i64(<4 x i64> %__A, <4 x i64> %__A, <4 x i64> %__B)7555 %1 = bitcast i8 %__U to <8 x i1>7556 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>7557 %2 = select <4 x i1> %extract.i, <4 x i64> %0, <4 x i64> %__W7558 ret <4 x i64> %27559}7560 7561define <4 x i64> @test_mm256_maskz_rorv_epi64(i8 zeroext %__U, <4 x i64> %__A, <4 x i64> %__B) {7562; X86-LABEL: test_mm256_maskz_rorv_epi64:7563; X86: # %bb.0: # %entry7564; X86-NEXT: movzbl {{[0-9]+}}(%esp), %eax7565; X86-NEXT: kmovw %eax, %k17566; X86-NEXT: vprorvq %ymm1, %ymm0, %ymm0 {%k1} {z}7567; X86-NEXT: retl7568;7569; X64-LABEL: test_mm256_maskz_rorv_epi64:7570; X64: # %bb.0: # %entry7571; X64-NEXT: kmovw %edi, %k17572; X64-NEXT: vprorvq %ymm1, %ymm0, %ymm0 {%k1} {z}7573; X64-NEXT: retq7574entry:7575 %0 = tail call <4 x i64> @llvm.fshr.v4i64(<4 x i64> %__A, <4 x i64> %__A, <4 x i64> %__B)7576 %1 = bitcast i8 %__U to <8 x i1>7577 %extract.i = shufflevector <8 x i1> %1, <8 x i1> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>7578 %2 = select <4 x i1> %extract.i, <4 x i64> %0, <4 x i64> zeroinitializer7579 ret <4 x i64> %27580}7581 7582declare <4 x float> @llvm.x86.sse2.cvtdq2ps(<4 x i32>)7583declare <8 x float> @llvm.x86.avx.cvtdq2.ps.256(<8 x i32>)7584declare <4 x i32> @llvm.x86.avx512.mask.cvtpd2dq.128(<2 x double>, <4 x i32>, i8)7585declare <4 x i32> @llvm.x86.avx.cvt.pd2dq.256(<4 x double>)7586declare <4 x float> @llvm.x86.avx512.mask.cvtpd2ps(<2 x double>, <4 x float>, i8)7587declare <4 x float> @llvm.x86.avx.cvt.pd2.ps.256(<4 x double>)7588declare <4 x i32> @llvm.x86.avx512.mask.cvtpd2udq.128(<2 x double>, <4 x i32>, i8)7589declare <4 x i32> @llvm.x86.avx512.mask.cvtpd2udq.256(<4 x double>, <4 x i32>, i8)7590declare <4 x i32> @llvm.x86.sse2.cvtps2dq(<4 x float>)7591declare <8 x i32> @llvm.x86.avx.cvt.ps2dq.256(<8 x float>)7592declare <4 x i32> @llvm.x86.avx512.mask.cvtps2udq.128(<4 x float>, <4 x i32>, i8)7593declare <8 x i32> @llvm.x86.avx512.mask.cvtps2udq.256(<8 x float>, <8 x i32>, i8)7594declare <4 x i32> @llvm.x86.avx512.mask.cvttpd2dq.128(<2 x double>, <4 x i32>, i8)7595declare <4 x i32> @llvm.x86.avx.cvtt.pd2dq.256(<4 x double>)7596declare <4 x i32> @llvm.x86.avx512.mask.cvttpd2udq.128(<2 x double>, <4 x i32>, i8)7597declare <4 x i32> @llvm.x86.avx512.mask.cvttpd2udq.256(<4 x double>, <4 x i32>, i8)7598declare <4 x i32> @llvm.x86.sse2.cvttps2dq(<4 x float>)7599declare <8 x i32> @llvm.x86.avx.cvtt.ps2dq.256(<8 x float>)7600declare <4 x i32> @llvm.x86.avx512.mask.cvttps2udq.128(<4 x float>, <4 x i32>, i8)7601declare <8 x i32> @llvm.x86.avx512.mask.cvttps2udq.256(<8 x float>, <8 x i32>, i8)7602declare <8 x i16> @llvm.x86.avx512.mask.pmov.dw.256(<8 x i32>, <8 x i16>, i8)7603declare <4 x i32> @llvm.x86.avx512.vpermi2var.d.128(<4 x i32>, <4 x i32>, <4 x i32>)7604declare <8 x i32> @llvm.x86.avx512.vpermi2var.d.256(<8 x i32>, <8 x i32>, <8 x i32>)7605declare <2 x double> @llvm.x86.avx512.vpermi2var.pd.128(<2 x double>, <2 x i64>, <2 x double>)7606declare <4 x double> @llvm.x86.avx512.vpermi2var.pd.256(<4 x double>, <4 x i64>, <4 x double>)7607declare <4 x float> @llvm.x86.avx512.vpermi2var.ps.128(<4 x float>, <4 x i32>, <4 x float>)7608declare <8 x float> @llvm.x86.avx512.vpermi2var.ps.256(<8 x float>, <8 x i32>, <8 x float>)7609declare <2 x i64> @llvm.x86.avx512.vpermi2var.q.128(<2 x i64>, <2 x i64>, <2 x i64>)7610declare <4 x i64> @llvm.x86.avx512.vpermi2var.q.256(<4 x i64>, <4 x i64>, <4 x i64>)7611declare <2 x double> @llvm.masked.expandload.v2f64(ptr, <2 x i1>, <2 x double>)7612declare <4 x double> @llvm.masked.expandload.v4f64(ptr, <4 x i1>, <4 x double>)7613declare <2 x i64> @llvm.masked.expandload.v2i64(ptr, <2 x i1>, <2 x i64>)7614declare <4 x i64> @llvm.masked.expandload.v4i64(ptr, <4 x i1>, <4 x i64>)7615declare <4 x float> @llvm.masked.expandload.v4f32(ptr, <4 x i1>, <4 x float>)7616declare <8 x float> @llvm.masked.expandload.v8f32(ptr, <8 x i1>, <8 x float>)7617declare <4 x i32> @llvm.masked.expandload.v4i32(ptr, <4 x i1>, <4 x i32>)7618declare <8 x i32> @llvm.masked.expandload.v8i32(ptr, <8 x i1>, <8 x i32>)7619declare void @llvm.masked.compressstore.v2f64(<2 x double>, ptr, <2 x i1>)7620declare void @llvm.masked.compressstore.v4f64(<4 x double>, ptr, <4 x i1>)7621declare void @llvm.masked.compressstore.v2i64(<2 x i64>, ptr, <2 x i1>)7622declare void @llvm.masked.compressstore.v4i64(<4 x i64>, ptr, <4 x i1>)7623declare void @llvm.masked.compressstore.v4f32(<4 x float>, ptr, <4 x i1>)7624declare void @llvm.masked.compressstore.v8f32(<8 x float>, ptr, <8 x i1>)7625declare void @llvm.masked.compressstore.v4i32(<4 x i32>, ptr, <4 x i1>)7626declare void @llvm.masked.compressstore.v8i32(<8 x i32>, ptr, <8 x i1>)7627declare <4 x i32> @llvm.fshl.v4i32(<4 x i32>, <4 x i32>, <4 x i32>)7628declare <8 x i32> @llvm.fshl.v8i32(<8 x i32>, <8 x i32>, <8 x i32>)7629declare <2 x i64> @llvm.fshl.v2i64(<2 x i64>, <2 x i64>, <2 x i64>)7630declare <4 x i64> @llvm.fshl.v4i64(<4 x i64>, <4 x i64>, <4 x i64>)7631declare <4 x i32> @llvm.fshr.v4i32(<4 x i32>, <4 x i32>, <4 x i32>)7632declare <8 x i32> @llvm.fshr.v8i32(<8 x i32>, <8 x i32>, <8 x i32>)7633declare <2 x i64> @llvm.fshr.v2i64(<2 x i64>, <2 x i64>, <2 x i64>)7634declare <4 x i64> @llvm.fshr.v4i64(<4 x i64>, <4 x i64>, <4 x i64>)7635 7636!0 = !{i32 1}7637