brintos

brintos / llvm-project-archived public Read only

0
0
Text · 31.1 KiB · 2429536 Raw
794 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mcpu=skylake -mtriple=i386-unknown-linux-gnu -mattr=+avx2 | FileCheck --check-prefix=X86 %s3; RUN: llc < %s -mcpu=skylake -mtriple=x86_64-unknown-linux-gnu -mattr=+avx2 | FileCheck --check-prefix=X64 %s4; RUN: llc < %s -mcpu=skx -mtriple=x86_64-unknown-linux-gnu -mattr=+avx2,-avx512f | FileCheck --check-prefix=X64 %s5; RUN: llc < %s -mcpu=skylake -mtriple=x86_64-unknown-linux-gnu -mattr=-avx2 | FileCheck --check-prefix=NOGATHER %s6 7declare <2 x i32> @llvm.masked.gather.v2i32(<2 x ptr> %ptrs, i32 %align, <2 x i1> %masks, <2 x i32> %passthro)8 9define <2 x i32> @masked_gather_v2i32(ptr %ptr, <2 x i1> %masks, <2 x i32> %passthro) {10; X86-LABEL: masked_gather_v2i32:11; X86:       # %bb.0: # %entry12; X86-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero13; X86-NEXT:    vpslld $31, %xmm0, %xmm014; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax15; X86-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero16; X86-NEXT:    vpgatherdd %xmm0, (,%xmm2), %xmm117; X86-NEXT:    vmovdqa %xmm1, %xmm018; X86-NEXT:    retl19;20; X64-LABEL: masked_gather_v2i32:21; X64:       # %bb.0: # %entry22; X64-NEXT:    vmovdqa (%rdi), %xmm223; X64-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]24; X64-NEXT:    vpslld $31, %xmm0, %xmm025; X64-NEXT:    vpgatherqd %xmm0, (,%xmm2), %xmm126; X64-NEXT:    vmovdqa %xmm1, %xmm027; X64-NEXT:    retq28;29; NOGATHER-LABEL: masked_gather_v2i32:30; NOGATHER:       # %bb.0: # %entry31; NOGATHER-NEXT:    vmovdqa (%rdi), %xmm232; NOGATHER-NEXT:    vpsllq $63, %xmm0, %xmm033; NOGATHER-NEXT:    vmovmskpd %xmm0, %eax34; NOGATHER-NEXT:    testb $1, %al35; NOGATHER-NEXT:    jne .LBB0_136; NOGATHER-NEXT:  # %bb.2: # %else37; NOGATHER-NEXT:    testb $2, %al38; NOGATHER-NEXT:    jne .LBB0_339; NOGATHER-NEXT:  .LBB0_4: # %else240; NOGATHER-NEXT:    vmovdqa %xmm1, %xmm041; NOGATHER-NEXT:    retq42; NOGATHER-NEXT:  .LBB0_1: # %cond.load43; NOGATHER-NEXT:    vmovq %xmm2, %rcx44; NOGATHER-NEXT:    vpinsrd $0, (%rcx), %xmm1, %xmm145; NOGATHER-NEXT:    testb $2, %al46; NOGATHER-NEXT:    je .LBB0_447; NOGATHER-NEXT:  .LBB0_3: # %cond.load148; NOGATHER-NEXT:    vpextrq $1, %xmm2, %rax49; NOGATHER-NEXT:    vpinsrd $1, (%rax), %xmm1, %xmm150; NOGATHER-NEXT:    vmovdqa %xmm1, %xmm051; NOGATHER-NEXT:    retq52entry:53  %ld  = load <2 x ptr>, ptr %ptr54  %res = call <2 x i32> @llvm.masked.gather.v2i32(<2 x ptr> %ld, i32 0, <2 x i1> %masks, <2 x i32> %passthro)55  ret <2 x i32> %res56}57 58define <4 x i32> @masked_gather_v2i32_concat(ptr %ptr, <2 x i1> %masks, <2 x i32> %passthro) {59; X86-LABEL: masked_gather_v2i32_concat:60; X86:       # %bb.0: # %entry61; X86-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero62; X86-NEXT:    vpslld $31, %xmm0, %xmm063; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax64; X86-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero65; X86-NEXT:    vpgatherdd %xmm0, (,%xmm2), %xmm166; X86-NEXT:    vmovdqa %xmm1, %xmm067; X86-NEXT:    retl68;69; X64-LABEL: masked_gather_v2i32_concat:70; X64:       # %bb.0: # %entry71; X64-NEXT:    vmovdqa (%rdi), %xmm272; X64-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]73; X64-NEXT:    vpslld $31, %xmm0, %xmm074; X64-NEXT:    vpgatherqd %xmm0, (,%xmm2), %xmm175; X64-NEXT:    vmovdqa %xmm1, %xmm076; X64-NEXT:    retq77;78; NOGATHER-LABEL: masked_gather_v2i32_concat:79; NOGATHER:       # %bb.0: # %entry80; NOGATHER-NEXT:    vmovdqa (%rdi), %xmm281; NOGATHER-NEXT:    vpsllq $63, %xmm0, %xmm082; NOGATHER-NEXT:    vmovmskpd %xmm0, %eax83; NOGATHER-NEXT:    testb $1, %al84; NOGATHER-NEXT:    jne .LBB1_185; NOGATHER-NEXT:  # %bb.2: # %else86; NOGATHER-NEXT:    testb $2, %al87; NOGATHER-NEXT:    jne .LBB1_388; NOGATHER-NEXT:  .LBB1_4: # %else289; NOGATHER-NEXT:    vmovdqa %xmm1, %xmm090; NOGATHER-NEXT:    retq91; NOGATHER-NEXT:  .LBB1_1: # %cond.load92; NOGATHER-NEXT:    vmovq %xmm2, %rcx93; NOGATHER-NEXT:    vpinsrd $0, (%rcx), %xmm1, %xmm194; NOGATHER-NEXT:    testb $2, %al95; NOGATHER-NEXT:    je .LBB1_496; NOGATHER-NEXT:  .LBB1_3: # %cond.load197; NOGATHER-NEXT:    vpextrq $1, %xmm2, %rax98; NOGATHER-NEXT:    vpinsrd $1, (%rax), %xmm1, %xmm199; NOGATHER-NEXT:    vmovdqa %xmm1, %xmm0100; NOGATHER-NEXT:    retq101entry:102  %ld  = load <2 x ptr>, ptr %ptr103  %res = call <2 x i32> @llvm.masked.gather.v2i32(<2 x ptr> %ld, i32 0, <2 x i1> %masks, <2 x i32> %passthro)104  %res2 = shufflevector <2 x i32> %res, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>105  ret <4 x i32> %res2106}107 108declare <2 x float> @llvm.masked.gather.v2float(<2 x ptr> %ptrs, i32 %align, <2 x i1> %masks, <2 x float> %passthro)109 110define <2 x float> @masked_gather_v2float(ptr %ptr, <2 x i1> %masks, <2 x float> %passthro) {111; X86-LABEL: masked_gather_v2float:112; X86:       # %bb.0: # %entry113; X86-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero114; X86-NEXT:    vpslld $31, %xmm0, %xmm0115; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax116; X86-NEXT:    vmovsd {{.*#+}} xmm2 = mem[0],zero117; X86-NEXT:    vgatherdps %xmm0, (,%xmm2), %xmm1118; X86-NEXT:    vmovaps %xmm1, %xmm0119; X86-NEXT:    retl120;121; X64-LABEL: masked_gather_v2float:122; X64:       # %bb.0: # %entry123; X64-NEXT:    vmovaps (%rdi), %xmm2124; X64-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]125; X64-NEXT:    vpslld $31, %xmm0, %xmm0126; X64-NEXT:    vgatherqps %xmm0, (,%xmm2), %xmm1127; X64-NEXT:    vmovaps %xmm1, %xmm0128; X64-NEXT:    retq129;130; NOGATHER-LABEL: masked_gather_v2float:131; NOGATHER:       # %bb.0: # %entry132; NOGATHER-NEXT:    vmovdqa (%rdi), %xmm2133; NOGATHER-NEXT:    vpsllq $63, %xmm0, %xmm0134; NOGATHER-NEXT:    vmovmskpd %xmm0, %eax135; NOGATHER-NEXT:    testb $1, %al136; NOGATHER-NEXT:    jne .LBB2_1137; NOGATHER-NEXT:  # %bb.2: # %else138; NOGATHER-NEXT:    testb $2, %al139; NOGATHER-NEXT:    jne .LBB2_3140; NOGATHER-NEXT:  .LBB2_4: # %else2141; NOGATHER-NEXT:    vmovaps %xmm1, %xmm0142; NOGATHER-NEXT:    retq143; NOGATHER-NEXT:  .LBB2_1: # %cond.load144; NOGATHER-NEXT:    vmovq %xmm2, %rcx145; NOGATHER-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero146; NOGATHER-NEXT:    vblendps {{.*#+}} xmm1 = xmm0[0],xmm1[1,2,3]147; NOGATHER-NEXT:    testb $2, %al148; NOGATHER-NEXT:    je .LBB2_4149; NOGATHER-NEXT:  .LBB2_3: # %cond.load1150; NOGATHER-NEXT:    vpextrq $1, %xmm2, %rax151; NOGATHER-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[2,3]152; NOGATHER-NEXT:    vmovaps %xmm1, %xmm0153; NOGATHER-NEXT:    retq154entry:155  %ld  = load <2 x ptr>, ptr %ptr156  %res = call <2 x float> @llvm.masked.gather.v2float(<2 x ptr> %ld, i32 0, <2 x i1> %masks, <2 x float> %passthro)157  ret <2 x float> %res158}159 160define <4 x float> @masked_gather_v2float_concat(ptr %ptr, <2 x i1> %masks, <2 x float> %passthro) {161; X86-LABEL: masked_gather_v2float_concat:162; X86:       # %bb.0: # %entry163; X86-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero164; X86-NEXT:    vpslld $31, %xmm0, %xmm0165; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax166; X86-NEXT:    vmovsd {{.*#+}} xmm2 = mem[0],zero167; X86-NEXT:    vgatherdps %xmm0, (,%xmm2), %xmm1168; X86-NEXT:    vmovaps %xmm1, %xmm0169; X86-NEXT:    retl170;171; X64-LABEL: masked_gather_v2float_concat:172; X64:       # %bb.0: # %entry173; X64-NEXT:    vmovaps (%rdi), %xmm2174; X64-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]175; X64-NEXT:    vpslld $31, %xmm0, %xmm0176; X64-NEXT:    vgatherqps %xmm0, (,%xmm2), %xmm1177; X64-NEXT:    vmovaps %xmm1, %xmm0178; X64-NEXT:    retq179;180; NOGATHER-LABEL: masked_gather_v2float_concat:181; NOGATHER:       # %bb.0: # %entry182; NOGATHER-NEXT:    vmovdqa (%rdi), %xmm2183; NOGATHER-NEXT:    vpsllq $63, %xmm0, %xmm0184; NOGATHER-NEXT:    vmovmskpd %xmm0, %eax185; NOGATHER-NEXT:    testb $1, %al186; NOGATHER-NEXT:    jne .LBB3_1187; NOGATHER-NEXT:  # %bb.2: # %else188; NOGATHER-NEXT:    testb $2, %al189; NOGATHER-NEXT:    jne .LBB3_3190; NOGATHER-NEXT:  .LBB3_4: # %else2191; NOGATHER-NEXT:    vmovaps %xmm1, %xmm0192; NOGATHER-NEXT:    retq193; NOGATHER-NEXT:  .LBB3_1: # %cond.load194; NOGATHER-NEXT:    vmovq %xmm2, %rcx195; NOGATHER-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero196; NOGATHER-NEXT:    vblendps {{.*#+}} xmm1 = xmm0[0],xmm1[1,2,3]197; NOGATHER-NEXT:    testb $2, %al198; NOGATHER-NEXT:    je .LBB3_4199; NOGATHER-NEXT:  .LBB3_3: # %cond.load1200; NOGATHER-NEXT:    vpextrq $1, %xmm2, %rax201; NOGATHER-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[2,3]202; NOGATHER-NEXT:    vmovaps %xmm1, %xmm0203; NOGATHER-NEXT:    retq204entry:205  %ld  = load <2 x ptr>, ptr %ptr206  %res = call <2 x float> @llvm.masked.gather.v2float(<2 x ptr> %ld, i32 0, <2 x i1> %masks, <2 x float> %passthro)207  %res2 = shufflevector <2 x float> %res, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>208  ret <4 x float> %res2209}210 211 212declare <4 x i32> @llvm.masked.gather.v4i32(<4 x ptr> %ptrs, i32 %align, <4 x i1> %masks, <4 x i32> %passthro)213 214define <4 x i32> @masked_gather_v4i32(<4 x ptr> %ptrs, <4 x i1> %masks, <4 x i32> %passthro) {215; X86-LABEL: masked_gather_v4i32:216; X86:       # %bb.0: # %entry217; X86-NEXT:    vpslld $31, %xmm1, %xmm1218; X86-NEXT:    vpgatherdd %xmm1, (,%xmm0), %xmm2219; X86-NEXT:    vmovdqa %xmm2, %xmm0220; X86-NEXT:    retl221;222; X64-LABEL: masked_gather_v4i32:223; X64:       # %bb.0: # %entry224; X64-NEXT:    vpslld $31, %xmm1, %xmm1225; X64-NEXT:    vpgatherqd %xmm1, (,%ymm0), %xmm2226; X64-NEXT:    vmovdqa %xmm2, %xmm0227; X64-NEXT:    vzeroupper228; X64-NEXT:    retq229;230; NOGATHER-LABEL: masked_gather_v4i32:231; NOGATHER:       # %bb.0: # %entry232; NOGATHER-NEXT:    vpslld $31, %xmm1, %xmm1233; NOGATHER-NEXT:    vmovmskps %xmm1, %eax234; NOGATHER-NEXT:    testb $1, %al235; NOGATHER-NEXT:    je .LBB4_2236; NOGATHER-NEXT:  # %bb.1: # %cond.load237; NOGATHER-NEXT:    vmovq %xmm0, %rcx238; NOGATHER-NEXT:    vpinsrd $0, (%rcx), %xmm2, %xmm2239; NOGATHER-NEXT:  .LBB4_2: # %else240; NOGATHER-NEXT:    testb $2, %al241; NOGATHER-NEXT:    je .LBB4_4242; NOGATHER-NEXT:  # %bb.3: # %cond.load1243; NOGATHER-NEXT:    vpextrq $1, %xmm0, %rcx244; NOGATHER-NEXT:    vpinsrd $1, (%rcx), %xmm2, %xmm2245; NOGATHER-NEXT:  .LBB4_4: # %else2246; NOGATHER-NEXT:    vextractf128 $1, %ymm0, %xmm0247; NOGATHER-NEXT:    testb $4, %al248; NOGATHER-NEXT:    jne .LBB4_5249; NOGATHER-NEXT:  # %bb.6: # %else5250; NOGATHER-NEXT:    testb $8, %al251; NOGATHER-NEXT:    jne .LBB4_7252; NOGATHER-NEXT:  .LBB4_8: # %else8253; NOGATHER-NEXT:    vmovdqa %xmm2, %xmm0254; NOGATHER-NEXT:    vzeroupper255; NOGATHER-NEXT:    retq256; NOGATHER-NEXT:  .LBB4_5: # %cond.load4257; NOGATHER-NEXT:    vmovq %xmm0, %rcx258; NOGATHER-NEXT:    vpinsrd $2, (%rcx), %xmm2, %xmm2259; NOGATHER-NEXT:    testb $8, %al260; NOGATHER-NEXT:    je .LBB4_8261; NOGATHER-NEXT:  .LBB4_7: # %cond.load7262; NOGATHER-NEXT:    vpextrq $1, %xmm0, %rax263; NOGATHER-NEXT:    vpinsrd $3, (%rax), %xmm2, %xmm2264; NOGATHER-NEXT:    vmovdqa %xmm2, %xmm0265; NOGATHER-NEXT:    vzeroupper266; NOGATHER-NEXT:    retq267entry:268  %res = call <4 x i32> @llvm.masked.gather.v4i32(<4 x ptr> %ptrs, i32 0, <4 x i1> %masks, <4 x i32> %passthro)269  ret <4 x i32> %res270}271 272declare <4 x float> @llvm.masked.gather.v4float(<4 x ptr> %ptrs, i32 %align, <4 x i1> %masks, <4 x float> %passthro)273 274define <4 x float> @masked_gather_v4float(<4 x ptr> %ptrs, <4 x i1> %masks, <4 x float> %passthro) {275; X86-LABEL: masked_gather_v4float:276; X86:       # %bb.0: # %entry277; X86-NEXT:    vpslld $31, %xmm1, %xmm1278; X86-NEXT:    vgatherdps %xmm1, (,%xmm0), %xmm2279; X86-NEXT:    vmovaps %xmm2, %xmm0280; X86-NEXT:    retl281;282; X64-LABEL: masked_gather_v4float:283; X64:       # %bb.0: # %entry284; X64-NEXT:    vpslld $31, %xmm1, %xmm1285; X64-NEXT:    vgatherqps %xmm1, (,%ymm0), %xmm2286; X64-NEXT:    vmovaps %xmm2, %xmm0287; X64-NEXT:    vzeroupper288; X64-NEXT:    retq289;290; NOGATHER-LABEL: masked_gather_v4float:291; NOGATHER:       # %bb.0: # %entry292; NOGATHER-NEXT:    vpslld $31, %xmm1, %xmm1293; NOGATHER-NEXT:    vmovmskps %xmm1, %eax294; NOGATHER-NEXT:    testb $1, %al295; NOGATHER-NEXT:    je .LBB5_2296; NOGATHER-NEXT:  # %bb.1: # %cond.load297; NOGATHER-NEXT:    vmovq %xmm0, %rcx298; NOGATHER-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero299; NOGATHER-NEXT:    vblendps {{.*#+}} xmm2 = xmm1[0],xmm2[1,2,3]300; NOGATHER-NEXT:  .LBB5_2: # %else301; NOGATHER-NEXT:    testb $2, %al302; NOGATHER-NEXT:    je .LBB5_4303; NOGATHER-NEXT:  # %bb.3: # %cond.load1304; NOGATHER-NEXT:    vpextrq $1, %xmm0, %rcx305; NOGATHER-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0],mem[0],xmm2[2,3]306; NOGATHER-NEXT:  .LBB5_4: # %else2307; NOGATHER-NEXT:    vextractf128 $1, %ymm0, %xmm0308; NOGATHER-NEXT:    testb $4, %al309; NOGATHER-NEXT:    jne .LBB5_5310; NOGATHER-NEXT:  # %bb.6: # %else5311; NOGATHER-NEXT:    testb $8, %al312; NOGATHER-NEXT:    jne .LBB5_7313; NOGATHER-NEXT:  .LBB5_8: # %else8314; NOGATHER-NEXT:    vmovaps %xmm2, %xmm0315; NOGATHER-NEXT:    vzeroupper316; NOGATHER-NEXT:    retq317; NOGATHER-NEXT:  .LBB5_5: # %cond.load4318; NOGATHER-NEXT:    vmovq %xmm0, %rcx319; NOGATHER-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]320; NOGATHER-NEXT:    testb $8, %al321; NOGATHER-NEXT:    je .LBB5_8322; NOGATHER-NEXT:  .LBB5_7: # %cond.load7323; NOGATHER-NEXT:    vpextrq $1, %xmm0, %rax324; NOGATHER-NEXT:    vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],mem[0]325; NOGATHER-NEXT:    vmovaps %xmm2, %xmm0326; NOGATHER-NEXT:    vzeroupper327; NOGATHER-NEXT:    retq328entry:329  %res = call <4 x float> @llvm.masked.gather.v4float(<4 x ptr> %ptrs, i32 0, <4 x i1> %masks, <4 x float> %passthro)330  ret <4 x float> %res331}332 333declare <8 x i32> @llvm.masked.gather.v8i32(<8 x ptr> %ptrs, i32 %align, <8 x i1> %masks, <8 x i32> %passthro)334 335define <8 x i32> @masked_gather_v8i32(ptr %ptr, <8 x i1> %masks, <8 x i32> %passthro) {336; X86-LABEL: masked_gather_v8i32:337; X86:       # %bb.0: # %entry338; X86-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero339; X86-NEXT:    vpslld $31, %ymm0, %ymm0340; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax341; X86-NEXT:    vmovdqa (%eax), %ymm2342; X86-NEXT:    vpgatherdd %ymm0, (,%ymm2), %ymm1343; X86-NEXT:    vmovdqa %ymm1, %ymm0344; X86-NEXT:    retl345;346; X64-LABEL: masked_gather_v8i32:347; X64:       # %bb.0: # %entry348; X64-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero349; X64-NEXT:    vpslld $31, %ymm0, %ymm0350; X64-NEXT:    vmovdqa (%rdi), %ymm2351; X64-NEXT:    vmovdqa 32(%rdi), %ymm3352; X64-NEXT:    vextracti128 $1, %ymm1, %xmm4353; X64-NEXT:    vextracti128 $1, %ymm0, %xmm5354; X64-NEXT:    vpgatherqd %xmm5, (,%ymm3), %xmm4355; X64-NEXT:    vpgatherqd %xmm0, (,%ymm2), %xmm1356; X64-NEXT:    vinserti128 $1, %xmm4, %ymm1, %ymm0357; X64-NEXT:    retq358;359; NOGATHER-LABEL: masked_gather_v8i32:360; NOGATHER:       # %bb.0: # %entry361; NOGATHER-NEXT:    vmovdqa (%rdi), %ymm2362; NOGATHER-NEXT:    vpsllw $15, %xmm0, %xmm0363; NOGATHER-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0364; NOGATHER-NEXT:    vpmovmskb %xmm0, %eax365; NOGATHER-NEXT:    testb $1, %al366; NOGATHER-NEXT:    je .LBB6_2367; NOGATHER-NEXT:  # %bb.1: # %cond.load368; NOGATHER-NEXT:    vmovq %xmm2, %rcx369; NOGATHER-NEXT:    vpinsrd $0, (%rcx), %xmm1, %xmm0370; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]371; NOGATHER-NEXT:  .LBB6_2: # %else372; NOGATHER-NEXT:    testb $2, %al373; NOGATHER-NEXT:    je .LBB6_4374; NOGATHER-NEXT:  # %bb.3: # %cond.load1375; NOGATHER-NEXT:    vpextrq $1, %xmm2, %rcx376; NOGATHER-NEXT:    vpinsrd $1, (%rcx), %xmm1, %xmm0377; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]378; NOGATHER-NEXT:  .LBB6_4: # %else2379; NOGATHER-NEXT:    vextractf128 $1, %ymm2, %xmm0380; NOGATHER-NEXT:    testb $4, %al381; NOGATHER-NEXT:    je .LBB6_6382; NOGATHER-NEXT:  # %bb.5: # %cond.load4383; NOGATHER-NEXT:    vmovq %xmm0, %rcx384; NOGATHER-NEXT:    vpinsrd $2, (%rcx), %xmm1, %xmm2385; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]386; NOGATHER-NEXT:  .LBB6_6: # %else5387; NOGATHER-NEXT:    testb $8, %al388; NOGATHER-NEXT:    je .LBB6_8389; NOGATHER-NEXT:  # %bb.7: # %cond.load7390; NOGATHER-NEXT:    vpextrq $1, %xmm0, %rcx391; NOGATHER-NEXT:    vpinsrd $3, (%rcx), %xmm1, %xmm0392; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]393; NOGATHER-NEXT:  .LBB6_8: # %else8394; NOGATHER-NEXT:    vmovdqa 32(%rdi), %ymm0395; NOGATHER-NEXT:    testb $16, %al396; NOGATHER-NEXT:    je .LBB6_10397; NOGATHER-NEXT:  # %bb.9: # %cond.load10398; NOGATHER-NEXT:    vmovq %xmm0, %rcx399; NOGATHER-NEXT:    vbroadcastss (%rcx), %ymm2400; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm2[4],ymm1[5,6,7]401; NOGATHER-NEXT:  .LBB6_10: # %else11402; NOGATHER-NEXT:    testb $32, %al403; NOGATHER-NEXT:    je .LBB6_12404; NOGATHER-NEXT:  # %bb.11: # %cond.load13405; NOGATHER-NEXT:    vpextrq $1, %xmm0, %rcx406; NOGATHER-NEXT:    vbroadcastss (%rcx), %ymm2407; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3,4],ymm2[5],ymm1[6,7]408; NOGATHER-NEXT:  .LBB6_12: # %else14409; NOGATHER-NEXT:    vextractf128 $1, %ymm0, %xmm0410; NOGATHER-NEXT:    testb $64, %al411; NOGATHER-NEXT:    jne .LBB6_13412; NOGATHER-NEXT:  # %bb.14: # %else17413; NOGATHER-NEXT:    testb $-128, %al414; NOGATHER-NEXT:    jne .LBB6_15415; NOGATHER-NEXT:  .LBB6_16: # %else20416; NOGATHER-NEXT:    vmovaps %ymm1, %ymm0417; NOGATHER-NEXT:    retq418; NOGATHER-NEXT:  .LBB6_13: # %cond.load16419; NOGATHER-NEXT:    vmovq %xmm0, %rcx420; NOGATHER-NEXT:    vbroadcastss (%rcx), %ymm2421; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5],ymm2[6],ymm1[7]422; NOGATHER-NEXT:    testb $-128, %al423; NOGATHER-NEXT:    je .LBB6_16424; NOGATHER-NEXT:  .LBB6_15: # %cond.load19425; NOGATHER-NEXT:    vpextrq $1, %xmm0, %rax426; NOGATHER-NEXT:    vbroadcastss (%rax), %ymm0427; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5,6],ymm0[7]428; NOGATHER-NEXT:    vmovaps %ymm1, %ymm0429; NOGATHER-NEXT:    retq430entry:431  %ld  = load <8 x ptr>, ptr %ptr432  %res = call <8 x i32> @llvm.masked.gather.v8i32(<8 x ptr> %ld, i32 0, <8 x i1> %masks, <8 x i32> %passthro)433  ret <8 x i32> %res434}435 436declare <8 x float> @llvm.masked.gather.v8float(<8 x ptr> %ptrs, i32 %align, <8 x i1> %masks, <8 x float> %passthro)437 438define <8 x float> @masked_gather_v8float(ptr %ptr, <8 x i1> %masks, <8 x float> %passthro) {439; X86-LABEL: masked_gather_v8float:440; X86:       # %bb.0: # %entry441; X86-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero442; X86-NEXT:    vpslld $31, %ymm0, %ymm0443; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax444; X86-NEXT:    vmovaps (%eax), %ymm2445; X86-NEXT:    vgatherdps %ymm0, (,%ymm2), %ymm1446; X86-NEXT:    vmovaps %ymm1, %ymm0447; X86-NEXT:    retl448;449; X64-LABEL: masked_gather_v8float:450; X64:       # %bb.0: # %entry451; X64-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero452; X64-NEXT:    vpslld $31, %ymm0, %ymm0453; X64-NEXT:    vmovaps (%rdi), %ymm2454; X64-NEXT:    vmovaps 32(%rdi), %ymm3455; X64-NEXT:    vextractf128 $1, %ymm1, %xmm4456; X64-NEXT:    vextracti128 $1, %ymm0, %xmm5457; X64-NEXT:    vgatherqps %xmm5, (,%ymm3), %xmm4458; X64-NEXT:    vgatherqps %xmm0, (,%ymm2), %xmm1459; X64-NEXT:    vinsertf128 $1, %xmm4, %ymm1, %ymm0460; X64-NEXT:    retq461;462; NOGATHER-LABEL: masked_gather_v8float:463; NOGATHER:       # %bb.0: # %entry464; NOGATHER-NEXT:    vmovdqa (%rdi), %ymm2465; NOGATHER-NEXT:    vpsllw $15, %xmm0, %xmm0466; NOGATHER-NEXT:    vpacksswb %xmm0, %xmm0, %xmm0467; NOGATHER-NEXT:    vpmovmskb %xmm0, %eax468; NOGATHER-NEXT:    testb $1, %al469; NOGATHER-NEXT:    je .LBB7_2470; NOGATHER-NEXT:  # %bb.1: # %cond.load471; NOGATHER-NEXT:    vmovq %xmm2, %rcx472; NOGATHER-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero473; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm0[0],ymm1[1,2,3,4,5,6,7]474; NOGATHER-NEXT:  .LBB7_2: # %else475; NOGATHER-NEXT:    testb $2, %al476; NOGATHER-NEXT:    je .LBB7_4477; NOGATHER-NEXT:  # %bb.3: # %cond.load1478; NOGATHER-NEXT:    vpextrq $1, %xmm2, %rcx479; NOGATHER-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0],mem[0],xmm1[2,3]480; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]481; NOGATHER-NEXT:  .LBB7_4: # %else2482; NOGATHER-NEXT:    vextractf128 $1, %ymm2, %xmm0483; NOGATHER-NEXT:    testb $4, %al484; NOGATHER-NEXT:    je .LBB7_6485; NOGATHER-NEXT:  # %bb.5: # %cond.load4486; NOGATHER-NEXT:    vmovq %xmm0, %rcx487; NOGATHER-NEXT:    vinsertps {{.*#+}} xmm2 = xmm1[0,1],mem[0],xmm1[3]488; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]489; NOGATHER-NEXT:  .LBB7_6: # %else5490; NOGATHER-NEXT:    testb $8, %al491; NOGATHER-NEXT:    je .LBB7_8492; NOGATHER-NEXT:  # %bb.7: # %cond.load7493; NOGATHER-NEXT:    vpextrq $1, %xmm0, %rcx494; NOGATHER-NEXT:    vinsertps {{.*#+}} xmm0 = xmm1[0,1,2],mem[0]495; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]496; NOGATHER-NEXT:  .LBB7_8: # %else8497; NOGATHER-NEXT:    vmovdqa 32(%rdi), %ymm0498; NOGATHER-NEXT:    testb $16, %al499; NOGATHER-NEXT:    je .LBB7_10500; NOGATHER-NEXT:  # %bb.9: # %cond.load10501; NOGATHER-NEXT:    vmovq %xmm0, %rcx502; NOGATHER-NEXT:    vbroadcastss (%rcx), %ymm2503; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm2[4],ymm1[5,6,7]504; NOGATHER-NEXT:  .LBB7_10: # %else11505; NOGATHER-NEXT:    testb $32, %al506; NOGATHER-NEXT:    je .LBB7_12507; NOGATHER-NEXT:  # %bb.11: # %cond.load13508; NOGATHER-NEXT:    vpextrq $1, %xmm0, %rcx509; NOGATHER-NEXT:    vbroadcastss (%rcx), %ymm2510; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3,4],ymm2[5],ymm1[6,7]511; NOGATHER-NEXT:  .LBB7_12: # %else14512; NOGATHER-NEXT:    vextractf128 $1, %ymm0, %xmm0513; NOGATHER-NEXT:    testb $64, %al514; NOGATHER-NEXT:    jne .LBB7_13515; NOGATHER-NEXT:  # %bb.14: # %else17516; NOGATHER-NEXT:    testb $-128, %al517; NOGATHER-NEXT:    jne .LBB7_15518; NOGATHER-NEXT:  .LBB7_16: # %else20519; NOGATHER-NEXT:    vmovaps %ymm1, %ymm0520; NOGATHER-NEXT:    retq521; NOGATHER-NEXT:  .LBB7_13: # %cond.load16522; NOGATHER-NEXT:    vmovq %xmm0, %rcx523; NOGATHER-NEXT:    vbroadcastss (%rcx), %ymm2524; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5],ymm2[6],ymm1[7]525; NOGATHER-NEXT:    testb $-128, %al526; NOGATHER-NEXT:    je .LBB7_16527; NOGATHER-NEXT:  .LBB7_15: # %cond.load19528; NOGATHER-NEXT:    vpextrq $1, %xmm0, %rax529; NOGATHER-NEXT:    vbroadcastss (%rax), %ymm0530; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5,6],ymm0[7]531; NOGATHER-NEXT:    vmovaps %ymm1, %ymm0532; NOGATHER-NEXT:    retq533entry:534  %ld  = load <8 x ptr>, ptr %ptr535  %res = call <8 x float> @llvm.masked.gather.v8float(<8 x ptr> %ld, i32 0, <8 x i1> %masks, <8 x float> %passthro)536  ret <8 x float> %res537}538 539declare <4 x i64> @llvm.masked.gather.v4i64(<4 x ptr> %ptrs, i32 %align, <4 x i1> %masks, <4 x i64> %passthro)540 541define <4 x i64> @masked_gather_v4i64(ptr %ptr, <4 x i1> %masks, <4 x i64> %passthro) {542; X86-LABEL: masked_gather_v4i64:543; X86:       # %bb.0: # %entry544; X86-NEXT:    vpslld $31, %xmm0, %xmm0545; X86-NEXT:    vpmovsxdq %xmm0, %ymm0546; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax547; X86-NEXT:    vmovdqa (%eax), %xmm2548; X86-NEXT:    vpgatherdq %ymm0, (,%xmm2), %ymm1549; X86-NEXT:    vmovdqa %ymm1, %ymm0550; X86-NEXT:    retl551;552; X64-LABEL: masked_gather_v4i64:553; X64:       # %bb.0: # %entry554; X64-NEXT:    vpslld $31, %xmm0, %xmm0555; X64-NEXT:    vpmovsxdq %xmm0, %ymm0556; X64-NEXT:    vmovdqa (%rdi), %ymm2557; X64-NEXT:    vpgatherqq %ymm0, (,%ymm2), %ymm1558; X64-NEXT:    vmovdqa %ymm1, %ymm0559; X64-NEXT:    retq560;561; NOGATHER-LABEL: masked_gather_v4i64:562; NOGATHER:       # %bb.0: # %entry563; NOGATHER-NEXT:    vmovdqa (%rdi), %ymm2564; NOGATHER-NEXT:    vpslld $31, %xmm0, %xmm0565; NOGATHER-NEXT:    vmovmskps %xmm0, %eax566; NOGATHER-NEXT:    testb $1, %al567; NOGATHER-NEXT:    je .LBB8_2568; NOGATHER-NEXT:  # %bb.1: # %cond.load569; NOGATHER-NEXT:    vmovq %xmm2, %rcx570; NOGATHER-NEXT:    vpinsrq $0, (%rcx), %xmm1, %xmm0571; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]572; NOGATHER-NEXT:  .LBB8_2: # %else573; NOGATHER-NEXT:    testb $2, %al574; NOGATHER-NEXT:    je .LBB8_4575; NOGATHER-NEXT:  # %bb.3: # %cond.load1576; NOGATHER-NEXT:    vpextrq $1, %xmm2, %rcx577; NOGATHER-NEXT:    vpinsrq $1, (%rcx), %xmm1, %xmm0578; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]579; NOGATHER-NEXT:  .LBB8_4: # %else2580; NOGATHER-NEXT:    vextractf128 $1, %ymm2, %xmm0581; NOGATHER-NEXT:    testb $4, %al582; NOGATHER-NEXT:    jne .LBB8_5583; NOGATHER-NEXT:  # %bb.6: # %else5584; NOGATHER-NEXT:    testb $8, %al585; NOGATHER-NEXT:    jne .LBB8_7586; NOGATHER-NEXT:  .LBB8_8: # %else8587; NOGATHER-NEXT:    vmovaps %ymm1, %ymm0588; NOGATHER-NEXT:    retq589; NOGATHER-NEXT:  .LBB8_5: # %cond.load4590; NOGATHER-NEXT:    vmovq %xmm0, %rcx591; NOGATHER-NEXT:    vbroadcastsd (%rcx), %ymm2592; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm2[4,5],ymm1[6,7]593; NOGATHER-NEXT:    testb $8, %al594; NOGATHER-NEXT:    je .LBB8_8595; NOGATHER-NEXT:  .LBB8_7: # %cond.load7596; NOGATHER-NEXT:    vpextrq $1, %xmm0, %rax597; NOGATHER-NEXT:    vbroadcastsd (%rax), %ymm0598; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5],ymm0[6,7]599; NOGATHER-NEXT:    vmovaps %ymm1, %ymm0600; NOGATHER-NEXT:    retq601entry:602  %ld  = load <4 x ptr>, ptr %ptr603  %res = call <4 x i64> @llvm.masked.gather.v4i64(<4 x ptr> %ld, i32 0, <4 x i1> %masks, <4 x i64> %passthro)604  ret <4 x i64> %res605}606 607declare <4 x double> @llvm.masked.gather.v4double(<4 x ptr> %ptrs, i32 %align, <4 x i1> %masks, <4 x double> %passthro)608 609define <4 x double> @masked_gather_v4double(ptr %ptr, <4 x i1> %masks, <4 x double> %passthro) {610; X86-LABEL: masked_gather_v4double:611; X86:       # %bb.0: # %entry612; X86-NEXT:    vpslld $31, %xmm0, %xmm0613; X86-NEXT:    vpmovsxdq %xmm0, %ymm0614; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax615; X86-NEXT:    vmovapd (%eax), %xmm2616; X86-NEXT:    vgatherdpd %ymm0, (,%xmm2), %ymm1617; X86-NEXT:    vmovapd %ymm1, %ymm0618; X86-NEXT:    retl619;620; X64-LABEL: masked_gather_v4double:621; X64:       # %bb.0: # %entry622; X64-NEXT:    vpslld $31, %xmm0, %xmm0623; X64-NEXT:    vpmovsxdq %xmm0, %ymm0624; X64-NEXT:    vmovapd (%rdi), %ymm2625; X64-NEXT:    vgatherqpd %ymm0, (,%ymm2), %ymm1626; X64-NEXT:    vmovapd %ymm1, %ymm0627; X64-NEXT:    retq628;629; NOGATHER-LABEL: masked_gather_v4double:630; NOGATHER:       # %bb.0: # %entry631; NOGATHER-NEXT:    vmovdqa (%rdi), %ymm2632; NOGATHER-NEXT:    vpslld $31, %xmm0, %xmm0633; NOGATHER-NEXT:    vmovmskps %xmm0, %eax634; NOGATHER-NEXT:    testb $1, %al635; NOGATHER-NEXT:    je .LBB9_2636; NOGATHER-NEXT:  # %bb.1: # %cond.load637; NOGATHER-NEXT:    vmovq %xmm2, %rcx638; NOGATHER-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero639; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm0[0,1],ymm1[2,3,4,5,6,7]640; NOGATHER-NEXT:  .LBB9_2: # %else641; NOGATHER-NEXT:    testb $2, %al642; NOGATHER-NEXT:    je .LBB9_4643; NOGATHER-NEXT:  # %bb.3: # %cond.load1644; NOGATHER-NEXT:    vpextrq $1, %xmm2, %rcx645; NOGATHER-NEXT:    vmovhps {{.*#+}} xmm0 = xmm1[0,1],mem[0,1]646; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]647; NOGATHER-NEXT:  .LBB9_4: # %else2648; NOGATHER-NEXT:    vextractf128 $1, %ymm2, %xmm0649; NOGATHER-NEXT:    testb $4, %al650; NOGATHER-NEXT:    jne .LBB9_5651; NOGATHER-NEXT:  # %bb.6: # %else5652; NOGATHER-NEXT:    testb $8, %al653; NOGATHER-NEXT:    jne .LBB9_7654; NOGATHER-NEXT:  .LBB9_8: # %else8655; NOGATHER-NEXT:    vmovaps %ymm1, %ymm0656; NOGATHER-NEXT:    retq657; NOGATHER-NEXT:  .LBB9_5: # %cond.load4658; NOGATHER-NEXT:    vmovq %xmm0, %rcx659; NOGATHER-NEXT:    vbroadcastsd (%rcx), %ymm2660; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm2[4,5],ymm1[6,7]661; NOGATHER-NEXT:    testb $8, %al662; NOGATHER-NEXT:    je .LBB9_8663; NOGATHER-NEXT:  .LBB9_7: # %cond.load7664; NOGATHER-NEXT:    vpextrq $1, %xmm0, %rax665; NOGATHER-NEXT:    vbroadcastsd (%rax), %ymm0666; NOGATHER-NEXT:    vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5],ymm0[6,7]667; NOGATHER-NEXT:    vmovaps %ymm1, %ymm0668; NOGATHER-NEXT:    retq669entry:670  %ld  = load <4 x ptr>, ptr %ptr671  %res = call <4 x double> @llvm.masked.gather.v4double(<4 x ptr> %ld, i32 0, <4 x i1> %masks, <4 x double> %passthro)672  ret <4 x double> %res673}674 675declare <2 x i64> @llvm.masked.gather.v2i64(<2 x ptr> %ptrs, i32 %align, <2 x i1> %masks, <2 x i64> %passthro)676 677define <2 x i64> @masked_gather_v2i64(ptr %ptr, <2 x i1> %masks, <2 x i64> %passthro) {678; X86-LABEL: masked_gather_v2i64:679; X86:       # %bb.0: # %entry680; X86-NEXT:    vpsllq $63, %xmm0, %xmm0681; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax682; X86-NEXT:    vmovq {{.*#+}} xmm2 = mem[0],zero683; X86-NEXT:    vpgatherdq %xmm0, (,%xmm2), %xmm1684; X86-NEXT:    vmovdqa %xmm1, %xmm0685; X86-NEXT:    retl686;687; X64-LABEL: masked_gather_v2i64:688; X64:       # %bb.0: # %entry689; X64-NEXT:    vpsllq $63, %xmm0, %xmm0690; X64-NEXT:    vmovdqa (%rdi), %xmm2691; X64-NEXT:    vpgatherqq %xmm0, (,%xmm2), %xmm1692; X64-NEXT:    vmovdqa %xmm1, %xmm0693; X64-NEXT:    retq694;695; NOGATHER-LABEL: masked_gather_v2i64:696; NOGATHER:       # %bb.0: # %entry697; NOGATHER-NEXT:    vmovdqa (%rdi), %xmm2698; NOGATHER-NEXT:    vpsllq $63, %xmm0, %xmm0699; NOGATHER-NEXT:    vmovmskpd %xmm0, %eax700; NOGATHER-NEXT:    testb $1, %al701; NOGATHER-NEXT:    jne .LBB10_1702; NOGATHER-NEXT:  # %bb.2: # %else703; NOGATHER-NEXT:    testb $2, %al704; NOGATHER-NEXT:    jne .LBB10_3705; NOGATHER-NEXT:  .LBB10_4: # %else2706; NOGATHER-NEXT:    vmovdqa %xmm1, %xmm0707; NOGATHER-NEXT:    retq708; NOGATHER-NEXT:  .LBB10_1: # %cond.load709; NOGATHER-NEXT:    vmovq %xmm2, %rcx710; NOGATHER-NEXT:    vpinsrq $0, (%rcx), %xmm1, %xmm1711; NOGATHER-NEXT:    testb $2, %al712; NOGATHER-NEXT:    je .LBB10_4713; NOGATHER-NEXT:  .LBB10_3: # %cond.load1714; NOGATHER-NEXT:    vpextrq $1, %xmm2, %rax715; NOGATHER-NEXT:    vpinsrq $1, (%rax), %xmm1, %xmm1716; NOGATHER-NEXT:    vmovdqa %xmm1, %xmm0717; NOGATHER-NEXT:    retq718entry:719  %ld  = load <2 x ptr>, ptr %ptr720  %res = call <2 x i64> @llvm.masked.gather.v2i64(<2 x ptr> %ld, i32 0, <2 x i1> %masks, <2 x i64> %passthro)721  ret <2 x i64> %res722}723 724declare <2 x double> @llvm.masked.gather.v2double(<2 x ptr> %ptrs, i32 %align, <2 x i1> %masks, <2 x double> %passthro)725 726define <2 x double> @masked_gather_v2double(ptr %ptr, <2 x i1> %masks, <2 x double> %passthro) {727; X86-LABEL: masked_gather_v2double:728; X86:       # %bb.0: # %entry729; X86-NEXT:    vpsllq $63, %xmm0, %xmm0730; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax731; X86-NEXT:    vmovsd {{.*#+}} xmm2 = mem[0],zero732; X86-NEXT:    vgatherdpd %xmm0, (,%xmm2), %xmm1733; X86-NEXT:    vmovapd %xmm1, %xmm0734; X86-NEXT:    retl735;736; X64-LABEL: masked_gather_v2double:737; X64:       # %bb.0: # %entry738; X64-NEXT:    vpsllq $63, %xmm0, %xmm0739; X64-NEXT:    vmovapd (%rdi), %xmm2740; X64-NEXT:    vgatherqpd %xmm0, (,%xmm2), %xmm1741; X64-NEXT:    vmovapd %xmm1, %xmm0742; X64-NEXT:    retq743;744; NOGATHER-LABEL: masked_gather_v2double:745; NOGATHER:       # %bb.0: # %entry746; NOGATHER-NEXT:    vmovdqa (%rdi), %xmm2747; NOGATHER-NEXT:    vpsllq $63, %xmm0, %xmm0748; NOGATHER-NEXT:    vmovmskpd %xmm0, %eax749; NOGATHER-NEXT:    testb $1, %al750; NOGATHER-NEXT:    jne .LBB11_1751; NOGATHER-NEXT:  # %bb.2: # %else752; NOGATHER-NEXT:    testb $2, %al753; NOGATHER-NEXT:    jne .LBB11_3754; NOGATHER-NEXT:  .LBB11_4: # %else2755; NOGATHER-NEXT:    vmovaps %xmm1, %xmm0756; NOGATHER-NEXT:    retq757; NOGATHER-NEXT:  .LBB11_1: # %cond.load758; NOGATHER-NEXT:    vmovq %xmm2, %rcx759; NOGATHER-NEXT:    vmovlps {{.*#+}} xmm1 = mem[0,1],xmm1[2,3]760; NOGATHER-NEXT:    testb $2, %al761; NOGATHER-NEXT:    je .LBB11_4762; NOGATHER-NEXT:  .LBB11_3: # %cond.load1763; NOGATHER-NEXT:    vpextrq $1, %xmm2, %rax764; NOGATHER-NEXT:    vmovhps {{.*#+}} xmm1 = xmm1[0,1],mem[0,1]765; NOGATHER-NEXT:    vmovaps %xmm1, %xmm0766; NOGATHER-NEXT:    retq767entry:768  %ld  = load <2 x ptr>, ptr %ptr769  %res = call <2 x double> @llvm.masked.gather.v2double(<2 x ptr> %ld, i32 0, <2 x i1> %masks, <2 x double> %passthro)770  ret <2 x double> %res771}772 773 774define <2 x double> @masked_gather_zeromask(ptr %ptr, <2 x double> %dummy, <2 x double> %passthru) {775; X86-LABEL: masked_gather_zeromask:776; X86:       # %bb.0: # %entry777; X86-NEXT:    vmovaps %xmm1, %xmm0778; X86-NEXT:    retl779;780; X64-LABEL: masked_gather_zeromask:781; X64:       # %bb.0: # %entry782; X64-NEXT:    vmovaps %xmm1, %xmm0783; X64-NEXT:    retq784;785; NOGATHER-LABEL: masked_gather_zeromask:786; NOGATHER:       # %bb.0: # %entry787; NOGATHER-NEXT:    vmovaps %xmm1, %xmm0788; NOGATHER-NEXT:    retq789entry:790  %ld  = load <2 x ptr>, ptr %ptr791  %res = call <2 x double> @llvm.masked.gather.v2double(<2 x ptr> %ld, i32 0, <2 x i1> zeroinitializer, <2 x double> %passthru)792  ret <2 x double> %res793}794