7345 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=sse2 | FileCheck %s --check-prefixes=SSE,SSE23; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=sse4.2 | FileCheck %s --check-prefixes=SSE,SSE424; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx | FileCheck %s --check-prefixes=AVX,AVX1OR2,AVX15; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx2 | FileCheck %s --check-prefixes=AVX,AVX1OR2,AVX26; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx512f | FileCheck %s --check-prefixes=AVX,AVX512,AVX512F7; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx512f,avx512dq,avx512vl | FileCheck %s --check-prefixes=AVX,AVX512,AVX512VL,AVX512VLDQ8; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx512f,avx512bw,avx512vl | FileCheck %s --check-prefixes=AVX,AVX512,AVX512VL,AVX512VLBW9; RUN: llc < %s -mtriple=i686-apple-darwin -mattr=avx512f,avx512bw,avx512dq,avx512vl -verify-machineinstrs | FileCheck %s --check-prefixes=X86-AVX51210 11;12; vXf6413;14 15define <1 x double> @load_v1f64_v1i64(<1 x i64> %trigger, ptr %addr, <1 x double> %dst) {16; SSE-LABEL: load_v1f64_v1i64:17; SSE: ## %bb.0:18; SSE-NEXT: testq %rdi, %rdi19; SSE-NEXT: jne LBB0_220; SSE-NEXT: ## %bb.1: ## %cond.load21; SSE-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero22; SSE-NEXT: LBB0_2: ## %else23; SSE-NEXT: retq24;25; AVX-LABEL: load_v1f64_v1i64:26; AVX: ## %bb.0:27; AVX-NEXT: testq %rdi, %rdi28; AVX-NEXT: jne LBB0_229; AVX-NEXT: ## %bb.1: ## %cond.load30; AVX-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero31; AVX-NEXT: LBB0_2: ## %else32; AVX-NEXT: retq33;34; X86-AVX512-LABEL: load_v1f64_v1i64:35; X86-AVX512: ## %bb.0:36; X86-AVX512-NEXT: subl $12, %esp37; X86-AVX512-NEXT: .cfi_def_cfa_offset 1638; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax39; X86-AVX512-NEXT: orl {{[0-9]+}}(%esp), %eax40; X86-AVX512-NEXT: jne LBB0_141; X86-AVX512-NEXT: ## %bb.2: ## %cond.load42; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax43; X86-AVX512-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero44; X86-AVX512-NEXT: jmp LBB0_345; X86-AVX512-NEXT: LBB0_1:46; X86-AVX512-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero47; X86-AVX512-NEXT: LBB0_3: ## %else48; X86-AVX512-NEXT: vmovsd %xmm0, (%esp)49; X86-AVX512-NEXT: fldl (%esp)50; X86-AVX512-NEXT: addl $12, %esp51; X86-AVX512-NEXT: retl52 %mask = icmp eq <1 x i64> %trigger, zeroinitializer53 %res = call <1 x double> @llvm.masked.load.v1f64.p0(ptr %addr, i32 4, <1 x i1> %mask, <1 x double> %dst)54 ret <1 x double> %res55}56 57define <2 x double> @load_v2f64_v2i64(<2 x i64> %trigger, ptr %addr, <2 x double> %dst) {58; SSE2-LABEL: load_v2f64_v2i64:59; SSE2: ## %bb.0:60; SSE2-NEXT: pxor %xmm2, %xmm261; SSE2-NEXT: pcmpeqd %xmm0, %xmm262; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,0,3,2]63; SSE2-NEXT: pand %xmm2, %xmm064; SSE2-NEXT: movmskpd %xmm0, %eax65; SSE2-NEXT: testb $1, %al66; SSE2-NEXT: jne LBB1_167; SSE2-NEXT: ## %bb.2: ## %else68; SSE2-NEXT: testb $2, %al69; SSE2-NEXT: jne LBB1_370; SSE2-NEXT: LBB1_4: ## %else271; SSE2-NEXT: movaps %xmm1, %xmm072; SSE2-NEXT: retq73; SSE2-NEXT: LBB1_1: ## %cond.load74; SSE2-NEXT: movlps {{.*#+}} xmm1 = mem[0,1],xmm1[2,3]75; SSE2-NEXT: testb $2, %al76; SSE2-NEXT: je LBB1_477; SSE2-NEXT: LBB1_3: ## %cond.load178; SSE2-NEXT: movhps {{.*#+}} xmm1 = xmm1[0,1],mem[0,1]79; SSE2-NEXT: movaps %xmm1, %xmm080; SSE2-NEXT: retq81;82; SSE42-LABEL: load_v2f64_v2i64:83; SSE42: ## %bb.0:84; SSE42-NEXT: pxor %xmm2, %xmm285; SSE42-NEXT: pcmpeqq %xmm0, %xmm286; SSE42-NEXT: movmskpd %xmm2, %eax87; SSE42-NEXT: testb $1, %al88; SSE42-NEXT: jne LBB1_189; SSE42-NEXT: ## %bb.2: ## %else90; SSE42-NEXT: testb $2, %al91; SSE42-NEXT: jne LBB1_392; SSE42-NEXT: LBB1_4: ## %else293; SSE42-NEXT: movaps %xmm1, %xmm094; SSE42-NEXT: retq95; SSE42-NEXT: LBB1_1: ## %cond.load96; SSE42-NEXT: movlps {{.*#+}} xmm1 = mem[0,1],xmm1[2,3]97; SSE42-NEXT: testb $2, %al98; SSE42-NEXT: je LBB1_499; SSE42-NEXT: LBB1_3: ## %cond.load1100; SSE42-NEXT: movhps {{.*#+}} xmm1 = xmm1[0,1],mem[0,1]101; SSE42-NEXT: movaps %xmm1, %xmm0102; SSE42-NEXT: retq103;104; AVX1OR2-LABEL: load_v2f64_v2i64:105; AVX1OR2: ## %bb.0:106; AVX1OR2-NEXT: vpxor %xmm2, %xmm2, %xmm2107; AVX1OR2-NEXT: vpcmpeqq %xmm2, %xmm0, %xmm0108; AVX1OR2-NEXT: vmaskmovpd (%rdi), %xmm0, %xmm2109; AVX1OR2-NEXT: vblendvpd %xmm0, %xmm2, %xmm1, %xmm0110; AVX1OR2-NEXT: retq111;112; AVX512F-LABEL: load_v2f64_v2i64:113; AVX512F: ## %bb.0:114; AVX512F-NEXT: ## kill: def $xmm1 killed $xmm1 def $zmm1115; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm0116; AVX512F-NEXT: vptestnmq %zmm0, %zmm0, %k0117; AVX512F-NEXT: kshiftlw $14, %k0, %k0118; AVX512F-NEXT: kshiftrw $14, %k0, %k1119; AVX512F-NEXT: vblendmpd (%rdi), %zmm1, %zmm0 {%k1}120; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 killed $zmm0121; AVX512F-NEXT: vzeroupper122; AVX512F-NEXT: retq123;124; AVX512VL-LABEL: load_v2f64_v2i64:125; AVX512VL: ## %bb.0:126; AVX512VL-NEXT: vptestnmq %xmm0, %xmm0, %k1127; AVX512VL-NEXT: vblendmpd (%rdi), %xmm1, %xmm0 {%k1}128; AVX512VL-NEXT: retq129;130; X86-AVX512-LABEL: load_v2f64_v2i64:131; X86-AVX512: ## %bb.0:132; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax133; X86-AVX512-NEXT: vptestnmq %xmm0, %xmm0, %k1134; X86-AVX512-NEXT: vblendmpd (%eax), %xmm1, %xmm0 {%k1}135; X86-AVX512-NEXT: retl136 %mask = icmp eq <2 x i64> %trigger, zeroinitializer137 %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %addr, i32 4, <2 x i1> %mask, <2 x double> %dst)138 ret <2 x double> %res139}140 141define <4 x double> @load_v4f64_v4i32(<4 x i32> %trigger, ptr %addr, <4 x double> %dst) {142; SSE-LABEL: load_v4f64_v4i32:143; SSE: ## %bb.0:144; SSE-NEXT: pxor %xmm3, %xmm3145; SSE-NEXT: pcmpeqd %xmm0, %xmm3146; SSE-NEXT: movmskps %xmm3, %eax147; SSE-NEXT: testb $1, %al148; SSE-NEXT: jne LBB2_1149; SSE-NEXT: ## %bb.2: ## %else150; SSE-NEXT: testb $2, %al151; SSE-NEXT: jne LBB2_3152; SSE-NEXT: LBB2_4: ## %else2153; SSE-NEXT: testb $4, %al154; SSE-NEXT: jne LBB2_5155; SSE-NEXT: LBB2_6: ## %else5156; SSE-NEXT: testb $8, %al157; SSE-NEXT: je LBB2_8158; SSE-NEXT: LBB2_7: ## %cond.load7159; SSE-NEXT: movhps {{.*#+}} xmm2 = xmm2[0,1],mem[0,1]160; SSE-NEXT: LBB2_8: ## %else8161; SSE-NEXT: movaps %xmm1, %xmm0162; SSE-NEXT: movaps %xmm2, %xmm1163; SSE-NEXT: retq164; SSE-NEXT: LBB2_1: ## %cond.load165; SSE-NEXT: movlps {{.*#+}} xmm1 = mem[0,1],xmm1[2,3]166; SSE-NEXT: testb $2, %al167; SSE-NEXT: je LBB2_4168; SSE-NEXT: LBB2_3: ## %cond.load1169; SSE-NEXT: movhps {{.*#+}} xmm1 = xmm1[0,1],mem[0,1]170; SSE-NEXT: testb $4, %al171; SSE-NEXT: je LBB2_6172; SSE-NEXT: LBB2_5: ## %cond.load4173; SSE-NEXT: movlps {{.*#+}} xmm2 = mem[0,1],xmm2[2,3]174; SSE-NEXT: testb $8, %al175; SSE-NEXT: jne LBB2_7176; SSE-NEXT: jmp LBB2_8177;178; AVX1-LABEL: load_v4f64_v4i32:179; AVX1: ## %bb.0:180; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2181; AVX1-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm0182; AVX1-NEXT: vpmovsxdq %xmm0, %xmm2183; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,2,3,3]184; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0185; AVX1-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm2186; AVX1-NEXT: vblendvpd %ymm0, %ymm2, %ymm1, %ymm0187; AVX1-NEXT: retq188;189; AVX2-LABEL: load_v4f64_v4i32:190; AVX2: ## %bb.0:191; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2192; AVX2-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm0193; AVX2-NEXT: vpmovsxdq %xmm0, %ymm0194; AVX2-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm2195; AVX2-NEXT: vblendvpd %ymm0, %ymm2, %ymm1, %ymm0196; AVX2-NEXT: retq197;198; AVX512F-LABEL: load_v4f64_v4i32:199; AVX512F: ## %bb.0:200; AVX512F-NEXT: ## kill: def $ymm1 killed $ymm1 def $zmm1201; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm0202; AVX512F-NEXT: vptestnmd %zmm0, %zmm0, %k0203; AVX512F-NEXT: kshiftlw $12, %k0, %k0204; AVX512F-NEXT: kshiftrw $12, %k0, %k1205; AVX512F-NEXT: vblendmpd (%rdi), %zmm1, %zmm0 {%k1}206; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 killed $zmm0207; AVX512F-NEXT: retq208;209; AVX512VL-LABEL: load_v4f64_v4i32:210; AVX512VL: ## %bb.0:211; AVX512VL-NEXT: vptestnmd %xmm0, %xmm0, %k1212; AVX512VL-NEXT: vblendmpd (%rdi), %ymm1, %ymm0 {%k1}213; AVX512VL-NEXT: retq214;215; X86-AVX512-LABEL: load_v4f64_v4i32:216; X86-AVX512: ## %bb.0:217; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax218; X86-AVX512-NEXT: vptestnmd %xmm0, %xmm0, %k1219; X86-AVX512-NEXT: vblendmpd (%eax), %ymm1, %ymm0 {%k1}220; X86-AVX512-NEXT: retl221 %mask = icmp eq <4 x i32> %trigger, zeroinitializer222 %res = call <4 x double> @llvm.masked.load.v4f64.p0(ptr %addr, i32 32, <4 x i1> %mask, <4 x double> %dst)223 ret <4 x double> %res224}225 226define <4 x double> @load_v4f64_v4i32_zero(<4 x i32> %trigger, ptr %addr) {227; SSE-LABEL: load_v4f64_v4i32_zero:228; SSE: ## %bb.0:229; SSE-NEXT: movdqa %xmm0, %xmm1230; SSE-NEXT: pxor %xmm0, %xmm0231; SSE-NEXT: pcmpeqd %xmm0, %xmm1232; SSE-NEXT: movmskps %xmm1, %eax233; SSE-NEXT: testb $1, %al234; SSE-NEXT: xorps %xmm1, %xmm1235; SSE-NEXT: jne LBB3_1236; SSE-NEXT: ## %bb.2: ## %else237; SSE-NEXT: testb $2, %al238; SSE-NEXT: jne LBB3_3239; SSE-NEXT: LBB3_4: ## %else2240; SSE-NEXT: testb $4, %al241; SSE-NEXT: jne LBB3_5242; SSE-NEXT: LBB3_6: ## %else5243; SSE-NEXT: testb $8, %al244; SSE-NEXT: jne LBB3_7245; SSE-NEXT: LBB3_8: ## %else8246; SSE-NEXT: retq247; SSE-NEXT: LBB3_1: ## %cond.load248; SSE-NEXT: movq {{.*#+}} xmm0 = mem[0],zero249; SSE-NEXT: testb $2, %al250; SSE-NEXT: je LBB3_4251; SSE-NEXT: LBB3_3: ## %cond.load1252; SSE-NEXT: movhps {{.*#+}} xmm0 = xmm0[0,1],mem[0,1]253; SSE-NEXT: testb $4, %al254; SSE-NEXT: je LBB3_6255; SSE-NEXT: LBB3_5: ## %cond.load4256; SSE-NEXT: movlps {{.*#+}} xmm1 = mem[0,1],xmm1[2,3]257; SSE-NEXT: testb $8, %al258; SSE-NEXT: je LBB3_8259; SSE-NEXT: LBB3_7: ## %cond.load7260; SSE-NEXT: movhps {{.*#+}} xmm1 = xmm1[0,1],mem[0,1]261; SSE-NEXT: retq262;263; AVX1-LABEL: load_v4f64_v4i32_zero:264; AVX1: ## %bb.0:265; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1266; AVX1-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0267; AVX1-NEXT: vpmovsxdq %xmm0, %xmm1268; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,2,3,3]269; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0270; AVX1-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm0271; AVX1-NEXT: retq272;273; AVX2-LABEL: load_v4f64_v4i32_zero:274; AVX2: ## %bb.0:275; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1276; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0277; AVX2-NEXT: vpmovsxdq %xmm0, %ymm0278; AVX2-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm0279; AVX2-NEXT: retq280;281; AVX512F-LABEL: load_v4f64_v4i32_zero:282; AVX512F: ## %bb.0:283; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm0284; AVX512F-NEXT: vptestnmd %zmm0, %zmm0, %k0285; AVX512F-NEXT: kshiftlw $12, %k0, %k0286; AVX512F-NEXT: kshiftrw $12, %k0, %k1287; AVX512F-NEXT: vmovupd (%rdi), %zmm0 {%k1} {z}288; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 killed $zmm0289; AVX512F-NEXT: retq290;291; AVX512VL-LABEL: load_v4f64_v4i32_zero:292; AVX512VL: ## %bb.0:293; AVX512VL-NEXT: vptestnmd %xmm0, %xmm0, %k1294; AVX512VL-NEXT: vmovapd (%rdi), %ymm0 {%k1} {z}295; AVX512VL-NEXT: retq296;297; X86-AVX512-LABEL: load_v4f64_v4i32_zero:298; X86-AVX512: ## %bb.0:299; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax300; X86-AVX512-NEXT: vptestnmd %xmm0, %xmm0, %k1301; X86-AVX512-NEXT: vmovapd (%eax), %ymm0 {%k1} {z}302; X86-AVX512-NEXT: retl303 %mask = icmp eq <4 x i32> %trigger, zeroinitializer304 %res = call <4 x double> @llvm.masked.load.v4f64.p0(ptr %addr, i32 32, <4 x i1> %mask, <4 x double>zeroinitializer)305 ret <4 x double> %res306}307 308define <4 x double> @load_v4f64_v4i64(<4 x i64> %trigger, ptr %addr, <4 x double> %dst) {309; SSE2-LABEL: load_v4f64_v4i64:310; SSE2: ## %bb.0:311; SSE2-NEXT: pxor %xmm4, %xmm4312; SSE2-NEXT: pcmpeqd %xmm4, %xmm1313; SSE2-NEXT: pcmpeqd %xmm4, %xmm0314; SSE2-NEXT: movdqa %xmm0, %xmm4315; SSE2-NEXT: shufps {{.*#+}} xmm4 = xmm4[1,3],xmm1[1,3]316; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]317; SSE2-NEXT: andps %xmm4, %xmm0318; SSE2-NEXT: movmskps %xmm0, %eax319; SSE2-NEXT: testb $1, %al320; SSE2-NEXT: jne LBB4_1321; SSE2-NEXT: ## %bb.2: ## %else322; SSE2-NEXT: testb $2, %al323; SSE2-NEXT: jne LBB4_3324; SSE2-NEXT: LBB4_4: ## %else2325; SSE2-NEXT: testb $4, %al326; SSE2-NEXT: jne LBB4_5327; SSE2-NEXT: LBB4_6: ## %else5328; SSE2-NEXT: testb $8, %al329; SSE2-NEXT: je LBB4_8330; SSE2-NEXT: LBB4_7: ## %cond.load7331; SSE2-NEXT: movhps {{.*#+}} xmm3 = xmm3[0,1],mem[0,1]332; SSE2-NEXT: LBB4_8: ## %else8333; SSE2-NEXT: movaps %xmm2, %xmm0334; SSE2-NEXT: movaps %xmm3, %xmm1335; SSE2-NEXT: retq336; SSE2-NEXT: LBB4_1: ## %cond.load337; SSE2-NEXT: movlps {{.*#+}} xmm2 = mem[0,1],xmm2[2,3]338; SSE2-NEXT: testb $2, %al339; SSE2-NEXT: je LBB4_4340; SSE2-NEXT: LBB4_3: ## %cond.load1341; SSE2-NEXT: movhps {{.*#+}} xmm2 = xmm2[0,1],mem[0,1]342; SSE2-NEXT: testb $4, %al343; SSE2-NEXT: je LBB4_6344; SSE2-NEXT: LBB4_5: ## %cond.load4345; SSE2-NEXT: movlps {{.*#+}} xmm3 = mem[0,1],xmm3[2,3]346; SSE2-NEXT: testb $8, %al347; SSE2-NEXT: jne LBB4_7348; SSE2-NEXT: jmp LBB4_8349;350; SSE42-LABEL: load_v4f64_v4i64:351; SSE42: ## %bb.0:352; SSE42-NEXT: pxor %xmm4, %xmm4353; SSE42-NEXT: pcmpeqq %xmm4, %xmm1354; SSE42-NEXT: pcmpeqq %xmm4, %xmm0355; SSE42-NEXT: packssdw %xmm1, %xmm0356; SSE42-NEXT: movmskps %xmm0, %eax357; SSE42-NEXT: testb $1, %al358; SSE42-NEXT: jne LBB4_1359; SSE42-NEXT: ## %bb.2: ## %else360; SSE42-NEXT: testb $2, %al361; SSE42-NEXT: jne LBB4_3362; SSE42-NEXT: LBB4_4: ## %else2363; SSE42-NEXT: testb $4, %al364; SSE42-NEXT: jne LBB4_5365; SSE42-NEXT: LBB4_6: ## %else5366; SSE42-NEXT: testb $8, %al367; SSE42-NEXT: je LBB4_8368; SSE42-NEXT: LBB4_7: ## %cond.load7369; SSE42-NEXT: movhps {{.*#+}} xmm3 = xmm3[0,1],mem[0,1]370; SSE42-NEXT: LBB4_8: ## %else8371; SSE42-NEXT: movaps %xmm2, %xmm0372; SSE42-NEXT: movaps %xmm3, %xmm1373; SSE42-NEXT: retq374; SSE42-NEXT: LBB4_1: ## %cond.load375; SSE42-NEXT: movlps {{.*#+}} xmm2 = mem[0,1],xmm2[2,3]376; SSE42-NEXT: testb $2, %al377; SSE42-NEXT: je LBB4_4378; SSE42-NEXT: LBB4_3: ## %cond.load1379; SSE42-NEXT: movhps {{.*#+}} xmm2 = xmm2[0,1],mem[0,1]380; SSE42-NEXT: testb $4, %al381; SSE42-NEXT: je LBB4_6382; SSE42-NEXT: LBB4_5: ## %cond.load4383; SSE42-NEXT: movlps {{.*#+}} xmm3 = mem[0,1],xmm3[2,3]384; SSE42-NEXT: testb $8, %al385; SSE42-NEXT: jne LBB4_7386; SSE42-NEXT: jmp LBB4_8387;388; AVX1-LABEL: load_v4f64_v4i64:389; AVX1: ## %bb.0:390; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2391; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3392; AVX1-NEXT: vpcmpeqq %xmm3, %xmm2, %xmm2393; AVX1-NEXT: vpcmpeqq %xmm3, %xmm0, %xmm0394; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0395; AVX1-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm2396; AVX1-NEXT: vblendvpd %ymm0, %ymm2, %ymm1, %ymm0397; AVX1-NEXT: retq398;399; AVX2-LABEL: load_v4f64_v4i64:400; AVX2: ## %bb.0:401; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2402; AVX2-NEXT: vpcmpeqq %ymm2, %ymm0, %ymm0403; AVX2-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm2404; AVX2-NEXT: vblendvpd %ymm0, %ymm2, %ymm1, %ymm0405; AVX2-NEXT: retq406;407; AVX512F-LABEL: load_v4f64_v4i64:408; AVX512F: ## %bb.0:409; AVX512F-NEXT: ## kill: def $ymm1 killed $ymm1 def $zmm1410; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 def $zmm0411; AVX512F-NEXT: vptestnmq %zmm0, %zmm0, %k0412; AVX512F-NEXT: kshiftlw $12, %k0, %k0413; AVX512F-NEXT: kshiftrw $12, %k0, %k1414; AVX512F-NEXT: vblendmpd (%rdi), %zmm1, %zmm0 {%k1}415; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 killed $zmm0416; AVX512F-NEXT: retq417;418; AVX512VL-LABEL: load_v4f64_v4i64:419; AVX512VL: ## %bb.0:420; AVX512VL-NEXT: vptestnmq %ymm0, %ymm0, %k1421; AVX512VL-NEXT: vblendmpd (%rdi), %ymm1, %ymm0 {%k1}422; AVX512VL-NEXT: retq423;424; X86-AVX512-LABEL: load_v4f64_v4i64:425; X86-AVX512: ## %bb.0:426; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax427; X86-AVX512-NEXT: vptestnmq %ymm0, %ymm0, %k1428; X86-AVX512-NEXT: vblendmpd (%eax), %ymm1, %ymm0 {%k1}429; X86-AVX512-NEXT: retl430 %mask = icmp eq <4 x i64> %trigger, zeroinitializer431 %res = call <4 x double> @llvm.masked.load.v4f64.p0(ptr %addr, i32 4, <4 x i1> %mask, <4 x double> %dst)432 ret <4 x double> %res433}434 435define <8 x double> @load_v8f64_v8i16(<8 x i16> %trigger, ptr %addr, <8 x double> %dst) {436; SSE-LABEL: load_v8f64_v8i16:437; SSE: ## %bb.0:438; SSE-NEXT: pxor %xmm5, %xmm5439; SSE-NEXT: pcmpeqw %xmm0, %xmm5440; SSE-NEXT: packsswb %xmm5, %xmm5441; SSE-NEXT: pmovmskb %xmm5, %eax442; SSE-NEXT: testb $1, %al443; SSE-NEXT: jne LBB5_1444; SSE-NEXT: ## %bb.2: ## %else445; SSE-NEXT: testb $2, %al446; SSE-NEXT: jne LBB5_3447; SSE-NEXT: LBB5_4: ## %else2448; SSE-NEXT: testb $4, %al449; SSE-NEXT: jne LBB5_5450; SSE-NEXT: LBB5_6: ## %else5451; SSE-NEXT: testb $8, %al452; SSE-NEXT: jne LBB5_7453; SSE-NEXT: LBB5_8: ## %else8454; SSE-NEXT: testb $16, %al455; SSE-NEXT: jne LBB5_9456; SSE-NEXT: LBB5_10: ## %else11457; SSE-NEXT: testb $32, %al458; SSE-NEXT: jne LBB5_11459; SSE-NEXT: LBB5_12: ## %else14460; SSE-NEXT: testb $64, %al461; SSE-NEXT: jne LBB5_13462; SSE-NEXT: LBB5_14: ## %else17463; SSE-NEXT: testb $-128, %al464; SSE-NEXT: je LBB5_16465; SSE-NEXT: LBB5_15: ## %cond.load19466; SSE-NEXT: movhps {{.*#+}} xmm4 = xmm4[0,1],mem[0,1]467; SSE-NEXT: LBB5_16: ## %else20468; SSE-NEXT: movaps %xmm1, %xmm0469; SSE-NEXT: movaps %xmm2, %xmm1470; SSE-NEXT: movaps %xmm3, %xmm2471; SSE-NEXT: movaps %xmm4, %xmm3472; SSE-NEXT: retq473; SSE-NEXT: LBB5_1: ## %cond.load474; SSE-NEXT: movlps {{.*#+}} xmm1 = mem[0,1],xmm1[2,3]475; SSE-NEXT: testb $2, %al476; SSE-NEXT: je LBB5_4477; SSE-NEXT: LBB5_3: ## %cond.load1478; SSE-NEXT: movhps {{.*#+}} xmm1 = xmm1[0,1],mem[0,1]479; SSE-NEXT: testb $4, %al480; SSE-NEXT: je LBB5_6481; SSE-NEXT: LBB5_5: ## %cond.load4482; SSE-NEXT: movlps {{.*#+}} xmm2 = mem[0,1],xmm2[2,3]483; SSE-NEXT: testb $8, %al484; SSE-NEXT: je LBB5_8485; SSE-NEXT: LBB5_7: ## %cond.load7486; SSE-NEXT: movhps {{.*#+}} xmm2 = xmm2[0,1],mem[0,1]487; SSE-NEXT: testb $16, %al488; SSE-NEXT: je LBB5_10489; SSE-NEXT: LBB5_9: ## %cond.load10490; SSE-NEXT: movlps {{.*#+}} xmm3 = mem[0,1],xmm3[2,3]491; SSE-NEXT: testb $32, %al492; SSE-NEXT: je LBB5_12493; SSE-NEXT: LBB5_11: ## %cond.load13494; SSE-NEXT: movhps {{.*#+}} xmm3 = xmm3[0,1],mem[0,1]495; SSE-NEXT: testb $64, %al496; SSE-NEXT: je LBB5_14497; SSE-NEXT: LBB5_13: ## %cond.load16498; SSE-NEXT: movlps {{.*#+}} xmm4 = mem[0,1],xmm4[2,3]499; SSE-NEXT: testb $-128, %al500; SSE-NEXT: jne LBB5_15501; SSE-NEXT: jmp LBB5_16502;503; AVX1-LABEL: load_v8f64_v8i16:504; AVX1: ## %bb.0:505; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm0[2,3,2,3]506; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm4507; AVX1-NEXT: vpcmpeqw %xmm4, %xmm3, %xmm3508; AVX1-NEXT: vpmovsxwq %xmm3, %xmm5509; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm3[1,1,1,1]510; AVX1-NEXT: vpmovsxwq %xmm3, %xmm3511; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm5, %ymm3512; AVX1-NEXT: vpcmpeqw %xmm4, %xmm0, %xmm0513; AVX1-NEXT: vpmovsxwq %xmm0, %xmm4514; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]515; AVX1-NEXT: vpmovsxwq %xmm0, %xmm0516; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm4, %ymm0517; AVX1-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm4518; AVX1-NEXT: vblendvpd %ymm0, %ymm4, %ymm1, %ymm0519; AVX1-NEXT: vmaskmovpd 32(%rdi), %ymm3, %ymm1520; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1521; AVX1-NEXT: retq522;523; AVX2-LABEL: load_v8f64_v8i16:524; AVX2: ## %bb.0:525; AVX2-NEXT: vpshufd {{.*#+}} xmm3 = xmm0[2,3,2,3]526; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm4527; AVX2-NEXT: vpcmpeqw %xmm4, %xmm3, %xmm3528; AVX2-NEXT: vpmovsxwq %xmm3, %ymm3529; AVX2-NEXT: vpcmpeqw %xmm4, %xmm0, %xmm0530; AVX2-NEXT: vpmovsxwq %xmm0, %ymm0531; AVX2-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm4532; AVX2-NEXT: vblendvpd %ymm0, %ymm4, %ymm1, %ymm0533; AVX2-NEXT: vmaskmovpd 32(%rdi), %ymm3, %ymm1534; AVX2-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm1535; AVX2-NEXT: retq536;537; AVX512F-LABEL: load_v8f64_v8i16:538; AVX512F: ## %bb.0:539; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm2540; AVX512F-NEXT: vpcmpeqw %xmm2, %xmm0, %xmm0541; AVX512F-NEXT: vpmovsxwq %xmm0, %zmm0542; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k1543; AVX512F-NEXT: vblendmpd (%rdi), %zmm1, %zmm0 {%k1}544; AVX512F-NEXT: retq545;546; AVX512VLDQ-LABEL: load_v8f64_v8i16:547; AVX512VLDQ: ## %bb.0:548; AVX512VLDQ-NEXT: vpxor %xmm2, %xmm2, %xmm2549; AVX512VLDQ-NEXT: vpcmpeqw %xmm2, %xmm0, %xmm0550; AVX512VLDQ-NEXT: vpmovsxwd %xmm0, %ymm0551; AVX512VLDQ-NEXT: vpmovd2m %ymm0, %k1552; AVX512VLDQ-NEXT: vblendmpd (%rdi), %zmm1, %zmm0 {%k1}553; AVX512VLDQ-NEXT: retq554;555; AVX512VLBW-LABEL: load_v8f64_v8i16:556; AVX512VLBW: ## %bb.0:557; AVX512VLBW-NEXT: vptestnmw %xmm0, %xmm0, %k1558; AVX512VLBW-NEXT: vblendmpd (%rdi), %zmm1, %zmm0 {%k1}559; AVX512VLBW-NEXT: retq560;561; X86-AVX512-LABEL: load_v8f64_v8i16:562; X86-AVX512: ## %bb.0:563; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax564; X86-AVX512-NEXT: vptestnmw %xmm0, %xmm0, %k1565; X86-AVX512-NEXT: vblendmpd (%eax), %zmm1, %zmm0 {%k1}566; X86-AVX512-NEXT: retl567 %mask = icmp eq <8 x i16> %trigger, zeroinitializer568 %res = call <8 x double> @llvm.masked.load.v8f64.p0(ptr %addr, i32 4, <8 x i1> %mask, <8 x double> %dst)569 ret <8 x double> %res570}571 572define <8 x double> @load_v8f64_v8i64(<8 x i64> %trigger, ptr %addr, <8 x double> %dst) {573; SSE2-LABEL: load_v8f64_v8i64:574; SSE2: ## %bb.0:575; SSE2-NEXT: pxor %xmm8, %xmm8576; SSE2-NEXT: pcmpeqd %xmm8, %xmm3577; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm3[1,0,3,2]578; SSE2-NEXT: pand %xmm3, %xmm9579; SSE2-NEXT: pcmpeqd %xmm8, %xmm2580; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,0,3,2]581; SSE2-NEXT: pand %xmm2, %xmm3582; SSE2-NEXT: packssdw %xmm9, %xmm3583; SSE2-NEXT: pcmpeqd %xmm8, %xmm1584; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,0,3,2]585; SSE2-NEXT: pand %xmm1, %xmm2586; SSE2-NEXT: pcmpeqd %xmm8, %xmm0587; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]588; SSE2-NEXT: pand %xmm0, %xmm1589; SSE2-NEXT: packssdw %xmm2, %xmm1590; SSE2-NEXT: packssdw %xmm3, %xmm1591; SSE2-NEXT: packsswb %xmm1, %xmm1592; SSE2-NEXT: pmovmskb %xmm1, %eax593; SSE2-NEXT: testb $1, %al594; SSE2-NEXT: jne LBB6_1595; SSE2-NEXT: ## %bb.2: ## %else596; SSE2-NEXT: testb $2, %al597; SSE2-NEXT: jne LBB6_3598; SSE2-NEXT: LBB6_4: ## %else2599; SSE2-NEXT: testb $4, %al600; SSE2-NEXT: jne LBB6_5601; SSE2-NEXT: LBB6_6: ## %else5602; SSE2-NEXT: testb $8, %al603; SSE2-NEXT: jne LBB6_7604; SSE2-NEXT: LBB6_8: ## %else8605; SSE2-NEXT: testb $16, %al606; SSE2-NEXT: jne LBB6_9607; SSE2-NEXT: LBB6_10: ## %else11608; SSE2-NEXT: testb $32, %al609; SSE2-NEXT: jne LBB6_11610; SSE2-NEXT: LBB6_12: ## %else14611; SSE2-NEXT: testb $64, %al612; SSE2-NEXT: jne LBB6_13613; SSE2-NEXT: LBB6_14: ## %else17614; SSE2-NEXT: testb $-128, %al615; SSE2-NEXT: je LBB6_16616; SSE2-NEXT: LBB6_15: ## %cond.load19617; SSE2-NEXT: movhps {{.*#+}} xmm7 = xmm7[0,1],mem[0,1]618; SSE2-NEXT: LBB6_16: ## %else20619; SSE2-NEXT: movaps %xmm4, %xmm0620; SSE2-NEXT: movaps %xmm5, %xmm1621; SSE2-NEXT: movaps %xmm6, %xmm2622; SSE2-NEXT: movaps %xmm7, %xmm3623; SSE2-NEXT: retq624; SSE2-NEXT: LBB6_1: ## %cond.load625; SSE2-NEXT: movlps {{.*#+}} xmm4 = mem[0,1],xmm4[2,3]626; SSE2-NEXT: testb $2, %al627; SSE2-NEXT: je LBB6_4628; SSE2-NEXT: LBB6_3: ## %cond.load1629; SSE2-NEXT: movhps {{.*#+}} xmm4 = xmm4[0,1],mem[0,1]630; SSE2-NEXT: testb $4, %al631; SSE2-NEXT: je LBB6_6632; SSE2-NEXT: LBB6_5: ## %cond.load4633; SSE2-NEXT: movlps {{.*#+}} xmm5 = mem[0,1],xmm5[2,3]634; SSE2-NEXT: testb $8, %al635; SSE2-NEXT: je LBB6_8636; SSE2-NEXT: LBB6_7: ## %cond.load7637; SSE2-NEXT: movhps {{.*#+}} xmm5 = xmm5[0,1],mem[0,1]638; SSE2-NEXT: testb $16, %al639; SSE2-NEXT: je LBB6_10640; SSE2-NEXT: LBB6_9: ## %cond.load10641; SSE2-NEXT: movlps {{.*#+}} xmm6 = mem[0,1],xmm6[2,3]642; SSE2-NEXT: testb $32, %al643; SSE2-NEXT: je LBB6_12644; SSE2-NEXT: LBB6_11: ## %cond.load13645; SSE2-NEXT: movhps {{.*#+}} xmm6 = xmm6[0,1],mem[0,1]646; SSE2-NEXT: testb $64, %al647; SSE2-NEXT: je LBB6_14648; SSE2-NEXT: LBB6_13: ## %cond.load16649; SSE2-NEXT: movlps {{.*#+}} xmm7 = mem[0,1],xmm7[2,3]650; SSE2-NEXT: testb $-128, %al651; SSE2-NEXT: jne LBB6_15652; SSE2-NEXT: jmp LBB6_16653;654; SSE42-LABEL: load_v8f64_v8i64:655; SSE42: ## %bb.0:656; SSE42-NEXT: pxor %xmm8, %xmm8657; SSE42-NEXT: pcmpeqq %xmm8, %xmm3658; SSE42-NEXT: pcmpeqq %xmm8, %xmm2659; SSE42-NEXT: packssdw %xmm3, %xmm2660; SSE42-NEXT: pcmpeqq %xmm8, %xmm1661; SSE42-NEXT: pcmpeqq %xmm8, %xmm0662; SSE42-NEXT: packssdw %xmm1, %xmm0663; SSE42-NEXT: packssdw %xmm2, %xmm0664; SSE42-NEXT: packsswb %xmm0, %xmm0665; SSE42-NEXT: pmovmskb %xmm0, %eax666; SSE42-NEXT: testb $1, %al667; SSE42-NEXT: jne LBB6_1668; SSE42-NEXT: ## %bb.2: ## %else669; SSE42-NEXT: testb $2, %al670; SSE42-NEXT: jne LBB6_3671; SSE42-NEXT: LBB6_4: ## %else2672; SSE42-NEXT: testb $4, %al673; SSE42-NEXT: jne LBB6_5674; SSE42-NEXT: LBB6_6: ## %else5675; SSE42-NEXT: testb $8, %al676; SSE42-NEXT: jne LBB6_7677; SSE42-NEXT: LBB6_8: ## %else8678; SSE42-NEXT: testb $16, %al679; SSE42-NEXT: jne LBB6_9680; SSE42-NEXT: LBB6_10: ## %else11681; SSE42-NEXT: testb $32, %al682; SSE42-NEXT: jne LBB6_11683; SSE42-NEXT: LBB6_12: ## %else14684; SSE42-NEXT: testb $64, %al685; SSE42-NEXT: jne LBB6_13686; SSE42-NEXT: LBB6_14: ## %else17687; SSE42-NEXT: testb $-128, %al688; SSE42-NEXT: je LBB6_16689; SSE42-NEXT: LBB6_15: ## %cond.load19690; SSE42-NEXT: movhps {{.*#+}} xmm7 = xmm7[0,1],mem[0,1]691; SSE42-NEXT: LBB6_16: ## %else20692; SSE42-NEXT: movaps %xmm4, %xmm0693; SSE42-NEXT: movaps %xmm5, %xmm1694; SSE42-NEXT: movaps %xmm6, %xmm2695; SSE42-NEXT: movaps %xmm7, %xmm3696; SSE42-NEXT: retq697; SSE42-NEXT: LBB6_1: ## %cond.load698; SSE42-NEXT: movlps {{.*#+}} xmm4 = mem[0,1],xmm4[2,3]699; SSE42-NEXT: testb $2, %al700; SSE42-NEXT: je LBB6_4701; SSE42-NEXT: LBB6_3: ## %cond.load1702; SSE42-NEXT: movhps {{.*#+}} xmm4 = xmm4[0,1],mem[0,1]703; SSE42-NEXT: testb $4, %al704; SSE42-NEXT: je LBB6_6705; SSE42-NEXT: LBB6_5: ## %cond.load4706; SSE42-NEXT: movlps {{.*#+}} xmm5 = mem[0,1],xmm5[2,3]707; SSE42-NEXT: testb $8, %al708; SSE42-NEXT: je LBB6_8709; SSE42-NEXT: LBB6_7: ## %cond.load7710; SSE42-NEXT: movhps {{.*#+}} xmm5 = xmm5[0,1],mem[0,1]711; SSE42-NEXT: testb $16, %al712; SSE42-NEXT: je LBB6_10713; SSE42-NEXT: LBB6_9: ## %cond.load10714; SSE42-NEXT: movlps {{.*#+}} xmm6 = mem[0,1],xmm6[2,3]715; SSE42-NEXT: testb $32, %al716; SSE42-NEXT: je LBB6_12717; SSE42-NEXT: LBB6_11: ## %cond.load13718; SSE42-NEXT: movhps {{.*#+}} xmm6 = xmm6[0,1],mem[0,1]719; SSE42-NEXT: testb $64, %al720; SSE42-NEXT: je LBB6_14721; SSE42-NEXT: LBB6_13: ## %cond.load16722; SSE42-NEXT: movlps {{.*#+}} xmm7 = mem[0,1],xmm7[2,3]723; SSE42-NEXT: testb $-128, %al724; SSE42-NEXT: jne LBB6_15725; SSE42-NEXT: jmp LBB6_16726;727; AVX1-LABEL: load_v8f64_v8i64:728; AVX1: ## %bb.0:729; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4730; AVX1-NEXT: vpxor %xmm5, %xmm5, %xmm5731; AVX1-NEXT: vpcmpeqq %xmm5, %xmm4, %xmm4732; AVX1-NEXT: vpcmpeqq %xmm5, %xmm1, %xmm1733; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm1734; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4735; AVX1-NEXT: vpcmpeqq %xmm5, %xmm4, %xmm4736; AVX1-NEXT: vpcmpeqq %xmm5, %xmm0, %xmm0737; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0738; AVX1-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm4739; AVX1-NEXT: vblendvpd %ymm0, %ymm4, %ymm2, %ymm0740; AVX1-NEXT: vmaskmovpd 32(%rdi), %ymm1, %ymm2741; AVX1-NEXT: vblendvpd %ymm1, %ymm2, %ymm3, %ymm1742; AVX1-NEXT: retq743;744; AVX2-LABEL: load_v8f64_v8i64:745; AVX2: ## %bb.0:746; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm4747; AVX2-NEXT: vpcmpeqq %ymm4, %ymm1, %ymm1748; AVX2-NEXT: vpcmpeqq %ymm4, %ymm0, %ymm0749; AVX2-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm4750; AVX2-NEXT: vblendvpd %ymm0, %ymm4, %ymm2, %ymm0751; AVX2-NEXT: vmaskmovpd 32(%rdi), %ymm1, %ymm2752; AVX2-NEXT: vblendvpd %ymm1, %ymm2, %ymm3, %ymm1753; AVX2-NEXT: retq754;755; AVX512-LABEL: load_v8f64_v8i64:756; AVX512: ## %bb.0:757; AVX512-NEXT: vptestnmq %zmm0, %zmm0, %k1758; AVX512-NEXT: vblendmpd (%rdi), %zmm1, %zmm0 {%k1}759; AVX512-NEXT: retq760;761; X86-AVX512-LABEL: load_v8f64_v8i64:762; X86-AVX512: ## %bb.0:763; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax764; X86-AVX512-NEXT: vptestnmq %zmm0, %zmm0, %k1765; X86-AVX512-NEXT: vblendmpd (%eax), %zmm1, %zmm0 {%k1}766; X86-AVX512-NEXT: retl767 %mask = icmp eq <8 x i64> %trigger, zeroinitializer768 %res = call <8 x double> @llvm.masked.load.v8f64.p0(ptr %addr, i32 4, <8 x i1> %mask, <8 x double> %dst)769 ret <8 x double> %res770}771 772;773; vXf32774;775 776define <2 x float> @load_v2f32_v2i32(<2 x i32> %trigger, ptr %addr, <2 x float> %dst) {777; SSE2-LABEL: load_v2f32_v2i32:778; SSE2: ## %bb.0:779; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]780; SSE2-NEXT: pxor %xmm2, %xmm2781; SSE2-NEXT: pcmpeqd %xmm0, %xmm2782; SSE2-NEXT: movmskpd %xmm2, %eax783; SSE2-NEXT: testb $1, %al784; SSE2-NEXT: jne LBB7_1785; SSE2-NEXT: ## %bb.2: ## %else786; SSE2-NEXT: testb $2, %al787; SSE2-NEXT: jne LBB7_3788; SSE2-NEXT: LBB7_4: ## %else2789; SSE2-NEXT: movaps %xmm1, %xmm0790; SSE2-NEXT: retq791; SSE2-NEXT: LBB7_1: ## %cond.load792; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero793; SSE2-NEXT: movss {{.*#+}} xmm1 = xmm0[0],xmm1[1,2,3]794; SSE2-NEXT: testb $2, %al795; SSE2-NEXT: je LBB7_4796; SSE2-NEXT: LBB7_3: ## %cond.load1797; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero798; SSE2-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]799; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[2,0],xmm1[2,3]800; SSE2-NEXT: movaps %xmm0, %xmm1801; SSE2-NEXT: movaps %xmm1, %xmm0802; SSE2-NEXT: retq803;804; SSE42-LABEL: load_v2f32_v2i32:805; SSE42: ## %bb.0:806; SSE42-NEXT: pxor %xmm2, %xmm2807; SSE42-NEXT: pcmpeqd %xmm0, %xmm2808; SSE42-NEXT: pmovsxdq %xmm2, %xmm0809; SSE42-NEXT: movmskpd %xmm0, %eax810; SSE42-NEXT: testb $1, %al811; SSE42-NEXT: jne LBB7_1812; SSE42-NEXT: ## %bb.2: ## %else813; SSE42-NEXT: testb $2, %al814; SSE42-NEXT: jne LBB7_3815; SSE42-NEXT: LBB7_4: ## %else2816; SSE42-NEXT: movaps %xmm1, %xmm0817; SSE42-NEXT: retq818; SSE42-NEXT: LBB7_1: ## %cond.load819; SSE42-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero820; SSE42-NEXT: movss {{.*#+}} xmm1 = xmm0[0],xmm1[1,2,3]821; SSE42-NEXT: testb $2, %al822; SSE42-NEXT: je LBB7_4823; SSE42-NEXT: LBB7_3: ## %cond.load1824; SSE42-NEXT: insertps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[2,3]825; SSE42-NEXT: movaps %xmm1, %xmm0826; SSE42-NEXT: retq827;828; AVX1OR2-LABEL: load_v2f32_v2i32:829; AVX1OR2: ## %bb.0:830; AVX1OR2-NEXT: vpxor %xmm2, %xmm2, %xmm2831; AVX1OR2-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm0832; AVX1OR2-NEXT: vmovq {{.*#+}} xmm0 = xmm0[0],zero833; AVX1OR2-NEXT: vmaskmovps (%rdi), %xmm0, %xmm2834; AVX1OR2-NEXT: vblendvps %xmm0, %xmm2, %xmm1, %xmm0835; AVX1OR2-NEXT: retq836;837; AVX512F-LABEL: load_v2f32_v2i32:838; AVX512F: ## %bb.0:839; AVX512F-NEXT: ## kill: def $xmm1 killed $xmm1 def $zmm1840; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm0841; AVX512F-NEXT: vptestnmd %zmm0, %zmm0, %k0842; AVX512F-NEXT: kshiftlw $14, %k0, %k0843; AVX512F-NEXT: kshiftrw $14, %k0, %k1844; AVX512F-NEXT: vblendmps (%rdi), %zmm1, %zmm0 {%k1}845; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 killed $zmm0846; AVX512F-NEXT: vzeroupper847; AVX512F-NEXT: retq848;849; AVX512VLDQ-LABEL: load_v2f32_v2i32:850; AVX512VLDQ: ## %bb.0:851; AVX512VLDQ-NEXT: vptestnmd %xmm0, %xmm0, %k0852; AVX512VLDQ-NEXT: kshiftlb $6, %k0, %k0853; AVX512VLDQ-NEXT: kshiftrb $6, %k0, %k1854; AVX512VLDQ-NEXT: vblendmps (%rdi), %xmm1, %xmm0 {%k1}855; AVX512VLDQ-NEXT: retq856;857; AVX512VLBW-LABEL: load_v2f32_v2i32:858; AVX512VLBW: ## %bb.0:859; AVX512VLBW-NEXT: vptestnmd %xmm0, %xmm0, %k0860; AVX512VLBW-NEXT: kshiftlw $14, %k0, %k0861; AVX512VLBW-NEXT: kshiftrw $14, %k0, %k1862; AVX512VLBW-NEXT: vblendmps (%rdi), %xmm1, %xmm0 {%k1}863; AVX512VLBW-NEXT: retq864;865; X86-AVX512-LABEL: load_v2f32_v2i32:866; X86-AVX512: ## %bb.0:867; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax868; X86-AVX512-NEXT: vptestnmd %xmm0, %xmm0, %k0869; X86-AVX512-NEXT: kshiftlb $6, %k0, %k0870; X86-AVX512-NEXT: kshiftrb $6, %k0, %k1871; X86-AVX512-NEXT: vblendmps (%eax), %xmm1, %xmm0 {%k1}872; X86-AVX512-NEXT: retl873 %mask = icmp eq <2 x i32> %trigger, zeroinitializer874 %res = call <2 x float> @llvm.masked.load.v2f32.p0(ptr %addr, i32 4, <2 x i1> %mask, <2 x float> %dst)875 ret <2 x float> %res876}877 878define <2 x float> @load_v2f32_v2i32_undef(<2 x i32> %trigger, ptr %addr) {879; SSE2-LABEL: load_v2f32_v2i32_undef:880; SSE2: ## %bb.0:881; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]882; SSE2-NEXT: pxor %xmm1, %xmm1883; SSE2-NEXT: pcmpeqd %xmm0, %xmm1884; SSE2-NEXT: movmskpd %xmm1, %eax885; SSE2-NEXT: testb $1, %al886; SSE2-NEXT: ## implicit-def: $xmm0887; SSE2-NEXT: jne LBB8_1888; SSE2-NEXT: ## %bb.2: ## %else889; SSE2-NEXT: testb $2, %al890; SSE2-NEXT: jne LBB8_3891; SSE2-NEXT: LBB8_4: ## %else2892; SSE2-NEXT: retq893; SSE2-NEXT: LBB8_1: ## %cond.load894; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero895; SSE2-NEXT: testb $2, %al896; SSE2-NEXT: je LBB8_4897; SSE2-NEXT: LBB8_3: ## %cond.load1898; SSE2-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero899; SSE2-NEXT: movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0]900; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[2,0],xmm0[2,3]901; SSE2-NEXT: movaps %xmm1, %xmm0902; SSE2-NEXT: retq903;904; SSE42-LABEL: load_v2f32_v2i32_undef:905; SSE42: ## %bb.0:906; SSE42-NEXT: pxor %xmm1, %xmm1907; SSE42-NEXT: pcmpeqd %xmm0, %xmm1908; SSE42-NEXT: pmovsxdq %xmm1, %xmm0909; SSE42-NEXT: movmskpd %xmm0, %eax910; SSE42-NEXT: testb $1, %al911; SSE42-NEXT: ## implicit-def: $xmm0912; SSE42-NEXT: jne LBB8_1913; SSE42-NEXT: ## %bb.2: ## %else914; SSE42-NEXT: testb $2, %al915; SSE42-NEXT: jne LBB8_3916; SSE42-NEXT: LBB8_4: ## %else2917; SSE42-NEXT: retq918; SSE42-NEXT: LBB8_1: ## %cond.load919; SSE42-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero920; SSE42-NEXT: testb $2, %al921; SSE42-NEXT: je LBB8_4922; SSE42-NEXT: LBB8_3: ## %cond.load1923; SSE42-NEXT: insertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]924; SSE42-NEXT: retq925;926; AVX1OR2-LABEL: load_v2f32_v2i32_undef:927; AVX1OR2: ## %bb.0:928; AVX1OR2-NEXT: vpxor %xmm1, %xmm1, %xmm1929; AVX1OR2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0930; AVX1OR2-NEXT: vmovq {{.*#+}} xmm0 = xmm0[0],zero931; AVX1OR2-NEXT: vmaskmovps (%rdi), %xmm0, %xmm0932; AVX1OR2-NEXT: retq933;934; AVX512F-LABEL: load_v2f32_v2i32_undef:935; AVX512F: ## %bb.0:936; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm0937; AVX512F-NEXT: vptestnmd %zmm0, %zmm0, %k0938; AVX512F-NEXT: kshiftlw $14, %k0, %k0939; AVX512F-NEXT: kshiftrw $14, %k0, %k1940; AVX512F-NEXT: vmovups (%rdi), %zmm0 {%k1} {z}941; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 killed $zmm0942; AVX512F-NEXT: vzeroupper943; AVX512F-NEXT: retq944;945; AVX512VLDQ-LABEL: load_v2f32_v2i32_undef:946; AVX512VLDQ: ## %bb.0:947; AVX512VLDQ-NEXT: vptestnmd %xmm0, %xmm0, %k0948; AVX512VLDQ-NEXT: kshiftlb $6, %k0, %k0949; AVX512VLDQ-NEXT: kshiftrb $6, %k0, %k1950; AVX512VLDQ-NEXT: vmovups (%rdi), %xmm0 {%k1} {z}951; AVX512VLDQ-NEXT: retq952;953; AVX512VLBW-LABEL: load_v2f32_v2i32_undef:954; AVX512VLBW: ## %bb.0:955; AVX512VLBW-NEXT: vptestnmd %xmm0, %xmm0, %k0956; AVX512VLBW-NEXT: kshiftlw $14, %k0, %k0957; AVX512VLBW-NEXT: kshiftrw $14, %k0, %k1958; AVX512VLBW-NEXT: vmovups (%rdi), %xmm0 {%k1} {z}959; AVX512VLBW-NEXT: retq960;961; X86-AVX512-LABEL: load_v2f32_v2i32_undef:962; X86-AVX512: ## %bb.0:963; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax964; X86-AVX512-NEXT: vptestnmd %xmm0, %xmm0, %k0965; X86-AVX512-NEXT: kshiftlb $6, %k0, %k0966; X86-AVX512-NEXT: kshiftrb $6, %k0, %k1967; X86-AVX512-NEXT: vmovups (%eax), %xmm0 {%k1} {z}968; X86-AVX512-NEXT: retl969 %mask = icmp eq <2 x i32> %trigger, zeroinitializer970 %res = call <2 x float> @llvm.masked.load.v2f32.p0(ptr %addr, i32 4, <2 x i1> %mask, <2 x float>undef)971 ret <2 x float> %res972}973 974define <4 x float> @load_v4f32_v4i32(<4 x i32> %trigger, ptr %addr, <4 x float> %dst) {975; SSE2-LABEL: load_v4f32_v4i32:976; SSE2: ## %bb.0:977; SSE2-NEXT: pxor %xmm2, %xmm2978; SSE2-NEXT: pcmpeqd %xmm0, %xmm2979; SSE2-NEXT: movmskps %xmm2, %eax980; SSE2-NEXT: testb $1, %al981; SSE2-NEXT: jne LBB9_1982; SSE2-NEXT: ## %bb.2: ## %else983; SSE2-NEXT: testb $2, %al984; SSE2-NEXT: jne LBB9_3985; SSE2-NEXT: LBB9_4: ## %else2986; SSE2-NEXT: testb $4, %al987; SSE2-NEXT: jne LBB9_5988; SSE2-NEXT: LBB9_6: ## %else5989; SSE2-NEXT: testb $8, %al990; SSE2-NEXT: jne LBB9_7991; SSE2-NEXT: LBB9_8: ## %else8992; SSE2-NEXT: movaps %xmm1, %xmm0993; SSE2-NEXT: retq994; SSE2-NEXT: LBB9_1: ## %cond.load995; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero996; SSE2-NEXT: movss {{.*#+}} xmm1 = xmm0[0],xmm1[1,2,3]997; SSE2-NEXT: testb $2, %al998; SSE2-NEXT: je LBB9_4999; SSE2-NEXT: LBB9_3: ## %cond.load11000; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1001; SSE2-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]1002; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[2,0],xmm1[2,3]1003; SSE2-NEXT: movaps %xmm0, %xmm11004; SSE2-NEXT: testb $4, %al1005; SSE2-NEXT: je LBB9_61006; SSE2-NEXT: LBB9_5: ## %cond.load41007; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1008; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[3,0]1009; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[0,2]1010; SSE2-NEXT: testb $8, %al1011; SSE2-NEXT: je LBB9_81012; SSE2-NEXT: LBB9_7: ## %cond.load71013; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1014; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]1015; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0]1016; SSE2-NEXT: movaps %xmm1, %xmm01017; SSE2-NEXT: retq1018;1019; SSE42-LABEL: load_v4f32_v4i32:1020; SSE42: ## %bb.0:1021; SSE42-NEXT: pxor %xmm2, %xmm21022; SSE42-NEXT: pcmpeqd %xmm0, %xmm21023; SSE42-NEXT: movmskps %xmm2, %eax1024; SSE42-NEXT: testb $1, %al1025; SSE42-NEXT: jne LBB9_11026; SSE42-NEXT: ## %bb.2: ## %else1027; SSE42-NEXT: testb $2, %al1028; SSE42-NEXT: jne LBB9_31029; SSE42-NEXT: LBB9_4: ## %else21030; SSE42-NEXT: testb $4, %al1031; SSE42-NEXT: jne LBB9_51032; SSE42-NEXT: LBB9_6: ## %else51033; SSE42-NEXT: testb $8, %al1034; SSE42-NEXT: jne LBB9_71035; SSE42-NEXT: LBB9_8: ## %else81036; SSE42-NEXT: movaps %xmm1, %xmm01037; SSE42-NEXT: retq1038; SSE42-NEXT: LBB9_1: ## %cond.load1039; SSE42-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero1040; SSE42-NEXT: pblendw {{.*#+}} xmm1 = xmm0[0,1],xmm1[2,3,4,5,6,7]1041; SSE42-NEXT: testb $2, %al1042; SSE42-NEXT: je LBB9_41043; SSE42-NEXT: LBB9_3: ## %cond.load11044; SSE42-NEXT: insertps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[2,3]1045; SSE42-NEXT: testb $4, %al1046; SSE42-NEXT: je LBB9_61047; SSE42-NEXT: LBB9_5: ## %cond.load41048; SSE42-NEXT: insertps {{.*#+}} xmm1 = xmm1[0,1],mem[0],xmm1[3]1049; SSE42-NEXT: testb $8, %al1050; SSE42-NEXT: je LBB9_81051; SSE42-NEXT: LBB9_7: ## %cond.load71052; SSE42-NEXT: insertps {{.*#+}} xmm1 = xmm1[0,1,2],mem[0]1053; SSE42-NEXT: movaps %xmm1, %xmm01054; SSE42-NEXT: retq1055;1056; AVX1OR2-LABEL: load_v4f32_v4i32:1057; AVX1OR2: ## %bb.0:1058; AVX1OR2-NEXT: vpxor %xmm2, %xmm2, %xmm21059; AVX1OR2-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm01060; AVX1OR2-NEXT: vmaskmovps (%rdi), %xmm0, %xmm21061; AVX1OR2-NEXT: vblendvps %xmm0, %xmm2, %xmm1, %xmm01062; AVX1OR2-NEXT: retq1063;1064; AVX512F-LABEL: load_v4f32_v4i32:1065; AVX512F: ## %bb.0:1066; AVX512F-NEXT: ## kill: def $xmm1 killed $xmm1 def $zmm11067; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm01068; AVX512F-NEXT: vptestnmd %zmm0, %zmm0, %k01069; AVX512F-NEXT: kshiftlw $12, %k0, %k01070; AVX512F-NEXT: kshiftrw $12, %k0, %k11071; AVX512F-NEXT: vblendmps (%rdi), %zmm1, %zmm0 {%k1}1072; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 killed $zmm01073; AVX512F-NEXT: vzeroupper1074; AVX512F-NEXT: retq1075;1076; AVX512VL-LABEL: load_v4f32_v4i32:1077; AVX512VL: ## %bb.0:1078; AVX512VL-NEXT: vptestnmd %xmm0, %xmm0, %k11079; AVX512VL-NEXT: vblendmps (%rdi), %xmm1, %xmm0 {%k1}1080; AVX512VL-NEXT: retq1081;1082; X86-AVX512-LABEL: load_v4f32_v4i32:1083; X86-AVX512: ## %bb.0:1084; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax1085; X86-AVX512-NEXT: vptestnmd %xmm0, %xmm0, %k11086; X86-AVX512-NEXT: vblendmps (%eax), %xmm1, %xmm0 {%k1}1087; X86-AVX512-NEXT: retl1088 %mask = icmp eq <4 x i32> %trigger, zeroinitializer1089 %res = call <4 x float> @llvm.masked.load.v4f32.p0(ptr %addr, i32 4, <4 x i1> %mask, <4 x float> %dst)1090 ret <4 x float> %res1091}1092 1093define <8 x float> @load_v8f32_v8i1_zero(<8 x i1> %mask, ptr %addr) {1094; SSE2-LABEL: load_v8f32_v8i1_zero:1095; SSE2: ## %bb.0:1096; SSE2-NEXT: psllw $15, %xmm01097; SSE2-NEXT: packsswb %xmm0, %xmm01098; SSE2-NEXT: pmovmskb %xmm0, %eax1099; SSE2-NEXT: pxor %xmm0, %xmm01100; SSE2-NEXT: testb $1, %al1101; SSE2-NEXT: xorps %xmm1, %xmm11102; SSE2-NEXT: jne LBB10_11103; SSE2-NEXT: ## %bb.2: ## %else1104; SSE2-NEXT: testb $2, %al1105; SSE2-NEXT: jne LBB10_31106; SSE2-NEXT: LBB10_4: ## %else21107; SSE2-NEXT: testb $4, %al1108; SSE2-NEXT: jne LBB10_51109; SSE2-NEXT: LBB10_6: ## %else51110; SSE2-NEXT: testb $8, %al1111; SSE2-NEXT: jne LBB10_71112; SSE2-NEXT: LBB10_8: ## %else81113; SSE2-NEXT: testb $16, %al1114; SSE2-NEXT: jne LBB10_91115; SSE2-NEXT: LBB10_10: ## %else111116; SSE2-NEXT: testb $32, %al1117; SSE2-NEXT: jne LBB10_111118; SSE2-NEXT: LBB10_12: ## %else141119; SSE2-NEXT: testb $64, %al1120; SSE2-NEXT: jne LBB10_131121; SSE2-NEXT: LBB10_14: ## %else171122; SSE2-NEXT: testb $-128, %al1123; SSE2-NEXT: jne LBB10_151124; SSE2-NEXT: LBB10_16: ## %else201125; SSE2-NEXT: retq1126; SSE2-NEXT: LBB10_1: ## %cond.load1127; SSE2-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero1128; SSE2-NEXT: testb $2, %al1129; SSE2-NEXT: je LBB10_41130; SSE2-NEXT: LBB10_3: ## %cond.load11131; SSE2-NEXT: movd {{.*#+}} xmm2 = mem[0],zero,zero,zero1132; SSE2-NEXT: punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm0[0]1133; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[2,0],xmm0[2,3]1134; SSE2-NEXT: movaps %xmm2, %xmm01135; SSE2-NEXT: testb $4, %al1136; SSE2-NEXT: je LBB10_61137; SSE2-NEXT: LBB10_5: ## %cond.load41138; SSE2-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero1139; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,0],xmm0[3,0]1140; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm2[0,2]1141; SSE2-NEXT: testb $8, %al1142; SSE2-NEXT: je LBB10_81143; SSE2-NEXT: LBB10_7: ## %cond.load71144; SSE2-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero1145; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,1],xmm0[2,3]1146; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,0]1147; SSE2-NEXT: testb $16, %al1148; SSE2-NEXT: je LBB10_101149; SSE2-NEXT: LBB10_9: ## %cond.load101150; SSE2-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero1151; SSE2-NEXT: movss {{.*#+}} xmm1 = xmm2[0],xmm1[1,2,3]1152; SSE2-NEXT: testb $32, %al1153; SSE2-NEXT: je LBB10_121154; SSE2-NEXT: LBB10_11: ## %cond.load131155; SSE2-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero1156; SSE2-NEXT: movlhps {{.*#+}} xmm2 = xmm2[0],xmm1[0]1157; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[2,0],xmm1[2,3]1158; SSE2-NEXT: movaps %xmm2, %xmm11159; SSE2-NEXT: testb $64, %al1160; SSE2-NEXT: je LBB10_141161; SSE2-NEXT: LBB10_13: ## %cond.load161162; SSE2-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero1163; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,0],xmm1[3,0]1164; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0,2]1165; SSE2-NEXT: testb $-128, %al1166; SSE2-NEXT: je LBB10_161167; SSE2-NEXT: LBB10_15: ## %cond.load191168; SSE2-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero1169; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,1],xmm1[2,3]1170; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,0]1171; SSE2-NEXT: retq1172;1173; SSE42-LABEL: load_v8f32_v8i1_zero:1174; SSE42: ## %bb.0:1175; SSE42-NEXT: psllw $15, %xmm01176; SSE42-NEXT: packsswb %xmm0, %xmm01177; SSE42-NEXT: pmovmskb %xmm0, %eax1178; SSE42-NEXT: pxor %xmm0, %xmm01179; SSE42-NEXT: testb $1, %al1180; SSE42-NEXT: xorps %xmm1, %xmm11181; SSE42-NEXT: jne LBB10_11182; SSE42-NEXT: ## %bb.2: ## %else1183; SSE42-NEXT: testb $2, %al1184; SSE42-NEXT: jne LBB10_31185; SSE42-NEXT: LBB10_4: ## %else21186; SSE42-NEXT: testb $4, %al1187; SSE42-NEXT: jne LBB10_51188; SSE42-NEXT: LBB10_6: ## %else51189; SSE42-NEXT: testb $8, %al1190; SSE42-NEXT: jne LBB10_71191; SSE42-NEXT: LBB10_8: ## %else81192; SSE42-NEXT: testb $16, %al1193; SSE42-NEXT: jne LBB10_91194; SSE42-NEXT: LBB10_10: ## %else111195; SSE42-NEXT: testb $32, %al1196; SSE42-NEXT: jne LBB10_111197; SSE42-NEXT: LBB10_12: ## %else141198; SSE42-NEXT: testb $64, %al1199; SSE42-NEXT: jne LBB10_131200; SSE42-NEXT: LBB10_14: ## %else171201; SSE42-NEXT: testb $-128, %al1202; SSE42-NEXT: jne LBB10_151203; SSE42-NEXT: LBB10_16: ## %else201204; SSE42-NEXT: retq1205; SSE42-NEXT: LBB10_1: ## %cond.load1206; SSE42-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero1207; SSE42-NEXT: testb $2, %al1208; SSE42-NEXT: je LBB10_41209; SSE42-NEXT: LBB10_3: ## %cond.load11210; SSE42-NEXT: insertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]1211; SSE42-NEXT: testb $4, %al1212; SSE42-NEXT: je LBB10_61213; SSE42-NEXT: LBB10_5: ## %cond.load41214; SSE42-NEXT: insertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]1215; SSE42-NEXT: testb $8, %al1216; SSE42-NEXT: je LBB10_81217; SSE42-NEXT: LBB10_7: ## %cond.load71218; SSE42-NEXT: insertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0]1219; SSE42-NEXT: testb $16, %al1220; SSE42-NEXT: je LBB10_101221; SSE42-NEXT: LBB10_9: ## %cond.load101222; SSE42-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero1223; SSE42-NEXT: movss {{.*#+}} xmm1 = xmm2[0],xmm1[1,2,3]1224; SSE42-NEXT: testb $32, %al1225; SSE42-NEXT: je LBB10_121226; SSE42-NEXT: LBB10_11: ## %cond.load131227; SSE42-NEXT: insertps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[2,3]1228; SSE42-NEXT: testb $64, %al1229; SSE42-NEXT: je LBB10_141230; SSE42-NEXT: LBB10_13: ## %cond.load161231; SSE42-NEXT: insertps {{.*#+}} xmm1 = xmm1[0,1],mem[0],xmm1[3]1232; SSE42-NEXT: testb $-128, %al1233; SSE42-NEXT: je LBB10_161234; SSE42-NEXT: LBB10_15: ## %cond.load191235; SSE42-NEXT: insertps {{.*#+}} xmm1 = xmm1[0,1,2],mem[0]1236; SSE42-NEXT: retq1237;1238; AVX1-LABEL: load_v8f32_v8i1_zero:1239; AVX1: ## %bb.0:1240; AVX1-NEXT: vpmovzxwd {{.*#+}} xmm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero1241; AVX1-NEXT: vpslld $31, %xmm1, %xmm11242; AVX1-NEXT: vpunpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]1243; AVX1-NEXT: vpslld $31, %xmm0, %xmm01244; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm01245; AVX1-NEXT: vmaskmovps (%rdi), %ymm0, %ymm01246; AVX1-NEXT: retq1247;1248; AVX2-LABEL: load_v8f32_v8i1_zero:1249; AVX2: ## %bb.0:1250; AVX2-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],zero1251; AVX2-NEXT: vpslld $31, %ymm0, %ymm01252; AVX2-NEXT: vmaskmovps (%rdi), %ymm0, %ymm01253; AVX2-NEXT: retq1254;1255; AVX512F-LABEL: load_v8f32_v8i1_zero:1256; AVX512F: ## %bb.0:1257; AVX512F-NEXT: vpmovsxwq %xmm0, %zmm01258; AVX512F-NEXT: vpsllq $63, %zmm0, %zmm01259; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k11260; AVX512F-NEXT: vmovups (%rdi), %zmm0 {%k1} {z}1261; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 killed $zmm01262; AVX512F-NEXT: retq1263;1264; AVX512VLDQ-LABEL: load_v8f32_v8i1_zero:1265; AVX512VLDQ: ## %bb.0:1266; AVX512VLDQ-NEXT: vpmovsxwd %xmm0, %ymm01267; AVX512VLDQ-NEXT: vpslld $31, %ymm0, %ymm01268; AVX512VLDQ-NEXT: vpmovd2m %ymm0, %k11269; AVX512VLDQ-NEXT: vmovaps (%rdi), %ymm0 {%k1} {z}1270; AVX512VLDQ-NEXT: retq1271;1272; AVX512VLBW-LABEL: load_v8f32_v8i1_zero:1273; AVX512VLBW: ## %bb.0:1274; AVX512VLBW-NEXT: vpsllw $15, %xmm0, %xmm01275; AVX512VLBW-NEXT: vpmovw2m %xmm0, %k11276; AVX512VLBW-NEXT: vmovaps (%rdi), %ymm0 {%k1} {z}1277; AVX512VLBW-NEXT: retq1278;1279; X86-AVX512-LABEL: load_v8f32_v8i1_zero:1280; X86-AVX512: ## %bb.0:1281; X86-AVX512-NEXT: vpsllw $15, %xmm0, %xmm01282; X86-AVX512-NEXT: vpmovw2m %xmm0, %k11283; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax1284; X86-AVX512-NEXT: vmovaps (%eax), %ymm0 {%k1} {z}1285; X86-AVX512-NEXT: retl1286 %res = call <8 x float> @llvm.masked.load.v8f32.p0(ptr %addr, i32 32, <8 x i1> %mask, <8 x float> zeroinitializer)1287 ret <8 x float> %res1288}1289 1290define <8 x float> @load_v8f32_v8i32(<8 x i32> %trigger, ptr %addr, <8 x float> %dst) {1291; SSE2-LABEL: load_v8f32_v8i32:1292; SSE2: ## %bb.0:1293; SSE2-NEXT: pxor %xmm4, %xmm41294; SSE2-NEXT: pcmpeqd %xmm4, %xmm11295; SSE2-NEXT: pcmpeqd %xmm4, %xmm01296; SSE2-NEXT: packssdw %xmm1, %xmm01297; SSE2-NEXT: packsswb %xmm0, %xmm01298; SSE2-NEXT: pmovmskb %xmm0, %eax1299; SSE2-NEXT: testb $1, %al1300; SSE2-NEXT: jne LBB11_11301; SSE2-NEXT: ## %bb.2: ## %else1302; SSE2-NEXT: testb $2, %al1303; SSE2-NEXT: jne LBB11_31304; SSE2-NEXT: LBB11_4: ## %else21305; SSE2-NEXT: testb $4, %al1306; SSE2-NEXT: jne LBB11_51307; SSE2-NEXT: LBB11_6: ## %else51308; SSE2-NEXT: testb $8, %al1309; SSE2-NEXT: jne LBB11_71310; SSE2-NEXT: LBB11_8: ## %else81311; SSE2-NEXT: testb $16, %al1312; SSE2-NEXT: jne LBB11_91313; SSE2-NEXT: LBB11_10: ## %else111314; SSE2-NEXT: testb $32, %al1315; SSE2-NEXT: jne LBB11_111316; SSE2-NEXT: LBB11_12: ## %else141317; SSE2-NEXT: testb $64, %al1318; SSE2-NEXT: jne LBB11_131319; SSE2-NEXT: LBB11_14: ## %else171320; SSE2-NEXT: testb $-128, %al1321; SSE2-NEXT: je LBB11_161322; SSE2-NEXT: LBB11_15: ## %cond.load191323; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1324; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm3[2,3]1325; SSE2-NEXT: shufps {{.*#+}} xmm3 = xmm3[0,1],xmm0[2,0]1326; SSE2-NEXT: LBB11_16: ## %else201327; SSE2-NEXT: movaps %xmm2, %xmm01328; SSE2-NEXT: movaps %xmm3, %xmm11329; SSE2-NEXT: retq1330; SSE2-NEXT: LBB11_1: ## %cond.load1331; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1332; SSE2-NEXT: movss {{.*#+}} xmm2 = xmm0[0],xmm2[1,2,3]1333; SSE2-NEXT: testb $2, %al1334; SSE2-NEXT: je LBB11_41335; SSE2-NEXT: LBB11_3: ## %cond.load11336; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1337; SSE2-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm2[0]1338; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[2,0],xmm2[2,3]1339; SSE2-NEXT: movaps %xmm0, %xmm21340; SSE2-NEXT: testb $4, %al1341; SSE2-NEXT: je LBB11_61342; SSE2-NEXT: LBB11_5: ## %cond.load41343; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1344; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,0],xmm2[3,0]1345; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,1],xmm0[0,2]1346; SSE2-NEXT: testb $8, %al1347; SSE2-NEXT: je LBB11_81348; SSE2-NEXT: LBB11_7: ## %cond.load71349; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1350; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3]1351; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,1],xmm0[2,0]1352; SSE2-NEXT: testb $16, %al1353; SSE2-NEXT: je LBB11_101354; SSE2-NEXT: LBB11_9: ## %cond.load101355; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1356; SSE2-NEXT: movss {{.*#+}} xmm3 = xmm0[0],xmm3[1,2,3]1357; SSE2-NEXT: testb $32, %al1358; SSE2-NEXT: je LBB11_121359; SSE2-NEXT: LBB11_11: ## %cond.load131360; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1361; SSE2-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm3[0]1362; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[2,0],xmm3[2,3]1363; SSE2-NEXT: movaps %xmm0, %xmm31364; SSE2-NEXT: testb $64, %al1365; SSE2-NEXT: je LBB11_141366; SSE2-NEXT: LBB11_13: ## %cond.load161367; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero1368; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,0],xmm3[3,0]1369; SSE2-NEXT: shufps {{.*#+}} xmm3 = xmm3[0,1],xmm0[0,2]1370; SSE2-NEXT: testb $-128, %al1371; SSE2-NEXT: jne LBB11_151372; SSE2-NEXT: jmp LBB11_161373;1374; SSE42-LABEL: load_v8f32_v8i32:1375; SSE42: ## %bb.0:1376; SSE42-NEXT: pxor %xmm4, %xmm41377; SSE42-NEXT: pcmpeqd %xmm4, %xmm11378; SSE42-NEXT: pcmpeqd %xmm4, %xmm01379; SSE42-NEXT: packssdw %xmm1, %xmm01380; SSE42-NEXT: packsswb %xmm0, %xmm01381; SSE42-NEXT: pmovmskb %xmm0, %eax1382; SSE42-NEXT: testb $1, %al1383; SSE42-NEXT: jne LBB11_11384; SSE42-NEXT: ## %bb.2: ## %else1385; SSE42-NEXT: testb $2, %al1386; SSE42-NEXT: jne LBB11_31387; SSE42-NEXT: LBB11_4: ## %else21388; SSE42-NEXT: testb $4, %al1389; SSE42-NEXT: jne LBB11_51390; SSE42-NEXT: LBB11_6: ## %else51391; SSE42-NEXT: testb $8, %al1392; SSE42-NEXT: jne LBB11_71393; SSE42-NEXT: LBB11_8: ## %else81394; SSE42-NEXT: testb $16, %al1395; SSE42-NEXT: jne LBB11_91396; SSE42-NEXT: LBB11_10: ## %else111397; SSE42-NEXT: testb $32, %al1398; SSE42-NEXT: jne LBB11_111399; SSE42-NEXT: LBB11_12: ## %else141400; SSE42-NEXT: testb $64, %al1401; SSE42-NEXT: jne LBB11_131402; SSE42-NEXT: LBB11_14: ## %else171403; SSE42-NEXT: testb $-128, %al1404; SSE42-NEXT: je LBB11_161405; SSE42-NEXT: LBB11_15: ## %cond.load191406; SSE42-NEXT: insertps {{.*#+}} xmm3 = xmm3[0,1,2],mem[0]1407; SSE42-NEXT: LBB11_16: ## %else201408; SSE42-NEXT: movaps %xmm2, %xmm01409; SSE42-NEXT: movaps %xmm3, %xmm11410; SSE42-NEXT: retq1411; SSE42-NEXT: LBB11_1: ## %cond.load1412; SSE42-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero1413; SSE42-NEXT: pblendw {{.*#+}} xmm2 = xmm0[0,1],xmm2[2,3,4,5,6,7]1414; SSE42-NEXT: testb $2, %al1415; SSE42-NEXT: je LBB11_41416; SSE42-NEXT: LBB11_3: ## %cond.load11417; SSE42-NEXT: insertps {{.*#+}} xmm2 = xmm2[0],mem[0],xmm2[2,3]1418; SSE42-NEXT: testb $4, %al1419; SSE42-NEXT: je LBB11_61420; SSE42-NEXT: LBB11_5: ## %cond.load41421; SSE42-NEXT: insertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]1422; SSE42-NEXT: testb $8, %al1423; SSE42-NEXT: je LBB11_81424; SSE42-NEXT: LBB11_7: ## %cond.load71425; SSE42-NEXT: insertps {{.*#+}} xmm2 = xmm2[0,1,2],mem[0]1426; SSE42-NEXT: testb $16, %al1427; SSE42-NEXT: je LBB11_101428; SSE42-NEXT: LBB11_9: ## %cond.load101429; SSE42-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero1430; SSE42-NEXT: pblendw {{.*#+}} xmm3 = xmm0[0,1],xmm3[2,3,4,5,6,7]1431; SSE42-NEXT: testb $32, %al1432; SSE42-NEXT: je LBB11_121433; SSE42-NEXT: LBB11_11: ## %cond.load131434; SSE42-NEXT: insertps {{.*#+}} xmm3 = xmm3[0],mem[0],xmm3[2,3]1435; SSE42-NEXT: testb $64, %al1436; SSE42-NEXT: je LBB11_141437; SSE42-NEXT: LBB11_13: ## %cond.load161438; SSE42-NEXT: insertps {{.*#+}} xmm3 = xmm3[0,1],mem[0],xmm3[3]1439; SSE42-NEXT: testb $-128, %al1440; SSE42-NEXT: jne LBB11_151441; SSE42-NEXT: jmp LBB11_161442;1443; AVX1-LABEL: load_v8f32_v8i32:1444; AVX1: ## %bb.0:1445; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm21446; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm31447; AVX1-NEXT: vpcmpeqd %xmm3, %xmm2, %xmm21448; AVX1-NEXT: vpcmpeqd %xmm3, %xmm0, %xmm01449; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01450; AVX1-NEXT: vmaskmovps (%rdi), %ymm0, %ymm21451; AVX1-NEXT: vblendvps %ymm0, %ymm2, %ymm1, %ymm01452; AVX1-NEXT: retq1453;1454; AVX2-LABEL: load_v8f32_v8i32:1455; AVX2: ## %bb.0:1456; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm21457; AVX2-NEXT: vpcmpeqd %ymm2, %ymm0, %ymm01458; AVX2-NEXT: vmaskmovps (%rdi), %ymm0, %ymm21459; AVX2-NEXT: vblendvps %ymm0, %ymm2, %ymm1, %ymm01460; AVX2-NEXT: retq1461;1462; AVX512F-LABEL: load_v8f32_v8i32:1463; AVX512F: ## %bb.0:1464; AVX512F-NEXT: ## kill: def $ymm1 killed $ymm1 def $zmm11465; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 def $zmm01466; AVX512F-NEXT: vptestnmd %zmm0, %zmm0, %k01467; AVX512F-NEXT: kshiftlw $8, %k0, %k01468; AVX512F-NEXT: kshiftrw $8, %k0, %k11469; AVX512F-NEXT: vblendmps (%rdi), %zmm1, %zmm0 {%k1}1470; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 killed $zmm01471; AVX512F-NEXT: retq1472;1473; AVX512VL-LABEL: load_v8f32_v8i32:1474; AVX512VL: ## %bb.0:1475; AVX512VL-NEXT: vptestnmd %ymm0, %ymm0, %k11476; AVX512VL-NEXT: vblendmps (%rdi), %ymm1, %ymm0 {%k1}1477; AVX512VL-NEXT: retq1478;1479; X86-AVX512-LABEL: load_v8f32_v8i32:1480; X86-AVX512: ## %bb.0:1481; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax1482; X86-AVX512-NEXT: vptestnmd %ymm0, %ymm0, %k11483; X86-AVX512-NEXT: vblendmps (%eax), %ymm1, %ymm0 {%k1}1484; X86-AVX512-NEXT: retl1485 %mask = icmp eq <8 x i32> %trigger, zeroinitializer1486 %res = call <8 x float> @llvm.masked.load.v8f32.p0(ptr %addr, i32 32, <8 x i1> %mask, <8 x float> %dst)1487 ret <8 x float> %res1488}1489 1490 1491;1492; vXf641493;1494 1495define <1 x i64> @load_v1i64_v1i64(<1 x i64> %trigger, ptr %addr, <1 x i64> %dst) {1496; SSE-LABEL: load_v1i64_v1i64:1497; SSE: ## %bb.0:1498; SSE-NEXT: testq %rdi, %rdi1499; SSE-NEXT: jne LBB12_11500; SSE-NEXT: ## %bb.2: ## %cond.load1501; SSE-NEXT: movq (%rsi), %rax1502; SSE-NEXT: retq1503; SSE-NEXT: LBB12_1:1504; SSE-NEXT: movq %rdx, %rax1505; SSE-NEXT: retq1506;1507; AVX-LABEL: load_v1i64_v1i64:1508; AVX: ## %bb.0:1509; AVX-NEXT: testq %rdi, %rdi1510; AVX-NEXT: jne LBB12_11511; AVX-NEXT: ## %bb.2: ## %cond.load1512; AVX-NEXT: movq (%rsi), %rax1513; AVX-NEXT: retq1514; AVX-NEXT: LBB12_1:1515; AVX-NEXT: movq %rdx, %rax1516; AVX-NEXT: retq1517;1518; X86-AVX512-LABEL: load_v1i64_v1i64:1519; X86-AVX512: ## %bb.0:1520; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax1521; X86-AVX512-NEXT: orl {{[0-9]+}}(%esp), %eax1522; X86-AVX512-NEXT: jne LBB12_11523; X86-AVX512-NEXT: ## %bb.2: ## %cond.load1524; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %ecx1525; X86-AVX512-NEXT: movl (%ecx), %eax1526; X86-AVX512-NEXT: movl 4(%ecx), %edx1527; X86-AVX512-NEXT: retl1528; X86-AVX512-NEXT: LBB12_1:1529; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %edx1530; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax1531; X86-AVX512-NEXT: retl1532 %mask = icmp eq <1 x i64> %trigger, zeroinitializer1533 %res = call <1 x i64> @llvm.masked.load.v1i64.p0(ptr %addr, i32 4, <1 x i1> %mask, <1 x i64> %dst)1534 ret <1 x i64> %res1535}1536 1537define <2 x i64> @load_v2i64_v2i64(<2 x i64> %trigger, ptr %addr, <2 x i64> %dst) {1538; SSE2-LABEL: load_v2i64_v2i64:1539; SSE2: ## %bb.0:1540; SSE2-NEXT: pxor %xmm2, %xmm21541; SSE2-NEXT: pcmpeqd %xmm0, %xmm21542; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,0,3,2]1543; SSE2-NEXT: pand %xmm2, %xmm01544; SSE2-NEXT: movmskpd %xmm0, %eax1545; SSE2-NEXT: testb $1, %al1546; SSE2-NEXT: jne LBB13_11547; SSE2-NEXT: ## %bb.2: ## %else1548; SSE2-NEXT: testb $2, %al1549; SSE2-NEXT: jne LBB13_31550; SSE2-NEXT: LBB13_4: ## %else21551; SSE2-NEXT: movaps %xmm1, %xmm01552; SSE2-NEXT: retq1553; SSE2-NEXT: LBB13_1: ## %cond.load1554; SSE2-NEXT: movlps {{.*#+}} xmm1 = mem[0,1],xmm1[2,3]1555; SSE2-NEXT: testb $2, %al1556; SSE2-NEXT: je LBB13_41557; SSE2-NEXT: LBB13_3: ## %cond.load11558; SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero1559; SSE2-NEXT: movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0]1560; SSE2-NEXT: movaps %xmm1, %xmm01561; SSE2-NEXT: retq1562;1563; SSE42-LABEL: load_v2i64_v2i64:1564; SSE42: ## %bb.0:1565; SSE42-NEXT: pxor %xmm2, %xmm21566; SSE42-NEXT: pcmpeqq %xmm0, %xmm21567; SSE42-NEXT: movmskpd %xmm2, %eax1568; SSE42-NEXT: testb $1, %al1569; SSE42-NEXT: jne LBB13_11570; SSE42-NEXT: ## %bb.2: ## %else1571; SSE42-NEXT: testb $2, %al1572; SSE42-NEXT: jne LBB13_31573; SSE42-NEXT: LBB13_4: ## %else21574; SSE42-NEXT: movdqa %xmm1, %xmm01575; SSE42-NEXT: retq1576; SSE42-NEXT: LBB13_1: ## %cond.load1577; SSE42-NEXT: pinsrq $0, (%rdi), %xmm11578; SSE42-NEXT: testb $2, %al1579; SSE42-NEXT: je LBB13_41580; SSE42-NEXT: LBB13_3: ## %cond.load11581; SSE42-NEXT: pinsrq $1, 8(%rdi), %xmm11582; SSE42-NEXT: movdqa %xmm1, %xmm01583; SSE42-NEXT: retq1584;1585; AVX1-LABEL: load_v2i64_v2i64:1586; AVX1: ## %bb.0:1587; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm21588; AVX1-NEXT: vpcmpeqq %xmm2, %xmm0, %xmm01589; AVX1-NEXT: vmaskmovpd (%rdi), %xmm0, %xmm21590; AVX1-NEXT: vblendvpd %xmm0, %xmm2, %xmm1, %xmm01591; AVX1-NEXT: retq1592;1593; AVX2-LABEL: load_v2i64_v2i64:1594; AVX2: ## %bb.0:1595; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm21596; AVX2-NEXT: vpcmpeqq %xmm2, %xmm0, %xmm01597; AVX2-NEXT: vpmaskmovq (%rdi), %xmm0, %xmm21598; AVX2-NEXT: vblendvpd %xmm0, %xmm2, %xmm1, %xmm01599; AVX2-NEXT: retq1600;1601; AVX512F-LABEL: load_v2i64_v2i64:1602; AVX512F: ## %bb.0:1603; AVX512F-NEXT: ## kill: def $xmm1 killed $xmm1 def $zmm11604; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm01605; AVX512F-NEXT: vptestnmq %zmm0, %zmm0, %k01606; AVX512F-NEXT: kshiftlw $14, %k0, %k01607; AVX512F-NEXT: kshiftrw $14, %k0, %k11608; AVX512F-NEXT: vpblendmq (%rdi), %zmm1, %zmm0 {%k1}1609; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 killed $zmm01610; AVX512F-NEXT: vzeroupper1611; AVX512F-NEXT: retq1612;1613; AVX512VL-LABEL: load_v2i64_v2i64:1614; AVX512VL: ## %bb.0:1615; AVX512VL-NEXT: vptestnmq %xmm0, %xmm0, %k11616; AVX512VL-NEXT: vpblendmq (%rdi), %xmm1, %xmm0 {%k1}1617; AVX512VL-NEXT: retq1618;1619; X86-AVX512-LABEL: load_v2i64_v2i64:1620; X86-AVX512: ## %bb.0:1621; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax1622; X86-AVX512-NEXT: vptestnmq %xmm0, %xmm0, %k11623; X86-AVX512-NEXT: vpblendmq (%eax), %xmm1, %xmm0 {%k1}1624; X86-AVX512-NEXT: retl1625 %mask = icmp eq <2 x i64> %trigger, zeroinitializer1626 %res = call <2 x i64> @llvm.masked.load.v2i64.p0(ptr %addr, i32 4, <2 x i1> %mask, <2 x i64> %dst)1627 ret <2 x i64> %res1628}1629 1630define <4 x i64> @load_v4i64_v4i64(<4 x i64> %trigger, ptr %addr, <4 x i64> %dst) {1631; SSE2-LABEL: load_v4i64_v4i64:1632; SSE2: ## %bb.0:1633; SSE2-NEXT: pxor %xmm4, %xmm41634; SSE2-NEXT: pcmpeqd %xmm4, %xmm11635; SSE2-NEXT: pcmpeqd %xmm4, %xmm01636; SSE2-NEXT: movdqa %xmm0, %xmm41637; SSE2-NEXT: shufps {{.*#+}} xmm4 = xmm4[1,3],xmm1[1,3]1638; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]1639; SSE2-NEXT: andps %xmm4, %xmm01640; SSE2-NEXT: movmskps %xmm0, %eax1641; SSE2-NEXT: testb $1, %al1642; SSE2-NEXT: jne LBB14_11643; SSE2-NEXT: ## %bb.2: ## %else1644; SSE2-NEXT: testb $2, %al1645; SSE2-NEXT: jne LBB14_31646; SSE2-NEXT: LBB14_4: ## %else21647; SSE2-NEXT: testb $4, %al1648; SSE2-NEXT: jne LBB14_51649; SSE2-NEXT: LBB14_6: ## %else51650; SSE2-NEXT: testb $8, %al1651; SSE2-NEXT: je LBB14_81652; SSE2-NEXT: LBB14_7: ## %cond.load71653; SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero1654; SSE2-NEXT: movlhps {{.*#+}} xmm3 = xmm3[0],xmm0[0]1655; SSE2-NEXT: LBB14_8: ## %else81656; SSE2-NEXT: movaps %xmm2, %xmm01657; SSE2-NEXT: movaps %xmm3, %xmm11658; SSE2-NEXT: retq1659; SSE2-NEXT: LBB14_1: ## %cond.load1660; SSE2-NEXT: movlps {{.*#+}} xmm2 = mem[0,1],xmm2[2,3]1661; SSE2-NEXT: testb $2, %al1662; SSE2-NEXT: je LBB14_41663; SSE2-NEXT: LBB14_3: ## %cond.load11664; SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero1665; SSE2-NEXT: movlhps {{.*#+}} xmm2 = xmm2[0],xmm0[0]1666; SSE2-NEXT: testb $4, %al1667; SSE2-NEXT: je LBB14_61668; SSE2-NEXT: LBB14_5: ## %cond.load41669; SSE2-NEXT: movlps {{.*#+}} xmm3 = mem[0,1],xmm3[2,3]1670; SSE2-NEXT: testb $8, %al1671; SSE2-NEXT: jne LBB14_71672; SSE2-NEXT: jmp LBB14_81673;1674; SSE42-LABEL: load_v4i64_v4i64:1675; SSE42: ## %bb.0:1676; SSE42-NEXT: pxor %xmm4, %xmm41677; SSE42-NEXT: pcmpeqq %xmm4, %xmm11678; SSE42-NEXT: pcmpeqq %xmm4, %xmm01679; SSE42-NEXT: packssdw %xmm1, %xmm01680; SSE42-NEXT: movmskps %xmm0, %eax1681; SSE42-NEXT: testb $1, %al1682; SSE42-NEXT: jne LBB14_11683; SSE42-NEXT: ## %bb.2: ## %else1684; SSE42-NEXT: testb $2, %al1685; SSE42-NEXT: jne LBB14_31686; SSE42-NEXT: LBB14_4: ## %else21687; SSE42-NEXT: testb $4, %al1688; SSE42-NEXT: jne LBB14_51689; SSE42-NEXT: LBB14_6: ## %else51690; SSE42-NEXT: testb $8, %al1691; SSE42-NEXT: je LBB14_81692; SSE42-NEXT: LBB14_7: ## %cond.load71693; SSE42-NEXT: pinsrq $1, 24(%rdi), %xmm31694; SSE42-NEXT: LBB14_8: ## %else81695; SSE42-NEXT: movdqa %xmm2, %xmm01696; SSE42-NEXT: movdqa %xmm3, %xmm11697; SSE42-NEXT: retq1698; SSE42-NEXT: LBB14_1: ## %cond.load1699; SSE42-NEXT: pinsrq $0, (%rdi), %xmm21700; SSE42-NEXT: testb $2, %al1701; SSE42-NEXT: je LBB14_41702; SSE42-NEXT: LBB14_3: ## %cond.load11703; SSE42-NEXT: pinsrq $1, 8(%rdi), %xmm21704; SSE42-NEXT: testb $4, %al1705; SSE42-NEXT: je LBB14_61706; SSE42-NEXT: LBB14_5: ## %cond.load41707; SSE42-NEXT: pinsrq $0, 16(%rdi), %xmm31708; SSE42-NEXT: testb $8, %al1709; SSE42-NEXT: jne LBB14_71710; SSE42-NEXT: jmp LBB14_81711;1712; AVX1-LABEL: load_v4i64_v4i64:1713; AVX1: ## %bb.0:1714; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm21715; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm31716; AVX1-NEXT: vpcmpeqq %xmm3, %xmm2, %xmm21717; AVX1-NEXT: vpcmpeqq %xmm3, %xmm0, %xmm01718; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01719; AVX1-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm21720; AVX1-NEXT: vblendvpd %ymm0, %ymm2, %ymm1, %ymm01721; AVX1-NEXT: retq1722;1723; AVX2-LABEL: load_v4i64_v4i64:1724; AVX2: ## %bb.0:1725; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm21726; AVX2-NEXT: vpcmpeqq %ymm2, %ymm0, %ymm01727; AVX2-NEXT: vpmaskmovq (%rdi), %ymm0, %ymm21728; AVX2-NEXT: vblendvpd %ymm0, %ymm2, %ymm1, %ymm01729; AVX2-NEXT: retq1730;1731; AVX512F-LABEL: load_v4i64_v4i64:1732; AVX512F: ## %bb.0:1733; AVX512F-NEXT: ## kill: def $ymm1 killed $ymm1 def $zmm11734; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 def $zmm01735; AVX512F-NEXT: vptestnmq %zmm0, %zmm0, %k01736; AVX512F-NEXT: kshiftlw $12, %k0, %k01737; AVX512F-NEXT: kshiftrw $12, %k0, %k11738; AVX512F-NEXT: vpblendmq (%rdi), %zmm1, %zmm0 {%k1}1739; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 killed $zmm01740; AVX512F-NEXT: retq1741;1742; AVX512VL-LABEL: load_v4i64_v4i64:1743; AVX512VL: ## %bb.0:1744; AVX512VL-NEXT: vptestnmq %ymm0, %ymm0, %k11745; AVX512VL-NEXT: vpblendmq (%rdi), %ymm1, %ymm0 {%k1}1746; AVX512VL-NEXT: retq1747;1748; X86-AVX512-LABEL: load_v4i64_v4i64:1749; X86-AVX512: ## %bb.0:1750; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax1751; X86-AVX512-NEXT: vptestnmq %ymm0, %ymm0, %k11752; X86-AVX512-NEXT: vpblendmq (%eax), %ymm1, %ymm0 {%k1}1753; X86-AVX512-NEXT: retl1754 %mask = icmp eq <4 x i64> %trigger, zeroinitializer1755 %res = call <4 x i64> @llvm.masked.load.v4i64.p0(ptr %addr, i32 4, <4 x i1> %mask, <4 x i64> %dst)1756 ret <4 x i64> %res1757}1758 1759define <8 x i64> @load_v8i64_v8i16(<8 x i16> %trigger, ptr %addr, <8 x i64> %dst) {1760; SSE2-LABEL: load_v8i64_v8i16:1761; SSE2: ## %bb.0:1762; SSE2-NEXT: pxor %xmm5, %xmm51763; SSE2-NEXT: pcmpeqw %xmm0, %xmm51764; SSE2-NEXT: packsswb %xmm5, %xmm51765; SSE2-NEXT: pmovmskb %xmm5, %eax1766; SSE2-NEXT: testb $1, %al1767; SSE2-NEXT: jne LBB15_11768; SSE2-NEXT: ## %bb.2: ## %else1769; SSE2-NEXT: testb $2, %al1770; SSE2-NEXT: jne LBB15_31771; SSE2-NEXT: LBB15_4: ## %else21772; SSE2-NEXT: testb $4, %al1773; SSE2-NEXT: jne LBB15_51774; SSE2-NEXT: LBB15_6: ## %else51775; SSE2-NEXT: testb $8, %al1776; SSE2-NEXT: jne LBB15_71777; SSE2-NEXT: LBB15_8: ## %else81778; SSE2-NEXT: testb $16, %al1779; SSE2-NEXT: jne LBB15_91780; SSE2-NEXT: LBB15_10: ## %else111781; SSE2-NEXT: testb $32, %al1782; SSE2-NEXT: jne LBB15_111783; SSE2-NEXT: LBB15_12: ## %else141784; SSE2-NEXT: testb $64, %al1785; SSE2-NEXT: jne LBB15_131786; SSE2-NEXT: LBB15_14: ## %else171787; SSE2-NEXT: testb $-128, %al1788; SSE2-NEXT: je LBB15_161789; SSE2-NEXT: LBB15_15: ## %cond.load191790; SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero1791; SSE2-NEXT: movlhps {{.*#+}} xmm4 = xmm4[0],xmm0[0]1792; SSE2-NEXT: LBB15_16: ## %else201793; SSE2-NEXT: movaps %xmm1, %xmm01794; SSE2-NEXT: movaps %xmm2, %xmm11795; SSE2-NEXT: movaps %xmm3, %xmm21796; SSE2-NEXT: movaps %xmm4, %xmm31797; SSE2-NEXT: retq1798; SSE2-NEXT: LBB15_1: ## %cond.load1799; SSE2-NEXT: movlps {{.*#+}} xmm1 = mem[0,1],xmm1[2,3]1800; SSE2-NEXT: testb $2, %al1801; SSE2-NEXT: je LBB15_41802; SSE2-NEXT: LBB15_3: ## %cond.load11803; SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero1804; SSE2-NEXT: movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0]1805; SSE2-NEXT: testb $4, %al1806; SSE2-NEXT: je LBB15_61807; SSE2-NEXT: LBB15_5: ## %cond.load41808; SSE2-NEXT: movlps {{.*#+}} xmm2 = mem[0,1],xmm2[2,3]1809; SSE2-NEXT: testb $8, %al1810; SSE2-NEXT: je LBB15_81811; SSE2-NEXT: LBB15_7: ## %cond.load71812; SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero1813; SSE2-NEXT: movlhps {{.*#+}} xmm2 = xmm2[0],xmm0[0]1814; SSE2-NEXT: testb $16, %al1815; SSE2-NEXT: je LBB15_101816; SSE2-NEXT: LBB15_9: ## %cond.load101817; SSE2-NEXT: movlps {{.*#+}} xmm3 = mem[0,1],xmm3[2,3]1818; SSE2-NEXT: testb $32, %al1819; SSE2-NEXT: je LBB15_121820; SSE2-NEXT: LBB15_11: ## %cond.load131821; SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero1822; SSE2-NEXT: movlhps {{.*#+}} xmm3 = xmm3[0],xmm0[0]1823; SSE2-NEXT: testb $64, %al1824; SSE2-NEXT: je LBB15_141825; SSE2-NEXT: LBB15_13: ## %cond.load161826; SSE2-NEXT: movlps {{.*#+}} xmm4 = mem[0,1],xmm4[2,3]1827; SSE2-NEXT: testb $-128, %al1828; SSE2-NEXT: jne LBB15_151829; SSE2-NEXT: jmp LBB15_161830;1831; SSE42-LABEL: load_v8i64_v8i16:1832; SSE42: ## %bb.0:1833; SSE42-NEXT: pxor %xmm5, %xmm51834; SSE42-NEXT: pcmpeqw %xmm0, %xmm51835; SSE42-NEXT: packsswb %xmm5, %xmm51836; SSE42-NEXT: pmovmskb %xmm5, %eax1837; SSE42-NEXT: testb $1, %al1838; SSE42-NEXT: jne LBB15_11839; SSE42-NEXT: ## %bb.2: ## %else1840; SSE42-NEXT: testb $2, %al1841; SSE42-NEXT: jne LBB15_31842; SSE42-NEXT: LBB15_4: ## %else21843; SSE42-NEXT: testb $4, %al1844; SSE42-NEXT: jne LBB15_51845; SSE42-NEXT: LBB15_6: ## %else51846; SSE42-NEXT: testb $8, %al1847; SSE42-NEXT: jne LBB15_71848; SSE42-NEXT: LBB15_8: ## %else81849; SSE42-NEXT: testb $16, %al1850; SSE42-NEXT: jne LBB15_91851; SSE42-NEXT: LBB15_10: ## %else111852; SSE42-NEXT: testb $32, %al1853; SSE42-NEXT: jne LBB15_111854; SSE42-NEXT: LBB15_12: ## %else141855; SSE42-NEXT: testb $64, %al1856; SSE42-NEXT: jne LBB15_131857; SSE42-NEXT: LBB15_14: ## %else171858; SSE42-NEXT: testb $-128, %al1859; SSE42-NEXT: je LBB15_161860; SSE42-NEXT: LBB15_15: ## %cond.load191861; SSE42-NEXT: pinsrq $1, 56(%rdi), %xmm41862; SSE42-NEXT: LBB15_16: ## %else201863; SSE42-NEXT: movdqa %xmm1, %xmm01864; SSE42-NEXT: movdqa %xmm2, %xmm11865; SSE42-NEXT: movdqa %xmm3, %xmm21866; SSE42-NEXT: movdqa %xmm4, %xmm31867; SSE42-NEXT: retq1868; SSE42-NEXT: LBB15_1: ## %cond.load1869; SSE42-NEXT: pinsrq $0, (%rdi), %xmm11870; SSE42-NEXT: testb $2, %al1871; SSE42-NEXT: je LBB15_41872; SSE42-NEXT: LBB15_3: ## %cond.load11873; SSE42-NEXT: pinsrq $1, 8(%rdi), %xmm11874; SSE42-NEXT: testb $4, %al1875; SSE42-NEXT: je LBB15_61876; SSE42-NEXT: LBB15_5: ## %cond.load41877; SSE42-NEXT: pinsrq $0, 16(%rdi), %xmm21878; SSE42-NEXT: testb $8, %al1879; SSE42-NEXT: je LBB15_81880; SSE42-NEXT: LBB15_7: ## %cond.load71881; SSE42-NEXT: pinsrq $1, 24(%rdi), %xmm21882; SSE42-NEXT: testb $16, %al1883; SSE42-NEXT: je LBB15_101884; SSE42-NEXT: LBB15_9: ## %cond.load101885; SSE42-NEXT: pinsrq $0, 32(%rdi), %xmm31886; SSE42-NEXT: testb $32, %al1887; SSE42-NEXT: je LBB15_121888; SSE42-NEXT: LBB15_11: ## %cond.load131889; SSE42-NEXT: pinsrq $1, 40(%rdi), %xmm31890; SSE42-NEXT: testb $64, %al1891; SSE42-NEXT: je LBB15_141892; SSE42-NEXT: LBB15_13: ## %cond.load161893; SSE42-NEXT: pinsrq $0, 48(%rdi), %xmm41894; SSE42-NEXT: testb $-128, %al1895; SSE42-NEXT: jne LBB15_151896; SSE42-NEXT: jmp LBB15_161897;1898; AVX1-LABEL: load_v8i64_v8i16:1899; AVX1: ## %bb.0:1900; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm0[2,3,2,3]1901; AVX1-NEXT: vpxor %xmm4, %xmm4, %xmm41902; AVX1-NEXT: vpcmpeqw %xmm4, %xmm3, %xmm31903; AVX1-NEXT: vpmovsxwq %xmm3, %xmm51904; AVX1-NEXT: vpshufd {{.*#+}} xmm3 = xmm3[1,1,1,1]1905; AVX1-NEXT: vpmovsxwq %xmm3, %xmm31906; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm5, %ymm31907; AVX1-NEXT: vpcmpeqw %xmm4, %xmm0, %xmm01908; AVX1-NEXT: vpmovsxwq %xmm0, %xmm41909; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,1,1,1]1910; AVX1-NEXT: vpmovsxwq %xmm0, %xmm01911; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm4, %ymm01912; AVX1-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm41913; AVX1-NEXT: vblendvpd %ymm0, %ymm4, %ymm1, %ymm01914; AVX1-NEXT: vmaskmovpd 32(%rdi), %ymm3, %ymm11915; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm11916; AVX1-NEXT: retq1917;1918; AVX2-LABEL: load_v8i64_v8i16:1919; AVX2: ## %bb.0:1920; AVX2-NEXT: vpshufd {{.*#+}} xmm3 = xmm0[2,3,2,3]1921; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm41922; AVX2-NEXT: vpcmpeqw %xmm4, %xmm3, %xmm31923; AVX2-NEXT: vpmovsxwq %xmm3, %ymm31924; AVX2-NEXT: vpcmpeqw %xmm4, %xmm0, %xmm01925; AVX2-NEXT: vpmovsxwq %xmm0, %ymm01926; AVX2-NEXT: vpmaskmovq (%rdi), %ymm0, %ymm41927; AVX2-NEXT: vblendvpd %ymm0, %ymm4, %ymm1, %ymm01928; AVX2-NEXT: vpmaskmovq 32(%rdi), %ymm3, %ymm11929; AVX2-NEXT: vblendvpd %ymm3, %ymm1, %ymm2, %ymm11930; AVX2-NEXT: retq1931;1932; AVX512F-LABEL: load_v8i64_v8i16:1933; AVX512F: ## %bb.0:1934; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm21935; AVX512F-NEXT: vpcmpeqw %xmm2, %xmm0, %xmm01936; AVX512F-NEXT: vpmovsxwq %xmm0, %zmm01937; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k11938; AVX512F-NEXT: vpblendmq (%rdi), %zmm1, %zmm0 {%k1}1939; AVX512F-NEXT: retq1940;1941; AVX512VLDQ-LABEL: load_v8i64_v8i16:1942; AVX512VLDQ: ## %bb.0:1943; AVX512VLDQ-NEXT: vpxor %xmm2, %xmm2, %xmm21944; AVX512VLDQ-NEXT: vpcmpeqw %xmm2, %xmm0, %xmm01945; AVX512VLDQ-NEXT: vpmovsxwd %xmm0, %ymm01946; AVX512VLDQ-NEXT: vpmovd2m %ymm0, %k11947; AVX512VLDQ-NEXT: vpblendmq (%rdi), %zmm1, %zmm0 {%k1}1948; AVX512VLDQ-NEXT: retq1949;1950; AVX512VLBW-LABEL: load_v8i64_v8i16:1951; AVX512VLBW: ## %bb.0:1952; AVX512VLBW-NEXT: vptestnmw %xmm0, %xmm0, %k11953; AVX512VLBW-NEXT: vpblendmq (%rdi), %zmm1, %zmm0 {%k1}1954; AVX512VLBW-NEXT: retq1955;1956; X86-AVX512-LABEL: load_v8i64_v8i16:1957; X86-AVX512: ## %bb.0:1958; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax1959; X86-AVX512-NEXT: vptestnmw %xmm0, %xmm0, %k11960; X86-AVX512-NEXT: vpblendmq (%eax), %zmm1, %zmm0 {%k1}1961; X86-AVX512-NEXT: retl1962 %mask = icmp eq <8 x i16> %trigger, zeroinitializer1963 %res = call <8 x i64> @llvm.masked.load.v8i64.p0(ptr %addr, i32 4, <8 x i1> %mask, <8 x i64> %dst)1964 ret <8 x i64> %res1965}1966 1967define <8 x i64> @load_v8i64_v8i64(<8 x i64> %trigger, ptr %addr, <8 x i64> %dst) {1968; SSE2-LABEL: load_v8i64_v8i64:1969; SSE2: ## %bb.0:1970; SSE2-NEXT: pxor %xmm8, %xmm81971; SSE2-NEXT: pcmpeqd %xmm8, %xmm31972; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm3[1,0,3,2]1973; SSE2-NEXT: pand %xmm3, %xmm91974; SSE2-NEXT: pcmpeqd %xmm8, %xmm21975; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,0,3,2]1976; SSE2-NEXT: pand %xmm2, %xmm31977; SSE2-NEXT: packssdw %xmm9, %xmm31978; SSE2-NEXT: pcmpeqd %xmm8, %xmm11979; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm1[1,0,3,2]1980; SSE2-NEXT: pand %xmm1, %xmm21981; SSE2-NEXT: pcmpeqd %xmm8, %xmm01982; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]1983; SSE2-NEXT: pand %xmm0, %xmm11984; SSE2-NEXT: packssdw %xmm2, %xmm11985; SSE2-NEXT: packssdw %xmm3, %xmm11986; SSE2-NEXT: packsswb %xmm1, %xmm11987; SSE2-NEXT: pmovmskb %xmm1, %eax1988; SSE2-NEXT: testb $1, %al1989; SSE2-NEXT: jne LBB16_11990; SSE2-NEXT: ## %bb.2: ## %else1991; SSE2-NEXT: testb $2, %al1992; SSE2-NEXT: jne LBB16_31993; SSE2-NEXT: LBB16_4: ## %else21994; SSE2-NEXT: testb $4, %al1995; SSE2-NEXT: jne LBB16_51996; SSE2-NEXT: LBB16_6: ## %else51997; SSE2-NEXT: testb $8, %al1998; SSE2-NEXT: jne LBB16_71999; SSE2-NEXT: LBB16_8: ## %else82000; SSE2-NEXT: testb $16, %al2001; SSE2-NEXT: jne LBB16_92002; SSE2-NEXT: LBB16_10: ## %else112003; SSE2-NEXT: testb $32, %al2004; SSE2-NEXT: jne LBB16_112005; SSE2-NEXT: LBB16_12: ## %else142006; SSE2-NEXT: testb $64, %al2007; SSE2-NEXT: jne LBB16_132008; SSE2-NEXT: LBB16_14: ## %else172009; SSE2-NEXT: testb $-128, %al2010; SSE2-NEXT: je LBB16_162011; SSE2-NEXT: LBB16_15: ## %cond.load192012; SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero2013; SSE2-NEXT: movlhps {{.*#+}} xmm7 = xmm7[0],xmm0[0]2014; SSE2-NEXT: LBB16_16: ## %else202015; SSE2-NEXT: movaps %xmm4, %xmm02016; SSE2-NEXT: movaps %xmm5, %xmm12017; SSE2-NEXT: movaps %xmm6, %xmm22018; SSE2-NEXT: movaps %xmm7, %xmm32019; SSE2-NEXT: retq2020; SSE2-NEXT: LBB16_1: ## %cond.load2021; SSE2-NEXT: movlps {{.*#+}} xmm4 = mem[0,1],xmm4[2,3]2022; SSE2-NEXT: testb $2, %al2023; SSE2-NEXT: je LBB16_42024; SSE2-NEXT: LBB16_3: ## %cond.load12025; SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero2026; SSE2-NEXT: movlhps {{.*#+}} xmm4 = xmm4[0],xmm0[0]2027; SSE2-NEXT: testb $4, %al2028; SSE2-NEXT: je LBB16_62029; SSE2-NEXT: LBB16_5: ## %cond.load42030; SSE2-NEXT: movlps {{.*#+}} xmm5 = mem[0,1],xmm5[2,3]2031; SSE2-NEXT: testb $8, %al2032; SSE2-NEXT: je LBB16_82033; SSE2-NEXT: LBB16_7: ## %cond.load72034; SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero2035; SSE2-NEXT: movlhps {{.*#+}} xmm5 = xmm5[0],xmm0[0]2036; SSE2-NEXT: testb $16, %al2037; SSE2-NEXT: je LBB16_102038; SSE2-NEXT: LBB16_9: ## %cond.load102039; SSE2-NEXT: movlps {{.*#+}} xmm6 = mem[0,1],xmm6[2,3]2040; SSE2-NEXT: testb $32, %al2041; SSE2-NEXT: je LBB16_122042; SSE2-NEXT: LBB16_11: ## %cond.load132043; SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero2044; SSE2-NEXT: movlhps {{.*#+}} xmm6 = xmm6[0],xmm0[0]2045; SSE2-NEXT: testb $64, %al2046; SSE2-NEXT: je LBB16_142047; SSE2-NEXT: LBB16_13: ## %cond.load162048; SSE2-NEXT: movlps {{.*#+}} xmm7 = mem[0,1],xmm7[2,3]2049; SSE2-NEXT: testb $-128, %al2050; SSE2-NEXT: jne LBB16_152051; SSE2-NEXT: jmp LBB16_162052;2053; SSE42-LABEL: load_v8i64_v8i64:2054; SSE42: ## %bb.0:2055; SSE42-NEXT: pxor %xmm8, %xmm82056; SSE42-NEXT: pcmpeqq %xmm8, %xmm32057; SSE42-NEXT: pcmpeqq %xmm8, %xmm22058; SSE42-NEXT: packssdw %xmm3, %xmm22059; SSE42-NEXT: pcmpeqq %xmm8, %xmm12060; SSE42-NEXT: pcmpeqq %xmm8, %xmm02061; SSE42-NEXT: packssdw %xmm1, %xmm02062; SSE42-NEXT: packssdw %xmm2, %xmm02063; SSE42-NEXT: packsswb %xmm0, %xmm02064; SSE42-NEXT: pmovmskb %xmm0, %eax2065; SSE42-NEXT: testb $1, %al2066; SSE42-NEXT: jne LBB16_12067; SSE42-NEXT: ## %bb.2: ## %else2068; SSE42-NEXT: testb $2, %al2069; SSE42-NEXT: jne LBB16_32070; SSE42-NEXT: LBB16_4: ## %else22071; SSE42-NEXT: testb $4, %al2072; SSE42-NEXT: jne LBB16_52073; SSE42-NEXT: LBB16_6: ## %else52074; SSE42-NEXT: testb $8, %al2075; SSE42-NEXT: jne LBB16_72076; SSE42-NEXT: LBB16_8: ## %else82077; SSE42-NEXT: testb $16, %al2078; SSE42-NEXT: jne LBB16_92079; SSE42-NEXT: LBB16_10: ## %else112080; SSE42-NEXT: testb $32, %al2081; SSE42-NEXT: jne LBB16_112082; SSE42-NEXT: LBB16_12: ## %else142083; SSE42-NEXT: testb $64, %al2084; SSE42-NEXT: jne LBB16_132085; SSE42-NEXT: LBB16_14: ## %else172086; SSE42-NEXT: testb $-128, %al2087; SSE42-NEXT: je LBB16_162088; SSE42-NEXT: LBB16_15: ## %cond.load192089; SSE42-NEXT: pinsrq $1, 56(%rdi), %xmm72090; SSE42-NEXT: LBB16_16: ## %else202091; SSE42-NEXT: movdqa %xmm4, %xmm02092; SSE42-NEXT: movdqa %xmm5, %xmm12093; SSE42-NEXT: movdqa %xmm6, %xmm22094; SSE42-NEXT: movdqa %xmm7, %xmm32095; SSE42-NEXT: retq2096; SSE42-NEXT: LBB16_1: ## %cond.load2097; SSE42-NEXT: pinsrq $0, (%rdi), %xmm42098; SSE42-NEXT: testb $2, %al2099; SSE42-NEXT: je LBB16_42100; SSE42-NEXT: LBB16_3: ## %cond.load12101; SSE42-NEXT: pinsrq $1, 8(%rdi), %xmm42102; SSE42-NEXT: testb $4, %al2103; SSE42-NEXT: je LBB16_62104; SSE42-NEXT: LBB16_5: ## %cond.load42105; SSE42-NEXT: pinsrq $0, 16(%rdi), %xmm52106; SSE42-NEXT: testb $8, %al2107; SSE42-NEXT: je LBB16_82108; SSE42-NEXT: LBB16_7: ## %cond.load72109; SSE42-NEXT: pinsrq $1, 24(%rdi), %xmm52110; SSE42-NEXT: testb $16, %al2111; SSE42-NEXT: je LBB16_102112; SSE42-NEXT: LBB16_9: ## %cond.load102113; SSE42-NEXT: pinsrq $0, 32(%rdi), %xmm62114; SSE42-NEXT: testb $32, %al2115; SSE42-NEXT: je LBB16_122116; SSE42-NEXT: LBB16_11: ## %cond.load132117; SSE42-NEXT: pinsrq $1, 40(%rdi), %xmm62118; SSE42-NEXT: testb $64, %al2119; SSE42-NEXT: je LBB16_142120; SSE42-NEXT: LBB16_13: ## %cond.load162121; SSE42-NEXT: pinsrq $0, 48(%rdi), %xmm72122; SSE42-NEXT: testb $-128, %al2123; SSE42-NEXT: jne LBB16_152124; SSE42-NEXT: jmp LBB16_162125;2126; AVX1-LABEL: load_v8i64_v8i64:2127; AVX1: ## %bb.0:2128; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm42129; AVX1-NEXT: vpxor %xmm5, %xmm5, %xmm52130; AVX1-NEXT: vpcmpeqq %xmm5, %xmm4, %xmm42131; AVX1-NEXT: vpcmpeqq %xmm5, %xmm1, %xmm12132; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm1, %ymm12133; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm42134; AVX1-NEXT: vpcmpeqq %xmm5, %xmm4, %xmm42135; AVX1-NEXT: vpcmpeqq %xmm5, %xmm0, %xmm02136; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm02137; AVX1-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm42138; AVX1-NEXT: vblendvpd %ymm0, %ymm4, %ymm2, %ymm02139; AVX1-NEXT: vmaskmovpd 32(%rdi), %ymm1, %ymm22140; AVX1-NEXT: vblendvpd %ymm1, %ymm2, %ymm3, %ymm12141; AVX1-NEXT: retq2142;2143; AVX2-LABEL: load_v8i64_v8i64:2144; AVX2: ## %bb.0:2145; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm42146; AVX2-NEXT: vpcmpeqq %ymm4, %ymm1, %ymm12147; AVX2-NEXT: vpcmpeqq %ymm4, %ymm0, %ymm02148; AVX2-NEXT: vpmaskmovq (%rdi), %ymm0, %ymm42149; AVX2-NEXT: vblendvpd %ymm0, %ymm4, %ymm2, %ymm02150; AVX2-NEXT: vpmaskmovq 32(%rdi), %ymm1, %ymm22151; AVX2-NEXT: vblendvpd %ymm1, %ymm2, %ymm3, %ymm12152; AVX2-NEXT: retq2153;2154; AVX512-LABEL: load_v8i64_v8i64:2155; AVX512: ## %bb.0:2156; AVX512-NEXT: vptestnmq %zmm0, %zmm0, %k12157; AVX512-NEXT: vpblendmq (%rdi), %zmm1, %zmm0 {%k1}2158; AVX512-NEXT: retq2159;2160; X86-AVX512-LABEL: load_v8i64_v8i64:2161; X86-AVX512: ## %bb.0:2162; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax2163; X86-AVX512-NEXT: vptestnmq %zmm0, %zmm0, %k12164; X86-AVX512-NEXT: vpblendmq (%eax), %zmm1, %zmm0 {%k1}2165; X86-AVX512-NEXT: retl2166 %mask = icmp eq <8 x i64> %trigger, zeroinitializer2167 %res = call <8 x i64> @llvm.masked.load.v8i64.p0(ptr %addr, i32 4, <8 x i1> %mask, <8 x i64> %dst)2168 ret <8 x i64> %res2169}2170 2171;2172; vXi322173;2174 2175define <2 x i32> @load_v2i32_v2i32(<2 x i32> %trigger, ptr %addr, <2 x i32> %dst) {2176; SSE2-LABEL: load_v2i32_v2i32:2177; SSE2: ## %bb.0:2178; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]2179; SSE2-NEXT: pxor %xmm2, %xmm22180; SSE2-NEXT: pcmpeqd %xmm0, %xmm22181; SSE2-NEXT: movmskpd %xmm2, %eax2182; SSE2-NEXT: testb $1, %al2183; SSE2-NEXT: jne LBB17_12184; SSE2-NEXT: ## %bb.2: ## %else2185; SSE2-NEXT: testb $2, %al2186; SSE2-NEXT: jne LBB17_32187; SSE2-NEXT: LBB17_4: ## %else22188; SSE2-NEXT: movaps %xmm1, %xmm02189; SSE2-NEXT: retq2190; SSE2-NEXT: LBB17_1: ## %cond.load2191; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2192; SSE2-NEXT: movss {{.*#+}} xmm1 = xmm0[0],xmm1[1,2,3]2193; SSE2-NEXT: testb $2, %al2194; SSE2-NEXT: je LBB17_42195; SSE2-NEXT: LBB17_3: ## %cond.load12196; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2197; SSE2-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]2198; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[2,0],xmm1[2,3]2199; SSE2-NEXT: movaps %xmm0, %xmm12200; SSE2-NEXT: movaps %xmm1, %xmm02201; SSE2-NEXT: retq2202;2203; SSE42-LABEL: load_v2i32_v2i32:2204; SSE42: ## %bb.0:2205; SSE42-NEXT: pxor %xmm2, %xmm22206; SSE42-NEXT: pcmpeqd %xmm0, %xmm22207; SSE42-NEXT: pmovsxdq %xmm2, %xmm02208; SSE42-NEXT: movmskpd %xmm0, %eax2209; SSE42-NEXT: testb $1, %al2210; SSE42-NEXT: jne LBB17_12211; SSE42-NEXT: ## %bb.2: ## %else2212; SSE42-NEXT: testb $2, %al2213; SSE42-NEXT: jne LBB17_32214; SSE42-NEXT: LBB17_4: ## %else22215; SSE42-NEXT: movdqa %xmm1, %xmm02216; SSE42-NEXT: retq2217; SSE42-NEXT: LBB17_1: ## %cond.load2218; SSE42-NEXT: pinsrd $0, (%rdi), %xmm12219; SSE42-NEXT: testb $2, %al2220; SSE42-NEXT: je LBB17_42221; SSE42-NEXT: LBB17_3: ## %cond.load12222; SSE42-NEXT: pinsrd $1, 4(%rdi), %xmm12223; SSE42-NEXT: movdqa %xmm1, %xmm02224; SSE42-NEXT: retq2225;2226; AVX1-LABEL: load_v2i32_v2i32:2227; AVX1: ## %bb.0:2228; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm22229; AVX1-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm02230; AVX1-NEXT: vmovq {{.*#+}} xmm0 = xmm0[0],zero2231; AVX1-NEXT: vmaskmovps (%rdi), %xmm0, %xmm22232; AVX1-NEXT: vblendvps %xmm0, %xmm2, %xmm1, %xmm02233; AVX1-NEXT: retq2234;2235; AVX2-LABEL: load_v2i32_v2i32:2236; AVX2: ## %bb.0:2237; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm22238; AVX2-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm02239; AVX2-NEXT: vmovq {{.*#+}} xmm0 = xmm0[0],zero2240; AVX2-NEXT: vpmaskmovd (%rdi), %xmm0, %xmm22241; AVX2-NEXT: vblendvps %xmm0, %xmm2, %xmm1, %xmm02242; AVX2-NEXT: retq2243;2244; AVX512F-LABEL: load_v2i32_v2i32:2245; AVX512F: ## %bb.0:2246; AVX512F-NEXT: ## kill: def $xmm1 killed $xmm1 def $zmm12247; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm02248; AVX512F-NEXT: vptestnmd %zmm0, %zmm0, %k02249; AVX512F-NEXT: kshiftlw $14, %k0, %k02250; AVX512F-NEXT: kshiftrw $14, %k0, %k12251; AVX512F-NEXT: vpblendmd (%rdi), %zmm1, %zmm0 {%k1}2252; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 killed $zmm02253; AVX512F-NEXT: vzeroupper2254; AVX512F-NEXT: retq2255;2256; AVX512VLDQ-LABEL: load_v2i32_v2i32:2257; AVX512VLDQ: ## %bb.0:2258; AVX512VLDQ-NEXT: vptestnmd %xmm0, %xmm0, %k02259; AVX512VLDQ-NEXT: kshiftlb $6, %k0, %k02260; AVX512VLDQ-NEXT: kshiftrb $6, %k0, %k12261; AVX512VLDQ-NEXT: vpblendmd (%rdi), %xmm1, %xmm0 {%k1}2262; AVX512VLDQ-NEXT: retq2263;2264; AVX512VLBW-LABEL: load_v2i32_v2i32:2265; AVX512VLBW: ## %bb.0:2266; AVX512VLBW-NEXT: vptestnmd %xmm0, %xmm0, %k02267; AVX512VLBW-NEXT: kshiftlw $14, %k0, %k02268; AVX512VLBW-NEXT: kshiftrw $14, %k0, %k12269; AVX512VLBW-NEXT: vpblendmd (%rdi), %xmm1, %xmm0 {%k1}2270; AVX512VLBW-NEXT: retq2271;2272; X86-AVX512-LABEL: load_v2i32_v2i32:2273; X86-AVX512: ## %bb.0:2274; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax2275; X86-AVX512-NEXT: vptestnmd %xmm0, %xmm0, %k02276; X86-AVX512-NEXT: kshiftlb $6, %k0, %k02277; X86-AVX512-NEXT: kshiftrb $6, %k0, %k12278; X86-AVX512-NEXT: vpblendmd (%eax), %xmm1, %xmm0 {%k1}2279; X86-AVX512-NEXT: retl2280 %mask = icmp eq <2 x i32> %trigger, zeroinitializer2281 %res = call <2 x i32> @llvm.masked.load.v2i32.p0(ptr %addr, i32 4, <2 x i1> %mask, <2 x i32> %dst)2282 ret <2 x i32> %res2283}2284 2285define <4 x i32> @load_v4i32_v4i32(<4 x i32> %trigger, ptr %addr, <4 x i32> %dst) {2286; SSE2-LABEL: load_v4i32_v4i32:2287; SSE2: ## %bb.0:2288; SSE2-NEXT: pxor %xmm2, %xmm22289; SSE2-NEXT: pcmpeqd %xmm0, %xmm22290; SSE2-NEXT: movmskps %xmm2, %eax2291; SSE2-NEXT: testb $1, %al2292; SSE2-NEXT: jne LBB18_12293; SSE2-NEXT: ## %bb.2: ## %else2294; SSE2-NEXT: testb $2, %al2295; SSE2-NEXT: jne LBB18_32296; SSE2-NEXT: LBB18_4: ## %else22297; SSE2-NEXT: testb $4, %al2298; SSE2-NEXT: jne LBB18_52299; SSE2-NEXT: LBB18_6: ## %else52300; SSE2-NEXT: testb $8, %al2301; SSE2-NEXT: jne LBB18_72302; SSE2-NEXT: LBB18_8: ## %else82303; SSE2-NEXT: movaps %xmm1, %xmm02304; SSE2-NEXT: retq2305; SSE2-NEXT: LBB18_1: ## %cond.load2306; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2307; SSE2-NEXT: movss {{.*#+}} xmm1 = xmm0[0],xmm1[1,2,3]2308; SSE2-NEXT: testb $2, %al2309; SSE2-NEXT: je LBB18_42310; SSE2-NEXT: LBB18_3: ## %cond.load12311; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2312; SSE2-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]2313; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[2,0],xmm1[2,3]2314; SSE2-NEXT: movaps %xmm0, %xmm12315; SSE2-NEXT: testb $4, %al2316; SSE2-NEXT: je LBB18_62317; SSE2-NEXT: LBB18_5: ## %cond.load42318; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2319; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[3,0]2320; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[0,2]2321; SSE2-NEXT: testb $8, %al2322; SSE2-NEXT: je LBB18_82323; SSE2-NEXT: LBB18_7: ## %cond.load72324; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2325; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]2326; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0]2327; SSE2-NEXT: movaps %xmm1, %xmm02328; SSE2-NEXT: retq2329;2330; SSE42-LABEL: load_v4i32_v4i32:2331; SSE42: ## %bb.0:2332; SSE42-NEXT: pxor %xmm2, %xmm22333; SSE42-NEXT: pcmpeqd %xmm0, %xmm22334; SSE42-NEXT: movmskps %xmm2, %eax2335; SSE42-NEXT: testb $1, %al2336; SSE42-NEXT: jne LBB18_12337; SSE42-NEXT: ## %bb.2: ## %else2338; SSE42-NEXT: testb $2, %al2339; SSE42-NEXT: jne LBB18_32340; SSE42-NEXT: LBB18_4: ## %else22341; SSE42-NEXT: testb $4, %al2342; SSE42-NEXT: jne LBB18_52343; SSE42-NEXT: LBB18_6: ## %else52344; SSE42-NEXT: testb $8, %al2345; SSE42-NEXT: jne LBB18_72346; SSE42-NEXT: LBB18_8: ## %else82347; SSE42-NEXT: movdqa %xmm1, %xmm02348; SSE42-NEXT: retq2349; SSE42-NEXT: LBB18_1: ## %cond.load2350; SSE42-NEXT: pinsrd $0, (%rdi), %xmm12351; SSE42-NEXT: testb $2, %al2352; SSE42-NEXT: je LBB18_42353; SSE42-NEXT: LBB18_3: ## %cond.load12354; SSE42-NEXT: pinsrd $1, 4(%rdi), %xmm12355; SSE42-NEXT: testb $4, %al2356; SSE42-NEXT: je LBB18_62357; SSE42-NEXT: LBB18_5: ## %cond.load42358; SSE42-NEXT: pinsrd $2, 8(%rdi), %xmm12359; SSE42-NEXT: testb $8, %al2360; SSE42-NEXT: je LBB18_82361; SSE42-NEXT: LBB18_7: ## %cond.load72362; SSE42-NEXT: pinsrd $3, 12(%rdi), %xmm12363; SSE42-NEXT: movdqa %xmm1, %xmm02364; SSE42-NEXT: retq2365;2366; AVX1-LABEL: load_v4i32_v4i32:2367; AVX1: ## %bb.0:2368; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm22369; AVX1-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm02370; AVX1-NEXT: vmaskmovps (%rdi), %xmm0, %xmm22371; AVX1-NEXT: vblendvps %xmm0, %xmm2, %xmm1, %xmm02372; AVX1-NEXT: retq2373;2374; AVX2-LABEL: load_v4i32_v4i32:2375; AVX2: ## %bb.0:2376; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm22377; AVX2-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm02378; AVX2-NEXT: vpmaskmovd (%rdi), %xmm0, %xmm22379; AVX2-NEXT: vblendvps %xmm0, %xmm2, %xmm1, %xmm02380; AVX2-NEXT: retq2381;2382; AVX512F-LABEL: load_v4i32_v4i32:2383; AVX512F: ## %bb.0:2384; AVX512F-NEXT: ## kill: def $xmm1 killed $xmm1 def $zmm12385; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm02386; AVX512F-NEXT: vptestnmd %zmm0, %zmm0, %k02387; AVX512F-NEXT: kshiftlw $12, %k0, %k02388; AVX512F-NEXT: kshiftrw $12, %k0, %k12389; AVX512F-NEXT: vpblendmd (%rdi), %zmm1, %zmm0 {%k1}2390; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 killed $zmm02391; AVX512F-NEXT: vzeroupper2392; AVX512F-NEXT: retq2393;2394; AVX512VL-LABEL: load_v4i32_v4i32:2395; AVX512VL: ## %bb.0:2396; AVX512VL-NEXT: vptestnmd %xmm0, %xmm0, %k12397; AVX512VL-NEXT: vpblendmd (%rdi), %xmm1, %xmm0 {%k1}2398; AVX512VL-NEXT: retq2399;2400; X86-AVX512-LABEL: load_v4i32_v4i32:2401; X86-AVX512: ## %bb.0:2402; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax2403; X86-AVX512-NEXT: vptestnmd %xmm0, %xmm0, %k12404; X86-AVX512-NEXT: vpblendmd (%eax), %xmm1, %xmm0 {%k1}2405; X86-AVX512-NEXT: retl2406 %mask = icmp eq <4 x i32> %trigger, zeroinitializer2407 %res = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %addr, i32 4, <4 x i1> %mask, <4 x i32> %dst)2408 ret <4 x i32> %res2409}2410 2411define <8 x i32> @load_v8i32_v8i1(<8 x i1> %mask, ptr %addr, <8 x i32> %dst) {2412; SSE2-LABEL: load_v8i32_v8i1:2413; SSE2: ## %bb.0:2414; SSE2-NEXT: psllw $15, %xmm02415; SSE2-NEXT: packsswb %xmm0, %xmm02416; SSE2-NEXT: pmovmskb %xmm0, %eax2417; SSE2-NEXT: testb $1, %al2418; SSE2-NEXT: jne LBB19_12419; SSE2-NEXT: ## %bb.2: ## %else2420; SSE2-NEXT: testb $2, %al2421; SSE2-NEXT: jne LBB19_32422; SSE2-NEXT: LBB19_4: ## %else22423; SSE2-NEXT: testb $4, %al2424; SSE2-NEXT: jne LBB19_52425; SSE2-NEXT: LBB19_6: ## %else52426; SSE2-NEXT: testb $8, %al2427; SSE2-NEXT: jne LBB19_72428; SSE2-NEXT: LBB19_8: ## %else82429; SSE2-NEXT: testb $16, %al2430; SSE2-NEXT: jne LBB19_92431; SSE2-NEXT: LBB19_10: ## %else112432; SSE2-NEXT: testb $32, %al2433; SSE2-NEXT: jne LBB19_112434; SSE2-NEXT: LBB19_12: ## %else142435; SSE2-NEXT: testb $64, %al2436; SSE2-NEXT: jne LBB19_132437; SSE2-NEXT: LBB19_14: ## %else172438; SSE2-NEXT: testb $-128, %al2439; SSE2-NEXT: je LBB19_162440; SSE2-NEXT: LBB19_15: ## %cond.load192441; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2442; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3]2443; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,1],xmm0[2,0]2444; SSE2-NEXT: LBB19_16: ## %else202445; SSE2-NEXT: movaps %xmm1, %xmm02446; SSE2-NEXT: movaps %xmm2, %xmm12447; SSE2-NEXT: retq2448; SSE2-NEXT: LBB19_1: ## %cond.load2449; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2450; SSE2-NEXT: movss {{.*#+}} xmm1 = xmm0[0],xmm1[1,2,3]2451; SSE2-NEXT: testb $2, %al2452; SSE2-NEXT: je LBB19_42453; SSE2-NEXT: LBB19_3: ## %cond.load12454; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2455; SSE2-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]2456; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[2,0],xmm1[2,3]2457; SSE2-NEXT: movaps %xmm0, %xmm12458; SSE2-NEXT: testb $4, %al2459; SSE2-NEXT: je LBB19_62460; SSE2-NEXT: LBB19_5: ## %cond.load42461; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2462; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[3,0]2463; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[0,2]2464; SSE2-NEXT: testb $8, %al2465; SSE2-NEXT: je LBB19_82466; SSE2-NEXT: LBB19_7: ## %cond.load72467; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2468; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]2469; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0]2470; SSE2-NEXT: testb $16, %al2471; SSE2-NEXT: je LBB19_102472; SSE2-NEXT: LBB19_9: ## %cond.load102473; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2474; SSE2-NEXT: movss {{.*#+}} xmm2 = xmm0[0],xmm2[1,2,3]2475; SSE2-NEXT: testb $32, %al2476; SSE2-NEXT: je LBB19_122477; SSE2-NEXT: LBB19_11: ## %cond.load132478; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2479; SSE2-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm2[0]2480; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[2,0],xmm2[2,3]2481; SSE2-NEXT: movaps %xmm0, %xmm22482; SSE2-NEXT: testb $64, %al2483; SSE2-NEXT: je LBB19_142484; SSE2-NEXT: LBB19_13: ## %cond.load162485; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero2486; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,0],xmm2[3,0]2487; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,1],xmm0[0,2]2488; SSE2-NEXT: testb $-128, %al2489; SSE2-NEXT: jne LBB19_152490; SSE2-NEXT: jmp LBB19_162491;2492; SSE42-LABEL: load_v8i32_v8i1:2493; SSE42: ## %bb.0:2494; SSE42-NEXT: psllw $15, %xmm02495; SSE42-NEXT: packsswb %xmm0, %xmm02496; SSE42-NEXT: pmovmskb %xmm0, %eax2497; SSE42-NEXT: testb $1, %al2498; SSE42-NEXT: jne LBB19_12499; SSE42-NEXT: ## %bb.2: ## %else2500; SSE42-NEXT: testb $2, %al2501; SSE42-NEXT: jne LBB19_32502; SSE42-NEXT: LBB19_4: ## %else22503; SSE42-NEXT: testb $4, %al2504; SSE42-NEXT: jne LBB19_52505; SSE42-NEXT: LBB19_6: ## %else52506; SSE42-NEXT: testb $8, %al2507; SSE42-NEXT: jne LBB19_72508; SSE42-NEXT: LBB19_8: ## %else82509; SSE42-NEXT: testb $16, %al2510; SSE42-NEXT: jne LBB19_92511; SSE42-NEXT: LBB19_10: ## %else112512; SSE42-NEXT: testb $32, %al2513; SSE42-NEXT: jne LBB19_112514; SSE42-NEXT: LBB19_12: ## %else142515; SSE42-NEXT: testb $64, %al2516; SSE42-NEXT: jne LBB19_132517; SSE42-NEXT: LBB19_14: ## %else172518; SSE42-NEXT: testb $-128, %al2519; SSE42-NEXT: je LBB19_162520; SSE42-NEXT: LBB19_15: ## %cond.load192521; SSE42-NEXT: pinsrd $3, 28(%rdi), %xmm22522; SSE42-NEXT: LBB19_16: ## %else202523; SSE42-NEXT: movdqa %xmm1, %xmm02524; SSE42-NEXT: movdqa %xmm2, %xmm12525; SSE42-NEXT: retq2526; SSE42-NEXT: LBB19_1: ## %cond.load2527; SSE42-NEXT: pinsrd $0, (%rdi), %xmm12528; SSE42-NEXT: testb $2, %al2529; SSE42-NEXT: je LBB19_42530; SSE42-NEXT: LBB19_3: ## %cond.load12531; SSE42-NEXT: pinsrd $1, 4(%rdi), %xmm12532; SSE42-NEXT: testb $4, %al2533; SSE42-NEXT: je LBB19_62534; SSE42-NEXT: LBB19_5: ## %cond.load42535; SSE42-NEXT: pinsrd $2, 8(%rdi), %xmm12536; SSE42-NEXT: testb $8, %al2537; SSE42-NEXT: je LBB19_82538; SSE42-NEXT: LBB19_7: ## %cond.load72539; SSE42-NEXT: pinsrd $3, 12(%rdi), %xmm12540; SSE42-NEXT: testb $16, %al2541; SSE42-NEXT: je LBB19_102542; SSE42-NEXT: LBB19_9: ## %cond.load102543; SSE42-NEXT: pinsrd $0, 16(%rdi), %xmm22544; SSE42-NEXT: testb $32, %al2545; SSE42-NEXT: je LBB19_122546; SSE42-NEXT: LBB19_11: ## %cond.load132547; SSE42-NEXT: pinsrd $1, 20(%rdi), %xmm22548; SSE42-NEXT: testb $64, %al2549; SSE42-NEXT: je LBB19_142550; SSE42-NEXT: LBB19_13: ## %cond.load162551; SSE42-NEXT: pinsrd $2, 24(%rdi), %xmm22552; SSE42-NEXT: testb $-128, %al2553; SSE42-NEXT: jne LBB19_152554; SSE42-NEXT: jmp LBB19_162555;2556; AVX1-LABEL: load_v8i32_v8i1:2557; AVX1: ## %bb.0:2558; AVX1-NEXT: vpmovzxwd {{.*#+}} xmm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2559; AVX1-NEXT: vpslld $31, %xmm2, %xmm22560; AVX1-NEXT: vpunpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]2561; AVX1-NEXT: vpslld $31, %xmm0, %xmm02562; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm02563; AVX1-NEXT: vmaskmovps (%rdi), %ymm0, %ymm22564; AVX1-NEXT: vblendvps %ymm0, %ymm2, %ymm1, %ymm02565; AVX1-NEXT: retq2566;2567; AVX2-LABEL: load_v8i32_v8i1:2568; AVX2: ## %bb.0:2569; AVX2-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],zero2570; AVX2-NEXT: vpslld $31, %ymm0, %ymm02571; AVX2-NEXT: vpmaskmovd (%rdi), %ymm0, %ymm22572; AVX2-NEXT: vblendvps %ymm0, %ymm2, %ymm1, %ymm02573; AVX2-NEXT: retq2574;2575; AVX512F-LABEL: load_v8i32_v8i1:2576; AVX512F: ## %bb.0:2577; AVX512F-NEXT: ## kill: def $ymm1 killed $ymm1 def $zmm12578; AVX512F-NEXT: vpmovsxwq %xmm0, %zmm02579; AVX512F-NEXT: vpsllq $63, %zmm0, %zmm02580; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k12581; AVX512F-NEXT: vpblendmd (%rdi), %zmm1, %zmm0 {%k1}2582; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 killed $zmm02583; AVX512F-NEXT: retq2584;2585; AVX512VLDQ-LABEL: load_v8i32_v8i1:2586; AVX512VLDQ: ## %bb.0:2587; AVX512VLDQ-NEXT: vpmovsxwd %xmm0, %ymm02588; AVX512VLDQ-NEXT: vpslld $31, %ymm0, %ymm02589; AVX512VLDQ-NEXT: vpmovd2m %ymm0, %k12590; AVX512VLDQ-NEXT: vpblendmd (%rdi), %ymm1, %ymm0 {%k1}2591; AVX512VLDQ-NEXT: retq2592;2593; AVX512VLBW-LABEL: load_v8i32_v8i1:2594; AVX512VLBW: ## %bb.0:2595; AVX512VLBW-NEXT: vpsllw $15, %xmm0, %xmm02596; AVX512VLBW-NEXT: vpmovw2m %xmm0, %k12597; AVX512VLBW-NEXT: vpblendmd (%rdi), %ymm1, %ymm0 {%k1}2598; AVX512VLBW-NEXT: retq2599;2600; X86-AVX512-LABEL: load_v8i32_v8i1:2601; X86-AVX512: ## %bb.0:2602; X86-AVX512-NEXT: vpsllw $15, %xmm0, %xmm02603; X86-AVX512-NEXT: vpmovw2m %xmm0, %k12604; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax2605; X86-AVX512-NEXT: vpblendmd (%eax), %ymm1, %ymm0 {%k1}2606; X86-AVX512-NEXT: retl2607 %res = call <8 x i32> @llvm.masked.load.v8i32.p0(ptr %addr, i32 4, <8 x i1> %mask, <8 x i32> %dst)2608 ret <8 x i32> %res2609}2610 2611define <8 x i32> @load_v8i32_v8i1_zero(<8 x i1> %mask, ptr %addr) {2612; SSE2-LABEL: load_v8i32_v8i1_zero:2613; SSE2: ## %bb.0:2614; SSE2-NEXT: psllw $15, %xmm02615; SSE2-NEXT: packsswb %xmm0, %xmm02616; SSE2-NEXT: pmovmskb %xmm0, %eax2617; SSE2-NEXT: pxor %xmm0, %xmm02618; SSE2-NEXT: testb $1, %al2619; SSE2-NEXT: xorps %xmm1, %xmm12620; SSE2-NEXT: jne LBB20_12621; SSE2-NEXT: ## %bb.2: ## %else2622; SSE2-NEXT: testb $2, %al2623; SSE2-NEXT: jne LBB20_32624; SSE2-NEXT: LBB20_4: ## %else22625; SSE2-NEXT: testb $4, %al2626; SSE2-NEXT: jne LBB20_52627; SSE2-NEXT: LBB20_6: ## %else52628; SSE2-NEXT: testb $8, %al2629; SSE2-NEXT: jne LBB20_72630; SSE2-NEXT: LBB20_8: ## %else82631; SSE2-NEXT: testb $16, %al2632; SSE2-NEXT: jne LBB20_92633; SSE2-NEXT: LBB20_10: ## %else112634; SSE2-NEXT: testb $32, %al2635; SSE2-NEXT: jne LBB20_112636; SSE2-NEXT: LBB20_12: ## %else142637; SSE2-NEXT: testb $64, %al2638; SSE2-NEXT: jne LBB20_132639; SSE2-NEXT: LBB20_14: ## %else172640; SSE2-NEXT: testb $-128, %al2641; SSE2-NEXT: jne LBB20_152642; SSE2-NEXT: LBB20_16: ## %else202643; SSE2-NEXT: retq2644; SSE2-NEXT: LBB20_1: ## %cond.load2645; SSE2-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero2646; SSE2-NEXT: testb $2, %al2647; SSE2-NEXT: je LBB20_42648; SSE2-NEXT: LBB20_3: ## %cond.load12649; SSE2-NEXT: movd {{.*#+}} xmm2 = mem[0],zero,zero,zero2650; SSE2-NEXT: punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm0[0]2651; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[2,0],xmm0[2,3]2652; SSE2-NEXT: movaps %xmm2, %xmm02653; SSE2-NEXT: testb $4, %al2654; SSE2-NEXT: je LBB20_62655; SSE2-NEXT: LBB20_5: ## %cond.load42656; SSE2-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero2657; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,0],xmm0[3,0]2658; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm2[0,2]2659; SSE2-NEXT: testb $8, %al2660; SSE2-NEXT: je LBB20_82661; SSE2-NEXT: LBB20_7: ## %cond.load72662; SSE2-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero2663; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,1],xmm0[2,3]2664; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,0]2665; SSE2-NEXT: testb $16, %al2666; SSE2-NEXT: je LBB20_102667; SSE2-NEXT: LBB20_9: ## %cond.load102668; SSE2-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero2669; SSE2-NEXT: movss {{.*#+}} xmm1 = xmm2[0],xmm1[1,2,3]2670; SSE2-NEXT: testb $32, %al2671; SSE2-NEXT: je LBB20_122672; SSE2-NEXT: LBB20_11: ## %cond.load132673; SSE2-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero2674; SSE2-NEXT: movlhps {{.*#+}} xmm2 = xmm2[0],xmm1[0]2675; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[2,0],xmm1[2,3]2676; SSE2-NEXT: movaps %xmm2, %xmm12677; SSE2-NEXT: testb $64, %al2678; SSE2-NEXT: je LBB20_142679; SSE2-NEXT: LBB20_13: ## %cond.load162680; SSE2-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero2681; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,0],xmm1[3,0]2682; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0,2]2683; SSE2-NEXT: testb $-128, %al2684; SSE2-NEXT: je LBB20_162685; SSE2-NEXT: LBB20_15: ## %cond.load192686; SSE2-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero2687; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[0,1],xmm1[2,3]2688; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,0]2689; SSE2-NEXT: retq2690;2691; SSE42-LABEL: load_v8i32_v8i1_zero:2692; SSE42: ## %bb.0:2693; SSE42-NEXT: psllw $15, %xmm02694; SSE42-NEXT: packsswb %xmm0, %xmm02695; SSE42-NEXT: pmovmskb %xmm0, %eax2696; SSE42-NEXT: pxor %xmm0, %xmm02697; SSE42-NEXT: testb $1, %al2698; SSE42-NEXT: pxor %xmm1, %xmm12699; SSE42-NEXT: jne LBB20_12700; SSE42-NEXT: ## %bb.2: ## %else2701; SSE42-NEXT: testb $2, %al2702; SSE42-NEXT: jne LBB20_32703; SSE42-NEXT: LBB20_4: ## %else22704; SSE42-NEXT: testb $4, %al2705; SSE42-NEXT: jne LBB20_52706; SSE42-NEXT: LBB20_6: ## %else52707; SSE42-NEXT: testb $8, %al2708; SSE42-NEXT: jne LBB20_72709; SSE42-NEXT: LBB20_8: ## %else82710; SSE42-NEXT: testb $16, %al2711; SSE42-NEXT: jne LBB20_92712; SSE42-NEXT: LBB20_10: ## %else112713; SSE42-NEXT: testb $32, %al2714; SSE42-NEXT: jne LBB20_112715; SSE42-NEXT: LBB20_12: ## %else142716; SSE42-NEXT: testb $64, %al2717; SSE42-NEXT: jne LBB20_132718; SSE42-NEXT: LBB20_14: ## %else172719; SSE42-NEXT: testb $-128, %al2720; SSE42-NEXT: jne LBB20_152721; SSE42-NEXT: LBB20_16: ## %else202722; SSE42-NEXT: retq2723; SSE42-NEXT: LBB20_1: ## %cond.load2724; SSE42-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero2725; SSE42-NEXT: testb $2, %al2726; SSE42-NEXT: je LBB20_42727; SSE42-NEXT: LBB20_3: ## %cond.load12728; SSE42-NEXT: pinsrd $1, 4(%rdi), %xmm02729; SSE42-NEXT: testb $4, %al2730; SSE42-NEXT: je LBB20_62731; SSE42-NEXT: LBB20_5: ## %cond.load42732; SSE42-NEXT: pinsrd $2, 8(%rdi), %xmm02733; SSE42-NEXT: testb $8, %al2734; SSE42-NEXT: je LBB20_82735; SSE42-NEXT: LBB20_7: ## %cond.load72736; SSE42-NEXT: pinsrd $3, 12(%rdi), %xmm02737; SSE42-NEXT: testb $16, %al2738; SSE42-NEXT: je LBB20_102739; SSE42-NEXT: LBB20_9: ## %cond.load102740; SSE42-NEXT: pinsrd $0, 16(%rdi), %xmm12741; SSE42-NEXT: testb $32, %al2742; SSE42-NEXT: je LBB20_122743; SSE42-NEXT: LBB20_11: ## %cond.load132744; SSE42-NEXT: pinsrd $1, 20(%rdi), %xmm12745; SSE42-NEXT: testb $64, %al2746; SSE42-NEXT: je LBB20_142747; SSE42-NEXT: LBB20_13: ## %cond.load162748; SSE42-NEXT: pinsrd $2, 24(%rdi), %xmm12749; SSE42-NEXT: testb $-128, %al2750; SSE42-NEXT: je LBB20_162751; SSE42-NEXT: LBB20_15: ## %cond.load192752; SSE42-NEXT: pinsrd $3, 28(%rdi), %xmm12753; SSE42-NEXT: retq2754;2755; AVX1-LABEL: load_v8i32_v8i1_zero:2756; AVX1: ## %bb.0:2757; AVX1-NEXT: vpmovzxwd {{.*#+}} xmm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero2758; AVX1-NEXT: vpslld $31, %xmm1, %xmm12759; AVX1-NEXT: vpunpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]2760; AVX1-NEXT: vpslld $31, %xmm0, %xmm02761; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm02762; AVX1-NEXT: vmaskmovps (%rdi), %ymm0, %ymm02763; AVX1-NEXT: retq2764;2765; AVX2-LABEL: load_v8i32_v8i1_zero:2766; AVX2: ## %bb.0:2767; AVX2-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],zero2768; AVX2-NEXT: vpslld $31, %ymm0, %ymm02769; AVX2-NEXT: vpmaskmovd (%rdi), %ymm0, %ymm02770; AVX2-NEXT: retq2771;2772; AVX512F-LABEL: load_v8i32_v8i1_zero:2773; AVX512F: ## %bb.0:2774; AVX512F-NEXT: vpmovsxwq %xmm0, %zmm02775; AVX512F-NEXT: vpsllq $63, %zmm0, %zmm02776; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k12777; AVX512F-NEXT: vmovdqu32 (%rdi), %zmm0 {%k1} {z}2778; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 killed $zmm02779; AVX512F-NEXT: retq2780;2781; AVX512VLDQ-LABEL: load_v8i32_v8i1_zero:2782; AVX512VLDQ: ## %bb.0:2783; AVX512VLDQ-NEXT: vpmovsxwd %xmm0, %ymm02784; AVX512VLDQ-NEXT: vpslld $31, %ymm0, %ymm02785; AVX512VLDQ-NEXT: vpmovd2m %ymm0, %k12786; AVX512VLDQ-NEXT: vmovdqu32 (%rdi), %ymm0 {%k1} {z}2787; AVX512VLDQ-NEXT: retq2788;2789; AVX512VLBW-LABEL: load_v8i32_v8i1_zero:2790; AVX512VLBW: ## %bb.0:2791; AVX512VLBW-NEXT: vpsllw $15, %xmm0, %xmm02792; AVX512VLBW-NEXT: vpmovw2m %xmm0, %k12793; AVX512VLBW-NEXT: vmovdqu32 (%rdi), %ymm0 {%k1} {z}2794; AVX512VLBW-NEXT: retq2795;2796; X86-AVX512-LABEL: load_v8i32_v8i1_zero:2797; X86-AVX512: ## %bb.0:2798; X86-AVX512-NEXT: vpsllw $15, %xmm0, %xmm02799; X86-AVX512-NEXT: vpmovw2m %xmm0, %k12800; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax2801; X86-AVX512-NEXT: vmovdqu32 (%eax), %ymm0 {%k1} {z}2802; X86-AVX512-NEXT: retl2803 %res = call <8 x i32> @llvm.masked.load.v8i32.p0(ptr %addr, i32 4, <8 x i1> %mask, <8 x i32> zeroinitializer)2804 ret <8 x i32> %res2805}2806 2807;2808; vXi162809;2810 2811define <8 x i16> @load_v8i16_v8i16(<8 x i16> %trigger, ptr %addr, <8 x i16> %dst) {2812; SSE-LABEL: load_v8i16_v8i16:2813; SSE: ## %bb.0:2814; SSE-NEXT: packsswb %xmm0, %xmm02815; SSE-NEXT: pmovmskb %xmm0, %eax2816; SSE-NEXT: testb $1, %al2817; SSE-NEXT: jne LBB21_12818; SSE-NEXT: ## %bb.2: ## %else2819; SSE-NEXT: testb $2, %al2820; SSE-NEXT: jne LBB21_32821; SSE-NEXT: LBB21_4: ## %else22822; SSE-NEXT: testb $4, %al2823; SSE-NEXT: jne LBB21_52824; SSE-NEXT: LBB21_6: ## %else52825; SSE-NEXT: testb $8, %al2826; SSE-NEXT: jne LBB21_72827; SSE-NEXT: LBB21_8: ## %else82828; SSE-NEXT: testb $16, %al2829; SSE-NEXT: jne LBB21_92830; SSE-NEXT: LBB21_10: ## %else112831; SSE-NEXT: testb $32, %al2832; SSE-NEXT: jne LBB21_112833; SSE-NEXT: LBB21_12: ## %else142834; SSE-NEXT: testb $64, %al2835; SSE-NEXT: jne LBB21_132836; SSE-NEXT: LBB21_14: ## %else172837; SSE-NEXT: testb $-128, %al2838; SSE-NEXT: jne LBB21_152839; SSE-NEXT: LBB21_16: ## %else202840; SSE-NEXT: movdqa %xmm1, %xmm02841; SSE-NEXT: retq2842; SSE-NEXT: LBB21_1: ## %cond.load2843; SSE-NEXT: pinsrw $0, (%rdi), %xmm12844; SSE-NEXT: testb $2, %al2845; SSE-NEXT: je LBB21_42846; SSE-NEXT: LBB21_3: ## %cond.load12847; SSE-NEXT: pinsrw $1, 2(%rdi), %xmm12848; SSE-NEXT: testb $4, %al2849; SSE-NEXT: je LBB21_62850; SSE-NEXT: LBB21_5: ## %cond.load42851; SSE-NEXT: pinsrw $2, 4(%rdi), %xmm12852; SSE-NEXT: testb $8, %al2853; SSE-NEXT: je LBB21_82854; SSE-NEXT: LBB21_7: ## %cond.load72855; SSE-NEXT: pinsrw $3, 6(%rdi), %xmm12856; SSE-NEXT: testb $16, %al2857; SSE-NEXT: je LBB21_102858; SSE-NEXT: LBB21_9: ## %cond.load102859; SSE-NEXT: pinsrw $4, 8(%rdi), %xmm12860; SSE-NEXT: testb $32, %al2861; SSE-NEXT: je LBB21_122862; SSE-NEXT: LBB21_11: ## %cond.load132863; SSE-NEXT: pinsrw $5, 10(%rdi), %xmm12864; SSE-NEXT: testb $64, %al2865; SSE-NEXT: je LBB21_142866; SSE-NEXT: LBB21_13: ## %cond.load162867; SSE-NEXT: pinsrw $6, 12(%rdi), %xmm12868; SSE-NEXT: testb $-128, %al2869; SSE-NEXT: je LBB21_162870; SSE-NEXT: LBB21_15: ## %cond.load192871; SSE-NEXT: pinsrw $7, 14(%rdi), %xmm12872; SSE-NEXT: movdqa %xmm1, %xmm02873; SSE-NEXT: retq2874;2875; AVX1OR2-LABEL: load_v8i16_v8i16:2876; AVX1OR2: ## %bb.0:2877; AVX1OR2-NEXT: vpacksswb %xmm0, %xmm0, %xmm02878; AVX1OR2-NEXT: vpmovmskb %xmm0, %eax2879; AVX1OR2-NEXT: testb $1, %al2880; AVX1OR2-NEXT: jne LBB21_12881; AVX1OR2-NEXT: ## %bb.2: ## %else2882; AVX1OR2-NEXT: testb $2, %al2883; AVX1OR2-NEXT: jne LBB21_32884; AVX1OR2-NEXT: LBB21_4: ## %else22885; AVX1OR2-NEXT: testb $4, %al2886; AVX1OR2-NEXT: jne LBB21_52887; AVX1OR2-NEXT: LBB21_6: ## %else52888; AVX1OR2-NEXT: testb $8, %al2889; AVX1OR2-NEXT: jne LBB21_72890; AVX1OR2-NEXT: LBB21_8: ## %else82891; AVX1OR2-NEXT: testb $16, %al2892; AVX1OR2-NEXT: jne LBB21_92893; AVX1OR2-NEXT: LBB21_10: ## %else112894; AVX1OR2-NEXT: testb $32, %al2895; AVX1OR2-NEXT: jne LBB21_112896; AVX1OR2-NEXT: LBB21_12: ## %else142897; AVX1OR2-NEXT: testb $64, %al2898; AVX1OR2-NEXT: jne LBB21_132899; AVX1OR2-NEXT: LBB21_14: ## %else172900; AVX1OR2-NEXT: testb $-128, %al2901; AVX1OR2-NEXT: jne LBB21_152902; AVX1OR2-NEXT: LBB21_16: ## %else202903; AVX1OR2-NEXT: vmovdqa %xmm1, %xmm02904; AVX1OR2-NEXT: retq2905; AVX1OR2-NEXT: LBB21_1: ## %cond.load2906; AVX1OR2-NEXT: vpinsrw $0, (%rdi), %xmm1, %xmm12907; AVX1OR2-NEXT: testb $2, %al2908; AVX1OR2-NEXT: je LBB21_42909; AVX1OR2-NEXT: LBB21_3: ## %cond.load12910; AVX1OR2-NEXT: vpinsrw $1, 2(%rdi), %xmm1, %xmm12911; AVX1OR2-NEXT: testb $4, %al2912; AVX1OR2-NEXT: je LBB21_62913; AVX1OR2-NEXT: LBB21_5: ## %cond.load42914; AVX1OR2-NEXT: vpinsrw $2, 4(%rdi), %xmm1, %xmm12915; AVX1OR2-NEXT: testb $8, %al2916; AVX1OR2-NEXT: je LBB21_82917; AVX1OR2-NEXT: LBB21_7: ## %cond.load72918; AVX1OR2-NEXT: vpinsrw $3, 6(%rdi), %xmm1, %xmm12919; AVX1OR2-NEXT: testb $16, %al2920; AVX1OR2-NEXT: je LBB21_102921; AVX1OR2-NEXT: LBB21_9: ## %cond.load102922; AVX1OR2-NEXT: vpinsrw $4, 8(%rdi), %xmm1, %xmm12923; AVX1OR2-NEXT: testb $32, %al2924; AVX1OR2-NEXT: je LBB21_122925; AVX1OR2-NEXT: LBB21_11: ## %cond.load132926; AVX1OR2-NEXT: vpinsrw $5, 10(%rdi), %xmm1, %xmm12927; AVX1OR2-NEXT: testb $64, %al2928; AVX1OR2-NEXT: je LBB21_142929; AVX1OR2-NEXT: LBB21_13: ## %cond.load162930; AVX1OR2-NEXT: vpinsrw $6, 12(%rdi), %xmm1, %xmm12931; AVX1OR2-NEXT: testb $-128, %al2932; AVX1OR2-NEXT: je LBB21_162933; AVX1OR2-NEXT: LBB21_15: ## %cond.load192934; AVX1OR2-NEXT: vpinsrw $7, 14(%rdi), %xmm1, %xmm12935; AVX1OR2-NEXT: vmovdqa %xmm1, %xmm02936; AVX1OR2-NEXT: retq2937;2938; AVX512F-LABEL: load_v8i16_v8i16:2939; AVX512F: ## %bb.0:2940; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm22941; AVX512F-NEXT: vpcmpgtw %xmm0, %xmm2, %xmm02942; AVX512F-NEXT: vpmovsxwq %xmm0, %zmm02943; AVX512F-NEXT: vptestmq %zmm0, %zmm0, %k02944; AVX512F-NEXT: kmovw %k0, %eax2945; AVX512F-NEXT: testb $1, %al2946; AVX512F-NEXT: jne LBB21_12947; AVX512F-NEXT: ## %bb.2: ## %else2948; AVX512F-NEXT: testb $2, %al2949; AVX512F-NEXT: jne LBB21_32950; AVX512F-NEXT: LBB21_4: ## %else22951; AVX512F-NEXT: testb $4, %al2952; AVX512F-NEXT: jne LBB21_52953; AVX512F-NEXT: LBB21_6: ## %else52954; AVX512F-NEXT: testb $8, %al2955; AVX512F-NEXT: jne LBB21_72956; AVX512F-NEXT: LBB21_8: ## %else82957; AVX512F-NEXT: testb $16, %al2958; AVX512F-NEXT: jne LBB21_92959; AVX512F-NEXT: LBB21_10: ## %else112960; AVX512F-NEXT: testb $32, %al2961; AVX512F-NEXT: jne LBB21_112962; AVX512F-NEXT: LBB21_12: ## %else142963; AVX512F-NEXT: testb $64, %al2964; AVX512F-NEXT: jne LBB21_132965; AVX512F-NEXT: LBB21_14: ## %else172966; AVX512F-NEXT: testb $-128, %al2967; AVX512F-NEXT: jne LBB21_152968; AVX512F-NEXT: LBB21_16: ## %else202969; AVX512F-NEXT: vmovdqa %xmm1, %xmm02970; AVX512F-NEXT: vzeroupper2971; AVX512F-NEXT: retq2972; AVX512F-NEXT: LBB21_1: ## %cond.load2973; AVX512F-NEXT: vpinsrw $0, (%rdi), %xmm1, %xmm12974; AVX512F-NEXT: testb $2, %al2975; AVX512F-NEXT: je LBB21_42976; AVX512F-NEXT: LBB21_3: ## %cond.load12977; AVX512F-NEXT: vpinsrw $1, 2(%rdi), %xmm1, %xmm12978; AVX512F-NEXT: testb $4, %al2979; AVX512F-NEXT: je LBB21_62980; AVX512F-NEXT: LBB21_5: ## %cond.load42981; AVX512F-NEXT: vpinsrw $2, 4(%rdi), %xmm1, %xmm12982; AVX512F-NEXT: testb $8, %al2983; AVX512F-NEXT: je LBB21_82984; AVX512F-NEXT: LBB21_7: ## %cond.load72985; AVX512F-NEXT: vpinsrw $3, 6(%rdi), %xmm1, %xmm12986; AVX512F-NEXT: testb $16, %al2987; AVX512F-NEXT: je LBB21_102988; AVX512F-NEXT: LBB21_9: ## %cond.load102989; AVX512F-NEXT: vpinsrw $4, 8(%rdi), %xmm1, %xmm12990; AVX512F-NEXT: testb $32, %al2991; AVX512F-NEXT: je LBB21_122992; AVX512F-NEXT: LBB21_11: ## %cond.load132993; AVX512F-NEXT: vpinsrw $5, 10(%rdi), %xmm1, %xmm12994; AVX512F-NEXT: testb $64, %al2995; AVX512F-NEXT: je LBB21_142996; AVX512F-NEXT: LBB21_13: ## %cond.load162997; AVX512F-NEXT: vpinsrw $6, 12(%rdi), %xmm1, %xmm12998; AVX512F-NEXT: testb $-128, %al2999; AVX512F-NEXT: je LBB21_163000; AVX512F-NEXT: LBB21_15: ## %cond.load193001; AVX512F-NEXT: vpinsrw $7, 14(%rdi), %xmm1, %xmm13002; AVX512F-NEXT: vmovdqa %xmm1, %xmm03003; AVX512F-NEXT: vzeroupper3004; AVX512F-NEXT: retq3005;3006; AVX512VLDQ-LABEL: load_v8i16_v8i16:3007; AVX512VLDQ: ## %bb.0:3008; AVX512VLDQ-NEXT: vpxor %xmm2, %xmm2, %xmm23009; AVX512VLDQ-NEXT: vpcmpgtw %xmm0, %xmm2, %xmm03010; AVX512VLDQ-NEXT: vpmovsxwd %xmm0, %ymm03011; AVX512VLDQ-NEXT: vpmovd2m %ymm0, %k03012; AVX512VLDQ-NEXT: kmovw %k0, %eax3013; AVX512VLDQ-NEXT: testb $1, %al3014; AVX512VLDQ-NEXT: jne LBB21_13015; AVX512VLDQ-NEXT: ## %bb.2: ## %else3016; AVX512VLDQ-NEXT: testb $2, %al3017; AVX512VLDQ-NEXT: jne LBB21_33018; AVX512VLDQ-NEXT: LBB21_4: ## %else23019; AVX512VLDQ-NEXT: testb $4, %al3020; AVX512VLDQ-NEXT: jne LBB21_53021; AVX512VLDQ-NEXT: LBB21_6: ## %else53022; AVX512VLDQ-NEXT: testb $8, %al3023; AVX512VLDQ-NEXT: jne LBB21_73024; AVX512VLDQ-NEXT: LBB21_8: ## %else83025; AVX512VLDQ-NEXT: testb $16, %al3026; AVX512VLDQ-NEXT: jne LBB21_93027; AVX512VLDQ-NEXT: LBB21_10: ## %else113028; AVX512VLDQ-NEXT: testb $32, %al3029; AVX512VLDQ-NEXT: jne LBB21_113030; AVX512VLDQ-NEXT: LBB21_12: ## %else143031; AVX512VLDQ-NEXT: testb $64, %al3032; AVX512VLDQ-NEXT: jne LBB21_133033; AVX512VLDQ-NEXT: LBB21_14: ## %else173034; AVX512VLDQ-NEXT: testb $-128, %al3035; AVX512VLDQ-NEXT: jne LBB21_153036; AVX512VLDQ-NEXT: LBB21_16: ## %else203037; AVX512VLDQ-NEXT: vmovdqa %xmm1, %xmm03038; AVX512VLDQ-NEXT: vzeroupper3039; AVX512VLDQ-NEXT: retq3040; AVX512VLDQ-NEXT: LBB21_1: ## %cond.load3041; AVX512VLDQ-NEXT: vpinsrw $0, (%rdi), %xmm1, %xmm13042; AVX512VLDQ-NEXT: testb $2, %al3043; AVX512VLDQ-NEXT: je LBB21_43044; AVX512VLDQ-NEXT: LBB21_3: ## %cond.load13045; AVX512VLDQ-NEXT: vpinsrw $1, 2(%rdi), %xmm1, %xmm13046; AVX512VLDQ-NEXT: testb $4, %al3047; AVX512VLDQ-NEXT: je LBB21_63048; AVX512VLDQ-NEXT: LBB21_5: ## %cond.load43049; AVX512VLDQ-NEXT: vpinsrw $2, 4(%rdi), %xmm1, %xmm13050; AVX512VLDQ-NEXT: testb $8, %al3051; AVX512VLDQ-NEXT: je LBB21_83052; AVX512VLDQ-NEXT: LBB21_7: ## %cond.load73053; AVX512VLDQ-NEXT: vpinsrw $3, 6(%rdi), %xmm1, %xmm13054; AVX512VLDQ-NEXT: testb $16, %al3055; AVX512VLDQ-NEXT: je LBB21_103056; AVX512VLDQ-NEXT: LBB21_9: ## %cond.load103057; AVX512VLDQ-NEXT: vpinsrw $4, 8(%rdi), %xmm1, %xmm13058; AVX512VLDQ-NEXT: testb $32, %al3059; AVX512VLDQ-NEXT: je LBB21_123060; AVX512VLDQ-NEXT: LBB21_11: ## %cond.load133061; AVX512VLDQ-NEXT: vpinsrw $5, 10(%rdi), %xmm1, %xmm13062; AVX512VLDQ-NEXT: testb $64, %al3063; AVX512VLDQ-NEXT: je LBB21_143064; AVX512VLDQ-NEXT: LBB21_13: ## %cond.load163065; AVX512VLDQ-NEXT: vpinsrw $6, 12(%rdi), %xmm1, %xmm13066; AVX512VLDQ-NEXT: testb $-128, %al3067; AVX512VLDQ-NEXT: je LBB21_163068; AVX512VLDQ-NEXT: LBB21_15: ## %cond.load193069; AVX512VLDQ-NEXT: vpinsrw $7, 14(%rdi), %xmm1, %xmm13070; AVX512VLDQ-NEXT: vmovdqa %xmm1, %xmm03071; AVX512VLDQ-NEXT: vzeroupper3072; AVX512VLDQ-NEXT: retq3073;3074; AVX512VLBW-LABEL: load_v8i16_v8i16:3075; AVX512VLBW: ## %bb.0:3076; AVX512VLBW-NEXT: vpmovw2m %xmm0, %k13077; AVX512VLBW-NEXT: vpblendmw (%rdi), %xmm1, %xmm0 {%k1}3078; AVX512VLBW-NEXT: retq3079;3080; X86-AVX512-LABEL: load_v8i16_v8i16:3081; X86-AVX512: ## %bb.0:3082; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax3083; X86-AVX512-NEXT: vpmovw2m %xmm0, %k13084; X86-AVX512-NEXT: vpblendmw (%eax), %xmm1, %xmm0 {%k1}3085; X86-AVX512-NEXT: retl3086 %mask = icmp slt <8 x i16> %trigger, zeroinitializer3087 %res = call <8 x i16> @llvm.masked.load.v8i16.p0(ptr %addr, i32 4, <8 x i1> %mask, <8 x i16> %dst)3088 ret <8 x i16> %res3089}3090 3091define <16 x i16> @load_v16i16_v16i16(<16 x i16> %trigger, ptr %addr, <16 x i16> %dst) {3092; SSE-LABEL: load_v16i16_v16i16:3093; SSE: ## %bb.0:3094; SSE-NEXT: packsswb %xmm1, %xmm03095; SSE-NEXT: pmovmskb %xmm0, %eax3096; SSE-NEXT: testb $1, %al3097; SSE-NEXT: jne LBB22_13098; SSE-NEXT: ## %bb.2: ## %else3099; SSE-NEXT: testb $2, %al3100; SSE-NEXT: jne LBB22_33101; SSE-NEXT: LBB22_4: ## %else23102; SSE-NEXT: testb $4, %al3103; SSE-NEXT: jne LBB22_53104; SSE-NEXT: LBB22_6: ## %else53105; SSE-NEXT: testb $8, %al3106; SSE-NEXT: jne LBB22_73107; SSE-NEXT: LBB22_8: ## %else83108; SSE-NEXT: testb $16, %al3109; SSE-NEXT: jne LBB22_93110; SSE-NEXT: LBB22_10: ## %else113111; SSE-NEXT: testb $32, %al3112; SSE-NEXT: jne LBB22_113113; SSE-NEXT: LBB22_12: ## %else143114; SSE-NEXT: testb $64, %al3115; SSE-NEXT: jne LBB22_133116; SSE-NEXT: LBB22_14: ## %else173117; SSE-NEXT: testb %al, %al3118; SSE-NEXT: js LBB22_153119; SSE-NEXT: LBB22_16: ## %else203120; SSE-NEXT: testl $256, %eax ## imm = 0x1003121; SSE-NEXT: jne LBB22_173122; SSE-NEXT: LBB22_18: ## %else233123; SSE-NEXT: testl $512, %eax ## imm = 0x2003124; SSE-NEXT: jne LBB22_193125; SSE-NEXT: LBB22_20: ## %else263126; SSE-NEXT: testl $1024, %eax ## imm = 0x4003127; SSE-NEXT: jne LBB22_213128; SSE-NEXT: LBB22_22: ## %else293129; SSE-NEXT: testl $2048, %eax ## imm = 0x8003130; SSE-NEXT: jne LBB22_233131; SSE-NEXT: LBB22_24: ## %else323132; SSE-NEXT: testl $4096, %eax ## imm = 0x10003133; SSE-NEXT: jne LBB22_253134; SSE-NEXT: LBB22_26: ## %else353135; SSE-NEXT: testl $8192, %eax ## imm = 0x20003136; SSE-NEXT: jne LBB22_273137; SSE-NEXT: LBB22_28: ## %else383138; SSE-NEXT: testl $16384, %eax ## imm = 0x40003139; SSE-NEXT: jne LBB22_293140; SSE-NEXT: LBB22_30: ## %else413141; SSE-NEXT: testl $32768, %eax ## imm = 0x80003142; SSE-NEXT: je LBB22_323143; SSE-NEXT: LBB22_31: ## %cond.load433144; SSE-NEXT: pinsrw $7, 30(%rdi), %xmm33145; SSE-NEXT: LBB22_32: ## %else443146; SSE-NEXT: movdqa %xmm2, %xmm03147; SSE-NEXT: movdqa %xmm3, %xmm13148; SSE-NEXT: retq3149; SSE-NEXT: LBB22_1: ## %cond.load3150; SSE-NEXT: pinsrw $0, (%rdi), %xmm23151; SSE-NEXT: testb $2, %al3152; SSE-NEXT: je LBB22_43153; SSE-NEXT: LBB22_3: ## %cond.load13154; SSE-NEXT: pinsrw $1, 2(%rdi), %xmm23155; SSE-NEXT: testb $4, %al3156; SSE-NEXT: je LBB22_63157; SSE-NEXT: LBB22_5: ## %cond.load43158; SSE-NEXT: pinsrw $2, 4(%rdi), %xmm23159; SSE-NEXT: testb $8, %al3160; SSE-NEXT: je LBB22_83161; SSE-NEXT: LBB22_7: ## %cond.load73162; SSE-NEXT: pinsrw $3, 6(%rdi), %xmm23163; SSE-NEXT: testb $16, %al3164; SSE-NEXT: je LBB22_103165; SSE-NEXT: LBB22_9: ## %cond.load103166; SSE-NEXT: pinsrw $4, 8(%rdi), %xmm23167; SSE-NEXT: testb $32, %al3168; SSE-NEXT: je LBB22_123169; SSE-NEXT: LBB22_11: ## %cond.load133170; SSE-NEXT: pinsrw $5, 10(%rdi), %xmm23171; SSE-NEXT: testb $64, %al3172; SSE-NEXT: je LBB22_143173; SSE-NEXT: LBB22_13: ## %cond.load163174; SSE-NEXT: pinsrw $6, 12(%rdi), %xmm23175; SSE-NEXT: testb %al, %al3176; SSE-NEXT: jns LBB22_163177; SSE-NEXT: LBB22_15: ## %cond.load193178; SSE-NEXT: pinsrw $7, 14(%rdi), %xmm23179; SSE-NEXT: testl $256, %eax ## imm = 0x1003180; SSE-NEXT: je LBB22_183181; SSE-NEXT: LBB22_17: ## %cond.load223182; SSE-NEXT: pinsrw $0, 16(%rdi), %xmm33183; SSE-NEXT: testl $512, %eax ## imm = 0x2003184; SSE-NEXT: je LBB22_203185; SSE-NEXT: LBB22_19: ## %cond.load253186; SSE-NEXT: pinsrw $1, 18(%rdi), %xmm33187; SSE-NEXT: testl $1024, %eax ## imm = 0x4003188; SSE-NEXT: je LBB22_223189; SSE-NEXT: LBB22_21: ## %cond.load283190; SSE-NEXT: pinsrw $2, 20(%rdi), %xmm33191; SSE-NEXT: testl $2048, %eax ## imm = 0x8003192; SSE-NEXT: je LBB22_243193; SSE-NEXT: LBB22_23: ## %cond.load313194; SSE-NEXT: pinsrw $3, 22(%rdi), %xmm33195; SSE-NEXT: testl $4096, %eax ## imm = 0x10003196; SSE-NEXT: je LBB22_263197; SSE-NEXT: LBB22_25: ## %cond.load343198; SSE-NEXT: pinsrw $4, 24(%rdi), %xmm33199; SSE-NEXT: testl $8192, %eax ## imm = 0x20003200; SSE-NEXT: je LBB22_283201; SSE-NEXT: LBB22_27: ## %cond.load373202; SSE-NEXT: pinsrw $5, 26(%rdi), %xmm33203; SSE-NEXT: testl $16384, %eax ## imm = 0x40003204; SSE-NEXT: je LBB22_303205; SSE-NEXT: LBB22_29: ## %cond.load403206; SSE-NEXT: pinsrw $6, 28(%rdi), %xmm33207; SSE-NEXT: testl $32768, %eax ## imm = 0x80003208; SSE-NEXT: jne LBB22_313209; SSE-NEXT: jmp LBB22_323210;3211; AVX1-LABEL: load_v16i16_v16i16:3212; AVX1: ## %bb.0:3213; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm23214; AVX1-NEXT: vpacksswb %xmm2, %xmm0, %xmm03215; AVX1-NEXT: vpmovmskb %xmm0, %eax3216; AVX1-NEXT: testb $1, %al3217; AVX1-NEXT: jne LBB22_13218; AVX1-NEXT: ## %bb.2: ## %else3219; AVX1-NEXT: testb $2, %al3220; AVX1-NEXT: jne LBB22_33221; AVX1-NEXT: LBB22_4: ## %else23222; AVX1-NEXT: testb $4, %al3223; AVX1-NEXT: jne LBB22_53224; AVX1-NEXT: LBB22_6: ## %else53225; AVX1-NEXT: testb $8, %al3226; AVX1-NEXT: jne LBB22_73227; AVX1-NEXT: LBB22_8: ## %else83228; AVX1-NEXT: testb $16, %al3229; AVX1-NEXT: jne LBB22_93230; AVX1-NEXT: LBB22_10: ## %else113231; AVX1-NEXT: testb $32, %al3232; AVX1-NEXT: jne LBB22_113233; AVX1-NEXT: LBB22_12: ## %else143234; AVX1-NEXT: testb $64, %al3235; AVX1-NEXT: jne LBB22_133236; AVX1-NEXT: LBB22_14: ## %else173237; AVX1-NEXT: testb %al, %al3238; AVX1-NEXT: js LBB22_153239; AVX1-NEXT: LBB22_16: ## %else203240; AVX1-NEXT: testl $256, %eax ## imm = 0x1003241; AVX1-NEXT: jne LBB22_173242; AVX1-NEXT: LBB22_18: ## %else233243; AVX1-NEXT: testl $512, %eax ## imm = 0x2003244; AVX1-NEXT: jne LBB22_193245; AVX1-NEXT: LBB22_20: ## %else263246; AVX1-NEXT: testl $1024, %eax ## imm = 0x4003247; AVX1-NEXT: jne LBB22_213248; AVX1-NEXT: LBB22_22: ## %else293249; AVX1-NEXT: testl $2048, %eax ## imm = 0x8003250; AVX1-NEXT: jne LBB22_233251; AVX1-NEXT: LBB22_24: ## %else323252; AVX1-NEXT: testl $4096, %eax ## imm = 0x10003253; AVX1-NEXT: jne LBB22_253254; AVX1-NEXT: LBB22_26: ## %else353255; AVX1-NEXT: testl $8192, %eax ## imm = 0x20003256; AVX1-NEXT: jne LBB22_273257; AVX1-NEXT: LBB22_28: ## %else383258; AVX1-NEXT: testl $16384, %eax ## imm = 0x40003259; AVX1-NEXT: jne LBB22_293260; AVX1-NEXT: LBB22_30: ## %else413261; AVX1-NEXT: testl $32768, %eax ## imm = 0x80003262; AVX1-NEXT: jne LBB22_313263; AVX1-NEXT: LBB22_32: ## %else443264; AVX1-NEXT: vmovaps %ymm1, %ymm03265; AVX1-NEXT: retq3266; AVX1-NEXT: LBB22_1: ## %cond.load3267; AVX1-NEXT: vpinsrw $0, (%rdi), %xmm1, %xmm03268; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3269; AVX1-NEXT: testb $2, %al3270; AVX1-NEXT: je LBB22_43271; AVX1-NEXT: LBB22_3: ## %cond.load13272; AVX1-NEXT: vpinsrw $1, 2(%rdi), %xmm1, %xmm03273; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3274; AVX1-NEXT: testb $4, %al3275; AVX1-NEXT: je LBB22_63276; AVX1-NEXT: LBB22_5: ## %cond.load43277; AVX1-NEXT: vpinsrw $2, 4(%rdi), %xmm1, %xmm03278; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3279; AVX1-NEXT: testb $8, %al3280; AVX1-NEXT: je LBB22_83281; AVX1-NEXT: LBB22_7: ## %cond.load73282; AVX1-NEXT: vpinsrw $3, 6(%rdi), %xmm1, %xmm03283; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3284; AVX1-NEXT: testb $16, %al3285; AVX1-NEXT: je LBB22_103286; AVX1-NEXT: LBB22_9: ## %cond.load103287; AVX1-NEXT: vpinsrw $4, 8(%rdi), %xmm1, %xmm03288; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3289; AVX1-NEXT: testb $32, %al3290; AVX1-NEXT: je LBB22_123291; AVX1-NEXT: LBB22_11: ## %cond.load133292; AVX1-NEXT: vpinsrw $5, 10(%rdi), %xmm1, %xmm03293; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3294; AVX1-NEXT: testb $64, %al3295; AVX1-NEXT: je LBB22_143296; AVX1-NEXT: LBB22_13: ## %cond.load163297; AVX1-NEXT: vpinsrw $6, 12(%rdi), %xmm1, %xmm03298; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3299; AVX1-NEXT: testb %al, %al3300; AVX1-NEXT: jns LBB22_163301; AVX1-NEXT: LBB22_15: ## %cond.load193302; AVX1-NEXT: vpinsrw $7, 14(%rdi), %xmm1, %xmm03303; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3304; AVX1-NEXT: testl $256, %eax ## imm = 0x1003305; AVX1-NEXT: je LBB22_183306; AVX1-NEXT: LBB22_17: ## %cond.load223307; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm03308; AVX1-NEXT: vpinsrw $0, 16(%rdi), %xmm0, %xmm03309; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm13310; AVX1-NEXT: testl $512, %eax ## imm = 0x2003311; AVX1-NEXT: je LBB22_203312; AVX1-NEXT: LBB22_19: ## %cond.load253313; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm03314; AVX1-NEXT: vpinsrw $1, 18(%rdi), %xmm0, %xmm03315; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm13316; AVX1-NEXT: testl $1024, %eax ## imm = 0x4003317; AVX1-NEXT: je LBB22_223318; AVX1-NEXT: LBB22_21: ## %cond.load283319; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm03320; AVX1-NEXT: vpinsrw $2, 20(%rdi), %xmm0, %xmm03321; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm13322; AVX1-NEXT: testl $2048, %eax ## imm = 0x8003323; AVX1-NEXT: je LBB22_243324; AVX1-NEXT: LBB22_23: ## %cond.load313325; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm03326; AVX1-NEXT: vpinsrw $3, 22(%rdi), %xmm0, %xmm03327; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm13328; AVX1-NEXT: testl $4096, %eax ## imm = 0x10003329; AVX1-NEXT: je LBB22_263330; AVX1-NEXT: LBB22_25: ## %cond.load343331; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm03332; AVX1-NEXT: vpinsrw $4, 24(%rdi), %xmm0, %xmm03333; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm13334; AVX1-NEXT: testl $8192, %eax ## imm = 0x20003335; AVX1-NEXT: je LBB22_283336; AVX1-NEXT: LBB22_27: ## %cond.load373337; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm03338; AVX1-NEXT: vpinsrw $5, 26(%rdi), %xmm0, %xmm03339; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm13340; AVX1-NEXT: testl $16384, %eax ## imm = 0x40003341; AVX1-NEXT: je LBB22_303342; AVX1-NEXT: LBB22_29: ## %cond.load403343; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm03344; AVX1-NEXT: vpinsrw $6, 28(%rdi), %xmm0, %xmm03345; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm13346; AVX1-NEXT: testl $32768, %eax ## imm = 0x80003347; AVX1-NEXT: je LBB22_323348; AVX1-NEXT: LBB22_31: ## %cond.load433349; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm03350; AVX1-NEXT: vpinsrw $7, 30(%rdi), %xmm0, %xmm03351; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm13352; AVX1-NEXT: vmovaps %ymm1, %ymm03353; AVX1-NEXT: retq3354;3355; AVX2-LABEL: load_v16i16_v16i16:3356; AVX2: ## %bb.0:3357; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm23358; AVX2-NEXT: vpacksswb %xmm2, %xmm0, %xmm03359; AVX2-NEXT: vpmovmskb %xmm0, %eax3360; AVX2-NEXT: testb $1, %al3361; AVX2-NEXT: jne LBB22_13362; AVX2-NEXT: ## %bb.2: ## %else3363; AVX2-NEXT: testb $2, %al3364; AVX2-NEXT: jne LBB22_33365; AVX2-NEXT: LBB22_4: ## %else23366; AVX2-NEXT: testb $4, %al3367; AVX2-NEXT: jne LBB22_53368; AVX2-NEXT: LBB22_6: ## %else53369; AVX2-NEXT: testb $8, %al3370; AVX2-NEXT: jne LBB22_73371; AVX2-NEXT: LBB22_8: ## %else83372; AVX2-NEXT: testb $16, %al3373; AVX2-NEXT: jne LBB22_93374; AVX2-NEXT: LBB22_10: ## %else113375; AVX2-NEXT: testb $32, %al3376; AVX2-NEXT: jne LBB22_113377; AVX2-NEXT: LBB22_12: ## %else143378; AVX2-NEXT: testb $64, %al3379; AVX2-NEXT: jne LBB22_133380; AVX2-NEXT: LBB22_14: ## %else173381; AVX2-NEXT: testb %al, %al3382; AVX2-NEXT: js LBB22_153383; AVX2-NEXT: LBB22_16: ## %else203384; AVX2-NEXT: testl $256, %eax ## imm = 0x1003385; AVX2-NEXT: jne LBB22_173386; AVX2-NEXT: LBB22_18: ## %else233387; AVX2-NEXT: testl $512, %eax ## imm = 0x2003388; AVX2-NEXT: jne LBB22_193389; AVX2-NEXT: LBB22_20: ## %else263390; AVX2-NEXT: testl $1024, %eax ## imm = 0x4003391; AVX2-NEXT: jne LBB22_213392; AVX2-NEXT: LBB22_22: ## %else293393; AVX2-NEXT: testl $2048, %eax ## imm = 0x8003394; AVX2-NEXT: jne LBB22_233395; AVX2-NEXT: LBB22_24: ## %else323396; AVX2-NEXT: testl $4096, %eax ## imm = 0x10003397; AVX2-NEXT: jne LBB22_253398; AVX2-NEXT: LBB22_26: ## %else353399; AVX2-NEXT: testl $8192, %eax ## imm = 0x20003400; AVX2-NEXT: jne LBB22_273401; AVX2-NEXT: LBB22_28: ## %else383402; AVX2-NEXT: testl $16384, %eax ## imm = 0x40003403; AVX2-NEXT: jne LBB22_293404; AVX2-NEXT: LBB22_30: ## %else413405; AVX2-NEXT: testl $32768, %eax ## imm = 0x80003406; AVX2-NEXT: jne LBB22_313407; AVX2-NEXT: LBB22_32: ## %else443408; AVX2-NEXT: vmovdqa %ymm1, %ymm03409; AVX2-NEXT: retq3410; AVX2-NEXT: LBB22_1: ## %cond.load3411; AVX2-NEXT: vpinsrw $0, (%rdi), %xmm1, %xmm03412; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3413; AVX2-NEXT: testb $2, %al3414; AVX2-NEXT: je LBB22_43415; AVX2-NEXT: LBB22_3: ## %cond.load13416; AVX2-NEXT: vpinsrw $1, 2(%rdi), %xmm1, %xmm03417; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3418; AVX2-NEXT: testb $4, %al3419; AVX2-NEXT: je LBB22_63420; AVX2-NEXT: LBB22_5: ## %cond.load43421; AVX2-NEXT: vpinsrw $2, 4(%rdi), %xmm1, %xmm03422; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3423; AVX2-NEXT: testb $8, %al3424; AVX2-NEXT: je LBB22_83425; AVX2-NEXT: LBB22_7: ## %cond.load73426; AVX2-NEXT: vpinsrw $3, 6(%rdi), %xmm1, %xmm03427; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3428; AVX2-NEXT: testb $16, %al3429; AVX2-NEXT: je LBB22_103430; AVX2-NEXT: LBB22_9: ## %cond.load103431; AVX2-NEXT: vpinsrw $4, 8(%rdi), %xmm1, %xmm03432; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3433; AVX2-NEXT: testb $32, %al3434; AVX2-NEXT: je LBB22_123435; AVX2-NEXT: LBB22_11: ## %cond.load133436; AVX2-NEXT: vpinsrw $5, 10(%rdi), %xmm1, %xmm03437; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3438; AVX2-NEXT: testb $64, %al3439; AVX2-NEXT: je LBB22_143440; AVX2-NEXT: LBB22_13: ## %cond.load163441; AVX2-NEXT: vpinsrw $6, 12(%rdi), %xmm1, %xmm03442; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3443; AVX2-NEXT: testb %al, %al3444; AVX2-NEXT: jns LBB22_163445; AVX2-NEXT: LBB22_15: ## %cond.load193446; AVX2-NEXT: vpinsrw $7, 14(%rdi), %xmm1, %xmm03447; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3448; AVX2-NEXT: testl $256, %eax ## imm = 0x1003449; AVX2-NEXT: je LBB22_183450; AVX2-NEXT: LBB22_17: ## %cond.load223451; AVX2-NEXT: vpbroadcastw 16(%rdi), %ymm03452; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7],ymm0[8],ymm1[9,10,11,12,13,14,15]3453; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3454; AVX2-NEXT: testl $512, %eax ## imm = 0x2003455; AVX2-NEXT: je LBB22_203456; AVX2-NEXT: LBB22_19: ## %cond.load253457; AVX2-NEXT: vpbroadcastw 18(%rdi), %ymm03458; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2,3,4,5,6,7,8],ymm0[9],ymm1[10,11,12,13,14,15]3459; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3460; AVX2-NEXT: testl $1024, %eax ## imm = 0x4003461; AVX2-NEXT: je LBB22_223462; AVX2-NEXT: LBB22_21: ## %cond.load283463; AVX2-NEXT: vpbroadcastw 20(%rdi), %ymm03464; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0,1],ymm0[2],ymm1[3,4,5,6,7,8,9],ymm0[10],ymm1[11,12,13,14,15]3465; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3466; AVX2-NEXT: testl $2048, %eax ## imm = 0x8003467; AVX2-NEXT: je LBB22_243468; AVX2-NEXT: LBB22_23: ## %cond.load313469; AVX2-NEXT: vpbroadcastw 22(%rdi), %ymm03470; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3],ymm1[4,5,6,7,8,9,10],ymm0[11],ymm1[12,13,14,15]3471; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3472; AVX2-NEXT: testl $4096, %eax ## imm = 0x10003473; AVX2-NEXT: je LBB22_263474; AVX2-NEXT: LBB22_25: ## %cond.load343475; AVX2-NEXT: vpbroadcastw 24(%rdi), %ymm03476; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4],ymm1[5,6,7,8,9,10,11],ymm0[12],ymm1[13,14,15]3477; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3478; AVX2-NEXT: testl $8192, %eax ## imm = 0x20003479; AVX2-NEXT: je LBB22_283480; AVX2-NEXT: LBB22_27: ## %cond.load373481; AVX2-NEXT: vpbroadcastw 26(%rdi), %ymm03482; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4],ymm0[5],ymm1[6,7,8,9,10,11,12],ymm0[13],ymm1[14,15]3483; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3484; AVX2-NEXT: testl $16384, %eax ## imm = 0x40003485; AVX2-NEXT: je LBB22_303486; AVX2-NEXT: LBB22_29: ## %cond.load403487; AVX2-NEXT: vpbroadcastw 28(%rdi), %ymm03488; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5],ymm0[6],ymm1[7,8,9,10,11,12,13],ymm0[14],ymm1[15]3489; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3490; AVX2-NEXT: testl $32768, %eax ## imm = 0x80003491; AVX2-NEXT: je LBB22_323492; AVX2-NEXT: LBB22_31: ## %cond.load433493; AVX2-NEXT: vpbroadcastw 30(%rdi), %ymm03494; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]3495; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3496; AVX2-NEXT: vmovdqa %ymm1, %ymm03497; AVX2-NEXT: retq3498;3499; AVX512F-LABEL: load_v16i16_v16i16:3500; AVX512F: ## %bb.0:3501; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm23502; AVX512F-NEXT: vpcmpgtw %ymm0, %ymm2, %ymm03503; AVX512F-NEXT: vpmovsxwd %ymm0, %zmm03504; AVX512F-NEXT: vptestmd %zmm0, %zmm0, %k03505; AVX512F-NEXT: kmovw %k0, %eax3506; AVX512F-NEXT: testb $1, %al3507; AVX512F-NEXT: jne LBB22_13508; AVX512F-NEXT: ## %bb.2: ## %else3509; AVX512F-NEXT: testb $2, %al3510; AVX512F-NEXT: jne LBB22_33511; AVX512F-NEXT: LBB22_4: ## %else23512; AVX512F-NEXT: testb $4, %al3513; AVX512F-NEXT: jne LBB22_53514; AVX512F-NEXT: LBB22_6: ## %else53515; AVX512F-NEXT: testb $8, %al3516; AVX512F-NEXT: jne LBB22_73517; AVX512F-NEXT: LBB22_8: ## %else83518; AVX512F-NEXT: testb $16, %al3519; AVX512F-NEXT: jne LBB22_93520; AVX512F-NEXT: LBB22_10: ## %else113521; AVX512F-NEXT: testb $32, %al3522; AVX512F-NEXT: jne LBB22_113523; AVX512F-NEXT: LBB22_12: ## %else143524; AVX512F-NEXT: testb $64, %al3525; AVX512F-NEXT: jne LBB22_133526; AVX512F-NEXT: LBB22_14: ## %else173527; AVX512F-NEXT: testb %al, %al3528; AVX512F-NEXT: js LBB22_153529; AVX512F-NEXT: LBB22_16: ## %else203530; AVX512F-NEXT: testl $256, %eax ## imm = 0x1003531; AVX512F-NEXT: jne LBB22_173532; AVX512F-NEXT: LBB22_18: ## %else233533; AVX512F-NEXT: testl $512, %eax ## imm = 0x2003534; AVX512F-NEXT: jne LBB22_193535; AVX512F-NEXT: LBB22_20: ## %else263536; AVX512F-NEXT: testl $1024, %eax ## imm = 0x4003537; AVX512F-NEXT: jne LBB22_213538; AVX512F-NEXT: LBB22_22: ## %else293539; AVX512F-NEXT: testl $2048, %eax ## imm = 0x8003540; AVX512F-NEXT: jne LBB22_233541; AVX512F-NEXT: LBB22_24: ## %else323542; AVX512F-NEXT: testl $4096, %eax ## imm = 0x10003543; AVX512F-NEXT: jne LBB22_253544; AVX512F-NEXT: LBB22_26: ## %else353545; AVX512F-NEXT: testl $8192, %eax ## imm = 0x20003546; AVX512F-NEXT: jne LBB22_273547; AVX512F-NEXT: LBB22_28: ## %else383548; AVX512F-NEXT: testl $16384, %eax ## imm = 0x40003549; AVX512F-NEXT: jne LBB22_293550; AVX512F-NEXT: LBB22_30: ## %else413551; AVX512F-NEXT: testl $32768, %eax ## imm = 0x80003552; AVX512F-NEXT: jne LBB22_313553; AVX512F-NEXT: LBB22_32: ## %else443554; AVX512F-NEXT: vmovdqa %ymm1, %ymm03555; AVX512F-NEXT: retq3556; AVX512F-NEXT: LBB22_1: ## %cond.load3557; AVX512F-NEXT: vpinsrw $0, (%rdi), %xmm1, %xmm03558; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3559; AVX512F-NEXT: testb $2, %al3560; AVX512F-NEXT: je LBB22_43561; AVX512F-NEXT: LBB22_3: ## %cond.load13562; AVX512F-NEXT: vpinsrw $1, 2(%rdi), %xmm1, %xmm03563; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3564; AVX512F-NEXT: testb $4, %al3565; AVX512F-NEXT: je LBB22_63566; AVX512F-NEXT: LBB22_5: ## %cond.load43567; AVX512F-NEXT: vpinsrw $2, 4(%rdi), %xmm1, %xmm03568; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3569; AVX512F-NEXT: testb $8, %al3570; AVX512F-NEXT: je LBB22_83571; AVX512F-NEXT: LBB22_7: ## %cond.load73572; AVX512F-NEXT: vpinsrw $3, 6(%rdi), %xmm1, %xmm03573; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3574; AVX512F-NEXT: testb $16, %al3575; AVX512F-NEXT: je LBB22_103576; AVX512F-NEXT: LBB22_9: ## %cond.load103577; AVX512F-NEXT: vpinsrw $4, 8(%rdi), %xmm1, %xmm03578; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3579; AVX512F-NEXT: testb $32, %al3580; AVX512F-NEXT: je LBB22_123581; AVX512F-NEXT: LBB22_11: ## %cond.load133582; AVX512F-NEXT: vpinsrw $5, 10(%rdi), %xmm1, %xmm03583; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3584; AVX512F-NEXT: testb $64, %al3585; AVX512F-NEXT: je LBB22_143586; AVX512F-NEXT: LBB22_13: ## %cond.load163587; AVX512F-NEXT: vpinsrw $6, 12(%rdi), %xmm1, %xmm03588; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3589; AVX512F-NEXT: testb %al, %al3590; AVX512F-NEXT: jns LBB22_163591; AVX512F-NEXT: LBB22_15: ## %cond.load193592; AVX512F-NEXT: vpinsrw $7, 14(%rdi), %xmm1, %xmm03593; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3594; AVX512F-NEXT: testl $256, %eax ## imm = 0x1003595; AVX512F-NEXT: je LBB22_183596; AVX512F-NEXT: LBB22_17: ## %cond.load223597; AVX512F-NEXT: vpbroadcastw 16(%rdi), %ymm03598; AVX512F-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7],ymm0[8],ymm1[9,10,11,12,13,14,15]3599; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3600; AVX512F-NEXT: testl $512, %eax ## imm = 0x2003601; AVX512F-NEXT: je LBB22_203602; AVX512F-NEXT: LBB22_19: ## %cond.load253603; AVX512F-NEXT: vpbroadcastw 18(%rdi), %ymm03604; AVX512F-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2,3,4,5,6,7,8],ymm0[9],ymm1[10,11,12,13,14,15]3605; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3606; AVX512F-NEXT: testl $1024, %eax ## imm = 0x4003607; AVX512F-NEXT: je LBB22_223608; AVX512F-NEXT: LBB22_21: ## %cond.load283609; AVX512F-NEXT: vpbroadcastw 20(%rdi), %ymm03610; AVX512F-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0,1],ymm0[2],ymm1[3,4,5,6,7,8,9],ymm0[10],ymm1[11,12,13,14,15]3611; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3612; AVX512F-NEXT: testl $2048, %eax ## imm = 0x8003613; AVX512F-NEXT: je LBB22_243614; AVX512F-NEXT: LBB22_23: ## %cond.load313615; AVX512F-NEXT: vpbroadcastw 22(%rdi), %ymm03616; AVX512F-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3],ymm1[4,5,6,7,8,9,10],ymm0[11],ymm1[12,13,14,15]3617; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3618; AVX512F-NEXT: testl $4096, %eax ## imm = 0x10003619; AVX512F-NEXT: je LBB22_263620; AVX512F-NEXT: LBB22_25: ## %cond.load343621; AVX512F-NEXT: vpbroadcastw 24(%rdi), %ymm03622; AVX512F-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4],ymm1[5,6,7,8,9,10,11],ymm0[12],ymm1[13,14,15]3623; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3624; AVX512F-NEXT: testl $8192, %eax ## imm = 0x20003625; AVX512F-NEXT: je LBB22_283626; AVX512F-NEXT: LBB22_27: ## %cond.load373627; AVX512F-NEXT: vpbroadcastw 26(%rdi), %ymm03628; AVX512F-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4],ymm0[5],ymm1[6,7,8,9,10,11,12],ymm0[13],ymm1[14,15]3629; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3630; AVX512F-NEXT: testl $16384, %eax ## imm = 0x40003631; AVX512F-NEXT: je LBB22_303632; AVX512F-NEXT: LBB22_29: ## %cond.load403633; AVX512F-NEXT: vpbroadcastw 28(%rdi), %ymm03634; AVX512F-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5],ymm0[6],ymm1[7,8,9,10,11,12,13],ymm0[14],ymm1[15]3635; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3636; AVX512F-NEXT: testl $32768, %eax ## imm = 0x80003637; AVX512F-NEXT: je LBB22_323638; AVX512F-NEXT: LBB22_31: ## %cond.load433639; AVX512F-NEXT: vpbroadcastw 30(%rdi), %ymm03640; AVX512F-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]3641; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3642; AVX512F-NEXT: vmovdqa %ymm1, %ymm03643; AVX512F-NEXT: retq3644;3645; AVX512VLDQ-LABEL: load_v16i16_v16i16:3646; AVX512VLDQ: ## %bb.0:3647; AVX512VLDQ-NEXT: vpxor %xmm2, %xmm2, %xmm23648; AVX512VLDQ-NEXT: vpcmpgtw %ymm0, %ymm2, %ymm03649; AVX512VLDQ-NEXT: vpmovsxwd %ymm0, %zmm03650; AVX512VLDQ-NEXT: vpmovd2m %zmm0, %k03651; AVX512VLDQ-NEXT: kmovw %k0, %eax3652; AVX512VLDQ-NEXT: testb $1, %al3653; AVX512VLDQ-NEXT: jne LBB22_13654; AVX512VLDQ-NEXT: ## %bb.2: ## %else3655; AVX512VLDQ-NEXT: testb $2, %al3656; AVX512VLDQ-NEXT: jne LBB22_33657; AVX512VLDQ-NEXT: LBB22_4: ## %else23658; AVX512VLDQ-NEXT: testb $4, %al3659; AVX512VLDQ-NEXT: jne LBB22_53660; AVX512VLDQ-NEXT: LBB22_6: ## %else53661; AVX512VLDQ-NEXT: testb $8, %al3662; AVX512VLDQ-NEXT: jne LBB22_73663; AVX512VLDQ-NEXT: LBB22_8: ## %else83664; AVX512VLDQ-NEXT: testb $16, %al3665; AVX512VLDQ-NEXT: jne LBB22_93666; AVX512VLDQ-NEXT: LBB22_10: ## %else113667; AVX512VLDQ-NEXT: testb $32, %al3668; AVX512VLDQ-NEXT: jne LBB22_113669; AVX512VLDQ-NEXT: LBB22_12: ## %else143670; AVX512VLDQ-NEXT: testb $64, %al3671; AVX512VLDQ-NEXT: jne LBB22_133672; AVX512VLDQ-NEXT: LBB22_14: ## %else173673; AVX512VLDQ-NEXT: testb %al, %al3674; AVX512VLDQ-NEXT: js LBB22_153675; AVX512VLDQ-NEXT: LBB22_16: ## %else203676; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x1003677; AVX512VLDQ-NEXT: jne LBB22_173678; AVX512VLDQ-NEXT: LBB22_18: ## %else233679; AVX512VLDQ-NEXT: testl $512, %eax ## imm = 0x2003680; AVX512VLDQ-NEXT: jne LBB22_193681; AVX512VLDQ-NEXT: LBB22_20: ## %else263682; AVX512VLDQ-NEXT: testl $1024, %eax ## imm = 0x4003683; AVX512VLDQ-NEXT: jne LBB22_213684; AVX512VLDQ-NEXT: LBB22_22: ## %else293685; AVX512VLDQ-NEXT: testl $2048, %eax ## imm = 0x8003686; AVX512VLDQ-NEXT: jne LBB22_233687; AVX512VLDQ-NEXT: LBB22_24: ## %else323688; AVX512VLDQ-NEXT: testl $4096, %eax ## imm = 0x10003689; AVX512VLDQ-NEXT: jne LBB22_253690; AVX512VLDQ-NEXT: LBB22_26: ## %else353691; AVX512VLDQ-NEXT: testl $8192, %eax ## imm = 0x20003692; AVX512VLDQ-NEXT: jne LBB22_273693; AVX512VLDQ-NEXT: LBB22_28: ## %else383694; AVX512VLDQ-NEXT: testl $16384, %eax ## imm = 0x40003695; AVX512VLDQ-NEXT: jne LBB22_293696; AVX512VLDQ-NEXT: LBB22_30: ## %else413697; AVX512VLDQ-NEXT: testl $32768, %eax ## imm = 0x80003698; AVX512VLDQ-NEXT: jne LBB22_313699; AVX512VLDQ-NEXT: LBB22_32: ## %else443700; AVX512VLDQ-NEXT: vmovdqa %ymm1, %ymm03701; AVX512VLDQ-NEXT: retq3702; AVX512VLDQ-NEXT: LBB22_1: ## %cond.load3703; AVX512VLDQ-NEXT: vpinsrw $0, (%rdi), %xmm1, %xmm03704; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3705; AVX512VLDQ-NEXT: testb $2, %al3706; AVX512VLDQ-NEXT: je LBB22_43707; AVX512VLDQ-NEXT: LBB22_3: ## %cond.load13708; AVX512VLDQ-NEXT: vpinsrw $1, 2(%rdi), %xmm1, %xmm03709; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3710; AVX512VLDQ-NEXT: testb $4, %al3711; AVX512VLDQ-NEXT: je LBB22_63712; AVX512VLDQ-NEXT: LBB22_5: ## %cond.load43713; AVX512VLDQ-NEXT: vpinsrw $2, 4(%rdi), %xmm1, %xmm03714; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3715; AVX512VLDQ-NEXT: testb $8, %al3716; AVX512VLDQ-NEXT: je LBB22_83717; AVX512VLDQ-NEXT: LBB22_7: ## %cond.load73718; AVX512VLDQ-NEXT: vpinsrw $3, 6(%rdi), %xmm1, %xmm03719; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3720; AVX512VLDQ-NEXT: testb $16, %al3721; AVX512VLDQ-NEXT: je LBB22_103722; AVX512VLDQ-NEXT: LBB22_9: ## %cond.load103723; AVX512VLDQ-NEXT: vpinsrw $4, 8(%rdi), %xmm1, %xmm03724; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3725; AVX512VLDQ-NEXT: testb $32, %al3726; AVX512VLDQ-NEXT: je LBB22_123727; AVX512VLDQ-NEXT: LBB22_11: ## %cond.load133728; AVX512VLDQ-NEXT: vpinsrw $5, 10(%rdi), %xmm1, %xmm03729; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3730; AVX512VLDQ-NEXT: testb $64, %al3731; AVX512VLDQ-NEXT: je LBB22_143732; AVX512VLDQ-NEXT: LBB22_13: ## %cond.load163733; AVX512VLDQ-NEXT: vpinsrw $6, 12(%rdi), %xmm1, %xmm03734; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3735; AVX512VLDQ-NEXT: testb %al, %al3736; AVX512VLDQ-NEXT: jns LBB22_163737; AVX512VLDQ-NEXT: LBB22_15: ## %cond.load193738; AVX512VLDQ-NEXT: vpinsrw $7, 14(%rdi), %xmm1, %xmm03739; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]3740; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x1003741; AVX512VLDQ-NEXT: je LBB22_183742; AVX512VLDQ-NEXT: LBB22_17: ## %cond.load223743; AVX512VLDQ-NEXT: vpbroadcastw 16(%rdi), %ymm03744; AVX512VLDQ-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6,7],ymm0[8],ymm1[9,10,11,12,13,14,15]3745; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3746; AVX512VLDQ-NEXT: testl $512, %eax ## imm = 0x2003747; AVX512VLDQ-NEXT: je LBB22_203748; AVX512VLDQ-NEXT: LBB22_19: ## %cond.load253749; AVX512VLDQ-NEXT: vpbroadcastw 18(%rdi), %ymm03750; AVX512VLDQ-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2,3,4,5,6,7,8],ymm0[9],ymm1[10,11,12,13,14,15]3751; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3752; AVX512VLDQ-NEXT: testl $1024, %eax ## imm = 0x4003753; AVX512VLDQ-NEXT: je LBB22_223754; AVX512VLDQ-NEXT: LBB22_21: ## %cond.load283755; AVX512VLDQ-NEXT: vpbroadcastw 20(%rdi), %ymm03756; AVX512VLDQ-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0,1],ymm0[2],ymm1[3,4,5,6,7,8,9],ymm0[10],ymm1[11,12,13,14,15]3757; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3758; AVX512VLDQ-NEXT: testl $2048, %eax ## imm = 0x8003759; AVX512VLDQ-NEXT: je LBB22_243760; AVX512VLDQ-NEXT: LBB22_23: ## %cond.load313761; AVX512VLDQ-NEXT: vpbroadcastw 22(%rdi), %ymm03762; AVX512VLDQ-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3],ymm1[4,5,6,7,8,9,10],ymm0[11],ymm1[12,13,14,15]3763; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3764; AVX512VLDQ-NEXT: testl $4096, %eax ## imm = 0x10003765; AVX512VLDQ-NEXT: je LBB22_263766; AVX512VLDQ-NEXT: LBB22_25: ## %cond.load343767; AVX512VLDQ-NEXT: vpbroadcastw 24(%rdi), %ymm03768; AVX512VLDQ-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4],ymm1[5,6,7,8,9,10,11],ymm0[12],ymm1[13,14,15]3769; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3770; AVX512VLDQ-NEXT: testl $8192, %eax ## imm = 0x20003771; AVX512VLDQ-NEXT: je LBB22_283772; AVX512VLDQ-NEXT: LBB22_27: ## %cond.load373773; AVX512VLDQ-NEXT: vpbroadcastw 26(%rdi), %ymm03774; AVX512VLDQ-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4],ymm0[5],ymm1[6,7,8,9,10,11,12],ymm0[13],ymm1[14,15]3775; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3776; AVX512VLDQ-NEXT: testl $16384, %eax ## imm = 0x40003777; AVX512VLDQ-NEXT: je LBB22_303778; AVX512VLDQ-NEXT: LBB22_29: ## %cond.load403779; AVX512VLDQ-NEXT: vpbroadcastw 28(%rdi), %ymm03780; AVX512VLDQ-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5],ymm0[6],ymm1[7,8,9,10,11,12,13],ymm0[14],ymm1[15]3781; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3782; AVX512VLDQ-NEXT: testl $32768, %eax ## imm = 0x80003783; AVX512VLDQ-NEXT: je LBB22_323784; AVX512VLDQ-NEXT: LBB22_31: ## %cond.load433785; AVX512VLDQ-NEXT: vpbroadcastw 30(%rdi), %ymm03786; AVX512VLDQ-NEXT: vpblendw {{.*#+}} ymm0 = ymm1[0,1,2,3,4,5,6],ymm0[7],ymm1[8,9,10,11,12,13,14],ymm0[15]3787; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7]3788; AVX512VLDQ-NEXT: vmovdqa %ymm1, %ymm03789; AVX512VLDQ-NEXT: retq3790;3791; AVX512VLBW-LABEL: load_v16i16_v16i16:3792; AVX512VLBW: ## %bb.0:3793; AVX512VLBW-NEXT: vpmovw2m %ymm0, %k13794; AVX512VLBW-NEXT: vpblendmw (%rdi), %ymm1, %ymm0 {%k1}3795; AVX512VLBW-NEXT: retq3796;3797; X86-AVX512-LABEL: load_v16i16_v16i16:3798; X86-AVX512: ## %bb.0:3799; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax3800; X86-AVX512-NEXT: vpmovw2m %ymm0, %k13801; X86-AVX512-NEXT: vpblendmw (%eax), %ymm1, %ymm0 {%k1}3802; X86-AVX512-NEXT: retl3803 %mask = icmp slt <16 x i16> %trigger, zeroinitializer3804 %res = call <16 x i16> @llvm.masked.load.v16i16.p0(ptr %addr, i32 4, <16 x i1> %mask, <16 x i16> %dst)3805 ret <16 x i16> %res3806}3807 3808;3809; vXi83810;3811 3812define <16 x i8> @load_v16i8_v16i8(<16 x i8> %trigger, ptr %addr, <16 x i8> %dst) {3813; SSE2-LABEL: load_v16i8_v16i8:3814; SSE2: ## %bb.0:3815; SSE2-NEXT: pmovmskb %xmm0, %eax3816; SSE2-NEXT: testb $1, %al3817; SSE2-NEXT: jne LBB23_13818; SSE2-NEXT: ## %bb.2: ## %else3819; SSE2-NEXT: testb $2, %al3820; SSE2-NEXT: jne LBB23_33821; SSE2-NEXT: LBB23_4: ## %else23822; SSE2-NEXT: testb $4, %al3823; SSE2-NEXT: jne LBB23_53824; SSE2-NEXT: LBB23_6: ## %else53825; SSE2-NEXT: testb $8, %al3826; SSE2-NEXT: jne LBB23_73827; SSE2-NEXT: LBB23_8: ## %else83828; SSE2-NEXT: testb $16, %al3829; SSE2-NEXT: jne LBB23_93830; SSE2-NEXT: LBB23_10: ## %else113831; SSE2-NEXT: testb $32, %al3832; SSE2-NEXT: jne LBB23_113833; SSE2-NEXT: LBB23_12: ## %else143834; SSE2-NEXT: testb $64, %al3835; SSE2-NEXT: jne LBB23_133836; SSE2-NEXT: LBB23_14: ## %else173837; SSE2-NEXT: testb %al, %al3838; SSE2-NEXT: js LBB23_153839; SSE2-NEXT: LBB23_16: ## %else203840; SSE2-NEXT: testl $256, %eax ## imm = 0x1003841; SSE2-NEXT: jne LBB23_173842; SSE2-NEXT: LBB23_18: ## %else233843; SSE2-NEXT: testl $512, %eax ## imm = 0x2003844; SSE2-NEXT: jne LBB23_193845; SSE2-NEXT: LBB23_20: ## %else263846; SSE2-NEXT: testl $1024, %eax ## imm = 0x4003847; SSE2-NEXT: jne LBB23_213848; SSE2-NEXT: LBB23_22: ## %else293849; SSE2-NEXT: testl $2048, %eax ## imm = 0x8003850; SSE2-NEXT: jne LBB23_233851; SSE2-NEXT: LBB23_24: ## %else323852; SSE2-NEXT: testl $4096, %eax ## imm = 0x10003853; SSE2-NEXT: jne LBB23_253854; SSE2-NEXT: LBB23_26: ## %else353855; SSE2-NEXT: testl $8192, %eax ## imm = 0x20003856; SSE2-NEXT: jne LBB23_273857; SSE2-NEXT: LBB23_28: ## %else383858; SSE2-NEXT: testl $16384, %eax ## imm = 0x40003859; SSE2-NEXT: jne LBB23_293860; SSE2-NEXT: LBB23_30: ## %else413861; SSE2-NEXT: testl $32768, %eax ## imm = 0x80003862; SSE2-NEXT: jne LBB23_313863; SSE2-NEXT: LBB23_32: ## %else443864; SSE2-NEXT: movdqa %xmm1, %xmm03865; SSE2-NEXT: retq3866; SSE2-NEXT: LBB23_1: ## %cond.load3867; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]3868; SSE2-NEXT: pand %xmm0, %xmm13869; SSE2-NEXT: movzbl (%rdi), %ecx3870; SSE2-NEXT: movd %ecx, %xmm23871; SSE2-NEXT: pandn %xmm2, %xmm03872; SSE2-NEXT: por %xmm0, %xmm13873; SSE2-NEXT: testb $2, %al3874; SSE2-NEXT: je LBB23_43875; SSE2-NEXT: LBB23_3: ## %cond.load13876; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255]3877; SSE2-NEXT: pand %xmm0, %xmm13878; SSE2-NEXT: movzbl 1(%rdi), %ecx3879; SSE2-NEXT: movd %ecx, %xmm23880; SSE2-NEXT: psllw $8, %xmm23881; SSE2-NEXT: pandn %xmm2, %xmm03882; SSE2-NEXT: por %xmm0, %xmm13883; SSE2-NEXT: testb $4, %al3884; SSE2-NEXT: je LBB23_63885; SSE2-NEXT: LBB23_5: ## %cond.load43886; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255]3887; SSE2-NEXT: pand %xmm0, %xmm13888; SSE2-NEXT: movzbl 2(%rdi), %ecx3889; SSE2-NEXT: movd %ecx, %xmm23890; SSE2-NEXT: pslld $16, %xmm23891; SSE2-NEXT: pandn %xmm2, %xmm03892; SSE2-NEXT: por %xmm0, %xmm13893; SSE2-NEXT: testb $8, %al3894; SSE2-NEXT: je LBB23_83895; SSE2-NEXT: LBB23_7: ## %cond.load73896; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255]3897; SSE2-NEXT: pand %xmm0, %xmm13898; SSE2-NEXT: movzbl 3(%rdi), %ecx3899; SSE2-NEXT: movd %ecx, %xmm23900; SSE2-NEXT: pslld $24, %xmm23901; SSE2-NEXT: pandn %xmm2, %xmm03902; SSE2-NEXT: por %xmm0, %xmm13903; SSE2-NEXT: testb $16, %al3904; SSE2-NEXT: je LBB23_103905; SSE2-NEXT: LBB23_9: ## %cond.load103906; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255]3907; SSE2-NEXT: pand %xmm0, %xmm13908; SSE2-NEXT: movzbl 4(%rdi), %ecx3909; SSE2-NEXT: movd %ecx, %xmm23910; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[0,0,1,1]3911; SSE2-NEXT: pandn %xmm2, %xmm03912; SSE2-NEXT: por %xmm0, %xmm13913; SSE2-NEXT: testb $32, %al3914; SSE2-NEXT: je LBB23_123915; SSE2-NEXT: LBB23_11: ## %cond.load133916; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255]3917; SSE2-NEXT: pand %xmm0, %xmm13918; SSE2-NEXT: movzbl 5(%rdi), %ecx3919; SSE2-NEXT: movd %ecx, %xmm23920; SSE2-NEXT: psllq $40, %xmm23921; SSE2-NEXT: pandn %xmm2, %xmm03922; SSE2-NEXT: por %xmm0, %xmm13923; SSE2-NEXT: testb $64, %al3924; SSE2-NEXT: je LBB23_143925; SSE2-NEXT: LBB23_13: ## %cond.load163926; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255]3927; SSE2-NEXT: pand %xmm0, %xmm13928; SSE2-NEXT: movzbl 6(%rdi), %ecx3929; SSE2-NEXT: movd %ecx, %xmm23930; SSE2-NEXT: psllq $48, %xmm23931; SSE2-NEXT: pandn %xmm2, %xmm03932; SSE2-NEXT: por %xmm0, %xmm13933; SSE2-NEXT: testb %al, %al3934; SSE2-NEXT: jns LBB23_163935; SSE2-NEXT: LBB23_15: ## %cond.load193936; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255]3937; SSE2-NEXT: pand %xmm0, %xmm13938; SSE2-NEXT: movzbl 7(%rdi), %ecx3939; SSE2-NEXT: movd %ecx, %xmm23940; SSE2-NEXT: psllq $56, %xmm23941; SSE2-NEXT: pandn %xmm2, %xmm03942; SSE2-NEXT: por %xmm0, %xmm13943; SSE2-NEXT: testl $256, %eax ## imm = 0x1003944; SSE2-NEXT: je LBB23_183945; SSE2-NEXT: LBB23_17: ## %cond.load223946; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255]3947; SSE2-NEXT: pand %xmm0, %xmm13948; SSE2-NEXT: movzbl 8(%rdi), %ecx3949; SSE2-NEXT: movd %ecx, %xmm23950; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[0,1,0,1]3951; SSE2-NEXT: pandn %xmm2, %xmm03952; SSE2-NEXT: por %xmm0, %xmm13953; SSE2-NEXT: testl $512, %eax ## imm = 0x2003954; SSE2-NEXT: je LBB23_203955; SSE2-NEXT: LBB23_19: ## %cond.load253956; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255]3957; SSE2-NEXT: pand %xmm0, %xmm13958; SSE2-NEXT: movzbl 9(%rdi), %ecx3959; SSE2-NEXT: movd %ecx, %xmm23960; SSE2-NEXT: pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6]3961; SSE2-NEXT: pandn %xmm2, %xmm03962; SSE2-NEXT: por %xmm0, %xmm13963; SSE2-NEXT: testl $1024, %eax ## imm = 0x4003964; SSE2-NEXT: je LBB23_223965; SSE2-NEXT: LBB23_21: ## %cond.load283966; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255]3967; SSE2-NEXT: pand %xmm0, %xmm13968; SSE2-NEXT: movzbl 10(%rdi), %ecx3969; SSE2-NEXT: movd %ecx, %xmm23970; SSE2-NEXT: pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5]3971; SSE2-NEXT: pandn %xmm2, %xmm03972; SSE2-NEXT: por %xmm0, %xmm13973; SSE2-NEXT: testl $2048, %eax ## imm = 0x8003974; SSE2-NEXT: je LBB23_243975; SSE2-NEXT: LBB23_23: ## %cond.load313976; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255]3977; SSE2-NEXT: pand %xmm0, %xmm13978; SSE2-NEXT: movzbl 11(%rdi), %ecx3979; SSE2-NEXT: movd %ecx, %xmm23980; SSE2-NEXT: pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4]3981; SSE2-NEXT: pandn %xmm2, %xmm03982; SSE2-NEXT: por %xmm0, %xmm13983; SSE2-NEXT: testl $4096, %eax ## imm = 0x10003984; SSE2-NEXT: je LBB23_263985; SSE2-NEXT: LBB23_25: ## %cond.load343986; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255]3987; SSE2-NEXT: pand %xmm0, %xmm13988; SSE2-NEXT: movzbl 12(%rdi), %ecx3989; SSE2-NEXT: movd %ecx, %xmm23990; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[0,0,0,0]3991; SSE2-NEXT: pandn %xmm2, %xmm03992; SSE2-NEXT: por %xmm0, %xmm13993; SSE2-NEXT: testl $8192, %eax ## imm = 0x20003994; SSE2-NEXT: je LBB23_283995; SSE2-NEXT: LBB23_27: ## %cond.load373996; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255]3997; SSE2-NEXT: pand %xmm0, %xmm13998; SSE2-NEXT: movzbl 13(%rdi), %ecx3999; SSE2-NEXT: movd %ecx, %xmm24000; SSE2-NEXT: pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2]4001; SSE2-NEXT: pandn %xmm2, %xmm04002; SSE2-NEXT: por %xmm0, %xmm14003; SSE2-NEXT: testl $16384, %eax ## imm = 0x40004004; SSE2-NEXT: je LBB23_304005; SSE2-NEXT: LBB23_29: ## %cond.load404006; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255]4007; SSE2-NEXT: pand %xmm0, %xmm14008; SSE2-NEXT: movzbl 14(%rdi), %ecx4009; SSE2-NEXT: movd %ecx, %xmm24010; SSE2-NEXT: pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1]4011; SSE2-NEXT: pandn %xmm2, %xmm04012; SSE2-NEXT: por %xmm0, %xmm14013; SSE2-NEXT: testl $32768, %eax ## imm = 0x80004014; SSE2-NEXT: je LBB23_324015; SSE2-NEXT: LBB23_31: ## %cond.load434016; SSE2-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm14017; SSE2-NEXT: movzbl 15(%rdi), %eax4018; SSE2-NEXT: movd %eax, %xmm04019; SSE2-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0]4020; SSE2-NEXT: por %xmm0, %xmm14021; SSE2-NEXT: movdqa %xmm1, %xmm04022; SSE2-NEXT: retq4023;4024; SSE42-LABEL: load_v16i8_v16i8:4025; SSE42: ## %bb.0:4026; SSE42-NEXT: pmovmskb %xmm0, %eax4027; SSE42-NEXT: testb $1, %al4028; SSE42-NEXT: jne LBB23_14029; SSE42-NEXT: ## %bb.2: ## %else4030; SSE42-NEXT: testb $2, %al4031; SSE42-NEXT: jne LBB23_34032; SSE42-NEXT: LBB23_4: ## %else24033; SSE42-NEXT: testb $4, %al4034; SSE42-NEXT: jne LBB23_54035; SSE42-NEXT: LBB23_6: ## %else54036; SSE42-NEXT: testb $8, %al4037; SSE42-NEXT: jne LBB23_74038; SSE42-NEXT: LBB23_8: ## %else84039; SSE42-NEXT: testb $16, %al4040; SSE42-NEXT: jne LBB23_94041; SSE42-NEXT: LBB23_10: ## %else114042; SSE42-NEXT: testb $32, %al4043; SSE42-NEXT: jne LBB23_114044; SSE42-NEXT: LBB23_12: ## %else144045; SSE42-NEXT: testb $64, %al4046; SSE42-NEXT: jne LBB23_134047; SSE42-NEXT: LBB23_14: ## %else174048; SSE42-NEXT: testb %al, %al4049; SSE42-NEXT: js LBB23_154050; SSE42-NEXT: LBB23_16: ## %else204051; SSE42-NEXT: testl $256, %eax ## imm = 0x1004052; SSE42-NEXT: jne LBB23_174053; SSE42-NEXT: LBB23_18: ## %else234054; SSE42-NEXT: testl $512, %eax ## imm = 0x2004055; SSE42-NEXT: jne LBB23_194056; SSE42-NEXT: LBB23_20: ## %else264057; SSE42-NEXT: testl $1024, %eax ## imm = 0x4004058; SSE42-NEXT: jne LBB23_214059; SSE42-NEXT: LBB23_22: ## %else294060; SSE42-NEXT: testl $2048, %eax ## imm = 0x8004061; SSE42-NEXT: jne LBB23_234062; SSE42-NEXT: LBB23_24: ## %else324063; SSE42-NEXT: testl $4096, %eax ## imm = 0x10004064; SSE42-NEXT: jne LBB23_254065; SSE42-NEXT: LBB23_26: ## %else354066; SSE42-NEXT: testl $8192, %eax ## imm = 0x20004067; SSE42-NEXT: jne LBB23_274068; SSE42-NEXT: LBB23_28: ## %else384069; SSE42-NEXT: testl $16384, %eax ## imm = 0x40004070; SSE42-NEXT: jne LBB23_294071; SSE42-NEXT: LBB23_30: ## %else414072; SSE42-NEXT: testl $32768, %eax ## imm = 0x80004073; SSE42-NEXT: jne LBB23_314074; SSE42-NEXT: LBB23_32: ## %else444075; SSE42-NEXT: movdqa %xmm1, %xmm04076; SSE42-NEXT: retq4077; SSE42-NEXT: LBB23_1: ## %cond.load4078; SSE42-NEXT: pinsrb $0, (%rdi), %xmm14079; SSE42-NEXT: testb $2, %al4080; SSE42-NEXT: je LBB23_44081; SSE42-NEXT: LBB23_3: ## %cond.load14082; SSE42-NEXT: pinsrb $1, 1(%rdi), %xmm14083; SSE42-NEXT: testb $4, %al4084; SSE42-NEXT: je LBB23_64085; SSE42-NEXT: LBB23_5: ## %cond.load44086; SSE42-NEXT: pinsrb $2, 2(%rdi), %xmm14087; SSE42-NEXT: testb $8, %al4088; SSE42-NEXT: je LBB23_84089; SSE42-NEXT: LBB23_7: ## %cond.load74090; SSE42-NEXT: pinsrb $3, 3(%rdi), %xmm14091; SSE42-NEXT: testb $16, %al4092; SSE42-NEXT: je LBB23_104093; SSE42-NEXT: LBB23_9: ## %cond.load104094; SSE42-NEXT: pinsrb $4, 4(%rdi), %xmm14095; SSE42-NEXT: testb $32, %al4096; SSE42-NEXT: je LBB23_124097; SSE42-NEXT: LBB23_11: ## %cond.load134098; SSE42-NEXT: pinsrb $5, 5(%rdi), %xmm14099; SSE42-NEXT: testb $64, %al4100; SSE42-NEXT: je LBB23_144101; SSE42-NEXT: LBB23_13: ## %cond.load164102; SSE42-NEXT: pinsrb $6, 6(%rdi), %xmm14103; SSE42-NEXT: testb %al, %al4104; SSE42-NEXT: jns LBB23_164105; SSE42-NEXT: LBB23_15: ## %cond.load194106; SSE42-NEXT: pinsrb $7, 7(%rdi), %xmm14107; SSE42-NEXT: testl $256, %eax ## imm = 0x1004108; SSE42-NEXT: je LBB23_184109; SSE42-NEXT: LBB23_17: ## %cond.load224110; SSE42-NEXT: pinsrb $8, 8(%rdi), %xmm14111; SSE42-NEXT: testl $512, %eax ## imm = 0x2004112; SSE42-NEXT: je LBB23_204113; SSE42-NEXT: LBB23_19: ## %cond.load254114; SSE42-NEXT: pinsrb $9, 9(%rdi), %xmm14115; SSE42-NEXT: testl $1024, %eax ## imm = 0x4004116; SSE42-NEXT: je LBB23_224117; SSE42-NEXT: LBB23_21: ## %cond.load284118; SSE42-NEXT: pinsrb $10, 10(%rdi), %xmm14119; SSE42-NEXT: testl $2048, %eax ## imm = 0x8004120; SSE42-NEXT: je LBB23_244121; SSE42-NEXT: LBB23_23: ## %cond.load314122; SSE42-NEXT: pinsrb $11, 11(%rdi), %xmm14123; SSE42-NEXT: testl $4096, %eax ## imm = 0x10004124; SSE42-NEXT: je LBB23_264125; SSE42-NEXT: LBB23_25: ## %cond.load344126; SSE42-NEXT: pinsrb $12, 12(%rdi), %xmm14127; SSE42-NEXT: testl $8192, %eax ## imm = 0x20004128; SSE42-NEXT: je LBB23_284129; SSE42-NEXT: LBB23_27: ## %cond.load374130; SSE42-NEXT: pinsrb $13, 13(%rdi), %xmm14131; SSE42-NEXT: testl $16384, %eax ## imm = 0x40004132; SSE42-NEXT: je LBB23_304133; SSE42-NEXT: LBB23_29: ## %cond.load404134; SSE42-NEXT: pinsrb $14, 14(%rdi), %xmm14135; SSE42-NEXT: testl $32768, %eax ## imm = 0x80004136; SSE42-NEXT: je LBB23_324137; SSE42-NEXT: LBB23_31: ## %cond.load434138; SSE42-NEXT: pinsrb $15, 15(%rdi), %xmm14139; SSE42-NEXT: movdqa %xmm1, %xmm04140; SSE42-NEXT: retq4141;4142; AVX1OR2-LABEL: load_v16i8_v16i8:4143; AVX1OR2: ## %bb.0:4144; AVX1OR2-NEXT: vpmovmskb %xmm0, %eax4145; AVX1OR2-NEXT: testb $1, %al4146; AVX1OR2-NEXT: jne LBB23_14147; AVX1OR2-NEXT: ## %bb.2: ## %else4148; AVX1OR2-NEXT: testb $2, %al4149; AVX1OR2-NEXT: jne LBB23_34150; AVX1OR2-NEXT: LBB23_4: ## %else24151; AVX1OR2-NEXT: testb $4, %al4152; AVX1OR2-NEXT: jne LBB23_54153; AVX1OR2-NEXT: LBB23_6: ## %else54154; AVX1OR2-NEXT: testb $8, %al4155; AVX1OR2-NEXT: jne LBB23_74156; AVX1OR2-NEXT: LBB23_8: ## %else84157; AVX1OR2-NEXT: testb $16, %al4158; AVX1OR2-NEXT: jne LBB23_94159; AVX1OR2-NEXT: LBB23_10: ## %else114160; AVX1OR2-NEXT: testb $32, %al4161; AVX1OR2-NEXT: jne LBB23_114162; AVX1OR2-NEXT: LBB23_12: ## %else144163; AVX1OR2-NEXT: testb $64, %al4164; AVX1OR2-NEXT: jne LBB23_134165; AVX1OR2-NEXT: LBB23_14: ## %else174166; AVX1OR2-NEXT: testb %al, %al4167; AVX1OR2-NEXT: js LBB23_154168; AVX1OR2-NEXT: LBB23_16: ## %else204169; AVX1OR2-NEXT: testl $256, %eax ## imm = 0x1004170; AVX1OR2-NEXT: jne LBB23_174171; AVX1OR2-NEXT: LBB23_18: ## %else234172; AVX1OR2-NEXT: testl $512, %eax ## imm = 0x2004173; AVX1OR2-NEXT: jne LBB23_194174; AVX1OR2-NEXT: LBB23_20: ## %else264175; AVX1OR2-NEXT: testl $1024, %eax ## imm = 0x4004176; AVX1OR2-NEXT: jne LBB23_214177; AVX1OR2-NEXT: LBB23_22: ## %else294178; AVX1OR2-NEXT: testl $2048, %eax ## imm = 0x8004179; AVX1OR2-NEXT: jne LBB23_234180; AVX1OR2-NEXT: LBB23_24: ## %else324181; AVX1OR2-NEXT: testl $4096, %eax ## imm = 0x10004182; AVX1OR2-NEXT: jne LBB23_254183; AVX1OR2-NEXT: LBB23_26: ## %else354184; AVX1OR2-NEXT: testl $8192, %eax ## imm = 0x20004185; AVX1OR2-NEXT: jne LBB23_274186; AVX1OR2-NEXT: LBB23_28: ## %else384187; AVX1OR2-NEXT: testl $16384, %eax ## imm = 0x40004188; AVX1OR2-NEXT: jne LBB23_294189; AVX1OR2-NEXT: LBB23_30: ## %else414190; AVX1OR2-NEXT: testl $32768, %eax ## imm = 0x80004191; AVX1OR2-NEXT: jne LBB23_314192; AVX1OR2-NEXT: LBB23_32: ## %else444193; AVX1OR2-NEXT: vmovdqa %xmm1, %xmm04194; AVX1OR2-NEXT: retq4195; AVX1OR2-NEXT: LBB23_1: ## %cond.load4196; AVX1OR2-NEXT: vpinsrb $0, (%rdi), %xmm1, %xmm14197; AVX1OR2-NEXT: testb $2, %al4198; AVX1OR2-NEXT: je LBB23_44199; AVX1OR2-NEXT: LBB23_3: ## %cond.load14200; AVX1OR2-NEXT: vpinsrb $1, 1(%rdi), %xmm1, %xmm14201; AVX1OR2-NEXT: testb $4, %al4202; AVX1OR2-NEXT: je LBB23_64203; AVX1OR2-NEXT: LBB23_5: ## %cond.load44204; AVX1OR2-NEXT: vpinsrb $2, 2(%rdi), %xmm1, %xmm14205; AVX1OR2-NEXT: testb $8, %al4206; AVX1OR2-NEXT: je LBB23_84207; AVX1OR2-NEXT: LBB23_7: ## %cond.load74208; AVX1OR2-NEXT: vpinsrb $3, 3(%rdi), %xmm1, %xmm14209; AVX1OR2-NEXT: testb $16, %al4210; AVX1OR2-NEXT: je LBB23_104211; AVX1OR2-NEXT: LBB23_9: ## %cond.load104212; AVX1OR2-NEXT: vpinsrb $4, 4(%rdi), %xmm1, %xmm14213; AVX1OR2-NEXT: testb $32, %al4214; AVX1OR2-NEXT: je LBB23_124215; AVX1OR2-NEXT: LBB23_11: ## %cond.load134216; AVX1OR2-NEXT: vpinsrb $5, 5(%rdi), %xmm1, %xmm14217; AVX1OR2-NEXT: testb $64, %al4218; AVX1OR2-NEXT: je LBB23_144219; AVX1OR2-NEXT: LBB23_13: ## %cond.load164220; AVX1OR2-NEXT: vpinsrb $6, 6(%rdi), %xmm1, %xmm14221; AVX1OR2-NEXT: testb %al, %al4222; AVX1OR2-NEXT: jns LBB23_164223; AVX1OR2-NEXT: LBB23_15: ## %cond.load194224; AVX1OR2-NEXT: vpinsrb $7, 7(%rdi), %xmm1, %xmm14225; AVX1OR2-NEXT: testl $256, %eax ## imm = 0x1004226; AVX1OR2-NEXT: je LBB23_184227; AVX1OR2-NEXT: LBB23_17: ## %cond.load224228; AVX1OR2-NEXT: vpinsrb $8, 8(%rdi), %xmm1, %xmm14229; AVX1OR2-NEXT: testl $512, %eax ## imm = 0x2004230; AVX1OR2-NEXT: je LBB23_204231; AVX1OR2-NEXT: LBB23_19: ## %cond.load254232; AVX1OR2-NEXT: vpinsrb $9, 9(%rdi), %xmm1, %xmm14233; AVX1OR2-NEXT: testl $1024, %eax ## imm = 0x4004234; AVX1OR2-NEXT: je LBB23_224235; AVX1OR2-NEXT: LBB23_21: ## %cond.load284236; AVX1OR2-NEXT: vpinsrb $10, 10(%rdi), %xmm1, %xmm14237; AVX1OR2-NEXT: testl $2048, %eax ## imm = 0x8004238; AVX1OR2-NEXT: je LBB23_244239; AVX1OR2-NEXT: LBB23_23: ## %cond.load314240; AVX1OR2-NEXT: vpinsrb $11, 11(%rdi), %xmm1, %xmm14241; AVX1OR2-NEXT: testl $4096, %eax ## imm = 0x10004242; AVX1OR2-NEXT: je LBB23_264243; AVX1OR2-NEXT: LBB23_25: ## %cond.load344244; AVX1OR2-NEXT: vpinsrb $12, 12(%rdi), %xmm1, %xmm14245; AVX1OR2-NEXT: testl $8192, %eax ## imm = 0x20004246; AVX1OR2-NEXT: je LBB23_284247; AVX1OR2-NEXT: LBB23_27: ## %cond.load374248; AVX1OR2-NEXT: vpinsrb $13, 13(%rdi), %xmm1, %xmm14249; AVX1OR2-NEXT: testl $16384, %eax ## imm = 0x40004250; AVX1OR2-NEXT: je LBB23_304251; AVX1OR2-NEXT: LBB23_29: ## %cond.load404252; AVX1OR2-NEXT: vpinsrb $14, 14(%rdi), %xmm1, %xmm14253; AVX1OR2-NEXT: testl $32768, %eax ## imm = 0x80004254; AVX1OR2-NEXT: je LBB23_324255; AVX1OR2-NEXT: LBB23_31: ## %cond.load434256; AVX1OR2-NEXT: vpinsrb $15, 15(%rdi), %xmm1, %xmm14257; AVX1OR2-NEXT: vmovdqa %xmm1, %xmm04258; AVX1OR2-NEXT: retq4259;4260; AVX512F-LABEL: load_v16i8_v16i8:4261; AVX512F: ## %bb.0:4262; AVX512F-NEXT: vpmovmskb %xmm0, %eax4263; AVX512F-NEXT: testb $1, %al4264; AVX512F-NEXT: jne LBB23_14265; AVX512F-NEXT: ## %bb.2: ## %else4266; AVX512F-NEXT: testb $2, %al4267; AVX512F-NEXT: jne LBB23_34268; AVX512F-NEXT: LBB23_4: ## %else24269; AVX512F-NEXT: testb $4, %al4270; AVX512F-NEXT: jne LBB23_54271; AVX512F-NEXT: LBB23_6: ## %else54272; AVX512F-NEXT: testb $8, %al4273; AVX512F-NEXT: jne LBB23_74274; AVX512F-NEXT: LBB23_8: ## %else84275; AVX512F-NEXT: testb $16, %al4276; AVX512F-NEXT: jne LBB23_94277; AVX512F-NEXT: LBB23_10: ## %else114278; AVX512F-NEXT: testb $32, %al4279; AVX512F-NEXT: jne LBB23_114280; AVX512F-NEXT: LBB23_12: ## %else144281; AVX512F-NEXT: testb $64, %al4282; AVX512F-NEXT: jne LBB23_134283; AVX512F-NEXT: LBB23_14: ## %else174284; AVX512F-NEXT: testb %al, %al4285; AVX512F-NEXT: js LBB23_154286; AVX512F-NEXT: LBB23_16: ## %else204287; AVX512F-NEXT: testl $256, %eax ## imm = 0x1004288; AVX512F-NEXT: jne LBB23_174289; AVX512F-NEXT: LBB23_18: ## %else234290; AVX512F-NEXT: testl $512, %eax ## imm = 0x2004291; AVX512F-NEXT: jne LBB23_194292; AVX512F-NEXT: LBB23_20: ## %else264293; AVX512F-NEXT: testl $1024, %eax ## imm = 0x4004294; AVX512F-NEXT: jne LBB23_214295; AVX512F-NEXT: LBB23_22: ## %else294296; AVX512F-NEXT: testl $2048, %eax ## imm = 0x8004297; AVX512F-NEXT: jne LBB23_234298; AVX512F-NEXT: LBB23_24: ## %else324299; AVX512F-NEXT: testl $4096, %eax ## imm = 0x10004300; AVX512F-NEXT: jne LBB23_254301; AVX512F-NEXT: LBB23_26: ## %else354302; AVX512F-NEXT: testl $8192, %eax ## imm = 0x20004303; AVX512F-NEXT: jne LBB23_274304; AVX512F-NEXT: LBB23_28: ## %else384305; AVX512F-NEXT: testl $16384, %eax ## imm = 0x40004306; AVX512F-NEXT: jne LBB23_294307; AVX512F-NEXT: LBB23_30: ## %else414308; AVX512F-NEXT: testl $32768, %eax ## imm = 0x80004309; AVX512F-NEXT: jne LBB23_314310; AVX512F-NEXT: LBB23_32: ## %else444311; AVX512F-NEXT: vmovdqa %xmm1, %xmm04312; AVX512F-NEXT: retq4313; AVX512F-NEXT: LBB23_1: ## %cond.load4314; AVX512F-NEXT: vpinsrb $0, (%rdi), %xmm1, %xmm14315; AVX512F-NEXT: testb $2, %al4316; AVX512F-NEXT: je LBB23_44317; AVX512F-NEXT: LBB23_3: ## %cond.load14318; AVX512F-NEXT: vpinsrb $1, 1(%rdi), %xmm1, %xmm14319; AVX512F-NEXT: testb $4, %al4320; AVX512F-NEXT: je LBB23_64321; AVX512F-NEXT: LBB23_5: ## %cond.load44322; AVX512F-NEXT: vpinsrb $2, 2(%rdi), %xmm1, %xmm14323; AVX512F-NEXT: testb $8, %al4324; AVX512F-NEXT: je LBB23_84325; AVX512F-NEXT: LBB23_7: ## %cond.load74326; AVX512F-NEXT: vpinsrb $3, 3(%rdi), %xmm1, %xmm14327; AVX512F-NEXT: testb $16, %al4328; AVX512F-NEXT: je LBB23_104329; AVX512F-NEXT: LBB23_9: ## %cond.load104330; AVX512F-NEXT: vpinsrb $4, 4(%rdi), %xmm1, %xmm14331; AVX512F-NEXT: testb $32, %al4332; AVX512F-NEXT: je LBB23_124333; AVX512F-NEXT: LBB23_11: ## %cond.load134334; AVX512F-NEXT: vpinsrb $5, 5(%rdi), %xmm1, %xmm14335; AVX512F-NEXT: testb $64, %al4336; AVX512F-NEXT: je LBB23_144337; AVX512F-NEXT: LBB23_13: ## %cond.load164338; AVX512F-NEXT: vpinsrb $6, 6(%rdi), %xmm1, %xmm14339; AVX512F-NEXT: testb %al, %al4340; AVX512F-NEXT: jns LBB23_164341; AVX512F-NEXT: LBB23_15: ## %cond.load194342; AVX512F-NEXT: vpinsrb $7, 7(%rdi), %xmm1, %xmm14343; AVX512F-NEXT: testl $256, %eax ## imm = 0x1004344; AVX512F-NEXT: je LBB23_184345; AVX512F-NEXT: LBB23_17: ## %cond.load224346; AVX512F-NEXT: vpinsrb $8, 8(%rdi), %xmm1, %xmm14347; AVX512F-NEXT: testl $512, %eax ## imm = 0x2004348; AVX512F-NEXT: je LBB23_204349; AVX512F-NEXT: LBB23_19: ## %cond.load254350; AVX512F-NEXT: vpinsrb $9, 9(%rdi), %xmm1, %xmm14351; AVX512F-NEXT: testl $1024, %eax ## imm = 0x4004352; AVX512F-NEXT: je LBB23_224353; AVX512F-NEXT: LBB23_21: ## %cond.load284354; AVX512F-NEXT: vpinsrb $10, 10(%rdi), %xmm1, %xmm14355; AVX512F-NEXT: testl $2048, %eax ## imm = 0x8004356; AVX512F-NEXT: je LBB23_244357; AVX512F-NEXT: LBB23_23: ## %cond.load314358; AVX512F-NEXT: vpinsrb $11, 11(%rdi), %xmm1, %xmm14359; AVX512F-NEXT: testl $4096, %eax ## imm = 0x10004360; AVX512F-NEXT: je LBB23_264361; AVX512F-NEXT: LBB23_25: ## %cond.load344362; AVX512F-NEXT: vpinsrb $12, 12(%rdi), %xmm1, %xmm14363; AVX512F-NEXT: testl $8192, %eax ## imm = 0x20004364; AVX512F-NEXT: je LBB23_284365; AVX512F-NEXT: LBB23_27: ## %cond.load374366; AVX512F-NEXT: vpinsrb $13, 13(%rdi), %xmm1, %xmm14367; AVX512F-NEXT: testl $16384, %eax ## imm = 0x40004368; AVX512F-NEXT: je LBB23_304369; AVX512F-NEXT: LBB23_29: ## %cond.load404370; AVX512F-NEXT: vpinsrb $14, 14(%rdi), %xmm1, %xmm14371; AVX512F-NEXT: testl $32768, %eax ## imm = 0x80004372; AVX512F-NEXT: je LBB23_324373; AVX512F-NEXT: LBB23_31: ## %cond.load434374; AVX512F-NEXT: vpinsrb $15, 15(%rdi), %xmm1, %xmm14375; AVX512F-NEXT: vmovdqa %xmm1, %xmm04376; AVX512F-NEXT: retq4377;4378; AVX512VLDQ-LABEL: load_v16i8_v16i8:4379; AVX512VLDQ: ## %bb.0:4380; AVX512VLDQ-NEXT: vpmovmskb %xmm0, %eax4381; AVX512VLDQ-NEXT: testb $1, %al4382; AVX512VLDQ-NEXT: jne LBB23_14383; AVX512VLDQ-NEXT: ## %bb.2: ## %else4384; AVX512VLDQ-NEXT: testb $2, %al4385; AVX512VLDQ-NEXT: jne LBB23_34386; AVX512VLDQ-NEXT: LBB23_4: ## %else24387; AVX512VLDQ-NEXT: testb $4, %al4388; AVX512VLDQ-NEXT: jne LBB23_54389; AVX512VLDQ-NEXT: LBB23_6: ## %else54390; AVX512VLDQ-NEXT: testb $8, %al4391; AVX512VLDQ-NEXT: jne LBB23_74392; AVX512VLDQ-NEXT: LBB23_8: ## %else84393; AVX512VLDQ-NEXT: testb $16, %al4394; AVX512VLDQ-NEXT: jne LBB23_94395; AVX512VLDQ-NEXT: LBB23_10: ## %else114396; AVX512VLDQ-NEXT: testb $32, %al4397; AVX512VLDQ-NEXT: jne LBB23_114398; AVX512VLDQ-NEXT: LBB23_12: ## %else144399; AVX512VLDQ-NEXT: testb $64, %al4400; AVX512VLDQ-NEXT: jne LBB23_134401; AVX512VLDQ-NEXT: LBB23_14: ## %else174402; AVX512VLDQ-NEXT: testb %al, %al4403; AVX512VLDQ-NEXT: js LBB23_154404; AVX512VLDQ-NEXT: LBB23_16: ## %else204405; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x1004406; AVX512VLDQ-NEXT: jne LBB23_174407; AVX512VLDQ-NEXT: LBB23_18: ## %else234408; AVX512VLDQ-NEXT: testl $512, %eax ## imm = 0x2004409; AVX512VLDQ-NEXT: jne LBB23_194410; AVX512VLDQ-NEXT: LBB23_20: ## %else264411; AVX512VLDQ-NEXT: testl $1024, %eax ## imm = 0x4004412; AVX512VLDQ-NEXT: jne LBB23_214413; AVX512VLDQ-NEXT: LBB23_22: ## %else294414; AVX512VLDQ-NEXT: testl $2048, %eax ## imm = 0x8004415; AVX512VLDQ-NEXT: jne LBB23_234416; AVX512VLDQ-NEXT: LBB23_24: ## %else324417; AVX512VLDQ-NEXT: testl $4096, %eax ## imm = 0x10004418; AVX512VLDQ-NEXT: jne LBB23_254419; AVX512VLDQ-NEXT: LBB23_26: ## %else354420; AVX512VLDQ-NEXT: testl $8192, %eax ## imm = 0x20004421; AVX512VLDQ-NEXT: jne LBB23_274422; AVX512VLDQ-NEXT: LBB23_28: ## %else384423; AVX512VLDQ-NEXT: testl $16384, %eax ## imm = 0x40004424; AVX512VLDQ-NEXT: jne LBB23_294425; AVX512VLDQ-NEXT: LBB23_30: ## %else414426; AVX512VLDQ-NEXT: testl $32768, %eax ## imm = 0x80004427; AVX512VLDQ-NEXT: jne LBB23_314428; AVX512VLDQ-NEXT: LBB23_32: ## %else444429; AVX512VLDQ-NEXT: vmovdqa %xmm1, %xmm04430; AVX512VLDQ-NEXT: retq4431; AVX512VLDQ-NEXT: LBB23_1: ## %cond.load4432; AVX512VLDQ-NEXT: vpinsrb $0, (%rdi), %xmm1, %xmm14433; AVX512VLDQ-NEXT: testb $2, %al4434; AVX512VLDQ-NEXT: je LBB23_44435; AVX512VLDQ-NEXT: LBB23_3: ## %cond.load14436; AVX512VLDQ-NEXT: vpinsrb $1, 1(%rdi), %xmm1, %xmm14437; AVX512VLDQ-NEXT: testb $4, %al4438; AVX512VLDQ-NEXT: je LBB23_64439; AVX512VLDQ-NEXT: LBB23_5: ## %cond.load44440; AVX512VLDQ-NEXT: vpinsrb $2, 2(%rdi), %xmm1, %xmm14441; AVX512VLDQ-NEXT: testb $8, %al4442; AVX512VLDQ-NEXT: je LBB23_84443; AVX512VLDQ-NEXT: LBB23_7: ## %cond.load74444; AVX512VLDQ-NEXT: vpinsrb $3, 3(%rdi), %xmm1, %xmm14445; AVX512VLDQ-NEXT: testb $16, %al4446; AVX512VLDQ-NEXT: je LBB23_104447; AVX512VLDQ-NEXT: LBB23_9: ## %cond.load104448; AVX512VLDQ-NEXT: vpinsrb $4, 4(%rdi), %xmm1, %xmm14449; AVX512VLDQ-NEXT: testb $32, %al4450; AVX512VLDQ-NEXT: je LBB23_124451; AVX512VLDQ-NEXT: LBB23_11: ## %cond.load134452; AVX512VLDQ-NEXT: vpinsrb $5, 5(%rdi), %xmm1, %xmm14453; AVX512VLDQ-NEXT: testb $64, %al4454; AVX512VLDQ-NEXT: je LBB23_144455; AVX512VLDQ-NEXT: LBB23_13: ## %cond.load164456; AVX512VLDQ-NEXT: vpinsrb $6, 6(%rdi), %xmm1, %xmm14457; AVX512VLDQ-NEXT: testb %al, %al4458; AVX512VLDQ-NEXT: jns LBB23_164459; AVX512VLDQ-NEXT: LBB23_15: ## %cond.load194460; AVX512VLDQ-NEXT: vpinsrb $7, 7(%rdi), %xmm1, %xmm14461; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x1004462; AVX512VLDQ-NEXT: je LBB23_184463; AVX512VLDQ-NEXT: LBB23_17: ## %cond.load224464; AVX512VLDQ-NEXT: vpinsrb $8, 8(%rdi), %xmm1, %xmm14465; AVX512VLDQ-NEXT: testl $512, %eax ## imm = 0x2004466; AVX512VLDQ-NEXT: je LBB23_204467; AVX512VLDQ-NEXT: LBB23_19: ## %cond.load254468; AVX512VLDQ-NEXT: vpinsrb $9, 9(%rdi), %xmm1, %xmm14469; AVX512VLDQ-NEXT: testl $1024, %eax ## imm = 0x4004470; AVX512VLDQ-NEXT: je LBB23_224471; AVX512VLDQ-NEXT: LBB23_21: ## %cond.load284472; AVX512VLDQ-NEXT: vpinsrb $10, 10(%rdi), %xmm1, %xmm14473; AVX512VLDQ-NEXT: testl $2048, %eax ## imm = 0x8004474; AVX512VLDQ-NEXT: je LBB23_244475; AVX512VLDQ-NEXT: LBB23_23: ## %cond.load314476; AVX512VLDQ-NEXT: vpinsrb $11, 11(%rdi), %xmm1, %xmm14477; AVX512VLDQ-NEXT: testl $4096, %eax ## imm = 0x10004478; AVX512VLDQ-NEXT: je LBB23_264479; AVX512VLDQ-NEXT: LBB23_25: ## %cond.load344480; AVX512VLDQ-NEXT: vpinsrb $12, 12(%rdi), %xmm1, %xmm14481; AVX512VLDQ-NEXT: testl $8192, %eax ## imm = 0x20004482; AVX512VLDQ-NEXT: je LBB23_284483; AVX512VLDQ-NEXT: LBB23_27: ## %cond.load374484; AVX512VLDQ-NEXT: vpinsrb $13, 13(%rdi), %xmm1, %xmm14485; AVX512VLDQ-NEXT: testl $16384, %eax ## imm = 0x40004486; AVX512VLDQ-NEXT: je LBB23_304487; AVX512VLDQ-NEXT: LBB23_29: ## %cond.load404488; AVX512VLDQ-NEXT: vpinsrb $14, 14(%rdi), %xmm1, %xmm14489; AVX512VLDQ-NEXT: testl $32768, %eax ## imm = 0x80004490; AVX512VLDQ-NEXT: je LBB23_324491; AVX512VLDQ-NEXT: LBB23_31: ## %cond.load434492; AVX512VLDQ-NEXT: vpinsrb $15, 15(%rdi), %xmm1, %xmm14493; AVX512VLDQ-NEXT: vmovdqa %xmm1, %xmm04494; AVX512VLDQ-NEXT: retq4495;4496; AVX512VLBW-LABEL: load_v16i8_v16i8:4497; AVX512VLBW: ## %bb.0:4498; AVX512VLBW-NEXT: vpmovb2m %xmm0, %k14499; AVX512VLBW-NEXT: vpblendmb (%rdi), %xmm1, %xmm0 {%k1}4500; AVX512VLBW-NEXT: retq4501;4502; X86-AVX512-LABEL: load_v16i8_v16i8:4503; X86-AVX512: ## %bb.0:4504; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax4505; X86-AVX512-NEXT: vpmovb2m %xmm0, %k14506; X86-AVX512-NEXT: vpblendmb (%eax), %xmm1, %xmm0 {%k1}4507; X86-AVX512-NEXT: retl4508 %mask = icmp slt <16 x i8> %trigger, zeroinitializer4509 %res = call <16 x i8> @llvm.masked.load.v16i8.p0(ptr %addr, i32 4, <16 x i1> %mask, <16 x i8> %dst)4510 ret <16 x i8> %res4511}4512 4513define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, ptr %addr, <32 x i8> %dst) {4514; SSE2-LABEL: load_v32i8_v32i8:4515; SSE2: ## %bb.0:4516; SSE2-NEXT: pmovmskb %xmm0, %ecx4517; SSE2-NEXT: pmovmskb %xmm1, %eax4518; SSE2-NEXT: shll $16, %eax4519; SSE2-NEXT: orl %ecx, %eax4520; SSE2-NEXT: testb $1, %al4521; SSE2-NEXT: jne LBB24_14522; SSE2-NEXT: ## %bb.2: ## %else4523; SSE2-NEXT: testb $2, %al4524; SSE2-NEXT: jne LBB24_34525; SSE2-NEXT: LBB24_4: ## %else24526; SSE2-NEXT: testb $4, %al4527; SSE2-NEXT: jne LBB24_54528; SSE2-NEXT: LBB24_6: ## %else54529; SSE2-NEXT: testb $8, %al4530; SSE2-NEXT: jne LBB24_74531; SSE2-NEXT: LBB24_8: ## %else84532; SSE2-NEXT: testb $16, %al4533; SSE2-NEXT: jne LBB24_94534; SSE2-NEXT: LBB24_10: ## %else114535; SSE2-NEXT: testb $32, %al4536; SSE2-NEXT: jne LBB24_114537; SSE2-NEXT: LBB24_12: ## %else144538; SSE2-NEXT: testb $64, %al4539; SSE2-NEXT: jne LBB24_134540; SSE2-NEXT: LBB24_14: ## %else174541; SSE2-NEXT: testb %al, %al4542; SSE2-NEXT: js LBB24_154543; SSE2-NEXT: LBB24_16: ## %else204544; SSE2-NEXT: testl $256, %eax ## imm = 0x1004545; SSE2-NEXT: jne LBB24_174546; SSE2-NEXT: LBB24_18: ## %else234547; SSE2-NEXT: testl $512, %eax ## imm = 0x2004548; SSE2-NEXT: jne LBB24_194549; SSE2-NEXT: LBB24_20: ## %else264550; SSE2-NEXT: testl $1024, %eax ## imm = 0x4004551; SSE2-NEXT: jne LBB24_214552; SSE2-NEXT: LBB24_22: ## %else294553; SSE2-NEXT: testl $2048, %eax ## imm = 0x8004554; SSE2-NEXT: jne LBB24_234555; SSE2-NEXT: LBB24_24: ## %else324556; SSE2-NEXT: testl $4096, %eax ## imm = 0x10004557; SSE2-NEXT: jne LBB24_254558; SSE2-NEXT: LBB24_26: ## %else354559; SSE2-NEXT: testl $8192, %eax ## imm = 0x20004560; SSE2-NEXT: jne LBB24_274561; SSE2-NEXT: LBB24_28: ## %else384562; SSE2-NEXT: testl $16384, %eax ## imm = 0x40004563; SSE2-NEXT: jne LBB24_294564; SSE2-NEXT: LBB24_30: ## %else414565; SSE2-NEXT: testw %ax, %ax4566; SSE2-NEXT: js LBB24_314567; SSE2-NEXT: LBB24_32: ## %else444568; SSE2-NEXT: testl $65536, %eax ## imm = 0x100004569; SSE2-NEXT: jne LBB24_334570; SSE2-NEXT: LBB24_34: ## %else474571; SSE2-NEXT: testl $131072, %eax ## imm = 0x200004572; SSE2-NEXT: jne LBB24_354573; SSE2-NEXT: LBB24_36: ## %else504574; SSE2-NEXT: testl $262144, %eax ## imm = 0x400004575; SSE2-NEXT: jne LBB24_374576; SSE2-NEXT: LBB24_38: ## %else534577; SSE2-NEXT: testl $524288, %eax ## imm = 0x800004578; SSE2-NEXT: jne LBB24_394579; SSE2-NEXT: LBB24_40: ## %else564580; SSE2-NEXT: testl $1048576, %eax ## imm = 0x1000004581; SSE2-NEXT: jne LBB24_414582; SSE2-NEXT: LBB24_42: ## %else594583; SSE2-NEXT: testl $2097152, %eax ## imm = 0x2000004584; SSE2-NEXT: jne LBB24_434585; SSE2-NEXT: LBB24_44: ## %else624586; SSE2-NEXT: testl $4194304, %eax ## imm = 0x4000004587; SSE2-NEXT: jne LBB24_454588; SSE2-NEXT: LBB24_46: ## %else654589; SSE2-NEXT: testl $8388608, %eax ## imm = 0x8000004590; SSE2-NEXT: jne LBB24_474591; SSE2-NEXT: LBB24_48: ## %else684592; SSE2-NEXT: testl $16777216, %eax ## imm = 0x10000004593; SSE2-NEXT: jne LBB24_494594; SSE2-NEXT: LBB24_50: ## %else714595; SSE2-NEXT: testl $33554432, %eax ## imm = 0x20000004596; SSE2-NEXT: jne LBB24_514597; SSE2-NEXT: LBB24_52: ## %else744598; SSE2-NEXT: testl $67108864, %eax ## imm = 0x40000004599; SSE2-NEXT: jne LBB24_534600; SSE2-NEXT: LBB24_54: ## %else774601; SSE2-NEXT: testl $134217728, %eax ## imm = 0x80000004602; SSE2-NEXT: jne LBB24_554603; SSE2-NEXT: LBB24_56: ## %else804604; SSE2-NEXT: testl $268435456, %eax ## imm = 0x100000004605; SSE2-NEXT: jne LBB24_574606; SSE2-NEXT: LBB24_58: ## %else834607; SSE2-NEXT: testl $536870912, %eax ## imm = 0x200000004608; SSE2-NEXT: jne LBB24_594609; SSE2-NEXT: LBB24_60: ## %else864610; SSE2-NEXT: testl $1073741824, %eax ## imm = 0x400000004611; SSE2-NEXT: jne LBB24_614612; SSE2-NEXT: LBB24_62: ## %else894613; SSE2-NEXT: testl $-2147483648, %eax ## imm = 0x800000004614; SSE2-NEXT: je LBB24_644615; SSE2-NEXT: LBB24_63: ## %cond.load914616; SSE2-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm34617; SSE2-NEXT: movzbl 31(%rdi), %eax4618; SSE2-NEXT: movd %eax, %xmm04619; SSE2-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0]4620; SSE2-NEXT: por %xmm0, %xmm34621; SSE2-NEXT: LBB24_64: ## %else924622; SSE2-NEXT: movdqa %xmm2, %xmm04623; SSE2-NEXT: movdqa %xmm3, %xmm14624; SSE2-NEXT: retq4625; SSE2-NEXT: LBB24_1: ## %cond.load4626; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]4627; SSE2-NEXT: pand %xmm0, %xmm24628; SSE2-NEXT: movzbl (%rdi), %ecx4629; SSE2-NEXT: movd %ecx, %xmm14630; SSE2-NEXT: pandn %xmm1, %xmm04631; SSE2-NEXT: por %xmm0, %xmm24632; SSE2-NEXT: testb $2, %al4633; SSE2-NEXT: je LBB24_44634; SSE2-NEXT: LBB24_3: ## %cond.load14635; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255]4636; SSE2-NEXT: pand %xmm0, %xmm24637; SSE2-NEXT: movzbl 1(%rdi), %ecx4638; SSE2-NEXT: movd %ecx, %xmm14639; SSE2-NEXT: psllw $8, %xmm14640; SSE2-NEXT: pandn %xmm1, %xmm04641; SSE2-NEXT: por %xmm0, %xmm24642; SSE2-NEXT: testb $4, %al4643; SSE2-NEXT: je LBB24_64644; SSE2-NEXT: LBB24_5: ## %cond.load44645; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255]4646; SSE2-NEXT: pand %xmm0, %xmm24647; SSE2-NEXT: movzbl 2(%rdi), %ecx4648; SSE2-NEXT: movd %ecx, %xmm14649; SSE2-NEXT: pslld $16, %xmm14650; SSE2-NEXT: pandn %xmm1, %xmm04651; SSE2-NEXT: por %xmm0, %xmm24652; SSE2-NEXT: testb $8, %al4653; SSE2-NEXT: je LBB24_84654; SSE2-NEXT: LBB24_7: ## %cond.load74655; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255]4656; SSE2-NEXT: pand %xmm0, %xmm24657; SSE2-NEXT: movzbl 3(%rdi), %ecx4658; SSE2-NEXT: movd %ecx, %xmm14659; SSE2-NEXT: pslld $24, %xmm14660; SSE2-NEXT: pandn %xmm1, %xmm04661; SSE2-NEXT: por %xmm0, %xmm24662; SSE2-NEXT: testb $16, %al4663; SSE2-NEXT: je LBB24_104664; SSE2-NEXT: LBB24_9: ## %cond.load104665; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255]4666; SSE2-NEXT: pand %xmm0, %xmm24667; SSE2-NEXT: movzbl 4(%rdi), %ecx4668; SSE2-NEXT: movd %ecx, %xmm14669; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,0,1,1]4670; SSE2-NEXT: pandn %xmm1, %xmm04671; SSE2-NEXT: por %xmm0, %xmm24672; SSE2-NEXT: testb $32, %al4673; SSE2-NEXT: je LBB24_124674; SSE2-NEXT: LBB24_11: ## %cond.load134675; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255]4676; SSE2-NEXT: pand %xmm0, %xmm24677; SSE2-NEXT: movzbl 5(%rdi), %ecx4678; SSE2-NEXT: movd %ecx, %xmm14679; SSE2-NEXT: psllq $40, %xmm14680; SSE2-NEXT: pandn %xmm1, %xmm04681; SSE2-NEXT: por %xmm0, %xmm24682; SSE2-NEXT: testb $64, %al4683; SSE2-NEXT: je LBB24_144684; SSE2-NEXT: LBB24_13: ## %cond.load164685; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255]4686; SSE2-NEXT: pand %xmm0, %xmm24687; SSE2-NEXT: movzbl 6(%rdi), %ecx4688; SSE2-NEXT: movd %ecx, %xmm14689; SSE2-NEXT: psllq $48, %xmm14690; SSE2-NEXT: pandn %xmm1, %xmm04691; SSE2-NEXT: por %xmm0, %xmm24692; SSE2-NEXT: testb %al, %al4693; SSE2-NEXT: jns LBB24_164694; SSE2-NEXT: LBB24_15: ## %cond.load194695; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255]4696; SSE2-NEXT: pand %xmm0, %xmm24697; SSE2-NEXT: movzbl 7(%rdi), %ecx4698; SSE2-NEXT: movd %ecx, %xmm14699; SSE2-NEXT: psllq $56, %xmm14700; SSE2-NEXT: pandn %xmm1, %xmm04701; SSE2-NEXT: por %xmm0, %xmm24702; SSE2-NEXT: testl $256, %eax ## imm = 0x1004703; SSE2-NEXT: je LBB24_184704; SSE2-NEXT: LBB24_17: ## %cond.load224705; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255]4706; SSE2-NEXT: pand %xmm0, %xmm24707; SSE2-NEXT: movzbl 8(%rdi), %ecx4708; SSE2-NEXT: movd %ecx, %xmm14709; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]4710; SSE2-NEXT: pandn %xmm1, %xmm04711; SSE2-NEXT: por %xmm0, %xmm24712; SSE2-NEXT: testl $512, %eax ## imm = 0x2004713; SSE2-NEXT: je LBB24_204714; SSE2-NEXT: LBB24_19: ## %cond.load254715; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255]4716; SSE2-NEXT: pand %xmm0, %xmm24717; SSE2-NEXT: movzbl 9(%rdi), %ecx4718; SSE2-NEXT: movd %ecx, %xmm14719; SSE2-NEXT: pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6]4720; SSE2-NEXT: pandn %xmm1, %xmm04721; SSE2-NEXT: por %xmm0, %xmm24722; SSE2-NEXT: testl $1024, %eax ## imm = 0x4004723; SSE2-NEXT: je LBB24_224724; SSE2-NEXT: LBB24_21: ## %cond.load284725; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255]4726; SSE2-NEXT: pand %xmm0, %xmm24727; SSE2-NEXT: movzbl 10(%rdi), %ecx4728; SSE2-NEXT: movd %ecx, %xmm14729; SSE2-NEXT: pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5]4730; SSE2-NEXT: pandn %xmm1, %xmm04731; SSE2-NEXT: por %xmm0, %xmm24732; SSE2-NEXT: testl $2048, %eax ## imm = 0x8004733; SSE2-NEXT: je LBB24_244734; SSE2-NEXT: LBB24_23: ## %cond.load314735; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255]4736; SSE2-NEXT: pand %xmm0, %xmm24737; SSE2-NEXT: movzbl 11(%rdi), %ecx4738; SSE2-NEXT: movd %ecx, %xmm14739; SSE2-NEXT: pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4]4740; SSE2-NEXT: pandn %xmm1, %xmm04741; SSE2-NEXT: por %xmm0, %xmm24742; SSE2-NEXT: testl $4096, %eax ## imm = 0x10004743; SSE2-NEXT: je LBB24_264744; SSE2-NEXT: LBB24_25: ## %cond.load344745; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255]4746; SSE2-NEXT: pand %xmm0, %xmm24747; SSE2-NEXT: movzbl 12(%rdi), %ecx4748; SSE2-NEXT: movd %ecx, %xmm14749; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,0,0,0]4750; SSE2-NEXT: pandn %xmm1, %xmm04751; SSE2-NEXT: por %xmm0, %xmm24752; SSE2-NEXT: testl $8192, %eax ## imm = 0x20004753; SSE2-NEXT: je LBB24_284754; SSE2-NEXT: LBB24_27: ## %cond.load374755; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255]4756; SSE2-NEXT: pand %xmm0, %xmm24757; SSE2-NEXT: movzbl 13(%rdi), %ecx4758; SSE2-NEXT: movd %ecx, %xmm14759; SSE2-NEXT: pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2]4760; SSE2-NEXT: pandn %xmm1, %xmm04761; SSE2-NEXT: por %xmm0, %xmm24762; SSE2-NEXT: testl $16384, %eax ## imm = 0x40004763; SSE2-NEXT: je LBB24_304764; SSE2-NEXT: LBB24_29: ## %cond.load404765; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255]4766; SSE2-NEXT: pand %xmm0, %xmm24767; SSE2-NEXT: movzbl 14(%rdi), %ecx4768; SSE2-NEXT: movd %ecx, %xmm14769; SSE2-NEXT: pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1]4770; SSE2-NEXT: pandn %xmm1, %xmm04771; SSE2-NEXT: por %xmm0, %xmm24772; SSE2-NEXT: testw %ax, %ax4773; SSE2-NEXT: jns LBB24_324774; SSE2-NEXT: LBB24_31: ## %cond.load434775; SSE2-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm24776; SSE2-NEXT: movzbl 15(%rdi), %ecx4777; SSE2-NEXT: movd %ecx, %xmm04778; SSE2-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0]4779; SSE2-NEXT: por %xmm0, %xmm24780; SSE2-NEXT: testl $65536, %eax ## imm = 0x100004781; SSE2-NEXT: je LBB24_344782; SSE2-NEXT: LBB24_33: ## %cond.load464783; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]4784; SSE2-NEXT: pand %xmm0, %xmm34785; SSE2-NEXT: movzbl 16(%rdi), %ecx4786; SSE2-NEXT: movd %ecx, %xmm14787; SSE2-NEXT: pandn %xmm1, %xmm04788; SSE2-NEXT: por %xmm0, %xmm34789; SSE2-NEXT: testl $131072, %eax ## imm = 0x200004790; SSE2-NEXT: je LBB24_364791; SSE2-NEXT: LBB24_35: ## %cond.load494792; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255]4793; SSE2-NEXT: pand %xmm0, %xmm34794; SSE2-NEXT: movzbl 17(%rdi), %ecx4795; SSE2-NEXT: movd %ecx, %xmm14796; SSE2-NEXT: psllw $8, %xmm14797; SSE2-NEXT: pandn %xmm1, %xmm04798; SSE2-NEXT: por %xmm0, %xmm34799; SSE2-NEXT: testl $262144, %eax ## imm = 0x400004800; SSE2-NEXT: je LBB24_384801; SSE2-NEXT: LBB24_37: ## %cond.load524802; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255]4803; SSE2-NEXT: pand %xmm0, %xmm34804; SSE2-NEXT: movzbl 18(%rdi), %ecx4805; SSE2-NEXT: movd %ecx, %xmm14806; SSE2-NEXT: pslld $16, %xmm14807; SSE2-NEXT: pandn %xmm1, %xmm04808; SSE2-NEXT: por %xmm0, %xmm34809; SSE2-NEXT: testl $524288, %eax ## imm = 0x800004810; SSE2-NEXT: je LBB24_404811; SSE2-NEXT: LBB24_39: ## %cond.load554812; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255]4813; SSE2-NEXT: pand %xmm0, %xmm34814; SSE2-NEXT: movzbl 19(%rdi), %ecx4815; SSE2-NEXT: movd %ecx, %xmm14816; SSE2-NEXT: pslld $24, %xmm14817; SSE2-NEXT: pandn %xmm1, %xmm04818; SSE2-NEXT: por %xmm0, %xmm34819; SSE2-NEXT: testl $1048576, %eax ## imm = 0x1000004820; SSE2-NEXT: je LBB24_424821; SSE2-NEXT: LBB24_41: ## %cond.load584822; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255]4823; SSE2-NEXT: pand %xmm0, %xmm34824; SSE2-NEXT: movzbl 20(%rdi), %ecx4825; SSE2-NEXT: movd %ecx, %xmm14826; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,0,1,1]4827; SSE2-NEXT: pandn %xmm1, %xmm04828; SSE2-NEXT: por %xmm0, %xmm34829; SSE2-NEXT: testl $2097152, %eax ## imm = 0x2000004830; SSE2-NEXT: je LBB24_444831; SSE2-NEXT: LBB24_43: ## %cond.load614832; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255]4833; SSE2-NEXT: pand %xmm0, %xmm34834; SSE2-NEXT: movzbl 21(%rdi), %ecx4835; SSE2-NEXT: movd %ecx, %xmm14836; SSE2-NEXT: psllq $40, %xmm14837; SSE2-NEXT: pandn %xmm1, %xmm04838; SSE2-NEXT: por %xmm0, %xmm34839; SSE2-NEXT: testl $4194304, %eax ## imm = 0x4000004840; SSE2-NEXT: je LBB24_464841; SSE2-NEXT: LBB24_45: ## %cond.load644842; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255]4843; SSE2-NEXT: pand %xmm0, %xmm34844; SSE2-NEXT: movzbl 22(%rdi), %ecx4845; SSE2-NEXT: movd %ecx, %xmm14846; SSE2-NEXT: psllq $48, %xmm14847; SSE2-NEXT: pandn %xmm1, %xmm04848; SSE2-NEXT: por %xmm0, %xmm34849; SSE2-NEXT: testl $8388608, %eax ## imm = 0x8000004850; SSE2-NEXT: je LBB24_484851; SSE2-NEXT: LBB24_47: ## %cond.load674852; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255]4853; SSE2-NEXT: pand %xmm0, %xmm34854; SSE2-NEXT: movzbl 23(%rdi), %ecx4855; SSE2-NEXT: movd %ecx, %xmm14856; SSE2-NEXT: psllq $56, %xmm14857; SSE2-NEXT: pandn %xmm1, %xmm04858; SSE2-NEXT: por %xmm0, %xmm34859; SSE2-NEXT: testl $16777216, %eax ## imm = 0x10000004860; SSE2-NEXT: je LBB24_504861; SSE2-NEXT: LBB24_49: ## %cond.load704862; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255]4863; SSE2-NEXT: pand %xmm0, %xmm34864; SSE2-NEXT: movzbl 24(%rdi), %ecx4865; SSE2-NEXT: movd %ecx, %xmm14866; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,1,0,1]4867; SSE2-NEXT: pandn %xmm1, %xmm04868; SSE2-NEXT: por %xmm0, %xmm34869; SSE2-NEXT: testl $33554432, %eax ## imm = 0x20000004870; SSE2-NEXT: je LBB24_524871; SSE2-NEXT: LBB24_51: ## %cond.load734872; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255]4873; SSE2-NEXT: pand %xmm0, %xmm34874; SSE2-NEXT: movzbl 25(%rdi), %ecx4875; SSE2-NEXT: movd %ecx, %xmm14876; SSE2-NEXT: pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5,6]4877; SSE2-NEXT: pandn %xmm1, %xmm04878; SSE2-NEXT: por %xmm0, %xmm34879; SSE2-NEXT: testl $67108864, %eax ## imm = 0x40000004880; SSE2-NEXT: je LBB24_544881; SSE2-NEXT: LBB24_53: ## %cond.load764882; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255]4883; SSE2-NEXT: pand %xmm0, %xmm34884; SSE2-NEXT: movzbl 26(%rdi), %ecx4885; SSE2-NEXT: movd %ecx, %xmm14886; SSE2-NEXT: pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4,5]4887; SSE2-NEXT: pandn %xmm1, %xmm04888; SSE2-NEXT: por %xmm0, %xmm34889; SSE2-NEXT: testl $134217728, %eax ## imm = 0x80000004890; SSE2-NEXT: je LBB24_564891; SSE2-NEXT: LBB24_55: ## %cond.load794892; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255]4893; SSE2-NEXT: pand %xmm0, %xmm34894; SSE2-NEXT: movzbl 27(%rdi), %ecx4895; SSE2-NEXT: movd %ecx, %xmm14896; SSE2-NEXT: pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2,3,4]4897; SSE2-NEXT: pandn %xmm1, %xmm04898; SSE2-NEXT: por %xmm0, %xmm34899; SSE2-NEXT: testl $268435456, %eax ## imm = 0x100000004900; SSE2-NEXT: je LBB24_584901; SSE2-NEXT: LBB24_57: ## %cond.load824902; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255]4903; SSE2-NEXT: pand %xmm0, %xmm34904; SSE2-NEXT: movzbl 28(%rdi), %ecx4905; SSE2-NEXT: movd %ecx, %xmm14906; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,0,0,0]4907; SSE2-NEXT: pandn %xmm1, %xmm04908; SSE2-NEXT: por %xmm0, %xmm34909; SSE2-NEXT: testl $536870912, %eax ## imm = 0x200000004910; SSE2-NEXT: je LBB24_604911; SSE2-NEXT: LBB24_59: ## %cond.load854912; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255]4913; SSE2-NEXT: pand %xmm0, %xmm34914; SSE2-NEXT: movzbl 29(%rdi), %ecx4915; SSE2-NEXT: movd %ecx, %xmm14916; SSE2-NEXT: pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1,2]4917; SSE2-NEXT: pandn %xmm1, %xmm04918; SSE2-NEXT: por %xmm0, %xmm34919; SSE2-NEXT: testl $1073741824, %eax ## imm = 0x400000004920; SSE2-NEXT: je LBB24_624921; SSE2-NEXT: LBB24_61: ## %cond.load884922; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255]4923; SSE2-NEXT: pand %xmm0, %xmm34924; SSE2-NEXT: movzbl 30(%rdi), %ecx4925; SSE2-NEXT: movd %ecx, %xmm14926; SSE2-NEXT: pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1]4927; SSE2-NEXT: pandn %xmm1, %xmm04928; SSE2-NEXT: por %xmm0, %xmm34929; SSE2-NEXT: testl $-2147483648, %eax ## imm = 0x800000004930; SSE2-NEXT: jne LBB24_634931; SSE2-NEXT: jmp LBB24_644932;4933; SSE42-LABEL: load_v32i8_v32i8:4934; SSE42: ## %bb.0:4935; SSE42-NEXT: pmovmskb %xmm0, %ecx4936; SSE42-NEXT: pmovmskb %xmm1, %eax4937; SSE42-NEXT: shll $16, %eax4938; SSE42-NEXT: orl %ecx, %eax4939; SSE42-NEXT: testb $1, %al4940; SSE42-NEXT: jne LBB24_14941; SSE42-NEXT: ## %bb.2: ## %else4942; SSE42-NEXT: testb $2, %al4943; SSE42-NEXT: jne LBB24_34944; SSE42-NEXT: LBB24_4: ## %else24945; SSE42-NEXT: testb $4, %al4946; SSE42-NEXT: jne LBB24_54947; SSE42-NEXT: LBB24_6: ## %else54948; SSE42-NEXT: testb $8, %al4949; SSE42-NEXT: jne LBB24_74950; SSE42-NEXT: LBB24_8: ## %else84951; SSE42-NEXT: testb $16, %al4952; SSE42-NEXT: jne LBB24_94953; SSE42-NEXT: LBB24_10: ## %else114954; SSE42-NEXT: testb $32, %al4955; SSE42-NEXT: jne LBB24_114956; SSE42-NEXT: LBB24_12: ## %else144957; SSE42-NEXT: testb $64, %al4958; SSE42-NEXT: jne LBB24_134959; SSE42-NEXT: LBB24_14: ## %else174960; SSE42-NEXT: testb %al, %al4961; SSE42-NEXT: js LBB24_154962; SSE42-NEXT: LBB24_16: ## %else204963; SSE42-NEXT: testl $256, %eax ## imm = 0x1004964; SSE42-NEXT: jne LBB24_174965; SSE42-NEXT: LBB24_18: ## %else234966; SSE42-NEXT: testl $512, %eax ## imm = 0x2004967; SSE42-NEXT: jne LBB24_194968; SSE42-NEXT: LBB24_20: ## %else264969; SSE42-NEXT: testl $1024, %eax ## imm = 0x4004970; SSE42-NEXT: jne LBB24_214971; SSE42-NEXT: LBB24_22: ## %else294972; SSE42-NEXT: testl $2048, %eax ## imm = 0x8004973; SSE42-NEXT: jne LBB24_234974; SSE42-NEXT: LBB24_24: ## %else324975; SSE42-NEXT: testl $4096, %eax ## imm = 0x10004976; SSE42-NEXT: jne LBB24_254977; SSE42-NEXT: LBB24_26: ## %else354978; SSE42-NEXT: testl $8192, %eax ## imm = 0x20004979; SSE42-NEXT: jne LBB24_274980; SSE42-NEXT: LBB24_28: ## %else384981; SSE42-NEXT: testl $16384, %eax ## imm = 0x40004982; SSE42-NEXT: jne LBB24_294983; SSE42-NEXT: LBB24_30: ## %else414984; SSE42-NEXT: testw %ax, %ax4985; SSE42-NEXT: js LBB24_314986; SSE42-NEXT: LBB24_32: ## %else444987; SSE42-NEXT: testl $65536, %eax ## imm = 0x100004988; SSE42-NEXT: jne LBB24_334989; SSE42-NEXT: LBB24_34: ## %else474990; SSE42-NEXT: testl $131072, %eax ## imm = 0x200004991; SSE42-NEXT: jne LBB24_354992; SSE42-NEXT: LBB24_36: ## %else504993; SSE42-NEXT: testl $262144, %eax ## imm = 0x400004994; SSE42-NEXT: jne LBB24_374995; SSE42-NEXT: LBB24_38: ## %else534996; SSE42-NEXT: testl $524288, %eax ## imm = 0x800004997; SSE42-NEXT: jne LBB24_394998; SSE42-NEXT: LBB24_40: ## %else564999; SSE42-NEXT: testl $1048576, %eax ## imm = 0x1000005000; SSE42-NEXT: jne LBB24_415001; SSE42-NEXT: LBB24_42: ## %else595002; SSE42-NEXT: testl $2097152, %eax ## imm = 0x2000005003; SSE42-NEXT: jne LBB24_435004; SSE42-NEXT: LBB24_44: ## %else625005; SSE42-NEXT: testl $4194304, %eax ## imm = 0x4000005006; SSE42-NEXT: jne LBB24_455007; SSE42-NEXT: LBB24_46: ## %else655008; SSE42-NEXT: testl $8388608, %eax ## imm = 0x8000005009; SSE42-NEXT: jne LBB24_475010; SSE42-NEXT: LBB24_48: ## %else685011; SSE42-NEXT: testl $16777216, %eax ## imm = 0x10000005012; SSE42-NEXT: jne LBB24_495013; SSE42-NEXT: LBB24_50: ## %else715014; SSE42-NEXT: testl $33554432, %eax ## imm = 0x20000005015; SSE42-NEXT: jne LBB24_515016; SSE42-NEXT: LBB24_52: ## %else745017; SSE42-NEXT: testl $67108864, %eax ## imm = 0x40000005018; SSE42-NEXT: jne LBB24_535019; SSE42-NEXT: LBB24_54: ## %else775020; SSE42-NEXT: testl $134217728, %eax ## imm = 0x80000005021; SSE42-NEXT: jne LBB24_555022; SSE42-NEXT: LBB24_56: ## %else805023; SSE42-NEXT: testl $268435456, %eax ## imm = 0x100000005024; SSE42-NEXT: jne LBB24_575025; SSE42-NEXT: LBB24_58: ## %else835026; SSE42-NEXT: testl $536870912, %eax ## imm = 0x200000005027; SSE42-NEXT: jne LBB24_595028; SSE42-NEXT: LBB24_60: ## %else865029; SSE42-NEXT: testl $1073741824, %eax ## imm = 0x400000005030; SSE42-NEXT: jne LBB24_615031; SSE42-NEXT: LBB24_62: ## %else895032; SSE42-NEXT: testl $-2147483648, %eax ## imm = 0x800000005033; SSE42-NEXT: je LBB24_645034; SSE42-NEXT: LBB24_63: ## %cond.load915035; SSE42-NEXT: pinsrb $15, 31(%rdi), %xmm35036; SSE42-NEXT: LBB24_64: ## %else925037; SSE42-NEXT: movdqa %xmm2, %xmm05038; SSE42-NEXT: movdqa %xmm3, %xmm15039; SSE42-NEXT: retq5040; SSE42-NEXT: LBB24_1: ## %cond.load5041; SSE42-NEXT: pinsrb $0, (%rdi), %xmm25042; SSE42-NEXT: testb $2, %al5043; SSE42-NEXT: je LBB24_45044; SSE42-NEXT: LBB24_3: ## %cond.load15045; SSE42-NEXT: pinsrb $1, 1(%rdi), %xmm25046; SSE42-NEXT: testb $4, %al5047; SSE42-NEXT: je LBB24_65048; SSE42-NEXT: LBB24_5: ## %cond.load45049; SSE42-NEXT: pinsrb $2, 2(%rdi), %xmm25050; SSE42-NEXT: testb $8, %al5051; SSE42-NEXT: je LBB24_85052; SSE42-NEXT: LBB24_7: ## %cond.load75053; SSE42-NEXT: pinsrb $3, 3(%rdi), %xmm25054; SSE42-NEXT: testb $16, %al5055; SSE42-NEXT: je LBB24_105056; SSE42-NEXT: LBB24_9: ## %cond.load105057; SSE42-NEXT: pinsrb $4, 4(%rdi), %xmm25058; SSE42-NEXT: testb $32, %al5059; SSE42-NEXT: je LBB24_125060; SSE42-NEXT: LBB24_11: ## %cond.load135061; SSE42-NEXT: pinsrb $5, 5(%rdi), %xmm25062; SSE42-NEXT: testb $64, %al5063; SSE42-NEXT: je LBB24_145064; SSE42-NEXT: LBB24_13: ## %cond.load165065; SSE42-NEXT: pinsrb $6, 6(%rdi), %xmm25066; SSE42-NEXT: testb %al, %al5067; SSE42-NEXT: jns LBB24_165068; SSE42-NEXT: LBB24_15: ## %cond.load195069; SSE42-NEXT: pinsrb $7, 7(%rdi), %xmm25070; SSE42-NEXT: testl $256, %eax ## imm = 0x1005071; SSE42-NEXT: je LBB24_185072; SSE42-NEXT: LBB24_17: ## %cond.load225073; SSE42-NEXT: pinsrb $8, 8(%rdi), %xmm25074; SSE42-NEXT: testl $512, %eax ## imm = 0x2005075; SSE42-NEXT: je LBB24_205076; SSE42-NEXT: LBB24_19: ## %cond.load255077; SSE42-NEXT: pinsrb $9, 9(%rdi), %xmm25078; SSE42-NEXT: testl $1024, %eax ## imm = 0x4005079; SSE42-NEXT: je LBB24_225080; SSE42-NEXT: LBB24_21: ## %cond.load285081; SSE42-NEXT: pinsrb $10, 10(%rdi), %xmm25082; SSE42-NEXT: testl $2048, %eax ## imm = 0x8005083; SSE42-NEXT: je LBB24_245084; SSE42-NEXT: LBB24_23: ## %cond.load315085; SSE42-NEXT: pinsrb $11, 11(%rdi), %xmm25086; SSE42-NEXT: testl $4096, %eax ## imm = 0x10005087; SSE42-NEXT: je LBB24_265088; SSE42-NEXT: LBB24_25: ## %cond.load345089; SSE42-NEXT: pinsrb $12, 12(%rdi), %xmm25090; SSE42-NEXT: testl $8192, %eax ## imm = 0x20005091; SSE42-NEXT: je LBB24_285092; SSE42-NEXT: LBB24_27: ## %cond.load375093; SSE42-NEXT: pinsrb $13, 13(%rdi), %xmm25094; SSE42-NEXT: testl $16384, %eax ## imm = 0x40005095; SSE42-NEXT: je LBB24_305096; SSE42-NEXT: LBB24_29: ## %cond.load405097; SSE42-NEXT: pinsrb $14, 14(%rdi), %xmm25098; SSE42-NEXT: testw %ax, %ax5099; SSE42-NEXT: jns LBB24_325100; SSE42-NEXT: LBB24_31: ## %cond.load435101; SSE42-NEXT: pinsrb $15, 15(%rdi), %xmm25102; SSE42-NEXT: testl $65536, %eax ## imm = 0x100005103; SSE42-NEXT: je LBB24_345104; SSE42-NEXT: LBB24_33: ## %cond.load465105; SSE42-NEXT: pinsrb $0, 16(%rdi), %xmm35106; SSE42-NEXT: testl $131072, %eax ## imm = 0x200005107; SSE42-NEXT: je LBB24_365108; SSE42-NEXT: LBB24_35: ## %cond.load495109; SSE42-NEXT: pinsrb $1, 17(%rdi), %xmm35110; SSE42-NEXT: testl $262144, %eax ## imm = 0x400005111; SSE42-NEXT: je LBB24_385112; SSE42-NEXT: LBB24_37: ## %cond.load525113; SSE42-NEXT: pinsrb $2, 18(%rdi), %xmm35114; SSE42-NEXT: testl $524288, %eax ## imm = 0x800005115; SSE42-NEXT: je LBB24_405116; SSE42-NEXT: LBB24_39: ## %cond.load555117; SSE42-NEXT: pinsrb $3, 19(%rdi), %xmm35118; SSE42-NEXT: testl $1048576, %eax ## imm = 0x1000005119; SSE42-NEXT: je LBB24_425120; SSE42-NEXT: LBB24_41: ## %cond.load585121; SSE42-NEXT: pinsrb $4, 20(%rdi), %xmm35122; SSE42-NEXT: testl $2097152, %eax ## imm = 0x2000005123; SSE42-NEXT: je LBB24_445124; SSE42-NEXT: LBB24_43: ## %cond.load615125; SSE42-NEXT: pinsrb $5, 21(%rdi), %xmm35126; SSE42-NEXT: testl $4194304, %eax ## imm = 0x4000005127; SSE42-NEXT: je LBB24_465128; SSE42-NEXT: LBB24_45: ## %cond.load645129; SSE42-NEXT: pinsrb $6, 22(%rdi), %xmm35130; SSE42-NEXT: testl $8388608, %eax ## imm = 0x8000005131; SSE42-NEXT: je LBB24_485132; SSE42-NEXT: LBB24_47: ## %cond.load675133; SSE42-NEXT: pinsrb $7, 23(%rdi), %xmm35134; SSE42-NEXT: testl $16777216, %eax ## imm = 0x10000005135; SSE42-NEXT: je LBB24_505136; SSE42-NEXT: LBB24_49: ## %cond.load705137; SSE42-NEXT: pinsrb $8, 24(%rdi), %xmm35138; SSE42-NEXT: testl $33554432, %eax ## imm = 0x20000005139; SSE42-NEXT: je LBB24_525140; SSE42-NEXT: LBB24_51: ## %cond.load735141; SSE42-NEXT: pinsrb $9, 25(%rdi), %xmm35142; SSE42-NEXT: testl $67108864, %eax ## imm = 0x40000005143; SSE42-NEXT: je LBB24_545144; SSE42-NEXT: LBB24_53: ## %cond.load765145; SSE42-NEXT: pinsrb $10, 26(%rdi), %xmm35146; SSE42-NEXT: testl $134217728, %eax ## imm = 0x80000005147; SSE42-NEXT: je LBB24_565148; SSE42-NEXT: LBB24_55: ## %cond.load795149; SSE42-NEXT: pinsrb $11, 27(%rdi), %xmm35150; SSE42-NEXT: testl $268435456, %eax ## imm = 0x100000005151; SSE42-NEXT: je LBB24_585152; SSE42-NEXT: LBB24_57: ## %cond.load825153; SSE42-NEXT: pinsrb $12, 28(%rdi), %xmm35154; SSE42-NEXT: testl $536870912, %eax ## imm = 0x200000005155; SSE42-NEXT: je LBB24_605156; SSE42-NEXT: LBB24_59: ## %cond.load855157; SSE42-NEXT: pinsrb $13, 29(%rdi), %xmm35158; SSE42-NEXT: testl $1073741824, %eax ## imm = 0x400000005159; SSE42-NEXT: je LBB24_625160; SSE42-NEXT: LBB24_61: ## %cond.load885161; SSE42-NEXT: pinsrb $14, 30(%rdi), %xmm35162; SSE42-NEXT: testl $-2147483648, %eax ## imm = 0x800000005163; SSE42-NEXT: jne LBB24_635164; SSE42-NEXT: jmp LBB24_645165;5166; AVX1-LABEL: load_v32i8_v32i8:5167; AVX1: ## %bb.0:5168; AVX1-NEXT: vpmovmskb %xmm0, %ecx5169; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm05170; AVX1-NEXT: vpmovmskb %xmm0, %eax5171; AVX1-NEXT: shll $16, %eax5172; AVX1-NEXT: orl %ecx, %eax5173; AVX1-NEXT: testb $1, %al5174; AVX1-NEXT: jne LBB24_15175; AVX1-NEXT: ## %bb.2: ## %else5176; AVX1-NEXT: testb $2, %al5177; AVX1-NEXT: jne LBB24_35178; AVX1-NEXT: LBB24_4: ## %else25179; AVX1-NEXT: testb $4, %al5180; AVX1-NEXT: jne LBB24_55181; AVX1-NEXT: LBB24_6: ## %else55182; AVX1-NEXT: testb $8, %al5183; AVX1-NEXT: jne LBB24_75184; AVX1-NEXT: LBB24_8: ## %else85185; AVX1-NEXT: testb $16, %al5186; AVX1-NEXT: jne LBB24_95187; AVX1-NEXT: LBB24_10: ## %else115188; AVX1-NEXT: testb $32, %al5189; AVX1-NEXT: jne LBB24_115190; AVX1-NEXT: LBB24_12: ## %else145191; AVX1-NEXT: testb $64, %al5192; AVX1-NEXT: jne LBB24_135193; AVX1-NEXT: LBB24_14: ## %else175194; AVX1-NEXT: testb %al, %al5195; AVX1-NEXT: js LBB24_155196; AVX1-NEXT: LBB24_16: ## %else205197; AVX1-NEXT: testl $256, %eax ## imm = 0x1005198; AVX1-NEXT: jne LBB24_175199; AVX1-NEXT: LBB24_18: ## %else235200; AVX1-NEXT: testl $512, %eax ## imm = 0x2005201; AVX1-NEXT: jne LBB24_195202; AVX1-NEXT: LBB24_20: ## %else265203; AVX1-NEXT: testl $1024, %eax ## imm = 0x4005204; AVX1-NEXT: jne LBB24_215205; AVX1-NEXT: LBB24_22: ## %else295206; AVX1-NEXT: testl $2048, %eax ## imm = 0x8005207; AVX1-NEXT: jne LBB24_235208; AVX1-NEXT: LBB24_24: ## %else325209; AVX1-NEXT: testl $4096, %eax ## imm = 0x10005210; AVX1-NEXT: jne LBB24_255211; AVX1-NEXT: LBB24_26: ## %else355212; AVX1-NEXT: testl $8192, %eax ## imm = 0x20005213; AVX1-NEXT: jne LBB24_275214; AVX1-NEXT: LBB24_28: ## %else385215; AVX1-NEXT: testl $16384, %eax ## imm = 0x40005216; AVX1-NEXT: jne LBB24_295217; AVX1-NEXT: LBB24_30: ## %else415218; AVX1-NEXT: testw %ax, %ax5219; AVX1-NEXT: js LBB24_315220; AVX1-NEXT: LBB24_32: ## %else445221; AVX1-NEXT: testl $65536, %eax ## imm = 0x100005222; AVX1-NEXT: jne LBB24_335223; AVX1-NEXT: LBB24_34: ## %else475224; AVX1-NEXT: testl $131072, %eax ## imm = 0x200005225; AVX1-NEXT: jne LBB24_355226; AVX1-NEXT: LBB24_36: ## %else505227; AVX1-NEXT: testl $262144, %eax ## imm = 0x400005228; AVX1-NEXT: jne LBB24_375229; AVX1-NEXT: LBB24_38: ## %else535230; AVX1-NEXT: testl $524288, %eax ## imm = 0x800005231; AVX1-NEXT: jne LBB24_395232; AVX1-NEXT: LBB24_40: ## %else565233; AVX1-NEXT: testl $1048576, %eax ## imm = 0x1000005234; AVX1-NEXT: jne LBB24_415235; AVX1-NEXT: LBB24_42: ## %else595236; AVX1-NEXT: testl $2097152, %eax ## imm = 0x2000005237; AVX1-NEXT: jne LBB24_435238; AVX1-NEXT: LBB24_44: ## %else625239; AVX1-NEXT: testl $4194304, %eax ## imm = 0x4000005240; AVX1-NEXT: jne LBB24_455241; AVX1-NEXT: LBB24_46: ## %else655242; AVX1-NEXT: testl $8388608, %eax ## imm = 0x8000005243; AVX1-NEXT: jne LBB24_475244; AVX1-NEXT: LBB24_48: ## %else685245; AVX1-NEXT: testl $16777216, %eax ## imm = 0x10000005246; AVX1-NEXT: jne LBB24_495247; AVX1-NEXT: LBB24_50: ## %else715248; AVX1-NEXT: testl $33554432, %eax ## imm = 0x20000005249; AVX1-NEXT: jne LBB24_515250; AVX1-NEXT: LBB24_52: ## %else745251; AVX1-NEXT: testl $67108864, %eax ## imm = 0x40000005252; AVX1-NEXT: jne LBB24_535253; AVX1-NEXT: LBB24_54: ## %else775254; AVX1-NEXT: testl $134217728, %eax ## imm = 0x80000005255; AVX1-NEXT: jne LBB24_555256; AVX1-NEXT: LBB24_56: ## %else805257; AVX1-NEXT: testl $268435456, %eax ## imm = 0x100000005258; AVX1-NEXT: jne LBB24_575259; AVX1-NEXT: LBB24_58: ## %else835260; AVX1-NEXT: testl $536870912, %eax ## imm = 0x200000005261; AVX1-NEXT: jne LBB24_595262; AVX1-NEXT: LBB24_60: ## %else865263; AVX1-NEXT: testl $1073741824, %eax ## imm = 0x400000005264; AVX1-NEXT: jne LBB24_615265; AVX1-NEXT: LBB24_62: ## %else895266; AVX1-NEXT: testl $-2147483648, %eax ## imm = 0x800000005267; AVX1-NEXT: jne LBB24_635268; AVX1-NEXT: LBB24_64: ## %else925269; AVX1-NEXT: vmovaps %ymm1, %ymm05270; AVX1-NEXT: retq5271; AVX1-NEXT: LBB24_1: ## %cond.load5272; AVX1-NEXT: vpinsrb $0, (%rdi), %xmm1, %xmm05273; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5274; AVX1-NEXT: testb $2, %al5275; AVX1-NEXT: je LBB24_45276; AVX1-NEXT: LBB24_3: ## %cond.load15277; AVX1-NEXT: vpinsrb $1, 1(%rdi), %xmm1, %xmm05278; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5279; AVX1-NEXT: testb $4, %al5280; AVX1-NEXT: je LBB24_65281; AVX1-NEXT: LBB24_5: ## %cond.load45282; AVX1-NEXT: vpinsrb $2, 2(%rdi), %xmm1, %xmm05283; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5284; AVX1-NEXT: testb $8, %al5285; AVX1-NEXT: je LBB24_85286; AVX1-NEXT: LBB24_7: ## %cond.load75287; AVX1-NEXT: vpinsrb $3, 3(%rdi), %xmm1, %xmm05288; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5289; AVX1-NEXT: testb $16, %al5290; AVX1-NEXT: je LBB24_105291; AVX1-NEXT: LBB24_9: ## %cond.load105292; AVX1-NEXT: vpinsrb $4, 4(%rdi), %xmm1, %xmm05293; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5294; AVX1-NEXT: testb $32, %al5295; AVX1-NEXT: je LBB24_125296; AVX1-NEXT: LBB24_11: ## %cond.load135297; AVX1-NEXT: vpinsrb $5, 5(%rdi), %xmm1, %xmm05298; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5299; AVX1-NEXT: testb $64, %al5300; AVX1-NEXT: je LBB24_145301; AVX1-NEXT: LBB24_13: ## %cond.load165302; AVX1-NEXT: vpinsrb $6, 6(%rdi), %xmm1, %xmm05303; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5304; AVX1-NEXT: testb %al, %al5305; AVX1-NEXT: jns LBB24_165306; AVX1-NEXT: LBB24_15: ## %cond.load195307; AVX1-NEXT: vpinsrb $7, 7(%rdi), %xmm1, %xmm05308; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5309; AVX1-NEXT: testl $256, %eax ## imm = 0x1005310; AVX1-NEXT: je LBB24_185311; AVX1-NEXT: LBB24_17: ## %cond.load225312; AVX1-NEXT: vpinsrb $8, 8(%rdi), %xmm1, %xmm05313; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5314; AVX1-NEXT: testl $512, %eax ## imm = 0x2005315; AVX1-NEXT: je LBB24_205316; AVX1-NEXT: LBB24_19: ## %cond.load255317; AVX1-NEXT: vpinsrb $9, 9(%rdi), %xmm1, %xmm05318; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5319; AVX1-NEXT: testl $1024, %eax ## imm = 0x4005320; AVX1-NEXT: je LBB24_225321; AVX1-NEXT: LBB24_21: ## %cond.load285322; AVX1-NEXT: vpinsrb $10, 10(%rdi), %xmm1, %xmm05323; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5324; AVX1-NEXT: testl $2048, %eax ## imm = 0x8005325; AVX1-NEXT: je LBB24_245326; AVX1-NEXT: LBB24_23: ## %cond.load315327; AVX1-NEXT: vpinsrb $11, 11(%rdi), %xmm1, %xmm05328; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5329; AVX1-NEXT: testl $4096, %eax ## imm = 0x10005330; AVX1-NEXT: je LBB24_265331; AVX1-NEXT: LBB24_25: ## %cond.load345332; AVX1-NEXT: vpinsrb $12, 12(%rdi), %xmm1, %xmm05333; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5334; AVX1-NEXT: testl $8192, %eax ## imm = 0x20005335; AVX1-NEXT: je LBB24_285336; AVX1-NEXT: LBB24_27: ## %cond.load375337; AVX1-NEXT: vpinsrb $13, 13(%rdi), %xmm1, %xmm05338; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5339; AVX1-NEXT: testl $16384, %eax ## imm = 0x40005340; AVX1-NEXT: je LBB24_305341; AVX1-NEXT: LBB24_29: ## %cond.load405342; AVX1-NEXT: vpinsrb $14, 14(%rdi), %xmm1, %xmm05343; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5344; AVX1-NEXT: testw %ax, %ax5345; AVX1-NEXT: jns LBB24_325346; AVX1-NEXT: LBB24_31: ## %cond.load435347; AVX1-NEXT: vpinsrb $15, 15(%rdi), %xmm1, %xmm05348; AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5349; AVX1-NEXT: testl $65536, %eax ## imm = 0x100005350; AVX1-NEXT: je LBB24_345351; AVX1-NEXT: LBB24_33: ## %cond.load465352; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm05353; AVX1-NEXT: vpinsrb $0, 16(%rdi), %xmm0, %xmm05354; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm15355; AVX1-NEXT: testl $131072, %eax ## imm = 0x200005356; AVX1-NEXT: je LBB24_365357; AVX1-NEXT: LBB24_35: ## %cond.load495358; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm05359; AVX1-NEXT: vpinsrb $1, 17(%rdi), %xmm0, %xmm05360; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm15361; AVX1-NEXT: testl $262144, %eax ## imm = 0x400005362; AVX1-NEXT: je LBB24_385363; AVX1-NEXT: LBB24_37: ## %cond.load525364; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm05365; AVX1-NEXT: vpinsrb $2, 18(%rdi), %xmm0, %xmm05366; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm15367; AVX1-NEXT: testl $524288, %eax ## imm = 0x800005368; AVX1-NEXT: je LBB24_405369; AVX1-NEXT: LBB24_39: ## %cond.load555370; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm05371; AVX1-NEXT: vpinsrb $3, 19(%rdi), %xmm0, %xmm05372; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm15373; AVX1-NEXT: testl $1048576, %eax ## imm = 0x1000005374; AVX1-NEXT: je LBB24_425375; AVX1-NEXT: LBB24_41: ## %cond.load585376; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm05377; AVX1-NEXT: vpinsrb $4, 20(%rdi), %xmm0, %xmm05378; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm15379; AVX1-NEXT: testl $2097152, %eax ## imm = 0x2000005380; AVX1-NEXT: je LBB24_445381; AVX1-NEXT: LBB24_43: ## %cond.load615382; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm05383; AVX1-NEXT: vpinsrb $5, 21(%rdi), %xmm0, %xmm05384; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm15385; AVX1-NEXT: testl $4194304, %eax ## imm = 0x4000005386; AVX1-NEXT: je LBB24_465387; AVX1-NEXT: LBB24_45: ## %cond.load645388; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm05389; AVX1-NEXT: vpinsrb $6, 22(%rdi), %xmm0, %xmm05390; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm15391; AVX1-NEXT: testl $8388608, %eax ## imm = 0x8000005392; AVX1-NEXT: je LBB24_485393; AVX1-NEXT: LBB24_47: ## %cond.load675394; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm05395; AVX1-NEXT: vpinsrb $7, 23(%rdi), %xmm0, %xmm05396; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm15397; AVX1-NEXT: testl $16777216, %eax ## imm = 0x10000005398; AVX1-NEXT: je LBB24_505399; AVX1-NEXT: LBB24_49: ## %cond.load705400; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm05401; AVX1-NEXT: vpinsrb $8, 24(%rdi), %xmm0, %xmm05402; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm15403; AVX1-NEXT: testl $33554432, %eax ## imm = 0x20000005404; AVX1-NEXT: je LBB24_525405; AVX1-NEXT: LBB24_51: ## %cond.load735406; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm05407; AVX1-NEXT: vpinsrb $9, 25(%rdi), %xmm0, %xmm05408; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm15409; AVX1-NEXT: testl $67108864, %eax ## imm = 0x40000005410; AVX1-NEXT: je LBB24_545411; AVX1-NEXT: LBB24_53: ## %cond.load765412; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm05413; AVX1-NEXT: vpinsrb $10, 26(%rdi), %xmm0, %xmm05414; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm15415; AVX1-NEXT: testl $134217728, %eax ## imm = 0x80000005416; AVX1-NEXT: je LBB24_565417; AVX1-NEXT: LBB24_55: ## %cond.load795418; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm05419; AVX1-NEXT: vpinsrb $11, 27(%rdi), %xmm0, %xmm05420; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm15421; AVX1-NEXT: testl $268435456, %eax ## imm = 0x100000005422; AVX1-NEXT: je LBB24_585423; AVX1-NEXT: LBB24_57: ## %cond.load825424; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm05425; AVX1-NEXT: vpinsrb $12, 28(%rdi), %xmm0, %xmm05426; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm15427; AVX1-NEXT: testl $536870912, %eax ## imm = 0x200000005428; AVX1-NEXT: je LBB24_605429; AVX1-NEXT: LBB24_59: ## %cond.load855430; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm05431; AVX1-NEXT: vpinsrb $13, 29(%rdi), %xmm0, %xmm05432; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm15433; AVX1-NEXT: testl $1073741824, %eax ## imm = 0x400000005434; AVX1-NEXT: je LBB24_625435; AVX1-NEXT: LBB24_61: ## %cond.load885436; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm05437; AVX1-NEXT: vpinsrb $14, 30(%rdi), %xmm0, %xmm05438; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm15439; AVX1-NEXT: testl $-2147483648, %eax ## imm = 0x800000005440; AVX1-NEXT: je LBB24_645441; AVX1-NEXT: LBB24_63: ## %cond.load915442; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm05443; AVX1-NEXT: vpinsrb $15, 31(%rdi), %xmm0, %xmm05444; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm15445; AVX1-NEXT: vmovaps %ymm1, %ymm05446; AVX1-NEXT: retq5447;5448; AVX2-LABEL: load_v32i8_v32i8:5449; AVX2: ## %bb.0:5450; AVX2-NEXT: vpmovmskb %ymm0, %eax5451; AVX2-NEXT: testb $1, %al5452; AVX2-NEXT: jne LBB24_15453; AVX2-NEXT: ## %bb.2: ## %else5454; AVX2-NEXT: testb $2, %al5455; AVX2-NEXT: jne LBB24_35456; AVX2-NEXT: LBB24_4: ## %else25457; AVX2-NEXT: testb $4, %al5458; AVX2-NEXT: jne LBB24_55459; AVX2-NEXT: LBB24_6: ## %else55460; AVX2-NEXT: testb $8, %al5461; AVX2-NEXT: jne LBB24_75462; AVX2-NEXT: LBB24_8: ## %else85463; AVX2-NEXT: testb $16, %al5464; AVX2-NEXT: jne LBB24_95465; AVX2-NEXT: LBB24_10: ## %else115466; AVX2-NEXT: testb $32, %al5467; AVX2-NEXT: jne LBB24_115468; AVX2-NEXT: LBB24_12: ## %else145469; AVX2-NEXT: testb $64, %al5470; AVX2-NEXT: jne LBB24_135471; AVX2-NEXT: LBB24_14: ## %else175472; AVX2-NEXT: testb %al, %al5473; AVX2-NEXT: js LBB24_155474; AVX2-NEXT: LBB24_16: ## %else205475; AVX2-NEXT: testl $256, %eax ## imm = 0x1005476; AVX2-NEXT: jne LBB24_175477; AVX2-NEXT: LBB24_18: ## %else235478; AVX2-NEXT: testl $512, %eax ## imm = 0x2005479; AVX2-NEXT: jne LBB24_195480; AVX2-NEXT: LBB24_20: ## %else265481; AVX2-NEXT: testl $1024, %eax ## imm = 0x4005482; AVX2-NEXT: jne LBB24_215483; AVX2-NEXT: LBB24_22: ## %else295484; AVX2-NEXT: testl $2048, %eax ## imm = 0x8005485; AVX2-NEXT: jne LBB24_235486; AVX2-NEXT: LBB24_24: ## %else325487; AVX2-NEXT: testl $4096, %eax ## imm = 0x10005488; AVX2-NEXT: jne LBB24_255489; AVX2-NEXT: LBB24_26: ## %else355490; AVX2-NEXT: testl $8192, %eax ## imm = 0x20005491; AVX2-NEXT: jne LBB24_275492; AVX2-NEXT: LBB24_28: ## %else385493; AVX2-NEXT: testl $16384, %eax ## imm = 0x40005494; AVX2-NEXT: jne LBB24_295495; AVX2-NEXT: LBB24_30: ## %else415496; AVX2-NEXT: testw %ax, %ax5497; AVX2-NEXT: js LBB24_315498; AVX2-NEXT: LBB24_32: ## %else445499; AVX2-NEXT: testl $65536, %eax ## imm = 0x100005500; AVX2-NEXT: jne LBB24_335501; AVX2-NEXT: LBB24_34: ## %else475502; AVX2-NEXT: testl $131072, %eax ## imm = 0x200005503; AVX2-NEXT: jne LBB24_355504; AVX2-NEXT: LBB24_36: ## %else505505; AVX2-NEXT: testl $262144, %eax ## imm = 0x400005506; AVX2-NEXT: jne LBB24_375507; AVX2-NEXT: LBB24_38: ## %else535508; AVX2-NEXT: testl $524288, %eax ## imm = 0x800005509; AVX2-NEXT: jne LBB24_395510; AVX2-NEXT: LBB24_40: ## %else565511; AVX2-NEXT: testl $1048576, %eax ## imm = 0x1000005512; AVX2-NEXT: jne LBB24_415513; AVX2-NEXT: LBB24_42: ## %else595514; AVX2-NEXT: testl $2097152, %eax ## imm = 0x2000005515; AVX2-NEXT: jne LBB24_435516; AVX2-NEXT: LBB24_44: ## %else625517; AVX2-NEXT: testl $4194304, %eax ## imm = 0x4000005518; AVX2-NEXT: jne LBB24_455519; AVX2-NEXT: LBB24_46: ## %else655520; AVX2-NEXT: testl $8388608, %eax ## imm = 0x8000005521; AVX2-NEXT: jne LBB24_475522; AVX2-NEXT: LBB24_48: ## %else685523; AVX2-NEXT: testl $16777216, %eax ## imm = 0x10000005524; AVX2-NEXT: jne LBB24_495525; AVX2-NEXT: LBB24_50: ## %else715526; AVX2-NEXT: testl $33554432, %eax ## imm = 0x20000005527; AVX2-NEXT: jne LBB24_515528; AVX2-NEXT: LBB24_52: ## %else745529; AVX2-NEXT: testl $67108864, %eax ## imm = 0x40000005530; AVX2-NEXT: jne LBB24_535531; AVX2-NEXT: LBB24_54: ## %else775532; AVX2-NEXT: testl $134217728, %eax ## imm = 0x80000005533; AVX2-NEXT: jne LBB24_555534; AVX2-NEXT: LBB24_56: ## %else805535; AVX2-NEXT: testl $268435456, %eax ## imm = 0x100000005536; AVX2-NEXT: jne LBB24_575537; AVX2-NEXT: LBB24_58: ## %else835538; AVX2-NEXT: testl $536870912, %eax ## imm = 0x200000005539; AVX2-NEXT: jne LBB24_595540; AVX2-NEXT: LBB24_60: ## %else865541; AVX2-NEXT: testl $1073741824, %eax ## imm = 0x400000005542; AVX2-NEXT: jne LBB24_615543; AVX2-NEXT: LBB24_62: ## %else895544; AVX2-NEXT: testl $-2147483648, %eax ## imm = 0x800000005545; AVX2-NEXT: jne LBB24_635546; AVX2-NEXT: LBB24_64: ## %else925547; AVX2-NEXT: vmovdqa %ymm1, %ymm05548; AVX2-NEXT: retq5549; AVX2-NEXT: LBB24_1: ## %cond.load5550; AVX2-NEXT: vpinsrb $0, (%rdi), %xmm1, %xmm05551; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5552; AVX2-NEXT: testb $2, %al5553; AVX2-NEXT: je LBB24_45554; AVX2-NEXT: LBB24_3: ## %cond.load15555; AVX2-NEXT: vpinsrb $1, 1(%rdi), %xmm1, %xmm05556; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5557; AVX2-NEXT: testb $4, %al5558; AVX2-NEXT: je LBB24_65559; AVX2-NEXT: LBB24_5: ## %cond.load45560; AVX2-NEXT: vpinsrb $2, 2(%rdi), %xmm1, %xmm05561; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5562; AVX2-NEXT: testb $8, %al5563; AVX2-NEXT: je LBB24_85564; AVX2-NEXT: LBB24_7: ## %cond.load75565; AVX2-NEXT: vpinsrb $3, 3(%rdi), %xmm1, %xmm05566; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5567; AVX2-NEXT: testb $16, %al5568; AVX2-NEXT: je LBB24_105569; AVX2-NEXT: LBB24_9: ## %cond.load105570; AVX2-NEXT: vpinsrb $4, 4(%rdi), %xmm1, %xmm05571; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5572; AVX2-NEXT: testb $32, %al5573; AVX2-NEXT: je LBB24_125574; AVX2-NEXT: LBB24_11: ## %cond.load135575; AVX2-NEXT: vpinsrb $5, 5(%rdi), %xmm1, %xmm05576; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5577; AVX2-NEXT: testb $64, %al5578; AVX2-NEXT: je LBB24_145579; AVX2-NEXT: LBB24_13: ## %cond.load165580; AVX2-NEXT: vpinsrb $6, 6(%rdi), %xmm1, %xmm05581; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5582; AVX2-NEXT: testb %al, %al5583; AVX2-NEXT: jns LBB24_165584; AVX2-NEXT: LBB24_15: ## %cond.load195585; AVX2-NEXT: vpinsrb $7, 7(%rdi), %xmm1, %xmm05586; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5587; AVX2-NEXT: testl $256, %eax ## imm = 0x1005588; AVX2-NEXT: je LBB24_185589; AVX2-NEXT: LBB24_17: ## %cond.load225590; AVX2-NEXT: vpinsrb $8, 8(%rdi), %xmm1, %xmm05591; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5592; AVX2-NEXT: testl $512, %eax ## imm = 0x2005593; AVX2-NEXT: je LBB24_205594; AVX2-NEXT: LBB24_19: ## %cond.load255595; AVX2-NEXT: vpinsrb $9, 9(%rdi), %xmm1, %xmm05596; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5597; AVX2-NEXT: testl $1024, %eax ## imm = 0x4005598; AVX2-NEXT: je LBB24_225599; AVX2-NEXT: LBB24_21: ## %cond.load285600; AVX2-NEXT: vpinsrb $10, 10(%rdi), %xmm1, %xmm05601; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5602; AVX2-NEXT: testl $2048, %eax ## imm = 0x8005603; AVX2-NEXT: je LBB24_245604; AVX2-NEXT: LBB24_23: ## %cond.load315605; AVX2-NEXT: vpinsrb $11, 11(%rdi), %xmm1, %xmm05606; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5607; AVX2-NEXT: testl $4096, %eax ## imm = 0x10005608; AVX2-NEXT: je LBB24_265609; AVX2-NEXT: LBB24_25: ## %cond.load345610; AVX2-NEXT: vpinsrb $12, 12(%rdi), %xmm1, %xmm05611; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5612; AVX2-NEXT: testl $8192, %eax ## imm = 0x20005613; AVX2-NEXT: je LBB24_285614; AVX2-NEXT: LBB24_27: ## %cond.load375615; AVX2-NEXT: vpinsrb $13, 13(%rdi), %xmm1, %xmm05616; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5617; AVX2-NEXT: testl $16384, %eax ## imm = 0x40005618; AVX2-NEXT: je LBB24_305619; AVX2-NEXT: LBB24_29: ## %cond.load405620; AVX2-NEXT: vpinsrb $14, 14(%rdi), %xmm1, %xmm05621; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5622; AVX2-NEXT: testw %ax, %ax5623; AVX2-NEXT: jns LBB24_325624; AVX2-NEXT: LBB24_31: ## %cond.load435625; AVX2-NEXT: vpinsrb $15, 15(%rdi), %xmm1, %xmm05626; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5627; AVX2-NEXT: testl $65536, %eax ## imm = 0x100005628; AVX2-NEXT: je LBB24_345629; AVX2-NEXT: LBB24_33: ## %cond.load465630; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm05631; AVX2-NEXT: vpinsrb $0, 16(%rdi), %xmm0, %xmm05632; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15633; AVX2-NEXT: testl $131072, %eax ## imm = 0x200005634; AVX2-NEXT: je LBB24_365635; AVX2-NEXT: LBB24_35: ## %cond.load495636; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm05637; AVX2-NEXT: vpinsrb $1, 17(%rdi), %xmm0, %xmm05638; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15639; AVX2-NEXT: testl $262144, %eax ## imm = 0x400005640; AVX2-NEXT: je LBB24_385641; AVX2-NEXT: LBB24_37: ## %cond.load525642; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm05643; AVX2-NEXT: vpinsrb $2, 18(%rdi), %xmm0, %xmm05644; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15645; AVX2-NEXT: testl $524288, %eax ## imm = 0x800005646; AVX2-NEXT: je LBB24_405647; AVX2-NEXT: LBB24_39: ## %cond.load555648; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm05649; AVX2-NEXT: vpinsrb $3, 19(%rdi), %xmm0, %xmm05650; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15651; AVX2-NEXT: testl $1048576, %eax ## imm = 0x1000005652; AVX2-NEXT: je LBB24_425653; AVX2-NEXT: LBB24_41: ## %cond.load585654; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm05655; AVX2-NEXT: vpinsrb $4, 20(%rdi), %xmm0, %xmm05656; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15657; AVX2-NEXT: testl $2097152, %eax ## imm = 0x2000005658; AVX2-NEXT: je LBB24_445659; AVX2-NEXT: LBB24_43: ## %cond.load615660; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm05661; AVX2-NEXT: vpinsrb $5, 21(%rdi), %xmm0, %xmm05662; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15663; AVX2-NEXT: testl $4194304, %eax ## imm = 0x4000005664; AVX2-NEXT: je LBB24_465665; AVX2-NEXT: LBB24_45: ## %cond.load645666; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm05667; AVX2-NEXT: vpinsrb $6, 22(%rdi), %xmm0, %xmm05668; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15669; AVX2-NEXT: testl $8388608, %eax ## imm = 0x8000005670; AVX2-NEXT: je LBB24_485671; AVX2-NEXT: LBB24_47: ## %cond.load675672; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm05673; AVX2-NEXT: vpinsrb $7, 23(%rdi), %xmm0, %xmm05674; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15675; AVX2-NEXT: testl $16777216, %eax ## imm = 0x10000005676; AVX2-NEXT: je LBB24_505677; AVX2-NEXT: LBB24_49: ## %cond.load705678; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm05679; AVX2-NEXT: vpinsrb $8, 24(%rdi), %xmm0, %xmm05680; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15681; AVX2-NEXT: testl $33554432, %eax ## imm = 0x20000005682; AVX2-NEXT: je LBB24_525683; AVX2-NEXT: LBB24_51: ## %cond.load735684; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm05685; AVX2-NEXT: vpinsrb $9, 25(%rdi), %xmm0, %xmm05686; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15687; AVX2-NEXT: testl $67108864, %eax ## imm = 0x40000005688; AVX2-NEXT: je LBB24_545689; AVX2-NEXT: LBB24_53: ## %cond.load765690; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm05691; AVX2-NEXT: vpinsrb $10, 26(%rdi), %xmm0, %xmm05692; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15693; AVX2-NEXT: testl $134217728, %eax ## imm = 0x80000005694; AVX2-NEXT: je LBB24_565695; AVX2-NEXT: LBB24_55: ## %cond.load795696; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm05697; AVX2-NEXT: vpinsrb $11, 27(%rdi), %xmm0, %xmm05698; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15699; AVX2-NEXT: testl $268435456, %eax ## imm = 0x100000005700; AVX2-NEXT: je LBB24_585701; AVX2-NEXT: LBB24_57: ## %cond.load825702; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm05703; AVX2-NEXT: vpinsrb $12, 28(%rdi), %xmm0, %xmm05704; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15705; AVX2-NEXT: testl $536870912, %eax ## imm = 0x200000005706; AVX2-NEXT: je LBB24_605707; AVX2-NEXT: LBB24_59: ## %cond.load855708; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm05709; AVX2-NEXT: vpinsrb $13, 29(%rdi), %xmm0, %xmm05710; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15711; AVX2-NEXT: testl $1073741824, %eax ## imm = 0x400000005712; AVX2-NEXT: je LBB24_625713; AVX2-NEXT: LBB24_61: ## %cond.load885714; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm05715; AVX2-NEXT: vpinsrb $14, 30(%rdi), %xmm0, %xmm05716; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15717; AVX2-NEXT: testl $-2147483648, %eax ## imm = 0x800000005718; AVX2-NEXT: je LBB24_645719; AVX2-NEXT: LBB24_63: ## %cond.load915720; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm05721; AVX2-NEXT: vpinsrb $15, 31(%rdi), %xmm0, %xmm05722; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15723; AVX2-NEXT: vmovdqa %ymm1, %ymm05724; AVX2-NEXT: retq5725;5726; AVX512F-LABEL: load_v32i8_v32i8:5727; AVX512F: ## %bb.0:5728; AVX512F-NEXT: vpmovmskb %ymm0, %eax5729; AVX512F-NEXT: testb $1, %al5730; AVX512F-NEXT: jne LBB24_15731; AVX512F-NEXT: ## %bb.2: ## %else5732; AVX512F-NEXT: testb $2, %al5733; AVX512F-NEXT: jne LBB24_35734; AVX512F-NEXT: LBB24_4: ## %else25735; AVX512F-NEXT: testb $4, %al5736; AVX512F-NEXT: jne LBB24_55737; AVX512F-NEXT: LBB24_6: ## %else55738; AVX512F-NEXT: testb $8, %al5739; AVX512F-NEXT: jne LBB24_75740; AVX512F-NEXT: LBB24_8: ## %else85741; AVX512F-NEXT: testb $16, %al5742; AVX512F-NEXT: jne LBB24_95743; AVX512F-NEXT: LBB24_10: ## %else115744; AVX512F-NEXT: testb $32, %al5745; AVX512F-NEXT: jne LBB24_115746; AVX512F-NEXT: LBB24_12: ## %else145747; AVX512F-NEXT: testb $64, %al5748; AVX512F-NEXT: jne LBB24_135749; AVX512F-NEXT: LBB24_14: ## %else175750; AVX512F-NEXT: testb %al, %al5751; AVX512F-NEXT: js LBB24_155752; AVX512F-NEXT: LBB24_16: ## %else205753; AVX512F-NEXT: testl $256, %eax ## imm = 0x1005754; AVX512F-NEXT: jne LBB24_175755; AVX512F-NEXT: LBB24_18: ## %else235756; AVX512F-NEXT: testl $512, %eax ## imm = 0x2005757; AVX512F-NEXT: jne LBB24_195758; AVX512F-NEXT: LBB24_20: ## %else265759; AVX512F-NEXT: testl $1024, %eax ## imm = 0x4005760; AVX512F-NEXT: jne LBB24_215761; AVX512F-NEXT: LBB24_22: ## %else295762; AVX512F-NEXT: testl $2048, %eax ## imm = 0x8005763; AVX512F-NEXT: jne LBB24_235764; AVX512F-NEXT: LBB24_24: ## %else325765; AVX512F-NEXT: testl $4096, %eax ## imm = 0x10005766; AVX512F-NEXT: jne LBB24_255767; AVX512F-NEXT: LBB24_26: ## %else355768; AVX512F-NEXT: testl $8192, %eax ## imm = 0x20005769; AVX512F-NEXT: jne LBB24_275770; AVX512F-NEXT: LBB24_28: ## %else385771; AVX512F-NEXT: testl $16384, %eax ## imm = 0x40005772; AVX512F-NEXT: jne LBB24_295773; AVX512F-NEXT: LBB24_30: ## %else415774; AVX512F-NEXT: testw %ax, %ax5775; AVX512F-NEXT: js LBB24_315776; AVX512F-NEXT: LBB24_32: ## %else445777; AVX512F-NEXT: testl $65536, %eax ## imm = 0x100005778; AVX512F-NEXT: jne LBB24_335779; AVX512F-NEXT: LBB24_34: ## %else475780; AVX512F-NEXT: testl $131072, %eax ## imm = 0x200005781; AVX512F-NEXT: jne LBB24_355782; AVX512F-NEXT: LBB24_36: ## %else505783; AVX512F-NEXT: testl $262144, %eax ## imm = 0x400005784; AVX512F-NEXT: jne LBB24_375785; AVX512F-NEXT: LBB24_38: ## %else535786; AVX512F-NEXT: testl $524288, %eax ## imm = 0x800005787; AVX512F-NEXT: jne LBB24_395788; AVX512F-NEXT: LBB24_40: ## %else565789; AVX512F-NEXT: testl $1048576, %eax ## imm = 0x1000005790; AVX512F-NEXT: jne LBB24_415791; AVX512F-NEXT: LBB24_42: ## %else595792; AVX512F-NEXT: testl $2097152, %eax ## imm = 0x2000005793; AVX512F-NEXT: jne LBB24_435794; AVX512F-NEXT: LBB24_44: ## %else625795; AVX512F-NEXT: testl $4194304, %eax ## imm = 0x4000005796; AVX512F-NEXT: jne LBB24_455797; AVX512F-NEXT: LBB24_46: ## %else655798; AVX512F-NEXT: testl $8388608, %eax ## imm = 0x8000005799; AVX512F-NEXT: jne LBB24_475800; AVX512F-NEXT: LBB24_48: ## %else685801; AVX512F-NEXT: testl $16777216, %eax ## imm = 0x10000005802; AVX512F-NEXT: jne LBB24_495803; AVX512F-NEXT: LBB24_50: ## %else715804; AVX512F-NEXT: testl $33554432, %eax ## imm = 0x20000005805; AVX512F-NEXT: jne LBB24_515806; AVX512F-NEXT: LBB24_52: ## %else745807; AVX512F-NEXT: testl $67108864, %eax ## imm = 0x40000005808; AVX512F-NEXT: jne LBB24_535809; AVX512F-NEXT: LBB24_54: ## %else775810; AVX512F-NEXT: testl $134217728, %eax ## imm = 0x80000005811; AVX512F-NEXT: jne LBB24_555812; AVX512F-NEXT: LBB24_56: ## %else805813; AVX512F-NEXT: testl $268435456, %eax ## imm = 0x100000005814; AVX512F-NEXT: jne LBB24_575815; AVX512F-NEXT: LBB24_58: ## %else835816; AVX512F-NEXT: testl $536870912, %eax ## imm = 0x200000005817; AVX512F-NEXT: jne LBB24_595818; AVX512F-NEXT: LBB24_60: ## %else865819; AVX512F-NEXT: testl $1073741824, %eax ## imm = 0x400000005820; AVX512F-NEXT: jne LBB24_615821; AVX512F-NEXT: LBB24_62: ## %else895822; AVX512F-NEXT: testl $-2147483648, %eax ## imm = 0x800000005823; AVX512F-NEXT: jne LBB24_635824; AVX512F-NEXT: LBB24_64: ## %else925825; AVX512F-NEXT: vmovdqa %ymm1, %ymm05826; AVX512F-NEXT: retq5827; AVX512F-NEXT: LBB24_1: ## %cond.load5828; AVX512F-NEXT: vpinsrb $0, (%rdi), %xmm1, %xmm05829; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5830; AVX512F-NEXT: testb $2, %al5831; AVX512F-NEXT: je LBB24_45832; AVX512F-NEXT: LBB24_3: ## %cond.load15833; AVX512F-NEXT: vpinsrb $1, 1(%rdi), %xmm1, %xmm05834; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5835; AVX512F-NEXT: testb $4, %al5836; AVX512F-NEXT: je LBB24_65837; AVX512F-NEXT: LBB24_5: ## %cond.load45838; AVX512F-NEXT: vpinsrb $2, 2(%rdi), %xmm1, %xmm05839; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5840; AVX512F-NEXT: testb $8, %al5841; AVX512F-NEXT: je LBB24_85842; AVX512F-NEXT: LBB24_7: ## %cond.load75843; AVX512F-NEXT: vpinsrb $3, 3(%rdi), %xmm1, %xmm05844; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5845; AVX512F-NEXT: testb $16, %al5846; AVX512F-NEXT: je LBB24_105847; AVX512F-NEXT: LBB24_9: ## %cond.load105848; AVX512F-NEXT: vpinsrb $4, 4(%rdi), %xmm1, %xmm05849; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5850; AVX512F-NEXT: testb $32, %al5851; AVX512F-NEXT: je LBB24_125852; AVX512F-NEXT: LBB24_11: ## %cond.load135853; AVX512F-NEXT: vpinsrb $5, 5(%rdi), %xmm1, %xmm05854; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5855; AVX512F-NEXT: testb $64, %al5856; AVX512F-NEXT: je LBB24_145857; AVX512F-NEXT: LBB24_13: ## %cond.load165858; AVX512F-NEXT: vpinsrb $6, 6(%rdi), %xmm1, %xmm05859; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5860; AVX512F-NEXT: testb %al, %al5861; AVX512F-NEXT: jns LBB24_165862; AVX512F-NEXT: LBB24_15: ## %cond.load195863; AVX512F-NEXT: vpinsrb $7, 7(%rdi), %xmm1, %xmm05864; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5865; AVX512F-NEXT: testl $256, %eax ## imm = 0x1005866; AVX512F-NEXT: je LBB24_185867; AVX512F-NEXT: LBB24_17: ## %cond.load225868; AVX512F-NEXT: vpinsrb $8, 8(%rdi), %xmm1, %xmm05869; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5870; AVX512F-NEXT: testl $512, %eax ## imm = 0x2005871; AVX512F-NEXT: je LBB24_205872; AVX512F-NEXT: LBB24_19: ## %cond.load255873; AVX512F-NEXT: vpinsrb $9, 9(%rdi), %xmm1, %xmm05874; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5875; AVX512F-NEXT: testl $1024, %eax ## imm = 0x4005876; AVX512F-NEXT: je LBB24_225877; AVX512F-NEXT: LBB24_21: ## %cond.load285878; AVX512F-NEXT: vpinsrb $10, 10(%rdi), %xmm1, %xmm05879; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5880; AVX512F-NEXT: testl $2048, %eax ## imm = 0x8005881; AVX512F-NEXT: je LBB24_245882; AVX512F-NEXT: LBB24_23: ## %cond.load315883; AVX512F-NEXT: vpinsrb $11, 11(%rdi), %xmm1, %xmm05884; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5885; AVX512F-NEXT: testl $4096, %eax ## imm = 0x10005886; AVX512F-NEXT: je LBB24_265887; AVX512F-NEXT: LBB24_25: ## %cond.load345888; AVX512F-NEXT: vpinsrb $12, 12(%rdi), %xmm1, %xmm05889; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5890; AVX512F-NEXT: testl $8192, %eax ## imm = 0x20005891; AVX512F-NEXT: je LBB24_285892; AVX512F-NEXT: LBB24_27: ## %cond.load375893; AVX512F-NEXT: vpinsrb $13, 13(%rdi), %xmm1, %xmm05894; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5895; AVX512F-NEXT: testl $16384, %eax ## imm = 0x40005896; AVX512F-NEXT: je LBB24_305897; AVX512F-NEXT: LBB24_29: ## %cond.load405898; AVX512F-NEXT: vpinsrb $14, 14(%rdi), %xmm1, %xmm05899; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5900; AVX512F-NEXT: testw %ax, %ax5901; AVX512F-NEXT: jns LBB24_325902; AVX512F-NEXT: LBB24_31: ## %cond.load435903; AVX512F-NEXT: vpinsrb $15, 15(%rdi), %xmm1, %xmm05904; AVX512F-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]5905; AVX512F-NEXT: testl $65536, %eax ## imm = 0x100005906; AVX512F-NEXT: je LBB24_345907; AVX512F-NEXT: LBB24_33: ## %cond.load465908; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm05909; AVX512F-NEXT: vpinsrb $0, 16(%rdi), %xmm0, %xmm05910; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15911; AVX512F-NEXT: testl $131072, %eax ## imm = 0x200005912; AVX512F-NEXT: je LBB24_365913; AVX512F-NEXT: LBB24_35: ## %cond.load495914; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm05915; AVX512F-NEXT: vpinsrb $1, 17(%rdi), %xmm0, %xmm05916; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15917; AVX512F-NEXT: testl $262144, %eax ## imm = 0x400005918; AVX512F-NEXT: je LBB24_385919; AVX512F-NEXT: LBB24_37: ## %cond.load525920; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm05921; AVX512F-NEXT: vpinsrb $2, 18(%rdi), %xmm0, %xmm05922; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15923; AVX512F-NEXT: testl $524288, %eax ## imm = 0x800005924; AVX512F-NEXT: je LBB24_405925; AVX512F-NEXT: LBB24_39: ## %cond.load555926; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm05927; AVX512F-NEXT: vpinsrb $3, 19(%rdi), %xmm0, %xmm05928; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15929; AVX512F-NEXT: testl $1048576, %eax ## imm = 0x1000005930; AVX512F-NEXT: je LBB24_425931; AVX512F-NEXT: LBB24_41: ## %cond.load585932; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm05933; AVX512F-NEXT: vpinsrb $4, 20(%rdi), %xmm0, %xmm05934; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15935; AVX512F-NEXT: testl $2097152, %eax ## imm = 0x2000005936; AVX512F-NEXT: je LBB24_445937; AVX512F-NEXT: LBB24_43: ## %cond.load615938; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm05939; AVX512F-NEXT: vpinsrb $5, 21(%rdi), %xmm0, %xmm05940; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15941; AVX512F-NEXT: testl $4194304, %eax ## imm = 0x4000005942; AVX512F-NEXT: je LBB24_465943; AVX512F-NEXT: LBB24_45: ## %cond.load645944; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm05945; AVX512F-NEXT: vpinsrb $6, 22(%rdi), %xmm0, %xmm05946; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15947; AVX512F-NEXT: testl $8388608, %eax ## imm = 0x8000005948; AVX512F-NEXT: je LBB24_485949; AVX512F-NEXT: LBB24_47: ## %cond.load675950; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm05951; AVX512F-NEXT: vpinsrb $7, 23(%rdi), %xmm0, %xmm05952; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15953; AVX512F-NEXT: testl $16777216, %eax ## imm = 0x10000005954; AVX512F-NEXT: je LBB24_505955; AVX512F-NEXT: LBB24_49: ## %cond.load705956; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm05957; AVX512F-NEXT: vpinsrb $8, 24(%rdi), %xmm0, %xmm05958; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15959; AVX512F-NEXT: testl $33554432, %eax ## imm = 0x20000005960; AVX512F-NEXT: je LBB24_525961; AVX512F-NEXT: LBB24_51: ## %cond.load735962; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm05963; AVX512F-NEXT: vpinsrb $9, 25(%rdi), %xmm0, %xmm05964; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15965; AVX512F-NEXT: testl $67108864, %eax ## imm = 0x40000005966; AVX512F-NEXT: je LBB24_545967; AVX512F-NEXT: LBB24_53: ## %cond.load765968; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm05969; AVX512F-NEXT: vpinsrb $10, 26(%rdi), %xmm0, %xmm05970; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15971; AVX512F-NEXT: testl $134217728, %eax ## imm = 0x80000005972; AVX512F-NEXT: je LBB24_565973; AVX512F-NEXT: LBB24_55: ## %cond.load795974; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm05975; AVX512F-NEXT: vpinsrb $11, 27(%rdi), %xmm0, %xmm05976; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15977; AVX512F-NEXT: testl $268435456, %eax ## imm = 0x100000005978; AVX512F-NEXT: je LBB24_585979; AVX512F-NEXT: LBB24_57: ## %cond.load825980; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm05981; AVX512F-NEXT: vpinsrb $12, 28(%rdi), %xmm0, %xmm05982; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15983; AVX512F-NEXT: testl $536870912, %eax ## imm = 0x200000005984; AVX512F-NEXT: je LBB24_605985; AVX512F-NEXT: LBB24_59: ## %cond.load855986; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm05987; AVX512F-NEXT: vpinsrb $13, 29(%rdi), %xmm0, %xmm05988; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15989; AVX512F-NEXT: testl $1073741824, %eax ## imm = 0x400000005990; AVX512F-NEXT: je LBB24_625991; AVX512F-NEXT: LBB24_61: ## %cond.load885992; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm05993; AVX512F-NEXT: vpinsrb $14, 30(%rdi), %xmm0, %xmm05994; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm15995; AVX512F-NEXT: testl $-2147483648, %eax ## imm = 0x800000005996; AVX512F-NEXT: je LBB24_645997; AVX512F-NEXT: LBB24_63: ## %cond.load915998; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm05999; AVX512F-NEXT: vpinsrb $15, 31(%rdi), %xmm0, %xmm06000; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm16001; AVX512F-NEXT: vmovdqa %ymm1, %ymm06002; AVX512F-NEXT: retq6003;6004; AVX512VLDQ-LABEL: load_v32i8_v32i8:6005; AVX512VLDQ: ## %bb.0:6006; AVX512VLDQ-NEXT: vpmovmskb %ymm0, %eax6007; AVX512VLDQ-NEXT: testb $1, %al6008; AVX512VLDQ-NEXT: jne LBB24_16009; AVX512VLDQ-NEXT: ## %bb.2: ## %else6010; AVX512VLDQ-NEXT: testb $2, %al6011; AVX512VLDQ-NEXT: jne LBB24_36012; AVX512VLDQ-NEXT: LBB24_4: ## %else26013; AVX512VLDQ-NEXT: testb $4, %al6014; AVX512VLDQ-NEXT: jne LBB24_56015; AVX512VLDQ-NEXT: LBB24_6: ## %else56016; AVX512VLDQ-NEXT: testb $8, %al6017; AVX512VLDQ-NEXT: jne LBB24_76018; AVX512VLDQ-NEXT: LBB24_8: ## %else86019; AVX512VLDQ-NEXT: testb $16, %al6020; AVX512VLDQ-NEXT: jne LBB24_96021; AVX512VLDQ-NEXT: LBB24_10: ## %else116022; AVX512VLDQ-NEXT: testb $32, %al6023; AVX512VLDQ-NEXT: jne LBB24_116024; AVX512VLDQ-NEXT: LBB24_12: ## %else146025; AVX512VLDQ-NEXT: testb $64, %al6026; AVX512VLDQ-NEXT: jne LBB24_136027; AVX512VLDQ-NEXT: LBB24_14: ## %else176028; AVX512VLDQ-NEXT: testb %al, %al6029; AVX512VLDQ-NEXT: js LBB24_156030; AVX512VLDQ-NEXT: LBB24_16: ## %else206031; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x1006032; AVX512VLDQ-NEXT: jne LBB24_176033; AVX512VLDQ-NEXT: LBB24_18: ## %else236034; AVX512VLDQ-NEXT: testl $512, %eax ## imm = 0x2006035; AVX512VLDQ-NEXT: jne LBB24_196036; AVX512VLDQ-NEXT: LBB24_20: ## %else266037; AVX512VLDQ-NEXT: testl $1024, %eax ## imm = 0x4006038; AVX512VLDQ-NEXT: jne LBB24_216039; AVX512VLDQ-NEXT: LBB24_22: ## %else296040; AVX512VLDQ-NEXT: testl $2048, %eax ## imm = 0x8006041; AVX512VLDQ-NEXT: jne LBB24_236042; AVX512VLDQ-NEXT: LBB24_24: ## %else326043; AVX512VLDQ-NEXT: testl $4096, %eax ## imm = 0x10006044; AVX512VLDQ-NEXT: jne LBB24_256045; AVX512VLDQ-NEXT: LBB24_26: ## %else356046; AVX512VLDQ-NEXT: testl $8192, %eax ## imm = 0x20006047; AVX512VLDQ-NEXT: jne LBB24_276048; AVX512VLDQ-NEXT: LBB24_28: ## %else386049; AVX512VLDQ-NEXT: testl $16384, %eax ## imm = 0x40006050; AVX512VLDQ-NEXT: jne LBB24_296051; AVX512VLDQ-NEXT: LBB24_30: ## %else416052; AVX512VLDQ-NEXT: testw %ax, %ax6053; AVX512VLDQ-NEXT: js LBB24_316054; AVX512VLDQ-NEXT: LBB24_32: ## %else446055; AVX512VLDQ-NEXT: testl $65536, %eax ## imm = 0x100006056; AVX512VLDQ-NEXT: jne LBB24_336057; AVX512VLDQ-NEXT: LBB24_34: ## %else476058; AVX512VLDQ-NEXT: testl $131072, %eax ## imm = 0x200006059; AVX512VLDQ-NEXT: jne LBB24_356060; AVX512VLDQ-NEXT: LBB24_36: ## %else506061; AVX512VLDQ-NEXT: testl $262144, %eax ## imm = 0x400006062; AVX512VLDQ-NEXT: jne LBB24_376063; AVX512VLDQ-NEXT: LBB24_38: ## %else536064; AVX512VLDQ-NEXT: testl $524288, %eax ## imm = 0x800006065; AVX512VLDQ-NEXT: jne LBB24_396066; AVX512VLDQ-NEXT: LBB24_40: ## %else566067; AVX512VLDQ-NEXT: testl $1048576, %eax ## imm = 0x1000006068; AVX512VLDQ-NEXT: jne LBB24_416069; AVX512VLDQ-NEXT: LBB24_42: ## %else596070; AVX512VLDQ-NEXT: testl $2097152, %eax ## imm = 0x2000006071; AVX512VLDQ-NEXT: jne LBB24_436072; AVX512VLDQ-NEXT: LBB24_44: ## %else626073; AVX512VLDQ-NEXT: testl $4194304, %eax ## imm = 0x4000006074; AVX512VLDQ-NEXT: jne LBB24_456075; AVX512VLDQ-NEXT: LBB24_46: ## %else656076; AVX512VLDQ-NEXT: testl $8388608, %eax ## imm = 0x8000006077; AVX512VLDQ-NEXT: jne LBB24_476078; AVX512VLDQ-NEXT: LBB24_48: ## %else686079; AVX512VLDQ-NEXT: testl $16777216, %eax ## imm = 0x10000006080; AVX512VLDQ-NEXT: jne LBB24_496081; AVX512VLDQ-NEXT: LBB24_50: ## %else716082; AVX512VLDQ-NEXT: testl $33554432, %eax ## imm = 0x20000006083; AVX512VLDQ-NEXT: jne LBB24_516084; AVX512VLDQ-NEXT: LBB24_52: ## %else746085; AVX512VLDQ-NEXT: testl $67108864, %eax ## imm = 0x40000006086; AVX512VLDQ-NEXT: jne LBB24_536087; AVX512VLDQ-NEXT: LBB24_54: ## %else776088; AVX512VLDQ-NEXT: testl $134217728, %eax ## imm = 0x80000006089; AVX512VLDQ-NEXT: jne LBB24_556090; AVX512VLDQ-NEXT: LBB24_56: ## %else806091; AVX512VLDQ-NEXT: testl $268435456, %eax ## imm = 0x100000006092; AVX512VLDQ-NEXT: jne LBB24_576093; AVX512VLDQ-NEXT: LBB24_58: ## %else836094; AVX512VLDQ-NEXT: testl $536870912, %eax ## imm = 0x200000006095; AVX512VLDQ-NEXT: jne LBB24_596096; AVX512VLDQ-NEXT: LBB24_60: ## %else866097; AVX512VLDQ-NEXT: testl $1073741824, %eax ## imm = 0x400000006098; AVX512VLDQ-NEXT: jne LBB24_616099; AVX512VLDQ-NEXT: LBB24_62: ## %else896100; AVX512VLDQ-NEXT: testl $-2147483648, %eax ## imm = 0x800000006101; AVX512VLDQ-NEXT: jne LBB24_636102; AVX512VLDQ-NEXT: LBB24_64: ## %else926103; AVX512VLDQ-NEXT: vmovdqa %ymm1, %ymm06104; AVX512VLDQ-NEXT: retq6105; AVX512VLDQ-NEXT: LBB24_1: ## %cond.load6106; AVX512VLDQ-NEXT: vpinsrb $0, (%rdi), %xmm1, %xmm06107; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]6108; AVX512VLDQ-NEXT: testb $2, %al6109; AVX512VLDQ-NEXT: je LBB24_46110; AVX512VLDQ-NEXT: LBB24_3: ## %cond.load16111; AVX512VLDQ-NEXT: vpinsrb $1, 1(%rdi), %xmm1, %xmm06112; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]6113; AVX512VLDQ-NEXT: testb $4, %al6114; AVX512VLDQ-NEXT: je LBB24_66115; AVX512VLDQ-NEXT: LBB24_5: ## %cond.load46116; AVX512VLDQ-NEXT: vpinsrb $2, 2(%rdi), %xmm1, %xmm06117; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]6118; AVX512VLDQ-NEXT: testb $8, %al6119; AVX512VLDQ-NEXT: je LBB24_86120; AVX512VLDQ-NEXT: LBB24_7: ## %cond.load76121; AVX512VLDQ-NEXT: vpinsrb $3, 3(%rdi), %xmm1, %xmm06122; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]6123; AVX512VLDQ-NEXT: testb $16, %al6124; AVX512VLDQ-NEXT: je LBB24_106125; AVX512VLDQ-NEXT: LBB24_9: ## %cond.load106126; AVX512VLDQ-NEXT: vpinsrb $4, 4(%rdi), %xmm1, %xmm06127; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]6128; AVX512VLDQ-NEXT: testb $32, %al6129; AVX512VLDQ-NEXT: je LBB24_126130; AVX512VLDQ-NEXT: LBB24_11: ## %cond.load136131; AVX512VLDQ-NEXT: vpinsrb $5, 5(%rdi), %xmm1, %xmm06132; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]6133; AVX512VLDQ-NEXT: testb $64, %al6134; AVX512VLDQ-NEXT: je LBB24_146135; AVX512VLDQ-NEXT: LBB24_13: ## %cond.load166136; AVX512VLDQ-NEXT: vpinsrb $6, 6(%rdi), %xmm1, %xmm06137; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]6138; AVX512VLDQ-NEXT: testb %al, %al6139; AVX512VLDQ-NEXT: jns LBB24_166140; AVX512VLDQ-NEXT: LBB24_15: ## %cond.load196141; AVX512VLDQ-NEXT: vpinsrb $7, 7(%rdi), %xmm1, %xmm06142; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]6143; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x1006144; AVX512VLDQ-NEXT: je LBB24_186145; AVX512VLDQ-NEXT: LBB24_17: ## %cond.load226146; AVX512VLDQ-NEXT: vpinsrb $8, 8(%rdi), %xmm1, %xmm06147; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]6148; AVX512VLDQ-NEXT: testl $512, %eax ## imm = 0x2006149; AVX512VLDQ-NEXT: je LBB24_206150; AVX512VLDQ-NEXT: LBB24_19: ## %cond.load256151; AVX512VLDQ-NEXT: vpinsrb $9, 9(%rdi), %xmm1, %xmm06152; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]6153; AVX512VLDQ-NEXT: testl $1024, %eax ## imm = 0x4006154; AVX512VLDQ-NEXT: je LBB24_226155; AVX512VLDQ-NEXT: LBB24_21: ## %cond.load286156; AVX512VLDQ-NEXT: vpinsrb $10, 10(%rdi), %xmm1, %xmm06157; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]6158; AVX512VLDQ-NEXT: testl $2048, %eax ## imm = 0x8006159; AVX512VLDQ-NEXT: je LBB24_246160; AVX512VLDQ-NEXT: LBB24_23: ## %cond.load316161; AVX512VLDQ-NEXT: vpinsrb $11, 11(%rdi), %xmm1, %xmm06162; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]6163; AVX512VLDQ-NEXT: testl $4096, %eax ## imm = 0x10006164; AVX512VLDQ-NEXT: je LBB24_266165; AVX512VLDQ-NEXT: LBB24_25: ## %cond.load346166; AVX512VLDQ-NEXT: vpinsrb $12, 12(%rdi), %xmm1, %xmm06167; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]6168; AVX512VLDQ-NEXT: testl $8192, %eax ## imm = 0x20006169; AVX512VLDQ-NEXT: je LBB24_286170; AVX512VLDQ-NEXT: LBB24_27: ## %cond.load376171; AVX512VLDQ-NEXT: vpinsrb $13, 13(%rdi), %xmm1, %xmm06172; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]6173; AVX512VLDQ-NEXT: testl $16384, %eax ## imm = 0x40006174; AVX512VLDQ-NEXT: je LBB24_306175; AVX512VLDQ-NEXT: LBB24_29: ## %cond.load406176; AVX512VLDQ-NEXT: vpinsrb $14, 14(%rdi), %xmm1, %xmm06177; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]6178; AVX512VLDQ-NEXT: testw %ax, %ax6179; AVX512VLDQ-NEXT: jns LBB24_326180; AVX512VLDQ-NEXT: LBB24_31: ## %cond.load436181; AVX512VLDQ-NEXT: vpinsrb $15, 15(%rdi), %xmm1, %xmm06182; AVX512VLDQ-NEXT: vpblendd {{.*#+}} ymm1 = ymm0[0,1,2,3],ymm1[4,5,6,7]6183; AVX512VLDQ-NEXT: testl $65536, %eax ## imm = 0x100006184; AVX512VLDQ-NEXT: je LBB24_346185; AVX512VLDQ-NEXT: LBB24_33: ## %cond.load466186; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm06187; AVX512VLDQ-NEXT: vpinsrb $0, 16(%rdi), %xmm0, %xmm06188; AVX512VLDQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm16189; AVX512VLDQ-NEXT: testl $131072, %eax ## imm = 0x200006190; AVX512VLDQ-NEXT: je LBB24_366191; AVX512VLDQ-NEXT: LBB24_35: ## %cond.load496192; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm06193; AVX512VLDQ-NEXT: vpinsrb $1, 17(%rdi), %xmm0, %xmm06194; AVX512VLDQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm16195; AVX512VLDQ-NEXT: testl $262144, %eax ## imm = 0x400006196; AVX512VLDQ-NEXT: je LBB24_386197; AVX512VLDQ-NEXT: LBB24_37: ## %cond.load526198; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm06199; AVX512VLDQ-NEXT: vpinsrb $2, 18(%rdi), %xmm0, %xmm06200; AVX512VLDQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm16201; AVX512VLDQ-NEXT: testl $524288, %eax ## imm = 0x800006202; AVX512VLDQ-NEXT: je LBB24_406203; AVX512VLDQ-NEXT: LBB24_39: ## %cond.load556204; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm06205; AVX512VLDQ-NEXT: vpinsrb $3, 19(%rdi), %xmm0, %xmm06206; AVX512VLDQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm16207; AVX512VLDQ-NEXT: testl $1048576, %eax ## imm = 0x1000006208; AVX512VLDQ-NEXT: je LBB24_426209; AVX512VLDQ-NEXT: LBB24_41: ## %cond.load586210; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm06211; AVX512VLDQ-NEXT: vpinsrb $4, 20(%rdi), %xmm0, %xmm06212; AVX512VLDQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm16213; AVX512VLDQ-NEXT: testl $2097152, %eax ## imm = 0x2000006214; AVX512VLDQ-NEXT: je LBB24_446215; AVX512VLDQ-NEXT: LBB24_43: ## %cond.load616216; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm06217; AVX512VLDQ-NEXT: vpinsrb $5, 21(%rdi), %xmm0, %xmm06218; AVX512VLDQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm16219; AVX512VLDQ-NEXT: testl $4194304, %eax ## imm = 0x4000006220; AVX512VLDQ-NEXT: je LBB24_466221; AVX512VLDQ-NEXT: LBB24_45: ## %cond.load646222; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm06223; AVX512VLDQ-NEXT: vpinsrb $6, 22(%rdi), %xmm0, %xmm06224; AVX512VLDQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm16225; AVX512VLDQ-NEXT: testl $8388608, %eax ## imm = 0x8000006226; AVX512VLDQ-NEXT: je LBB24_486227; AVX512VLDQ-NEXT: LBB24_47: ## %cond.load676228; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm06229; AVX512VLDQ-NEXT: vpinsrb $7, 23(%rdi), %xmm0, %xmm06230; AVX512VLDQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm16231; AVX512VLDQ-NEXT: testl $16777216, %eax ## imm = 0x10000006232; AVX512VLDQ-NEXT: je LBB24_506233; AVX512VLDQ-NEXT: LBB24_49: ## %cond.load706234; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm06235; AVX512VLDQ-NEXT: vpinsrb $8, 24(%rdi), %xmm0, %xmm06236; AVX512VLDQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm16237; AVX512VLDQ-NEXT: testl $33554432, %eax ## imm = 0x20000006238; AVX512VLDQ-NEXT: je LBB24_526239; AVX512VLDQ-NEXT: LBB24_51: ## %cond.load736240; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm06241; AVX512VLDQ-NEXT: vpinsrb $9, 25(%rdi), %xmm0, %xmm06242; AVX512VLDQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm16243; AVX512VLDQ-NEXT: testl $67108864, %eax ## imm = 0x40000006244; AVX512VLDQ-NEXT: je LBB24_546245; AVX512VLDQ-NEXT: LBB24_53: ## %cond.load766246; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm06247; AVX512VLDQ-NEXT: vpinsrb $10, 26(%rdi), %xmm0, %xmm06248; AVX512VLDQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm16249; AVX512VLDQ-NEXT: testl $134217728, %eax ## imm = 0x80000006250; AVX512VLDQ-NEXT: je LBB24_566251; AVX512VLDQ-NEXT: LBB24_55: ## %cond.load796252; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm06253; AVX512VLDQ-NEXT: vpinsrb $11, 27(%rdi), %xmm0, %xmm06254; AVX512VLDQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm16255; AVX512VLDQ-NEXT: testl $268435456, %eax ## imm = 0x100000006256; AVX512VLDQ-NEXT: je LBB24_586257; AVX512VLDQ-NEXT: LBB24_57: ## %cond.load826258; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm06259; AVX512VLDQ-NEXT: vpinsrb $12, 28(%rdi), %xmm0, %xmm06260; AVX512VLDQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm16261; AVX512VLDQ-NEXT: testl $536870912, %eax ## imm = 0x200000006262; AVX512VLDQ-NEXT: je LBB24_606263; AVX512VLDQ-NEXT: LBB24_59: ## %cond.load856264; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm06265; AVX512VLDQ-NEXT: vpinsrb $13, 29(%rdi), %xmm0, %xmm06266; AVX512VLDQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm16267; AVX512VLDQ-NEXT: testl $1073741824, %eax ## imm = 0x400000006268; AVX512VLDQ-NEXT: je LBB24_626269; AVX512VLDQ-NEXT: LBB24_61: ## %cond.load886270; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm06271; AVX512VLDQ-NEXT: vpinsrb $14, 30(%rdi), %xmm0, %xmm06272; AVX512VLDQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm16273; AVX512VLDQ-NEXT: testl $-2147483648, %eax ## imm = 0x800000006274; AVX512VLDQ-NEXT: je LBB24_646275; AVX512VLDQ-NEXT: LBB24_63: ## %cond.load916276; AVX512VLDQ-NEXT: vextracti128 $1, %ymm1, %xmm06277; AVX512VLDQ-NEXT: vpinsrb $15, 31(%rdi), %xmm0, %xmm06278; AVX512VLDQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm16279; AVX512VLDQ-NEXT: vmovdqa %ymm1, %ymm06280; AVX512VLDQ-NEXT: retq6281;6282; AVX512VLBW-LABEL: load_v32i8_v32i8:6283; AVX512VLBW: ## %bb.0:6284; AVX512VLBW-NEXT: vpmovb2m %ymm0, %k16285; AVX512VLBW-NEXT: vpblendmb (%rdi), %ymm1, %ymm0 {%k1}6286; AVX512VLBW-NEXT: retq6287;6288; X86-AVX512-LABEL: load_v32i8_v32i8:6289; X86-AVX512: ## %bb.0:6290; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax6291; X86-AVX512-NEXT: vpmovb2m %ymm0, %k16292; X86-AVX512-NEXT: vpblendmb (%eax), %ymm1, %ymm0 {%k1}6293; X86-AVX512-NEXT: retl6294 %mask = icmp slt <32 x i8> %trigger, zeroinitializer6295 %res = call <32 x i8> @llvm.masked.load.v32i8.p0(ptr %addr, i32 4, <32 x i1> %mask, <32 x i8> %dst)6296 ret <32 x i8> %res6297}6298 6299;;; Loads with Constant Masks - these should be optimized to use something other than a variable blend.6300 6301; 128-bit FP vectors are supported with AVX.6302 6303define <4 x float> @mload_constmask_v4f32(ptr %addr, <4 x float> %dst) {6304; SSE2-LABEL: mload_constmask_v4f32:6305; SSE2: ## %bb.0:6306; SSE2-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero6307; SSE2-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero6308; SSE2-NEXT: movss {{.*#+}} xmm3 = mem[0],zero,zero,zero6309; SSE2-NEXT: movlhps {{.*#+}} xmm3 = xmm3[0],xmm2[0]6310; SSE2-NEXT: movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]6311; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm3[2,0]6312; SSE2-NEXT: retq6313;6314; SSE42-LABEL: mload_constmask_v4f32:6315; SSE42: ## %bb.0:6316; SSE42-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero6317; SSE42-NEXT: blendps {{.*#+}} xmm0 = xmm1[0],xmm0[1],xmm1[2,3]6318; SSE42-NEXT: insertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]6319; SSE42-NEXT: insertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0]6320; SSE42-NEXT: retq6321;6322; AVX1OR2-LABEL: mload_constmask_v4f32:6323; AVX1OR2: ## %bb.0:6324; AVX1OR2-NEXT: vblendps {{.*#+}} xmm0 = mem[0],xmm0[1],mem[2,3]6325; AVX1OR2-NEXT: retq6326;6327; AVX512F-LABEL: mload_constmask_v4f32:6328; AVX512F: ## %bb.0:6329; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm06330; AVX512F-NEXT: movw $13, %ax6331; AVX512F-NEXT: kmovw %eax, %k16332; AVX512F-NEXT: vmovups (%rdi), %zmm0 {%k1}6333; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 killed $zmm06334; AVX512F-NEXT: vzeroupper6335; AVX512F-NEXT: retq6336;6337; AVX512VLDQ-LABEL: mload_constmask_v4f32:6338; AVX512VLDQ: ## %bb.0:6339; AVX512VLDQ-NEXT: movb $13, %al6340; AVX512VLDQ-NEXT: kmovw %eax, %k16341; AVX512VLDQ-NEXT: vmovups (%rdi), %xmm0 {%k1}6342; AVX512VLDQ-NEXT: retq6343;6344; AVX512VLBW-LABEL: mload_constmask_v4f32:6345; AVX512VLBW: ## %bb.0:6346; AVX512VLBW-NEXT: movb $13, %al6347; AVX512VLBW-NEXT: kmovd %eax, %k16348; AVX512VLBW-NEXT: vmovups (%rdi), %xmm0 {%k1}6349; AVX512VLBW-NEXT: retq6350;6351; X86-AVX512-LABEL: mload_constmask_v4f32:6352; X86-AVX512: ## %bb.0:6353; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax6354; X86-AVX512-NEXT: movb $13, %cl6355; X86-AVX512-NEXT: kmovd %ecx, %k16356; X86-AVX512-NEXT: vmovups (%eax), %xmm0 {%k1}6357; X86-AVX512-NEXT: retl6358 %res = call <4 x float> @llvm.masked.load.v4f32.p0(ptr %addr, i32 4, <4 x i1> <i1 1, i1 0, i1 1, i1 1>, <4 x float> %dst)6359 ret <4 x float> %res6360}6361 6362define <4 x float> @mload_constmask_v4f32_all(ptr %addr) {6363; SSE-LABEL: mload_constmask_v4f32_all:6364; SSE: ## %bb.0:6365; SSE-NEXT: movups (%rdi), %xmm06366; SSE-NEXT: retq6367;6368; AVX-LABEL: mload_constmask_v4f32_all:6369; AVX: ## %bb.0:6370; AVX-NEXT: vmovups (%rdi), %xmm06371; AVX-NEXT: retq6372;6373; X86-AVX512-LABEL: mload_constmask_v4f32_all:6374; X86-AVX512: ## %bb.0:6375; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax6376; X86-AVX512-NEXT: vmovups (%eax), %xmm06377; X86-AVX512-NEXT: retl6378 %res = call <4 x float> @llvm.masked.load.v4f32.p0(ptr %addr, i32 4, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x float>undef)6379 ret <4 x float> %res6380}6381 6382define <2 x double> @mload_constmask_v2f64(ptr %addr, <2 x double> %dst) {6383; SSE-LABEL: mload_constmask_v2f64:6384; SSE: ## %bb.0:6385; SSE-NEXT: movhps {{.*#+}} xmm0 = xmm0[0,1],mem[0,1]6386; SSE-NEXT: retq6387;6388; AVX-LABEL: mload_constmask_v2f64:6389; AVX: ## %bb.0:6390; AVX-NEXT: vmovhps {{.*#+}} xmm0 = xmm0[0,1],mem[0,1]6391; AVX-NEXT: retq6392;6393; X86-AVX512-LABEL: mload_constmask_v2f64:6394; X86-AVX512: ## %bb.0:6395; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax6396; X86-AVX512-NEXT: vmovhps {{.*#+}} xmm0 = xmm0[0,1],mem[0,1]6397; X86-AVX512-NEXT: retl6398 %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %addr, i32 4, <2 x i1> <i1 0, i1 1>, <2 x double> %dst)6399 ret <2 x double> %res6400}6401 6402; 128-bit integer vectors are supported with AVX2.6403 6404define <4 x i32> @mload_constmask_v4i32(ptr %addr, <4 x i32> %dst) {6405; SSE2-LABEL: mload_constmask_v4i32:6406; SSE2: ## %bb.0:6407; SSE2-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero6408; SSE2-NEXT: movlhps {{.*#+}} xmm1 = xmm1[0],xmm0[0]6409; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero6410; SSE2-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero6411; SSE2-NEXT: movlhps {{.*#+}} xmm2 = xmm2[0],xmm0[0]6412; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[2,0],xmm2[2,0]6413; SSE2-NEXT: movaps %xmm1, %xmm06414; SSE2-NEXT: retq6415;6416; SSE42-LABEL: mload_constmask_v4i32:6417; SSE42: ## %bb.0:6418; SSE42-NEXT: pinsrd $1, 4(%rdi), %xmm06419; SSE42-NEXT: pinsrd $2, 8(%rdi), %xmm06420; SSE42-NEXT: pinsrd $3, 12(%rdi), %xmm06421; SSE42-NEXT: retq6422;6423; AVX1-LABEL: mload_constmask_v4i32:6424; AVX1: ## %bb.0:6425; AVX1-NEXT: vmovaps {{.*#+}} xmm1 = [0,4294967295,4294967295,4294967295]6426; AVX1-NEXT: vmaskmovps (%rdi), %xmm1, %xmm16427; AVX1-NEXT: vmovss {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]6428; AVX1-NEXT: retq6429;6430; AVX2-LABEL: mload_constmask_v4i32:6431; AVX2: ## %bb.0:6432; AVX2-NEXT: vpmovsxbd {{.*#+}} xmm1 = [0,4294967295,4294967295,4294967295]6433; AVX2-NEXT: vpmaskmovd (%rdi), %xmm1, %xmm16434; AVX2-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]6435; AVX2-NEXT: retq6436;6437; AVX512F-LABEL: mload_constmask_v4i32:6438; AVX512F: ## %bb.0:6439; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm06440; AVX512F-NEXT: movw $14, %ax6441; AVX512F-NEXT: kmovw %eax, %k16442; AVX512F-NEXT: vmovdqu32 (%rdi), %zmm0 {%k1}6443; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 killed $zmm06444; AVX512F-NEXT: vzeroupper6445; AVX512F-NEXT: retq6446;6447; AVX512VLDQ-LABEL: mload_constmask_v4i32:6448; AVX512VLDQ: ## %bb.0:6449; AVX512VLDQ-NEXT: movb $14, %al6450; AVX512VLDQ-NEXT: kmovw %eax, %k16451; AVX512VLDQ-NEXT: vmovdqu32 (%rdi), %xmm0 {%k1}6452; AVX512VLDQ-NEXT: retq6453;6454; AVX512VLBW-LABEL: mload_constmask_v4i32:6455; AVX512VLBW: ## %bb.0:6456; AVX512VLBW-NEXT: movb $14, %al6457; AVX512VLBW-NEXT: kmovd %eax, %k16458; AVX512VLBW-NEXT: vmovdqu32 (%rdi), %xmm0 {%k1}6459; AVX512VLBW-NEXT: retq6460;6461; X86-AVX512-LABEL: mload_constmask_v4i32:6462; X86-AVX512: ## %bb.0:6463; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax6464; X86-AVX512-NEXT: movb $14, %cl6465; X86-AVX512-NEXT: kmovd %ecx, %k16466; X86-AVX512-NEXT: vmovdqu32 (%eax), %xmm0 {%k1}6467; X86-AVX512-NEXT: retl6468 %res = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %addr, i32 4, <4 x i1> <i1 0, i1 1, i1 1, i1 1>, <4 x i32> %dst)6469 ret <4 x i32> %res6470}6471 6472define <2 x i64> @mload_constmask_v2i64(ptr %addr, <2 x i64> %dst) {6473; SSE2-LABEL: mload_constmask_v2i64:6474; SSE2: ## %bb.0:6475; SSE2-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero6476; SSE2-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]6477; SSE2-NEXT: retq6478;6479; SSE42-LABEL: mload_constmask_v2i64:6480; SSE42: ## %bb.0:6481; SSE42-NEXT: pinsrq $1, 8(%rdi), %xmm06482; SSE42-NEXT: retq6483;6484; AVX-LABEL: mload_constmask_v2i64:6485; AVX: ## %bb.0:6486; AVX-NEXT: vpinsrq $1, 8(%rdi), %xmm0, %xmm06487; AVX-NEXT: retq6488;6489; X86-AVX512-LABEL: mload_constmask_v2i64:6490; X86-AVX512: ## %bb.0:6491; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax6492; X86-AVX512-NEXT: vmovhps {{.*#+}} xmm0 = xmm0[0,1],mem[0,1]6493; X86-AVX512-NEXT: retl6494 %res = call <2 x i64> @llvm.masked.load.v2i64.p0(ptr %addr, i32 4, <2 x i1> <i1 0, i1 1>, <2 x i64> %dst)6495 ret <2 x i64> %res6496}6497 6498; 256-bit FP vectors are supported with AVX.6499 6500define <8 x float> @mload_constmask_v8f32(ptr %addr, <8 x float> %dst) {6501; SSE2-LABEL: mload_constmask_v8f32:6502; SSE2: ## %bb.0:6503; SSE2-NEXT: movss {{.*#+}} xmm3 = mem[0],zero,zero,zero6504; SSE2-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero6505; SSE2-NEXT: movlhps {{.*#+}} xmm2 = xmm2[0],xmm3[0]6506; SSE2-NEXT: movss {{.*#+}} xmm3 = mem[0],zero,zero,zero6507; SSE2-NEXT: shufps {{.*#+}} xmm3 = xmm3[0,0],xmm0[3,0]6508; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[2,0],xmm3[0,2]6509; SSE2-NEXT: movaps %xmm2, %xmm06510; SSE2-NEXT: retq6511;6512; SSE42-LABEL: mload_constmask_v8f32:6513; SSE42: ## %bb.0:6514; SSE42-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero6515; SSE42-NEXT: movsd {{.*#+}} xmm0 = xmm2[0],xmm0[1]6516; SSE42-NEXT: insertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]6517; SSE42-NEXT: insertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]6518; SSE42-NEXT: retq6519;6520; AVX1OR2-LABEL: mload_constmask_v8f32:6521; AVX1OR2: ## %bb.0:6522; AVX1OR2-NEXT: vmovaps {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,0,0,0,0,0]6523; AVX1OR2-NEXT: vmaskmovps (%rdi), %ymm1, %ymm16524; AVX1OR2-NEXT: vblendps {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3,4,5,6,7]6525; AVX1OR2-NEXT: retq6526;6527; AVX512F-LABEL: mload_constmask_v8f32:6528; AVX512F: ## %bb.0:6529; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 def $zmm06530; AVX512F-NEXT: movw $7, %ax6531; AVX512F-NEXT: kmovw %eax, %k16532; AVX512F-NEXT: vmovups (%rdi), %zmm0 {%k1}6533; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 killed $zmm06534; AVX512F-NEXT: retq6535;6536; AVX512VLDQ-LABEL: mload_constmask_v8f32:6537; AVX512VLDQ: ## %bb.0:6538; AVX512VLDQ-NEXT: movb $7, %al6539; AVX512VLDQ-NEXT: kmovw %eax, %k16540; AVX512VLDQ-NEXT: vmovups (%rdi), %ymm0 {%k1}6541; AVX512VLDQ-NEXT: retq6542;6543; AVX512VLBW-LABEL: mload_constmask_v8f32:6544; AVX512VLBW: ## %bb.0:6545; AVX512VLBW-NEXT: movb $7, %al6546; AVX512VLBW-NEXT: kmovd %eax, %k16547; AVX512VLBW-NEXT: vmovups (%rdi), %ymm0 {%k1}6548; AVX512VLBW-NEXT: retq6549;6550; X86-AVX512-LABEL: mload_constmask_v8f32:6551; X86-AVX512: ## %bb.0:6552; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax6553; X86-AVX512-NEXT: movb $7, %cl6554; X86-AVX512-NEXT: kmovd %ecx, %k16555; X86-AVX512-NEXT: vmovups (%eax), %ymm0 {%k1}6556; X86-AVX512-NEXT: retl6557 %res = call <8 x float> @llvm.masked.load.v8f32.p0(ptr %addr, i32 4, <8 x i1> <i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 0>, <8 x float> %dst)6558 ret <8 x float> %res6559}6560 6561define <8 x float> @mload_constmask_v8f32_zero(ptr %addr, <8 x float> %dst) {6562; SSE2-LABEL: mload_constmask_v8f32_zero:6563; SSE2: ## %bb.0:6564; SSE2-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero6565; SSE2-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero6566; SSE2-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]6567; SSE2-NEXT: xorps %xmm1, %xmm16568; SSE2-NEXT: retq6569;6570; SSE42-LABEL: mload_constmask_v8f32_zero:6571; SSE42: ## %bb.0:6572; SSE42-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero6573; SSE42-NEXT: insertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],zero6574; SSE42-NEXT: xorps %xmm1, %xmm16575; SSE42-NEXT: retq6576;6577; AVX1OR2-LABEL: mload_constmask_v8f32_zero:6578; AVX1OR2: ## %bb.0:6579; AVX1OR2-NEXT: vmovaps {{.*#+}} ymm0 = [4294967295,4294967295,4294967295,0,0,0,0,0]6580; AVX1OR2-NEXT: vmaskmovps (%rdi), %ymm0, %ymm06581; AVX1OR2-NEXT: retq6582;6583; AVX512F-LABEL: mload_constmask_v8f32_zero:6584; AVX512F: ## %bb.0:6585; AVX512F-NEXT: movw $7, %ax6586; AVX512F-NEXT: kmovw %eax, %k16587; AVX512F-NEXT: vmovups (%rdi), %zmm0 {%k1} {z}6588; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 killed $zmm06589; AVX512F-NEXT: retq6590;6591; AVX512VLDQ-LABEL: mload_constmask_v8f32_zero:6592; AVX512VLDQ: ## %bb.0:6593; AVX512VLDQ-NEXT: movb $7, %al6594; AVX512VLDQ-NEXT: kmovw %eax, %k16595; AVX512VLDQ-NEXT: vmovups (%rdi), %ymm0 {%k1} {z}6596; AVX512VLDQ-NEXT: retq6597;6598; AVX512VLBW-LABEL: mload_constmask_v8f32_zero:6599; AVX512VLBW: ## %bb.0:6600; AVX512VLBW-NEXT: movb $7, %al6601; AVX512VLBW-NEXT: kmovd %eax, %k16602; AVX512VLBW-NEXT: vmovups (%rdi), %ymm0 {%k1} {z}6603; AVX512VLBW-NEXT: retq6604;6605; X86-AVX512-LABEL: mload_constmask_v8f32_zero:6606; X86-AVX512: ## %bb.0:6607; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax6608; X86-AVX512-NEXT: movb $7, %cl6609; X86-AVX512-NEXT: kmovd %ecx, %k16610; X86-AVX512-NEXT: vmovups (%eax), %ymm0 {%k1} {z}6611; X86-AVX512-NEXT: retl6612 %res = call <8 x float> @llvm.masked.load.v8f32.p0(ptr %addr, i32 4, <8 x i1> <i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 0>, <8 x float> zeroinitializer)6613 ret <8 x float> %res6614}6615 6616define <4 x double> @mload_constmask_v4f64(ptr %addr, <4 x double> %dst) {6617; SSE-LABEL: mload_constmask_v4f64:6618; SSE: ## %bb.0:6619; SSE-NEXT: movups (%rdi), %xmm06620; SSE-NEXT: movlps {{.*#+}} xmm1 = mem[0,1],xmm1[2,3]6621; SSE-NEXT: retq6622;6623; AVX1OR2-LABEL: mload_constmask_v4f64:6624; AVX1OR2: ## %bb.0:6625; AVX1OR2-NEXT: vmovapd {{.*#+}} ymm1 = [18446744073709551615,18446744073709551615,18446744073709551615,0]6626; AVX1OR2-NEXT: vmaskmovpd (%rdi), %ymm1, %ymm16627; AVX1OR2-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3]6628; AVX1OR2-NEXT: retq6629;6630; AVX512F-LABEL: mload_constmask_v4f64:6631; AVX512F: ## %bb.0:6632; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 def $zmm06633; AVX512F-NEXT: movb $7, %al6634; AVX512F-NEXT: kmovw %eax, %k16635; AVX512F-NEXT: vmovupd (%rdi), %zmm0 {%k1}6636; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 killed $zmm06637; AVX512F-NEXT: retq6638;6639; AVX512VLDQ-LABEL: mload_constmask_v4f64:6640; AVX512VLDQ: ## %bb.0:6641; AVX512VLDQ-NEXT: movb $7, %al6642; AVX512VLDQ-NEXT: kmovw %eax, %k16643; AVX512VLDQ-NEXT: vmovupd (%rdi), %ymm0 {%k1}6644; AVX512VLDQ-NEXT: retq6645;6646; AVX512VLBW-LABEL: mload_constmask_v4f64:6647; AVX512VLBW: ## %bb.0:6648; AVX512VLBW-NEXT: movb $7, %al6649; AVX512VLBW-NEXT: kmovd %eax, %k16650; AVX512VLBW-NEXT: vmovupd (%rdi), %ymm0 {%k1}6651; AVX512VLBW-NEXT: retq6652;6653; X86-AVX512-LABEL: mload_constmask_v4f64:6654; X86-AVX512: ## %bb.0:6655; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax6656; X86-AVX512-NEXT: movb $7, %cl6657; X86-AVX512-NEXT: kmovd %ecx, %k16658; X86-AVX512-NEXT: vmovupd (%eax), %ymm0 {%k1}6659; X86-AVX512-NEXT: retl6660 %res = call <4 x double> @llvm.masked.load.v4f64.p0(ptr %addr, i32 4, <4 x i1> <i1 1, i1 1, i1 1, i1 0>, <4 x double> %dst)6661 ret <4 x double> %res6662}6663 6664; 256-bit integer vectors are supported with AVX2.6665 6666define <8 x i32> @mload_constmask_v8i32(ptr %addr, <8 x i32> %dst) {6667; SSE2-LABEL: mload_constmask_v8i32:6668; SSE2: ## %bb.0:6669; SSE2-NEXT: movss {{.*#+}} xmm3 = mem[0],zero,zero,zero6670; SSE2-NEXT: movss {{.*#+}} xmm2 = mem[0],zero,zero,zero6671; SSE2-NEXT: movlhps {{.*#+}} xmm2 = xmm2[0],xmm3[0]6672; SSE2-NEXT: movss {{.*#+}} xmm3 = mem[0],zero,zero,zero6673; SSE2-NEXT: shufps {{.*#+}} xmm3 = xmm3[0,0],xmm0[3,0]6674; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[2,0],xmm3[0,2]6675; SSE2-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero6676; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3]6677; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0]6678; SSE2-NEXT: movaps %xmm2, %xmm06679; SSE2-NEXT: retq6680;6681; SSE42-LABEL: mload_constmask_v8i32:6682; SSE42: ## %bb.0:6683; SSE42-NEXT: pinsrd $0, (%rdi), %xmm06684; SSE42-NEXT: pinsrd $1, 4(%rdi), %xmm06685; SSE42-NEXT: pinsrd $2, 8(%rdi), %xmm06686; SSE42-NEXT: pinsrd $3, 28(%rdi), %xmm16687; SSE42-NEXT: retq6688;6689; AVX1OR2-LABEL: mload_constmask_v8i32:6690; AVX1OR2: ## %bb.0:6691; AVX1OR2-NEXT: vblendps {{.*#+}} ymm0 = mem[0,1,2],ymm0[3,4,5,6],mem[7]6692; AVX1OR2-NEXT: retq6693;6694; AVX512F-LABEL: mload_constmask_v8i32:6695; AVX512F: ## %bb.0:6696; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 def $zmm06697; AVX512F-NEXT: movw $135, %ax6698; AVX512F-NEXT: kmovw %eax, %k16699; AVX512F-NEXT: vmovdqu32 (%rdi), %zmm0 {%k1}6700; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 killed $zmm06701; AVX512F-NEXT: retq6702;6703; AVX512VLDQ-LABEL: mload_constmask_v8i32:6704; AVX512VLDQ: ## %bb.0:6705; AVX512VLDQ-NEXT: movb $-121, %al6706; AVX512VLDQ-NEXT: kmovw %eax, %k16707; AVX512VLDQ-NEXT: vmovdqu32 (%rdi), %ymm0 {%k1}6708; AVX512VLDQ-NEXT: retq6709;6710; AVX512VLBW-LABEL: mload_constmask_v8i32:6711; AVX512VLBW: ## %bb.0:6712; AVX512VLBW-NEXT: movb $-121, %al6713; AVX512VLBW-NEXT: kmovd %eax, %k16714; AVX512VLBW-NEXT: vmovdqu32 (%rdi), %ymm0 {%k1}6715; AVX512VLBW-NEXT: retq6716;6717; X86-AVX512-LABEL: mload_constmask_v8i32:6718; X86-AVX512: ## %bb.0:6719; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax6720; X86-AVX512-NEXT: movb $-121, %cl6721; X86-AVX512-NEXT: kmovd %ecx, %k16722; X86-AVX512-NEXT: vmovdqu32 (%eax), %ymm0 {%k1}6723; X86-AVX512-NEXT: retl6724 %res = call <8 x i32> @llvm.masked.load.v8i32.p0(ptr %addr, i32 4, <8 x i1> <i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 1>, <8 x i32> %dst)6725 ret <8 x i32> %res6726}6727 6728define <4 x i64> @mload_constmask_v4i64(ptr %addr, <4 x i64> %dst) {6729; SSE2-LABEL: mload_constmask_v4i64:6730; SSE2: ## %bb.0:6731; SSE2-NEXT: movlps {{.*#+}} xmm0 = mem[0,1],xmm0[2,3]6732; SSE2-NEXT: movsd {{.*#+}} xmm2 = mem[0],zero6733; SSE2-NEXT: movlhps {{.*#+}} xmm1 = xmm1[0],xmm2[0]6734; SSE2-NEXT: retq6735;6736; SSE42-LABEL: mload_constmask_v4i64:6737; SSE42: ## %bb.0:6738; SSE42-NEXT: pinsrq $0, (%rdi), %xmm06739; SSE42-NEXT: pinsrq $1, 24(%rdi), %xmm16740; SSE42-NEXT: retq6741;6742; AVX1OR2-LABEL: mload_constmask_v4i64:6743; AVX1OR2: ## %bb.0:6744; AVX1OR2-NEXT: vblendps {{.*#+}} ymm0 = mem[0,1],ymm0[2,3,4,5],mem[6,7]6745; AVX1OR2-NEXT: retq6746;6747; AVX512F-LABEL: mload_constmask_v4i64:6748; AVX512F: ## %bb.0:6749; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 def $zmm06750; AVX512F-NEXT: movb $9, %al6751; AVX512F-NEXT: kmovw %eax, %k16752; AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0 {%k1}6753; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 killed $zmm06754; AVX512F-NEXT: retq6755;6756; AVX512VLDQ-LABEL: mload_constmask_v4i64:6757; AVX512VLDQ: ## %bb.0:6758; AVX512VLDQ-NEXT: movb $9, %al6759; AVX512VLDQ-NEXT: kmovw %eax, %k16760; AVX512VLDQ-NEXT: vmovdqu64 (%rdi), %ymm0 {%k1}6761; AVX512VLDQ-NEXT: retq6762;6763; AVX512VLBW-LABEL: mload_constmask_v4i64:6764; AVX512VLBW: ## %bb.0:6765; AVX512VLBW-NEXT: movb $9, %al6766; AVX512VLBW-NEXT: kmovd %eax, %k16767; AVX512VLBW-NEXT: vmovdqu64 (%rdi), %ymm0 {%k1}6768; AVX512VLBW-NEXT: retq6769;6770; X86-AVX512-LABEL: mload_constmask_v4i64:6771; X86-AVX512: ## %bb.0:6772; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax6773; X86-AVX512-NEXT: movb $9, %cl6774; X86-AVX512-NEXT: kmovd %ecx, %k16775; X86-AVX512-NEXT: vmovdqu64 (%eax), %ymm0 {%k1}6776; X86-AVX512-NEXT: retl6777 %res = call <4 x i64> @llvm.masked.load.v4i64.p0(ptr %addr, i32 4, <4 x i1> <i1 1, i1 0, i1 0, i1 1>, <4 x i64> %dst)6778 ret <4 x i64> %res6779}6780 6781; 512-bit FP vectors are supported with AVX512.6782 6783define <8 x double> @mload_constmask_v8f64(ptr %addr, <8 x double> %dst) {6784; SSE-LABEL: mload_constmask_v8f64:6785; SSE: ## %bb.0:6786; SSE-NEXT: movups (%rdi), %xmm06787; SSE-NEXT: movlps {{.*#+}} xmm1 = mem[0,1],xmm1[2,3]6788; SSE-NEXT: movhps {{.*#+}} xmm3 = xmm3[0,1],mem[0,1]6789; SSE-NEXT: retq6790;6791; AVX1OR2-LABEL: mload_constmask_v8f64:6792; AVX1OR2: ## %bb.0:6793; AVX1OR2-NEXT: vblendps {{.*#+}} ymm0 = mem[0,1,2,3,4,5],ymm0[6,7]6794; AVX1OR2-NEXT: vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5],mem[6,7]6795; AVX1OR2-NEXT: retq6796;6797; AVX512F-LABEL: mload_constmask_v8f64:6798; AVX512F: ## %bb.0:6799; AVX512F-NEXT: movb $-121, %al6800; AVX512F-NEXT: kmovw %eax, %k16801; AVX512F-NEXT: vmovupd (%rdi), %zmm0 {%k1}6802; AVX512F-NEXT: retq6803;6804; AVX512VLDQ-LABEL: mload_constmask_v8f64:6805; AVX512VLDQ: ## %bb.0:6806; AVX512VLDQ-NEXT: movb $-121, %al6807; AVX512VLDQ-NEXT: kmovw %eax, %k16808; AVX512VLDQ-NEXT: vmovupd (%rdi), %zmm0 {%k1}6809; AVX512VLDQ-NEXT: retq6810;6811; AVX512VLBW-LABEL: mload_constmask_v8f64:6812; AVX512VLBW: ## %bb.0:6813; AVX512VLBW-NEXT: movb $-121, %al6814; AVX512VLBW-NEXT: kmovd %eax, %k16815; AVX512VLBW-NEXT: vmovupd (%rdi), %zmm0 {%k1}6816; AVX512VLBW-NEXT: retq6817;6818; X86-AVX512-LABEL: mload_constmask_v8f64:6819; X86-AVX512: ## %bb.0:6820; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax6821; X86-AVX512-NEXT: movb $-121, %cl6822; X86-AVX512-NEXT: kmovd %ecx, %k16823; X86-AVX512-NEXT: vmovupd (%eax), %zmm0 {%k1}6824; X86-AVX512-NEXT: retl6825 %res = call <8 x double> @llvm.masked.load.v8f64.p0(ptr %addr, i32 4, <8 x i1> <i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 1>, <8 x double> %dst)6826 ret <8 x double> %res6827}6828 6829; Make sure we detect the mask is all ones after type6830; legalization to use an unmasked load for some of the avx512 instructions.6831define <16 x double> @mload_constmask_v16f64_allones_split(ptr %addr, <16 x double> %dst) {6832; SSE-LABEL: mload_constmask_v16f64_allones_split:6833; SSE: ## %bb.0:6834; SSE-NEXT: movq %rdi, %rax6835; SSE-NEXT: movups (%rsi), %xmm06836; SSE-NEXT: movups 16(%rsi), %xmm16837; SSE-NEXT: movups 32(%rsi), %xmm26838; SSE-NEXT: movups 48(%rsi), %xmm36839; SSE-NEXT: movlps {{.*#+}} xmm4 = mem[0,1],xmm4[2,3]6840; SSE-NEXT: movlps {{.*#+}} xmm5 = mem[0,1],xmm5[2,3]6841; SSE-NEXT: movlps {{.*#+}} xmm6 = mem[0,1],xmm6[2,3]6842; SSE-NEXT: movlps {{.*#+}} xmm7 = mem[0,1],xmm7[2,3]6843; SSE-NEXT: movaps %xmm7, 112(%rdi)6844; SSE-NEXT: movaps %xmm6, 96(%rdi)6845; SSE-NEXT: movaps %xmm5, 80(%rdi)6846; SSE-NEXT: movaps %xmm4, 64(%rdi)6847; SSE-NEXT: movaps %xmm3, 48(%rdi)6848; SSE-NEXT: movaps %xmm2, 32(%rdi)6849; SSE-NEXT: movaps %xmm1, 16(%rdi)6850; SSE-NEXT: movaps %xmm0, (%rdi)6851; SSE-NEXT: retq6852;6853; AVX1OR2-LABEL: mload_constmask_v16f64_allones_split:6854; AVX1OR2: ## %bb.0:6855; AVX1OR2-NEXT: vbroadcastf128 {{.*#+}} ymm0 = [18446744073709551615,0,18446744073709551615,0]6856; AVX1OR2-NEXT: ## ymm0 = mem[0,1,0,1]6857; AVX1OR2-NEXT: vmaskmovpd 64(%rdi), %ymm0, %ymm16858; AVX1OR2-NEXT: vblendpd {{.*#+}} ymm2 = ymm1[0],ymm2[1],ymm1[2],ymm2[3]6859; AVX1OR2-NEXT: vmaskmovpd 96(%rdi), %ymm0, %ymm06860; AVX1OR2-NEXT: vblendpd {{.*#+}} ymm3 = ymm0[0],ymm3[1],ymm0[2],ymm3[3]6861; AVX1OR2-NEXT: vmovups (%rdi), %ymm06862; AVX1OR2-NEXT: vmovups 32(%rdi), %ymm16863; AVX1OR2-NEXT: retq6864;6865; AVX512F-LABEL: mload_constmask_v16f64_allones_split:6866; AVX512F: ## %bb.0:6867; AVX512F-NEXT: movb $85, %al6868; AVX512F-NEXT: kmovw %eax, %k16869; AVX512F-NEXT: vmovupd 64(%rdi), %zmm1 {%k1}6870; AVX512F-NEXT: vmovups (%rdi), %zmm06871; AVX512F-NEXT: retq6872;6873; AVX512VLDQ-LABEL: mload_constmask_v16f64_allones_split:6874; AVX512VLDQ: ## %bb.0:6875; AVX512VLDQ-NEXT: movb $85, %al6876; AVX512VLDQ-NEXT: kmovw %eax, %k16877; AVX512VLDQ-NEXT: vmovupd 64(%rdi), %zmm1 {%k1}6878; AVX512VLDQ-NEXT: vmovups (%rdi), %zmm06879; AVX512VLDQ-NEXT: retq6880;6881; AVX512VLBW-LABEL: mload_constmask_v16f64_allones_split:6882; AVX512VLBW: ## %bb.0:6883; AVX512VLBW-NEXT: movb $85, %al6884; AVX512VLBW-NEXT: kmovd %eax, %k16885; AVX512VLBW-NEXT: vmovupd 64(%rdi), %zmm1 {%k1}6886; AVX512VLBW-NEXT: vmovups (%rdi), %zmm06887; AVX512VLBW-NEXT: retq6888;6889; X86-AVX512-LABEL: mload_constmask_v16f64_allones_split:6890; X86-AVX512: ## %bb.0:6891; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax6892; X86-AVX512-NEXT: movb $85, %cl6893; X86-AVX512-NEXT: kmovd %ecx, %k16894; X86-AVX512-NEXT: vmovupd 64(%eax), %zmm1 {%k1}6895; X86-AVX512-NEXT: vmovups (%eax), %zmm06896; X86-AVX512-NEXT: retl6897 %res = call <16 x double> @llvm.masked.load.v16f64.p0(ptr %addr, i32 4, <16 x i1> <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0>, <16 x double> %dst)6898 ret <16 x double> %res6899}6900 6901; If the pass-through operand is undef, no blend is needed.6902 6903define <4 x double> @mload_constmask_v4f64_undef_passthrough(ptr %addr) {6904; SSE-LABEL: mload_constmask_v4f64_undef_passthrough:6905; SSE: ## %bb.0:6906; SSE-NEXT: movups (%rdi), %xmm06907; SSE-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero6908; SSE-NEXT: retq6909;6910; AVX1OR2-LABEL: mload_constmask_v4f64_undef_passthrough:6911; AVX1OR2: ## %bb.0:6912; AVX1OR2-NEXT: vmovapd {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,18446744073709551615,0]6913; AVX1OR2-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm06914; AVX1OR2-NEXT: retq6915;6916; AVX512F-LABEL: mload_constmask_v4f64_undef_passthrough:6917; AVX512F: ## %bb.0:6918; AVX512F-NEXT: movb $7, %al6919; AVX512F-NEXT: kmovw %eax, %k16920; AVX512F-NEXT: vmovupd (%rdi), %zmm0 {%k1} {z}6921; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 killed $zmm06922; AVX512F-NEXT: retq6923;6924; AVX512VLDQ-LABEL: mload_constmask_v4f64_undef_passthrough:6925; AVX512VLDQ: ## %bb.0:6926; AVX512VLDQ-NEXT: movb $7, %al6927; AVX512VLDQ-NEXT: kmovw %eax, %k16928; AVX512VLDQ-NEXT: vmovupd (%rdi), %ymm0 {%k1} {z}6929; AVX512VLDQ-NEXT: retq6930;6931; AVX512VLBW-LABEL: mload_constmask_v4f64_undef_passthrough:6932; AVX512VLBW: ## %bb.0:6933; AVX512VLBW-NEXT: movb $7, %al6934; AVX512VLBW-NEXT: kmovd %eax, %k16935; AVX512VLBW-NEXT: vmovupd (%rdi), %ymm0 {%k1} {z}6936; AVX512VLBW-NEXT: retq6937;6938; X86-AVX512-LABEL: mload_constmask_v4f64_undef_passthrough:6939; X86-AVX512: ## %bb.0:6940; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax6941; X86-AVX512-NEXT: movb $7, %cl6942; X86-AVX512-NEXT: kmovd %ecx, %k16943; X86-AVX512-NEXT: vmovupd (%eax), %ymm0 {%k1} {z}6944; X86-AVX512-NEXT: retl6945 %res = call <4 x double> @llvm.masked.load.v4f64.p0(ptr %addr, i32 4, <4 x i1> <i1 1, i1 1, i1 1, i1 0>, <4 x double> undef)6946 ret <4 x double> %res6947}6948 6949define <4 x i64> @mload_constmask_v4i64_undef_passthrough(ptr %addr) {6950; SSE-LABEL: mload_constmask_v4i64_undef_passthrough:6951; SSE: ## %bb.0:6952; SSE-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero6953; SSE-NEXT: movq {{.*#+}} xmm0 = mem[0],zero6954; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]6955; SSE-NEXT: retq6956;6957; AVX1-LABEL: mload_constmask_v4i64_undef_passthrough:6958; AVX1: ## %bb.0:6959; AVX1-NEXT: vmovapd {{.*#+}} ymm0 = [0,18446744073709551615,18446744073709551615,0]6960; AVX1-NEXT: vmaskmovpd (%rdi), %ymm0, %ymm06961; AVX1-NEXT: retq6962;6963; AVX2-LABEL: mload_constmask_v4i64_undef_passthrough:6964; AVX2: ## %bb.0:6965; AVX2-NEXT: vpmovsxbq {{.*#+}} ymm0 = [0,18446744073709551615,18446744073709551615,0]6966; AVX2-NEXT: vpmaskmovq (%rdi), %ymm0, %ymm06967; AVX2-NEXT: retq6968;6969; AVX512F-LABEL: mload_constmask_v4i64_undef_passthrough:6970; AVX512F: ## %bb.0:6971; AVX512F-NEXT: movb $6, %al6972; AVX512F-NEXT: kmovw %eax, %k16973; AVX512F-NEXT: vmovdqu64 (%rdi), %zmm0 {%k1} {z}6974; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 killed $zmm06975; AVX512F-NEXT: retq6976;6977; AVX512VLDQ-LABEL: mload_constmask_v4i64_undef_passthrough:6978; AVX512VLDQ: ## %bb.0:6979; AVX512VLDQ-NEXT: movb $6, %al6980; AVX512VLDQ-NEXT: kmovw %eax, %k16981; AVX512VLDQ-NEXT: vmovdqu64 (%rdi), %ymm0 {%k1} {z}6982; AVX512VLDQ-NEXT: retq6983;6984; AVX512VLBW-LABEL: mload_constmask_v4i64_undef_passthrough:6985; AVX512VLBW: ## %bb.0:6986; AVX512VLBW-NEXT: movb $6, %al6987; AVX512VLBW-NEXT: kmovd %eax, %k16988; AVX512VLBW-NEXT: vmovdqu64 (%rdi), %ymm0 {%k1} {z}6989; AVX512VLBW-NEXT: retq6990;6991; X86-AVX512-LABEL: mload_constmask_v4i64_undef_passthrough:6992; X86-AVX512: ## %bb.0:6993; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax6994; X86-AVX512-NEXT: movb $6, %cl6995; X86-AVX512-NEXT: kmovd %ecx, %k16996; X86-AVX512-NEXT: vmovdqu64 (%eax), %ymm0 {%k1} {z}6997; X86-AVX512-NEXT: retl6998 %res = call <4 x i64> @llvm.masked.load.v4i64.p0(ptr %addr, i32 4, <4 x i1> <i1 0, i1 1, i1 1, i1 0>, <4 x i64> undef)6999 ret <4 x i64> %res7000}7001 7002; When only one element of the mask is set, reduce to a scalar load.7003 7004define <4 x i32> @load_one_mask_bit_set1(ptr %addr, <4 x i32> %val) {7005; SSE2-LABEL: load_one_mask_bit_set1:7006; SSE2: ## %bb.0:7007; SSE2-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero7008; SSE2-NEXT: movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]7009; SSE2-NEXT: retq7010;7011; SSE42-LABEL: load_one_mask_bit_set1:7012; SSE42: ## %bb.0:7013; SSE42-NEXT: pinsrd $0, (%rdi), %xmm07014; SSE42-NEXT: retq7015;7016; AVX-LABEL: load_one_mask_bit_set1:7017; AVX: ## %bb.0:7018; AVX-NEXT: vpinsrd $0, (%rdi), %xmm0, %xmm07019; AVX-NEXT: retq7020;7021; X86-AVX512-LABEL: load_one_mask_bit_set1:7022; X86-AVX512: ## %bb.0:7023; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax7024; X86-AVX512-NEXT: vpinsrd $0, (%eax), %xmm0, %xmm07025; X86-AVX512-NEXT: retl7026 %res = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %addr, i32 4, <4 x i1> <i1 true, i1 false, i1 false, i1 false>, <4 x i32> %val)7027 ret <4 x i32> %res7028}7029 7030; Choose a different element to show that the correct address offset is produced.7031 7032define <4 x float> @load_one_mask_bit_set2(ptr %addr, <4 x float> %val) {7033; SSE2-LABEL: load_one_mask_bit_set2:7034; SSE2: ## %bb.0:7035; SSE2-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero7036; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[3,0]7037; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0,2]7038; SSE2-NEXT: retq7039;7040; SSE42-LABEL: load_one_mask_bit_set2:7041; SSE42: ## %bb.0:7042; SSE42-NEXT: insertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]7043; SSE42-NEXT: retq7044;7045; AVX-LABEL: load_one_mask_bit_set2:7046; AVX: ## %bb.0:7047; AVX-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]7048; AVX-NEXT: retq7049;7050; X86-AVX512-LABEL: load_one_mask_bit_set2:7051; X86-AVX512: ## %bb.0:7052; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax7053; X86-AVX512-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]7054; X86-AVX512-NEXT: retl7055 %res = call <4 x float> @llvm.masked.load.v4f32.p0(ptr %addr, i32 4, <4 x i1> <i1 false, i1 false, i1 true, i1 false>, <4 x float> %val)7056 ret <4 x float> %res7057}7058 7059; Choose a different scalar type and a high element of a 256-bit vector because AVX doesn't support those evenly.7060 7061define <4 x i64> @load_one_mask_bit_set3(ptr %addr, <4 x i64> %val) {7062; SSE2-LABEL: load_one_mask_bit_set3:7063; SSE2: ## %bb.0:7064; SSE2-NEXT: movlps {{.*#+}} xmm1 = mem[0,1],xmm1[2,3]7065; SSE2-NEXT: retq7066;7067; SSE42-LABEL: load_one_mask_bit_set3:7068; SSE42: ## %bb.0:7069; SSE42-NEXT: pinsrq $0, 16(%rdi), %xmm17070; SSE42-NEXT: retq7071;7072; AVX-LABEL: load_one_mask_bit_set3:7073; AVX: ## %bb.0:7074; AVX-NEXT: vbroadcastsd 16(%rdi), %ymm17075; AVX-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5],ymm0[6,7]7076; AVX-NEXT: retq7077;7078; X86-AVX512-LABEL: load_one_mask_bit_set3:7079; X86-AVX512: ## %bb.0:7080; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax7081; X86-AVX512-NEXT: vbroadcastsd 16(%eax), %ymm17082; X86-AVX512-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5],ymm0[6,7]7083; X86-AVX512-NEXT: retl7084 %res = call <4 x i64> @llvm.masked.load.v4i64.p0(ptr %addr, i32 4, <4 x i1> <i1 false, i1 false, i1 true, i1 false>, <4 x i64> %val)7085 ret <4 x i64> %res7086}7087 7088; Choose a different scalar type and a high element of a 256-bit vector because AVX doesn't support those evenly.7089 7090define <4 x double> @load_one_mask_bit_set4(ptr %addr, <4 x double> %val) {7091; SSE-LABEL: load_one_mask_bit_set4:7092; SSE: ## %bb.0:7093; SSE-NEXT: movhps {{.*#+}} xmm1 = xmm1[0,1],mem[0,1]7094; SSE-NEXT: retq7095;7096; AVX-LABEL: load_one_mask_bit_set4:7097; AVX: ## %bb.0:7098; AVX-NEXT: vbroadcastsd 24(%rdi), %ymm17099; AVX-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm1[6,7]7100; AVX-NEXT: retq7101;7102; X86-AVX512-LABEL: load_one_mask_bit_set4:7103; X86-AVX512: ## %bb.0:7104; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax7105; X86-AVX512-NEXT: vbroadcastsd 24(%eax), %ymm17106; X86-AVX512-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm1[6,7]7107; X86-AVX512-NEXT: retl7108 %res = call <4 x double> @llvm.masked.load.v4f64.p0(ptr %addr, i32 4, <4 x i1> <i1 false, i1 false, i1 false, i1 true>, <4 x double> %val)7109 ret <4 x double> %res7110}7111 7112; Try a 512-bit vector to make sure AVX doesn't die and AVX512 works as expected.7113 7114define <8 x double> @load_one_mask_bit_set5(ptr %addr, <8 x double> %val) {7115; SSE-LABEL: load_one_mask_bit_set5:7116; SSE: ## %bb.0:7117; SSE-NEXT: movhps {{.*#+}} xmm3 = xmm3[0,1],mem[0,1]7118; SSE-NEXT: retq7119;7120; AVX1OR2-LABEL: load_one_mask_bit_set5:7121; AVX1OR2: ## %bb.0:7122; AVX1OR2-NEXT: vbroadcastsd 56(%rdi), %ymm27123; AVX1OR2-NEXT: vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5],ymm2[6,7]7124; AVX1OR2-NEXT: retq7125;7126; AVX512F-LABEL: load_one_mask_bit_set5:7127; AVX512F: ## %bb.0:7128; AVX512F-NEXT: movb $-128, %al7129; AVX512F-NEXT: kmovw %eax, %k17130; AVX512F-NEXT: vbroadcastsd 56(%rdi), %zmm0 {%k1}7131; AVX512F-NEXT: retq7132;7133; AVX512VLDQ-LABEL: load_one_mask_bit_set5:7134; AVX512VLDQ: ## %bb.0:7135; AVX512VLDQ-NEXT: movb $-128, %al7136; AVX512VLDQ-NEXT: kmovw %eax, %k17137; AVX512VLDQ-NEXT: vbroadcastsd 56(%rdi), %zmm0 {%k1}7138; AVX512VLDQ-NEXT: retq7139;7140; AVX512VLBW-LABEL: load_one_mask_bit_set5:7141; AVX512VLBW: ## %bb.0:7142; AVX512VLBW-NEXT: movb $-128, %al7143; AVX512VLBW-NEXT: kmovd %eax, %k17144; AVX512VLBW-NEXT: vbroadcastsd 56(%rdi), %zmm0 {%k1}7145; AVX512VLBW-NEXT: retq7146;7147; X86-AVX512-LABEL: load_one_mask_bit_set5:7148; X86-AVX512: ## %bb.0:7149; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax7150; X86-AVX512-NEXT: movb $-128, %cl7151; X86-AVX512-NEXT: kmovd %ecx, %k17152; X86-AVX512-NEXT: vbroadcastsd 56(%eax), %zmm0 {%k1}7153; X86-AVX512-NEXT: retl7154 %res = call <8 x double> @llvm.masked.load.v8f64.p0(ptr %addr, i32 4, <8 x i1> <i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 true>, <8 x double> %val)7155 ret <8 x double> %res7156}7157 7158define <16 x i64> @load_one_mask_bit_set6(ptr %addr, <16 x i64> %val) {7159; SSE2-LABEL: load_one_mask_bit_set6:7160; SSE2: ## %bb.0:7161; SSE2-NEXT: movq %rdi, %rax7162; SSE2-NEXT: movlps {{.*#+}} xmm1 = mem[0,1],xmm1[2,3]7163; SSE2-NEXT: movlps {{.*#+}} xmm5 = mem[0,1],xmm5[2,3]7164; SSE2-NEXT: movsd {{.*#+}} xmm8 = mem[0],zero7165; SSE2-NEXT: movlhps {{.*#+}} xmm6 = xmm6[0],xmm8[0]7166; SSE2-NEXT: movaps %xmm7, 112(%rdi)7167; SSE2-NEXT: movaps %xmm5, 80(%rdi)7168; SSE2-NEXT: movaps %xmm4, 64(%rdi)7169; SSE2-NEXT: movaps %xmm3, 48(%rdi)7170; SSE2-NEXT: movaps %xmm2, 32(%rdi)7171; SSE2-NEXT: movaps %xmm1, 16(%rdi)7172; SSE2-NEXT: movaps %xmm0, (%rdi)7173; SSE2-NEXT: movaps %xmm6, 96(%rdi)7174; SSE2-NEXT: retq7175;7176; SSE42-LABEL: load_one_mask_bit_set6:7177; SSE42: ## %bb.0:7178; SSE42-NEXT: movq %rdi, %rax7179; SSE42-NEXT: pinsrq $0, 16(%rsi), %xmm17180; SSE42-NEXT: pinsrq $0, 80(%rsi), %xmm57181; SSE42-NEXT: pinsrq $1, 104(%rsi), %xmm67182; SSE42-NEXT: movaps %xmm7, 112(%rdi)7183; SSE42-NEXT: movdqa %xmm6, 96(%rdi)7184; SSE42-NEXT: movdqa %xmm5, 80(%rdi)7185; SSE42-NEXT: movaps %xmm4, 64(%rdi)7186; SSE42-NEXT: movaps %xmm3, 48(%rdi)7187; SSE42-NEXT: movaps %xmm2, 32(%rdi)7188; SSE42-NEXT: movdqa %xmm1, 16(%rdi)7189; SSE42-NEXT: movaps %xmm0, (%rdi)7190; SSE42-NEXT: retq7191;7192; AVX1-LABEL: load_one_mask_bit_set6:7193; AVX1: ## %bb.0:7194; AVX1-NEXT: vmovapd {{.*#+}} ymm4 = [0,0,18446744073709551615,0]7195; AVX1-NEXT: vmaskmovpd (%rdi), %ymm4, %ymm57196; AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm0[0,1],ymm5[2],ymm0[3]7197; AVX1-NEXT: vmaskmovpd 64(%rdi), %ymm4, %ymm47198; AVX1-NEXT: vblendpd {{.*#+}} ymm2 = ymm2[0,1],ymm4[2],ymm2[3]7199; AVX1-NEXT: vmovapd {{.*#+}} ymm4 = [0,18446744073709551615,0,0]7200; AVX1-NEXT: vmaskmovpd 96(%rdi), %ymm4, %ymm47201; AVX1-NEXT: vblendpd {{.*#+}} ymm3 = ymm3[0],ymm4[1],ymm3[2,3]7202; AVX1-NEXT: retq7203;7204; AVX2-LABEL: load_one_mask_bit_set6:7205; AVX2: ## %bb.0:7206; AVX2-NEXT: vpmovsxbq {{.*#+}} ymm4 = [0,0,18446744073709551615,0]7207; AVX2-NEXT: vpmaskmovq (%rdi), %ymm4, %ymm57208; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm5[4,5],ymm0[6,7]7209; AVX2-NEXT: vpmaskmovq 64(%rdi), %ymm4, %ymm47210; AVX2-NEXT: vpblendd {{.*#+}} ymm2 = ymm2[0,1,2,3],ymm4[4,5],ymm2[6,7]7211; AVX2-NEXT: vpmovsxbq {{.*#+}} ymm4 = [0,18446744073709551615,0,0]7212; AVX2-NEXT: vpmaskmovq 96(%rdi), %ymm4, %ymm47213; AVX2-NEXT: vpblendd {{.*#+}} ymm3 = ymm3[0,1],ymm4[2,3],ymm3[4,5,6,7]7214; AVX2-NEXT: retq7215;7216; AVX512F-LABEL: load_one_mask_bit_set6:7217; AVX512F: ## %bb.0:7218; AVX512F-NEXT: movb $4, %al7219; AVX512F-NEXT: kmovw %eax, %k17220; AVX512F-NEXT: vpbroadcastq 16(%rdi), %zmm0 {%k1}7221; AVX512F-NEXT: movb $36, %al7222; AVX512F-NEXT: kmovw %eax, %k17223; AVX512F-NEXT: vmovdqu64 64(%rdi), %zmm1 {%k1}7224; AVX512F-NEXT: retq7225;7226; AVX512VLDQ-LABEL: load_one_mask_bit_set6:7227; AVX512VLDQ: ## %bb.0:7228; AVX512VLDQ-NEXT: movb $4, %al7229; AVX512VLDQ-NEXT: kmovw %eax, %k17230; AVX512VLDQ-NEXT: vpbroadcastq 16(%rdi), %zmm0 {%k1}7231; AVX512VLDQ-NEXT: movb $36, %al7232; AVX512VLDQ-NEXT: kmovw %eax, %k17233; AVX512VLDQ-NEXT: vmovdqu64 64(%rdi), %zmm1 {%k1}7234; AVX512VLDQ-NEXT: retq7235;7236; AVX512VLBW-LABEL: load_one_mask_bit_set6:7237; AVX512VLBW: ## %bb.0:7238; AVX512VLBW-NEXT: movb $4, %al7239; AVX512VLBW-NEXT: kmovd %eax, %k17240; AVX512VLBW-NEXT: vpbroadcastq 16(%rdi), %zmm0 {%k1}7241; AVX512VLBW-NEXT: movb $36, %al7242; AVX512VLBW-NEXT: kmovd %eax, %k17243; AVX512VLBW-NEXT: vmovdqu64 64(%rdi), %zmm1 {%k1}7244; AVX512VLBW-NEXT: retq7245;7246; X86-AVX512-LABEL: load_one_mask_bit_set6:7247; X86-AVX512: ## %bb.0:7248; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax7249; X86-AVX512-NEXT: movb $4, %cl7250; X86-AVX512-NEXT: kmovd %ecx, %k17251; X86-AVX512-NEXT: vbroadcastsd 16(%eax), %zmm0 {%k1}7252; X86-AVX512-NEXT: movb $36, %cl7253; X86-AVX512-NEXT: kmovd %ecx, %k17254; X86-AVX512-NEXT: vmovdqu64 64(%eax), %zmm1 {%k1}7255; X86-AVX512-NEXT: retl7256 %res = call <16 x i64> @llvm.masked.load.v16i64.p0(ptr %addr, i32 4, <16 x i1> <i1 false, i1 false, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 true, i1 false, i1 false, i1 true, i1 false, i1 false>, <16 x i64> %val)7257 ret <16 x i64> %res7258}7259 7260define i32 @pr38986(i1 %c, ptr %p) {7261; SSE-LABEL: pr38986:7262; SSE: ## %bb.0:7263; SSE-NEXT: testb $1, %dil7264; SSE-NEXT: ## implicit-def: $eax7265; SSE-NEXT: je LBB45_27266; SSE-NEXT: ## %bb.1: ## %cond.load7267; SSE-NEXT: movl (%rsi), %eax7268; SSE-NEXT: LBB45_2: ## %else7269; SSE-NEXT: retq7270;7271; AVX-LABEL: pr38986:7272; AVX: ## %bb.0:7273; AVX-NEXT: testb $1, %dil7274; AVX-NEXT: ## implicit-def: $eax7275; AVX-NEXT: je LBB45_27276; AVX-NEXT: ## %bb.1: ## %cond.load7277; AVX-NEXT: movl (%rsi), %eax7278; AVX-NEXT: LBB45_2: ## %else7279; AVX-NEXT: retq7280;7281; X86-AVX512-LABEL: pr38986:7282; X86-AVX512: ## %bb.0:7283; X86-AVX512-NEXT: testb $1, {{[0-9]+}}(%esp)7284; X86-AVX512-NEXT: ## implicit-def: $eax7285; X86-AVX512-NEXT: je LBB45_27286; X86-AVX512-NEXT: ## %bb.1: ## %cond.load7287; X86-AVX512-NEXT: movl {{[0-9]+}}(%esp), %eax7288; X86-AVX512-NEXT: movl (%eax), %eax7289; X86-AVX512-NEXT: LBB45_2: ## %else7290; X86-AVX512-NEXT: retl7291 %vc = insertelement <1 x i1> undef, i1 %c, i32 07292 %L = call <1 x i32> @llvm.masked.load.v1i32.p0 (ptr %p, i32 4, <1 x i1> %vc, <1 x i32> undef)7293 %ret = bitcast <1 x i32> %L to i327294 ret i32 %ret7295}7296 7297define <2 x double> @zero_mask(ptr %addr, <2 x double> %dst) {7298; SSE-LABEL: zero_mask:7299; SSE: ## %bb.0:7300; SSE-NEXT: retq7301;7302; AVX-LABEL: zero_mask:7303; AVX: ## %bb.0:7304; AVX-NEXT: retq7305;7306; X86-AVX512-LABEL: zero_mask:7307; X86-AVX512: ## %bb.0:7308; X86-AVX512-NEXT: retl7309 %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %addr, i32 4, <2 x i1> zeroinitializer, <2 x double> %dst)7310 ret <2 x double> %res7311}7312 7313declare <16 x double> @llvm.masked.load.v16f64.p0(ptr, i32, <16 x i1>, <16 x double>)7314declare <8 x double> @llvm.masked.load.v8f64.p0(ptr, i32, <8 x i1>, <8 x double>)7315declare <4 x double> @llvm.masked.load.v4f64.p0(ptr, i32, <4 x i1>, <4 x double>)7316declare <2 x double> @llvm.masked.load.v2f64.p0(ptr, i32, <2 x i1>, <2 x double>)7317declare <1 x double> @llvm.masked.load.v1f64.p0(ptr, i32, <1 x i1>, <1 x double>)7318 7319declare <16 x float> @llvm.masked.load.v16f32.p0(ptr, i32, <16 x i1>, <16 x float>)7320declare <8 x float> @llvm.masked.load.v8f32.p0(ptr, i32, <8 x i1>, <8 x float>)7321declare <4 x float> @llvm.masked.load.v4f32.p0(ptr, i32, <4 x i1>, <4 x float>)7322declare <2 x float> @llvm.masked.load.v2f32.p0(ptr, i32, <2 x i1>, <2 x float>)7323 7324declare <16 x i64> @llvm.masked.load.v16i64.p0(ptr, i32, <16 x i1>, <16 x i64>)7325declare <8 x i64> @llvm.masked.load.v8i64.p0(ptr, i32, <8 x i1>, <8 x i64>)7326declare <4 x i64> @llvm.masked.load.v4i64.p0(ptr, i32, <4 x i1>, <4 x i64>)7327declare <2 x i64> @llvm.masked.load.v2i64.p0(ptr, i32, <2 x i1>, <2 x i64>)7328declare <1 x i64> @llvm.masked.load.v1i64.p0(ptr, i32, <1 x i1>, <1 x i64>)7329 7330declare <16 x i32> @llvm.masked.load.v16i32.p0(ptr, i32, <16 x i1>, <16 x i32>)7331declare <8 x i32> @llvm.masked.load.v8i32.p0(ptr, i32, <8 x i1>, <8 x i32>)7332declare <4 x i32> @llvm.masked.load.v4i32.p0(ptr, i32, <4 x i1>, <4 x i32>)7333declare <2 x i32> @llvm.masked.load.v2i32.p0(ptr, i32, <2 x i1>, <2 x i32>)7334declare <1 x i32> @llvm.masked.load.v1i32.p0(ptr, i32, <1 x i1>, <1 x i32>)7335 7336declare <32 x i16> @llvm.masked.load.v32i16.p0(ptr, i32, <32 x i1>, <32 x i16>)7337declare <16 x i16> @llvm.masked.load.v16i16.p0(ptr, i32, <16 x i1>, <16 x i16>)7338declare <8 x i16> @llvm.masked.load.v8i16.p0(ptr, i32, <8 x i1>, <8 x i16>)7339declare <4 x i16> @llvm.masked.load.v4i16.p0(ptr, i32, <4 x i1>, <4 x i16>)7340 7341declare <64 x i8> @llvm.masked.load.v64i8.p0(ptr, i32, <64 x i1>, <64 x i8>)7342declare <32 x i8> @llvm.masked.load.v32i8.p0(ptr, i32, <32 x i1>, <32 x i8>)7343declare <16 x i8> @llvm.masked.load.v16i8.p0(ptr, i32, <16 x i1>, <16 x i8>)7344declare <8 x i8> @llvm.masked.load.v8i8.p0(ptr, i32, <8 x i1>, <8 x i8>)7345