1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=sse2 | FileCheck %s --check-prefixes=SSE,SSE2 3; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=sse4.2 | FileCheck %s --check-prefixes=SSE,SSE42 4; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx | FileCheck %s --check-prefixes=AVX1OR2,AVX1 5; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx2 | FileCheck %s --check-prefixes=AVX1OR2,AVX2 6; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx512f | FileCheck %s --check-prefixes=AVX512,AVX512F 7; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx512f,avx512dq,avx512vl | FileCheck %s --check-prefixes=AVX512,AVX512VL,AVX512VLDQ 8; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx512f,avx512bw,avx512vl | FileCheck %s --check-prefixes=AVX512,AVX512VL,AVX512VLBW 9 10; 11; vXf64 12; 13 14define void @compressstore_v8f64_v8i1(ptr %base, <8 x double> %V, <8 x i1> %mask) { 15; SSE-LABEL: compressstore_v8f64_v8i1: 16; SSE: ## %bb.0: 17; SSE-NEXT: psllw $15, %xmm4 18; SSE-NEXT: packsswb %xmm4, %xmm4 19; SSE-NEXT: pmovmskb %xmm4, %eax 20; SSE-NEXT: testb $1, %al 21; SSE-NEXT: jne LBB0_1 22; SSE-NEXT: ## %bb.2: ## %else 23; SSE-NEXT: testb $2, %al 24; SSE-NEXT: jne LBB0_3 25; SSE-NEXT: LBB0_4: ## %else2 26; SSE-NEXT: testb $4, %al 27; SSE-NEXT: jne LBB0_5 28; SSE-NEXT: LBB0_6: ## %else5 29; SSE-NEXT: testb $8, %al 30; SSE-NEXT: jne LBB0_7 31; SSE-NEXT: LBB0_8: ## %else8 32; SSE-NEXT: testb $16, %al 33; SSE-NEXT: jne LBB0_9 34; SSE-NEXT: LBB0_10: ## %else11 35; SSE-NEXT: testb $32, %al 36; SSE-NEXT: jne LBB0_11 37; SSE-NEXT: LBB0_12: ## %else14 38; SSE-NEXT: testb $64, %al 39; SSE-NEXT: jne LBB0_13 40; SSE-NEXT: LBB0_14: ## %else17 41; SSE-NEXT: testb $-128, %al 42; SSE-NEXT: jne LBB0_15 43; SSE-NEXT: LBB0_16: ## %else20 44; SSE-NEXT: retq 45; SSE-NEXT: LBB0_1: ## %cond.store 46; SSE-NEXT: movq %xmm0, (%rdi) 47; SSE-NEXT: addq $8, %rdi 48; SSE-NEXT: testb $2, %al 49; SSE-NEXT: je LBB0_4 50; SSE-NEXT: LBB0_3: ## %cond.store1 51; SSE-NEXT: movhpd %xmm0, (%rdi) 52; SSE-NEXT: addq $8, %rdi 53; SSE-NEXT: testb $4, %al 54; SSE-NEXT: je LBB0_6 55; SSE-NEXT: LBB0_5: ## %cond.store4 56; SSE-NEXT: movlps %xmm1, (%rdi) 57; SSE-NEXT: addq $8, %rdi 58; SSE-NEXT: testb $8, %al 59; SSE-NEXT: je LBB0_8 60; SSE-NEXT: LBB0_7: ## %cond.store7 61; SSE-NEXT: movhps %xmm1, (%rdi) 62; SSE-NEXT: addq $8, %rdi 63; SSE-NEXT: testb $16, %al 64; SSE-NEXT: je LBB0_10 65; SSE-NEXT: LBB0_9: ## %cond.store10 66; SSE-NEXT: movlps %xmm2, (%rdi) 67; SSE-NEXT: addq $8, %rdi 68; SSE-NEXT: testb $32, %al 69; SSE-NEXT: je LBB0_12 70; SSE-NEXT: LBB0_11: ## %cond.store13 71; SSE-NEXT: movhps %xmm2, (%rdi) 72; SSE-NEXT: addq $8, %rdi 73; SSE-NEXT: testb $64, %al 74; SSE-NEXT: je LBB0_14 75; SSE-NEXT: LBB0_13: ## %cond.store16 76; SSE-NEXT: movlps %xmm3, (%rdi) 77; SSE-NEXT: addq $8, %rdi 78; SSE-NEXT: testb $-128, %al 79; SSE-NEXT: je LBB0_16 80; SSE-NEXT: LBB0_15: ## %cond.store19 81; SSE-NEXT: movhps %xmm3, (%rdi) 82; SSE-NEXT: retq 83; 84; AVX1-LABEL: compressstore_v8f64_v8i1: 85; AVX1: ## %bb.0: 86; AVX1-NEXT: vpsllw $15, %xmm2, %xmm2 87; AVX1-NEXT: vpacksswb %xmm2, %xmm2, %xmm2 88; AVX1-NEXT: vpmovmskb %xmm2, %eax 89; AVX1-NEXT: testb $1, %al 90; AVX1-NEXT: je LBB0_2 91; AVX1-NEXT: ## %bb.1: ## %cond.store 92; AVX1-NEXT: vmovq %xmm0, (%rdi) 93; AVX1-NEXT: addq $8, %rdi 94; AVX1-NEXT: LBB0_2: ## %else 95; AVX1-NEXT: testb $2, %al 96; AVX1-NEXT: je LBB0_4 97; AVX1-NEXT: ## %bb.3: ## %cond.store1 98; AVX1-NEXT: vmovhpd %xmm0, (%rdi) 99; AVX1-NEXT: addq $8, %rdi 100; AVX1-NEXT: LBB0_4: ## %else2 101; AVX1-NEXT: testb $4, %al 102; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 103; AVX1-NEXT: jne LBB0_5 104; AVX1-NEXT: ## %bb.6: ## %else5 105; AVX1-NEXT: testb $8, %al 106; AVX1-NEXT: jne LBB0_7 107; AVX1-NEXT: LBB0_8: ## %else8 108; AVX1-NEXT: testb $16, %al 109; AVX1-NEXT: jne LBB0_9 110; AVX1-NEXT: LBB0_10: ## %else11 111; AVX1-NEXT: testb $32, %al 112; AVX1-NEXT: je LBB0_12 113; AVX1-NEXT: LBB0_11: ## %cond.store13 114; AVX1-NEXT: vmovhps %xmm1, (%rdi) 115; AVX1-NEXT: addq $8, %rdi 116; AVX1-NEXT: LBB0_12: ## %else14 117; AVX1-NEXT: testb $64, %al 118; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0 119; AVX1-NEXT: jne LBB0_13 120; AVX1-NEXT: ## %bb.14: ## %else17 121; AVX1-NEXT: testb $-128, %al 122; AVX1-NEXT: jne LBB0_15 123; AVX1-NEXT: LBB0_16: ## %else20 124; AVX1-NEXT: vzeroupper 125; AVX1-NEXT: retq 126; AVX1-NEXT: LBB0_5: ## %cond.store4 127; AVX1-NEXT: vmovlps %xmm0, (%rdi) 128; AVX1-NEXT: addq $8, %rdi 129; AVX1-NEXT: testb $8, %al 130; AVX1-NEXT: je LBB0_8 131; AVX1-NEXT: LBB0_7: ## %cond.store7 132; AVX1-NEXT: vmovhps %xmm0, (%rdi) 133; AVX1-NEXT: addq $8, %rdi 134; AVX1-NEXT: testb $16, %al 135; AVX1-NEXT: je LBB0_10 136; AVX1-NEXT: LBB0_9: ## %cond.store10 137; AVX1-NEXT: vmovlps %xmm1, (%rdi) 138; AVX1-NEXT: addq $8, %rdi 139; AVX1-NEXT: testb $32, %al 140; AVX1-NEXT: jne LBB0_11 141; AVX1-NEXT: jmp LBB0_12 142; AVX1-NEXT: LBB0_13: ## %cond.store16 143; AVX1-NEXT: vmovlps %xmm0, (%rdi) 144; AVX1-NEXT: addq $8, %rdi 145; AVX1-NEXT: testb $-128, %al 146; AVX1-NEXT: je LBB0_16 147; AVX1-NEXT: LBB0_15: ## %cond.store19 148; AVX1-NEXT: vmovhps %xmm0, (%rdi) 149; AVX1-NEXT: vzeroupper 150; AVX1-NEXT: retq 151; 152; AVX2-LABEL: compressstore_v8f64_v8i1: 153; AVX2: ## %bb.0: 154; AVX2-NEXT: vpsllw $15, %xmm2, %xmm2 155; AVX2-NEXT: vpacksswb %xmm2, %xmm2, %xmm2 156; AVX2-NEXT: vpmovmskb %xmm2, %eax 157; AVX2-NEXT: testb $1, %al 158; AVX2-NEXT: je LBB0_2 159; AVX2-NEXT: ## %bb.1: ## %cond.store 160; AVX2-NEXT: vmovq %xmm0, (%rdi) 161; AVX2-NEXT: addq $8, %rdi 162; AVX2-NEXT: LBB0_2: ## %else 163; AVX2-NEXT: testb $2, %al 164; AVX2-NEXT: je LBB0_4 165; AVX2-NEXT: ## %bb.3: ## %cond.store1 166; AVX2-NEXT: vmovhpd %xmm0, (%rdi) 167; AVX2-NEXT: addq $8, %rdi 168; AVX2-NEXT: LBB0_4: ## %else2 169; AVX2-NEXT: testb $4, %al 170; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 171; AVX2-NEXT: jne LBB0_5 172; AVX2-NEXT: ## %bb.6: ## %else5 173; AVX2-NEXT: testb $8, %al 174; AVX2-NEXT: jne LBB0_7 175; AVX2-NEXT: LBB0_8: ## %else8 176; AVX2-NEXT: testb $16, %al 177; AVX2-NEXT: jne LBB0_9 178; AVX2-NEXT: LBB0_10: ## %else11 179; AVX2-NEXT: testb $32, %al 180; AVX2-NEXT: je LBB0_12 181; AVX2-NEXT: LBB0_11: ## %cond.store13 182; AVX2-NEXT: vmovhps %xmm1, (%rdi) 183; AVX2-NEXT: addq $8, %rdi 184; AVX2-NEXT: LBB0_12: ## %else14 185; AVX2-NEXT: testb $64, %al 186; AVX2-NEXT: vextractf128 $1, %ymm1, %xmm0 187; AVX2-NEXT: jne LBB0_13 188; AVX2-NEXT: ## %bb.14: ## %else17 189; AVX2-NEXT: testb $-128, %al 190; AVX2-NEXT: jne LBB0_15 191; AVX2-NEXT: LBB0_16: ## %else20 192; AVX2-NEXT: vzeroupper 193; AVX2-NEXT: retq 194; AVX2-NEXT: LBB0_5: ## %cond.store4 195; AVX2-NEXT: vmovq %xmm0, (%rdi) 196; AVX2-NEXT: addq $8, %rdi 197; AVX2-NEXT: testb $8, %al 198; AVX2-NEXT: je LBB0_8 199; AVX2-NEXT: LBB0_7: ## %cond.store7 200; AVX2-NEXT: vmovhpd %xmm0, (%rdi) 201; AVX2-NEXT: addq $8, %rdi 202; AVX2-NEXT: testb $16, %al 203; AVX2-NEXT: je LBB0_10 204; AVX2-NEXT: LBB0_9: ## %cond.store10 205; AVX2-NEXT: vmovlps %xmm1, (%rdi) 206; AVX2-NEXT: addq $8, %rdi 207; AVX2-NEXT: testb $32, %al 208; AVX2-NEXT: jne LBB0_11 209; AVX2-NEXT: jmp LBB0_12 210; AVX2-NEXT: LBB0_13: ## %cond.store16 211; AVX2-NEXT: vmovlps %xmm0, (%rdi) 212; AVX2-NEXT: addq $8, %rdi 213; AVX2-NEXT: testb $-128, %al 214; AVX2-NEXT: je LBB0_16 215; AVX2-NEXT: LBB0_15: ## %cond.store19 216; AVX2-NEXT: vmovhps %xmm0, (%rdi) 217; AVX2-NEXT: vzeroupper 218; AVX2-NEXT: retq 219; 220; AVX512F-LABEL: compressstore_v8f64_v8i1: 221; AVX512F: ## %bb.0: 222; AVX512F-NEXT: vpmovsxwq %xmm1, %zmm1 223; AVX512F-NEXT: vpsllq $63, %zmm1, %zmm1 224; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k1 225; AVX512F-NEXT: vcompresspd %zmm0, (%rdi) {%k1} 226; AVX512F-NEXT: vzeroupper 227; AVX512F-NEXT: retq 228; 229; AVX512VLDQ-LABEL: compressstore_v8f64_v8i1: 230; AVX512VLDQ: ## %bb.0: 231; AVX512VLDQ-NEXT: vpmovsxwd %xmm1, %ymm1 232; AVX512VLDQ-NEXT: vpslld $31, %ymm1, %ymm1 233; AVX512VLDQ-NEXT: vpmovd2m %ymm1, %k1 234; AVX512VLDQ-NEXT: vcompresspd %zmm0, (%rdi) {%k1} 235; AVX512VLDQ-NEXT: vzeroupper 236; AVX512VLDQ-NEXT: retq 237; 238; AVX512VLBW-LABEL: compressstore_v8f64_v8i1: 239; AVX512VLBW: ## %bb.0: 240; AVX512VLBW-NEXT: vpsllw $15, %xmm1, %xmm1 241; AVX512VLBW-NEXT: vpmovw2m %xmm1, %k1 242; AVX512VLBW-NEXT: vcompresspd %zmm0, (%rdi) {%k1} 243; AVX512VLBW-NEXT: vzeroupper 244; AVX512VLBW-NEXT: retq 245 call void @llvm.masked.compressstore.v8f64(<8 x double> %V, ptr %base, <8 x i1> %mask) 246 ret void 247} 248 249define void @compressstore_v16f64_v16i1(ptr %base, <16 x double> %V, <16 x i1> %mask) { 250; SSE-LABEL: compressstore_v16f64_v16i1: 251; SSE: ## %bb.0: 252; SSE-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm8 253; SSE-NEXT: psllw $7, %xmm8 254; SSE-NEXT: pmovmskb %xmm8, %eax 255; SSE-NEXT: testb $1, %al 256; SSE-NEXT: jne LBB1_1 257; SSE-NEXT: ## %bb.2: ## %else 258; SSE-NEXT: testb $2, %al 259; SSE-NEXT: jne LBB1_3 260; SSE-NEXT: LBB1_4: ## %else2 261; SSE-NEXT: testb $4, %al 262; SSE-NEXT: jne LBB1_5 263; SSE-NEXT: LBB1_6: ## %else5 264; SSE-NEXT: testb $8, %al 265; SSE-NEXT: jne LBB1_7 266; SSE-NEXT: LBB1_8: ## %else8 267; SSE-NEXT: testb $16, %al 268; SSE-NEXT: jne LBB1_9 269; SSE-NEXT: LBB1_10: ## %else11 270; SSE-NEXT: testb $32, %al 271; SSE-NEXT: jne LBB1_11 272; SSE-NEXT: LBB1_12: ## %else14 273; SSE-NEXT: testb $64, %al 274; SSE-NEXT: jne LBB1_13 275; SSE-NEXT: LBB1_14: ## %else17 276; SSE-NEXT: testb %al, %al 277; SSE-NEXT: js LBB1_15 278; SSE-NEXT: LBB1_16: ## %else20 279; SSE-NEXT: testl $256, %eax ## imm = 0x100 280; SSE-NEXT: jne LBB1_17 281; SSE-NEXT: LBB1_18: ## %else23 282; SSE-NEXT: testl $512, %eax ## imm = 0x200 283; SSE-NEXT: jne LBB1_19 284; SSE-NEXT: LBB1_20: ## %else26 285; SSE-NEXT: testl $1024, %eax ## imm = 0x400 286; SSE-NEXT: jne LBB1_21 287; SSE-NEXT: LBB1_22: ## %else29 288; SSE-NEXT: testl $2048, %eax ## imm = 0x800 289; SSE-NEXT: jne LBB1_23 290; SSE-NEXT: LBB1_24: ## %else32 291; SSE-NEXT: testl $4096, %eax ## imm = 0x1000 292; SSE-NEXT: jne LBB1_25 293; SSE-NEXT: LBB1_26: ## %else35 294; SSE-NEXT: testl $8192, %eax ## imm = 0x2000 295; SSE-NEXT: jne LBB1_27 296; SSE-NEXT: LBB1_28: ## %else38 297; SSE-NEXT: testl $16384, %eax ## imm = 0x4000 298; SSE-NEXT: jne LBB1_29 299; SSE-NEXT: LBB1_30: ## %else41 300; SSE-NEXT: testl $32768, %eax ## imm = 0x8000 301; SSE-NEXT: jne LBB1_31 302; SSE-NEXT: LBB1_32: ## %else44 303; SSE-NEXT: retq 304; SSE-NEXT: LBB1_1: ## %cond.store 305; SSE-NEXT: movlps %xmm0, (%rdi) 306; SSE-NEXT: addq $8, %rdi 307; SSE-NEXT: testb $2, %al 308; SSE-NEXT: je LBB1_4 309; SSE-NEXT: LBB1_3: ## %cond.store1 310; SSE-NEXT: movhps %xmm0, (%rdi) 311; SSE-NEXT: addq $8, %rdi 312; SSE-NEXT: testb $4, %al 313; SSE-NEXT: je LBB1_6 314; SSE-NEXT: LBB1_5: ## %cond.store4 315; SSE-NEXT: movlps %xmm1, (%rdi) 316; SSE-NEXT: addq $8, %rdi 317; SSE-NEXT: testb $8, %al 318; SSE-NEXT: je LBB1_8 319; SSE-NEXT: LBB1_7: ## %cond.store7 320; SSE-NEXT: movhps %xmm1, (%rdi) 321; SSE-NEXT: addq $8, %rdi 322; SSE-NEXT: testb $16, %al 323; SSE-NEXT: je LBB1_10 324; SSE-NEXT: LBB1_9: ## %cond.store10 325; SSE-NEXT: movlps %xmm2, (%rdi) 326; SSE-NEXT: addq $8, %rdi 327; SSE-NEXT: testb $32, %al 328; SSE-NEXT: je LBB1_12 329; SSE-NEXT: LBB1_11: ## %cond.store13 330; SSE-NEXT: movhps %xmm2, (%rdi) 331; SSE-NEXT: addq $8, %rdi 332; SSE-NEXT: testb $64, %al 333; SSE-NEXT: je LBB1_14 334; SSE-NEXT: LBB1_13: ## %cond.store16 335; SSE-NEXT: movlps %xmm3, (%rdi) 336; SSE-NEXT: addq $8, %rdi 337; SSE-NEXT: testb %al, %al 338; SSE-NEXT: jns LBB1_16 339; SSE-NEXT: LBB1_15: ## %cond.store19 340; SSE-NEXT: movhps %xmm3, (%rdi) 341; SSE-NEXT: addq $8, %rdi 342; SSE-NEXT: testl $256, %eax ## imm = 0x100 343; SSE-NEXT: je LBB1_18 344; SSE-NEXT: LBB1_17: ## %cond.store22 345; SSE-NEXT: movlps %xmm4, (%rdi) 346; SSE-NEXT: addq $8, %rdi 347; SSE-NEXT: testl $512, %eax ## imm = 0x200 348; SSE-NEXT: je LBB1_20 349; SSE-NEXT: LBB1_19: ## %cond.store25 350; SSE-NEXT: movhps %xmm4, (%rdi) 351; SSE-NEXT: addq $8, %rdi 352; SSE-NEXT: testl $1024, %eax ## imm = 0x400 353; SSE-NEXT: je LBB1_22 354; SSE-NEXT: LBB1_21: ## %cond.store28 355; SSE-NEXT: movlps %xmm5, (%rdi) 356; SSE-NEXT: addq $8, %rdi 357; SSE-NEXT: testl $2048, %eax ## imm = 0x800 358; SSE-NEXT: je LBB1_24 359; SSE-NEXT: LBB1_23: ## %cond.store31 360; SSE-NEXT: movhps %xmm5, (%rdi) 361; SSE-NEXT: addq $8, %rdi 362; SSE-NEXT: testl $4096, %eax ## imm = 0x1000 363; SSE-NEXT: je LBB1_26 364; SSE-NEXT: LBB1_25: ## %cond.store34 365; SSE-NEXT: movlps %xmm6, (%rdi) 366; SSE-NEXT: addq $8, %rdi 367; SSE-NEXT: testl $8192, %eax ## imm = 0x2000 368; SSE-NEXT: je LBB1_28 369; SSE-NEXT: LBB1_27: ## %cond.store37 370; SSE-NEXT: movhps %xmm6, (%rdi) 371; SSE-NEXT: addq $8, %rdi 372; SSE-NEXT: testl $16384, %eax ## imm = 0x4000 373; SSE-NEXT: je LBB1_30 374; SSE-NEXT: LBB1_29: ## %cond.store40 375; SSE-NEXT: movlps %xmm7, (%rdi) 376; SSE-NEXT: addq $8, %rdi 377; SSE-NEXT: testl $32768, %eax ## imm = 0x8000 378; SSE-NEXT: je LBB1_32 379; SSE-NEXT: LBB1_31: ## %cond.store43 380; SSE-NEXT: movhps %xmm7, (%rdi) 381; SSE-NEXT: retq 382; 383; AVX1OR2-LABEL: compressstore_v16f64_v16i1: 384; AVX1OR2: ## %bb.0: 385; AVX1OR2-NEXT: vpsllw $7, %xmm4, %xmm4 386; AVX1OR2-NEXT: vpmovmskb %xmm4, %eax 387; AVX1OR2-NEXT: testb $1, %al 388; AVX1OR2-NEXT: je LBB1_2 389; AVX1OR2-NEXT: ## %bb.1: ## %cond.store 390; AVX1OR2-NEXT: vmovlps %xmm0, (%rdi) 391; AVX1OR2-NEXT: addq $8, %rdi 392; AVX1OR2-NEXT: LBB1_2: ## %else 393; AVX1OR2-NEXT: testb $2, %al 394; AVX1OR2-NEXT: je LBB1_4 395; AVX1OR2-NEXT: ## %bb.3: ## %cond.store1 396; AVX1OR2-NEXT: vmovhps %xmm0, (%rdi) 397; AVX1OR2-NEXT: addq $8, %rdi 398; AVX1OR2-NEXT: LBB1_4: ## %else2 399; AVX1OR2-NEXT: testb $4, %al 400; AVX1OR2-NEXT: vextractf128 $1, %ymm0, %xmm0 401; AVX1OR2-NEXT: jne LBB1_5 402; AVX1OR2-NEXT: ## %bb.6: ## %else5 403; AVX1OR2-NEXT: testb $8, %al 404; AVX1OR2-NEXT: jne LBB1_7 405; AVX1OR2-NEXT: LBB1_8: ## %else8 406; AVX1OR2-NEXT: testb $16, %al 407; AVX1OR2-NEXT: jne LBB1_9 408; AVX1OR2-NEXT: LBB1_10: ## %else11 409; AVX1OR2-NEXT: testb $32, %al 410; AVX1OR2-NEXT: je LBB1_12 411; AVX1OR2-NEXT: LBB1_11: ## %cond.store13 412; AVX1OR2-NEXT: vmovhps %xmm1, (%rdi) 413; AVX1OR2-NEXT: addq $8, %rdi 414; AVX1OR2-NEXT: LBB1_12: ## %else14 415; AVX1OR2-NEXT: testb $64, %al 416; AVX1OR2-NEXT: vextractf128 $1, %ymm1, %xmm0 417; AVX1OR2-NEXT: jne LBB1_13 418; AVX1OR2-NEXT: ## %bb.14: ## %else17 419; AVX1OR2-NEXT: testb %al, %al 420; AVX1OR2-NEXT: js LBB1_15 421; AVX1OR2-NEXT: LBB1_16: ## %else20 422; AVX1OR2-NEXT: testl $256, %eax ## imm = 0x100 423; AVX1OR2-NEXT: jne LBB1_17 424; AVX1OR2-NEXT: LBB1_18: ## %else23 425; AVX1OR2-NEXT: testl $512, %eax ## imm = 0x200 426; AVX1OR2-NEXT: je LBB1_20 427; AVX1OR2-NEXT: LBB1_19: ## %cond.store25 428; AVX1OR2-NEXT: vmovhps %xmm2, (%rdi) 429; AVX1OR2-NEXT: addq $8, %rdi 430; AVX1OR2-NEXT: LBB1_20: ## %else26 431; AVX1OR2-NEXT: testl $1024, %eax ## imm = 0x400 432; AVX1OR2-NEXT: vextractf128 $1, %ymm2, %xmm0 433; AVX1OR2-NEXT: jne LBB1_21 434; AVX1OR2-NEXT: ## %bb.22: ## %else29 435; AVX1OR2-NEXT: testl $2048, %eax ## imm = 0x800 436; AVX1OR2-NEXT: jne LBB1_23 437; AVX1OR2-NEXT: LBB1_24: ## %else32 438; AVX1OR2-NEXT: testl $4096, %eax ## imm = 0x1000 439; AVX1OR2-NEXT: jne LBB1_25 440; AVX1OR2-NEXT: LBB1_26: ## %else35 441; AVX1OR2-NEXT: testl $8192, %eax ## imm = 0x2000 442; AVX1OR2-NEXT: je LBB1_28 443; AVX1OR2-NEXT: LBB1_27: ## %cond.store37 444; AVX1OR2-NEXT: vmovhps %xmm3, (%rdi) 445; AVX1OR2-NEXT: addq $8, %rdi 446; AVX1OR2-NEXT: LBB1_28: ## %else38 447; AVX1OR2-NEXT: testl $16384, %eax ## imm = 0x4000 448; AVX1OR2-NEXT: vextractf128 $1, %ymm3, %xmm0 449; AVX1OR2-NEXT: jne LBB1_29 450; AVX1OR2-NEXT: ## %bb.30: ## %else41 451; AVX1OR2-NEXT: testl $32768, %eax ## imm = 0x8000 452; AVX1OR2-NEXT: jne LBB1_31 453; AVX1OR2-NEXT: LBB1_32: ## %else44 454; AVX1OR2-NEXT: vzeroupper 455; AVX1OR2-NEXT: retq 456; AVX1OR2-NEXT: LBB1_5: ## %cond.store4 457; AVX1OR2-NEXT: vmovlps %xmm0, (%rdi) 458; AVX1OR2-NEXT: addq $8, %rdi 459; AVX1OR2-NEXT: testb $8, %al 460; AVX1OR2-NEXT: je LBB1_8 461; AVX1OR2-NEXT: LBB1_7: ## %cond.store7 462; AVX1OR2-NEXT: vmovhps %xmm0, (%rdi) 463; AVX1OR2-NEXT: addq $8, %rdi 464; AVX1OR2-NEXT: testb $16, %al 465; AVX1OR2-NEXT: je LBB1_10 466; AVX1OR2-NEXT: LBB1_9: ## %cond.store10 467; AVX1OR2-NEXT: vmovlps %xmm1, (%rdi) 468; AVX1OR2-NEXT: addq $8, %rdi 469; AVX1OR2-NEXT: testb $32, %al 470; AVX1OR2-NEXT: jne LBB1_11 471; AVX1OR2-NEXT: jmp LBB1_12 472; AVX1OR2-NEXT: LBB1_13: ## %cond.store16 473; AVX1OR2-NEXT: vmovlps %xmm0, (%rdi) 474; AVX1OR2-NEXT: addq $8, %rdi 475; AVX1OR2-NEXT: testb %al, %al 476; AVX1OR2-NEXT: jns LBB1_16 477; AVX1OR2-NEXT: LBB1_15: ## %cond.store19 478; AVX1OR2-NEXT: vmovhps %xmm0, (%rdi) 479; AVX1OR2-NEXT: addq $8, %rdi 480; AVX1OR2-NEXT: testl $256, %eax ## imm = 0x100 481; AVX1OR2-NEXT: je LBB1_18 482; AVX1OR2-NEXT: LBB1_17: ## %cond.store22 483; AVX1OR2-NEXT: vmovlps %xmm2, (%rdi) 484; AVX1OR2-NEXT: addq $8, %rdi 485; AVX1OR2-NEXT: testl $512, %eax ## imm = 0x200 486; AVX1OR2-NEXT: jne LBB1_19 487; AVX1OR2-NEXT: jmp LBB1_20 488; AVX1OR2-NEXT: LBB1_21: ## %cond.store28 489; AVX1OR2-NEXT: vmovlps %xmm0, (%rdi) 490; AVX1OR2-NEXT: addq $8, %rdi 491; AVX1OR2-NEXT: testl $2048, %eax ## imm = 0x800 492; AVX1OR2-NEXT: je LBB1_24 493; AVX1OR2-NEXT: LBB1_23: ## %cond.store31 494; AVX1OR2-NEXT: vmovhps %xmm0, (%rdi) 495; AVX1OR2-NEXT: addq $8, %rdi 496; AVX1OR2-NEXT: testl $4096, %eax ## imm = 0x1000 497; AVX1OR2-NEXT: je LBB1_26 498; AVX1OR2-NEXT: LBB1_25: ## %cond.store34 499; AVX1OR2-NEXT: vmovlps %xmm3, (%rdi) 500; AVX1OR2-NEXT: addq $8, %rdi 501; AVX1OR2-NEXT: testl $8192, %eax ## imm = 0x2000 502; AVX1OR2-NEXT: jne LBB1_27 503; AVX1OR2-NEXT: jmp LBB1_28 504; AVX1OR2-NEXT: LBB1_29: ## %cond.store40 505; AVX1OR2-NEXT: vmovlps %xmm0, (%rdi) 506; AVX1OR2-NEXT: addq $8, %rdi 507; AVX1OR2-NEXT: testl $32768, %eax ## imm = 0x8000 508; AVX1OR2-NEXT: je LBB1_32 509; AVX1OR2-NEXT: LBB1_31: ## %cond.store43 510; AVX1OR2-NEXT: vmovhps %xmm0, (%rdi) 511; AVX1OR2-NEXT: vzeroupper 512; AVX1OR2-NEXT: retq 513; 514; AVX512F-LABEL: compressstore_v16f64_v16i1: 515; AVX512F: ## %bb.0: 516; AVX512F-NEXT: vpmovsxbd %xmm2, %zmm2 517; AVX512F-NEXT: vpslld $31, %zmm2, %zmm2 518; AVX512F-NEXT: vptestmd %zmm2, %zmm2, %k1 519; AVX512F-NEXT: kshiftrw $8, %k1, %k2 520; AVX512F-NEXT: kmovw %k1, %eax 521; AVX512F-NEXT: movzbl %al, %eax 522; AVX512F-NEXT: imull $134480385, %eax, %eax ## imm = 0x8040201 523; AVX512F-NEXT: shrl $3, %eax 524; AVX512F-NEXT: andl $286331153, %eax ## imm = 0x11111111 525; AVX512F-NEXT: imull $286331153, %eax, %eax ## imm = 0x11111111 526; AVX512F-NEXT: shrl $28, %eax 527; AVX512F-NEXT: vcompresspd %zmm1, (%rdi,%rax,8) {%k2} 528; AVX512F-NEXT: vcompresspd %zmm0, (%rdi) {%k1} 529; AVX512F-NEXT: vzeroupper 530; AVX512F-NEXT: retq 531; 532; AVX512VLDQ-LABEL: compressstore_v16f64_v16i1: 533; AVX512VLDQ: ## %bb.0: 534; AVX512VLDQ-NEXT: vpmovsxbd %xmm2, %zmm2 535; AVX512VLDQ-NEXT: vpslld $31, %zmm2, %zmm2 536; AVX512VLDQ-NEXT: vpmovd2m %zmm2, %k1 537; AVX512VLDQ-NEXT: kshiftrw $8, %k1, %k2 538; AVX512VLDQ-NEXT: kmovb %k1, %eax 539; AVX512VLDQ-NEXT: imull $134480385, %eax, %eax ## imm = 0x8040201 540; AVX512VLDQ-NEXT: shrl $3, %eax 541; AVX512VLDQ-NEXT: andl $286331153, %eax ## imm = 0x11111111 542; AVX512VLDQ-NEXT: imull $286331153, %eax, %eax ## imm = 0x11111111 543; AVX512VLDQ-NEXT: shrl $28, %eax 544; AVX512VLDQ-NEXT: vcompresspd %zmm1, (%rdi,%rax,8) {%k2} 545; AVX512VLDQ-NEXT: vcompresspd %zmm0, (%rdi) {%k1} 546; AVX512VLDQ-NEXT: vzeroupper 547; AVX512VLDQ-NEXT: retq 548; 549; AVX512VLBW-LABEL: compressstore_v16f64_v16i1: 550; AVX512VLBW: ## %bb.0: 551; AVX512VLBW-NEXT: vpsllw $7, %xmm2, %xmm2 552; AVX512VLBW-NEXT: vpmovb2m %xmm2, %k1 553; AVX512VLBW-NEXT: kshiftrw $8, %k1, %k2 554; AVX512VLBW-NEXT: kmovd %k1, %eax 555; AVX512VLBW-NEXT: movzbl %al, %eax 556; AVX512VLBW-NEXT: imull $134480385, %eax, %eax ## imm = 0x8040201 557; AVX512VLBW-NEXT: shrl $3, %eax 558; AVX512VLBW-NEXT: andl $286331153, %eax ## imm = 0x11111111 559; AVX512VLBW-NEXT: imull $286331153, %eax, %eax ## imm = 0x11111111 560; AVX512VLBW-NEXT: shrl $28, %eax 561; AVX512VLBW-NEXT: vcompresspd %zmm1, (%rdi,%rax,8) {%k2} 562; AVX512VLBW-NEXT: vcompresspd %zmm0, (%rdi) {%k1} 563; AVX512VLBW-NEXT: vzeroupper 564; AVX512VLBW-NEXT: retq 565 call void @llvm.masked.compressstore.v16f64(<16 x double> %V, ptr %base, <16 x i1> %mask) 566 ret void 567} 568 569; 570; vXf32 571; 572 573define void @compressstore_v2f32_v2i32(ptr %base, <2 x float> %V, <2 x i32> %trigger) { 574; SSE2-LABEL: compressstore_v2f32_v2i32: 575; SSE2: ## %bb.0: 576; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[0,0,1,1] 577; SSE2-NEXT: pxor %xmm2, %xmm2 578; SSE2-NEXT: pcmpeqd %xmm1, %xmm2 579; SSE2-NEXT: movmskpd %xmm2, %eax 580; SSE2-NEXT: testb $1, %al 581; SSE2-NEXT: jne LBB2_1 582; SSE2-NEXT: ## %bb.2: ## %else 583; SSE2-NEXT: testb $2, %al 584; SSE2-NEXT: jne LBB2_3 585; SSE2-NEXT: LBB2_4: ## %else2 586; SSE2-NEXT: retq 587; SSE2-NEXT: LBB2_1: ## %cond.store 588; SSE2-NEXT: movss %xmm0, (%rdi) 589; SSE2-NEXT: addq $4, %rdi 590; SSE2-NEXT: testb $2, %al 591; SSE2-NEXT: je LBB2_4 592; SSE2-NEXT: LBB2_3: ## %cond.store1 593; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1] 594; SSE2-NEXT: movss %xmm0, (%rdi) 595; SSE2-NEXT: retq 596; 597; SSE42-LABEL: compressstore_v2f32_v2i32: 598; SSE42: ## %bb.0: 599; SSE42-NEXT: pxor %xmm2, %xmm2 600; SSE42-NEXT: pcmpeqd %xmm1, %xmm2 601; SSE42-NEXT: pmovsxdq %xmm2, %xmm1 602; SSE42-NEXT: movmskpd %xmm1, %eax 603; SSE42-NEXT: testb $1, %al 604; SSE42-NEXT: jne LBB2_1 605; SSE42-NEXT: ## %bb.2: ## %else 606; SSE42-NEXT: testb $2, %al 607; SSE42-NEXT: jne LBB2_3 608; SSE42-NEXT: LBB2_4: ## %else2 609; SSE42-NEXT: retq 610; SSE42-NEXT: LBB2_1: ## %cond.store 611; SSE42-NEXT: movss %xmm0, (%rdi) 612; SSE42-NEXT: addq $4, %rdi 613; SSE42-NEXT: testb $2, %al 614; SSE42-NEXT: je LBB2_4 615; SSE42-NEXT: LBB2_3: ## %cond.store1 616; SSE42-NEXT: extractps $1, %xmm0, (%rdi) 617; SSE42-NEXT: retq 618; 619; AVX1OR2-LABEL: compressstore_v2f32_v2i32: 620; AVX1OR2: ## %bb.0: 621; AVX1OR2-NEXT: vpxor %xmm2, %xmm2, %xmm2 622; AVX1OR2-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm1 623; AVX1OR2-NEXT: vpmovsxdq %xmm1, %xmm1 624; AVX1OR2-NEXT: vmovmskpd %xmm1, %eax 625; AVX1OR2-NEXT: testb $1, %al 626; AVX1OR2-NEXT: jne LBB2_1 627; AVX1OR2-NEXT: ## %bb.2: ## %else 628; AVX1OR2-NEXT: testb $2, %al 629; AVX1OR2-NEXT: jne LBB2_3 630; AVX1OR2-NEXT: LBB2_4: ## %else2 631; AVX1OR2-NEXT: retq 632; AVX1OR2-NEXT: LBB2_1: ## %cond.store 633; AVX1OR2-NEXT: vmovss %xmm0, (%rdi) 634; AVX1OR2-NEXT: addq $4, %rdi 635; AVX1OR2-NEXT: testb $2, %al 636; AVX1OR2-NEXT: je LBB2_4 637; AVX1OR2-NEXT: LBB2_3: ## %cond.store1 638; AVX1OR2-NEXT: vextractps $1, %xmm0, (%rdi) 639; AVX1OR2-NEXT: retq 640; 641; AVX512F-LABEL: compressstore_v2f32_v2i32: 642; AVX512F: ## %bb.0: 643; AVX512F-NEXT: ## kill: def $xmm1 killed $xmm1 def $zmm1 644; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm0 645; AVX512F-NEXT: vptestnmd %zmm1, %zmm1, %k0 646; AVX512F-NEXT: kshiftlw $14, %k0, %k0 647; AVX512F-NEXT: kshiftrw $14, %k0, %k1 648; AVX512F-NEXT: vcompressps %zmm0, (%rdi) {%k1} 649; AVX512F-NEXT: vzeroupper 650; AVX512F-NEXT: retq 651; 652; AVX512VLDQ-LABEL: compressstore_v2f32_v2i32: 653; AVX512VLDQ: ## %bb.0: 654; AVX512VLDQ-NEXT: vptestnmd %xmm1, %xmm1, %k0 655; AVX512VLDQ-NEXT: kshiftlb $6, %k0, %k0 656; AVX512VLDQ-NEXT: kshiftrb $6, %k0, %k1 657; AVX512VLDQ-NEXT: vcompressps %xmm0, (%rdi) {%k1} 658; AVX512VLDQ-NEXT: retq 659; 660; AVX512VLBW-LABEL: compressstore_v2f32_v2i32: 661; AVX512VLBW: ## %bb.0: 662; AVX512VLBW-NEXT: vptestnmd %xmm1, %xmm1, %k0 663; AVX512VLBW-NEXT: kshiftlw $14, %k0, %k0 664; AVX512VLBW-NEXT: kshiftrw $14, %k0, %k1 665; AVX512VLBW-NEXT: vcompressps %xmm0, (%rdi) {%k1} 666; AVX512VLBW-NEXT: retq 667 %mask = icmp eq <2 x i32> %trigger, zeroinitializer 668 call void @llvm.masked.compressstore.v2f32(<2 x float> %V, ptr %base, <2 x i1> %mask) 669 ret void 670} 671 672define void @compressstore_v4f32_v4i1(ptr %base, <4 x float> %V, <4 x i1> %mask) { 673; SSE2-LABEL: compressstore_v4f32_v4i1: 674; SSE2: ## %bb.0: 675; SSE2-NEXT: pslld $31, %xmm1 676; SSE2-NEXT: movmskps %xmm1, %eax 677; SSE2-NEXT: testb $1, %al 678; SSE2-NEXT: jne LBB3_1 679; SSE2-NEXT: ## %bb.2: ## %else 680; SSE2-NEXT: testb $2, %al 681; SSE2-NEXT: jne LBB3_3 682; SSE2-NEXT: LBB3_4: ## %else2 683; SSE2-NEXT: testb $4, %al 684; SSE2-NEXT: jne LBB3_5 685; SSE2-NEXT: LBB3_6: ## %else5 686; SSE2-NEXT: testb $8, %al 687; SSE2-NEXT: jne LBB3_7 688; SSE2-NEXT: LBB3_8: ## %else8 689; SSE2-NEXT: retq 690; SSE2-NEXT: LBB3_1: ## %cond.store 691; SSE2-NEXT: movss %xmm0, (%rdi) 692; SSE2-NEXT: addq $4, %rdi 693; SSE2-NEXT: testb $2, %al 694; SSE2-NEXT: je LBB3_4 695; SSE2-NEXT: LBB3_3: ## %cond.store1 696; SSE2-NEXT: movaps %xmm0, %xmm1 697; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[1,1] 698; SSE2-NEXT: movss %xmm1, (%rdi) 699; SSE2-NEXT: addq $4, %rdi 700; SSE2-NEXT: testb $4, %al 701; SSE2-NEXT: je LBB3_6 702; SSE2-NEXT: LBB3_5: ## %cond.store4 703; SSE2-NEXT: movaps %xmm0, %xmm1 704; SSE2-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1],xmm0[1] 705; SSE2-NEXT: movss %xmm1, (%rdi) 706; SSE2-NEXT: addq $4, %rdi 707; SSE2-NEXT: testb $8, %al 708; SSE2-NEXT: je LBB3_8 709; SSE2-NEXT: LBB3_7: ## %cond.store7 710; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3] 711; SSE2-NEXT: movss %xmm0, (%rdi) 712; SSE2-NEXT: retq 713; 714; SSE42-LABEL: compressstore_v4f32_v4i1: 715; SSE42: ## %bb.0: 716; SSE42-NEXT: pslld $31, %xmm1 717; SSE42-NEXT: movmskps %xmm1, %eax 718; SSE42-NEXT: testb $1, %al 719; SSE42-NEXT: jne LBB3_1 720; SSE42-NEXT: ## %bb.2: ## %else 721; SSE42-NEXT: testb $2, %al 722; SSE42-NEXT: jne LBB3_3 723; SSE42-NEXT: LBB3_4: ## %else2 724; SSE42-NEXT: testb $4, %al 725; SSE42-NEXT: jne LBB3_5 726; SSE42-NEXT: LBB3_6: ## %else5 727; SSE42-NEXT: testb $8, %al 728; SSE42-NEXT: jne LBB3_7 729; SSE42-NEXT: LBB3_8: ## %else8 730; SSE42-NEXT: retq 731; SSE42-NEXT: LBB3_1: ## %cond.store 732; SSE42-NEXT: movss %xmm0, (%rdi) 733; SSE42-NEXT: addq $4, %rdi 734; SSE42-NEXT: testb $2, %al 735; SSE42-NEXT: je LBB3_4 736; SSE42-NEXT: LBB3_3: ## %cond.store1 737; SSE42-NEXT: extractps $1, %xmm0, (%rdi) 738; SSE42-NEXT: addq $4, %rdi 739; SSE42-NEXT: testb $4, %al 740; SSE42-NEXT: je LBB3_6 741; SSE42-NEXT: LBB3_5: ## %cond.store4 742; SSE42-NEXT: extractps $2, %xmm0, (%rdi) 743; SSE42-NEXT: addq $4, %rdi 744; SSE42-NEXT: testb $8, %al 745; SSE42-NEXT: je LBB3_8 746; SSE42-NEXT: LBB3_7: ## %cond.store7 747; SSE42-NEXT: extractps $3, %xmm0, (%rdi) 748; SSE42-NEXT: retq 749; 750; AVX1OR2-LABEL: compressstore_v4f32_v4i1: 751; AVX1OR2: ## %bb.0: 752; AVX1OR2-NEXT: vpslld $31, %xmm1, %xmm1 753; AVX1OR2-NEXT: vmovmskps %xmm1, %eax 754; AVX1OR2-NEXT: testb $1, %al 755; AVX1OR2-NEXT: jne LBB3_1 756; AVX1OR2-NEXT: ## %bb.2: ## %else 757; AVX1OR2-NEXT: testb $2, %al 758; AVX1OR2-NEXT: jne LBB3_3 759; AVX1OR2-NEXT: LBB3_4: ## %else2 760; AVX1OR2-NEXT: testb $4, %al 761; AVX1OR2-NEXT: jne LBB3_5 762; AVX1OR2-NEXT: LBB3_6: ## %else5 763; AVX1OR2-NEXT: testb $8, %al 764; AVX1OR2-NEXT: jne LBB3_7 765; AVX1OR2-NEXT: LBB3_8: ## %else8 766; AVX1OR2-NEXT: retq 767; AVX1OR2-NEXT: LBB3_1: ## %cond.store 768; AVX1OR2-NEXT: vmovss %xmm0, (%rdi) 769; AVX1OR2-NEXT: addq $4, %rdi 770; AVX1OR2-NEXT: testb $2, %al 771; AVX1OR2-NEXT: je LBB3_4 772; AVX1OR2-NEXT: LBB3_3: ## %cond.store1 773; AVX1OR2-NEXT: vextractps $1, %xmm0, (%rdi) 774; AVX1OR2-NEXT: addq $4, %rdi 775; AVX1OR2-NEXT: testb $4, %al 776; AVX1OR2-NEXT: je LBB3_6 777; AVX1OR2-NEXT: LBB3_5: ## %cond.store4 778; AVX1OR2-NEXT: vextractps $2, %xmm0, (%rdi) 779; AVX1OR2-NEXT: addq $4, %rdi 780; AVX1OR2-NEXT: testb $8, %al 781; AVX1OR2-NEXT: je LBB3_8 782; AVX1OR2-NEXT: LBB3_7: ## %cond.store7 783; AVX1OR2-NEXT: vextractps $3, %xmm0, (%rdi) 784; AVX1OR2-NEXT: retq 785; 786; AVX512F-LABEL: compressstore_v4f32_v4i1: 787; AVX512F: ## %bb.0: 788; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm0 789; AVX512F-NEXT: vpslld $31, %xmm1, %xmm1 790; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k0 791; AVX512F-NEXT: kshiftlw $12, %k0, %k0 792; AVX512F-NEXT: kshiftrw $12, %k0, %k1 793; AVX512F-NEXT: vcompressps %zmm0, (%rdi) {%k1} 794; AVX512F-NEXT: vzeroupper 795; AVX512F-NEXT: retq 796; 797; AVX512VLDQ-LABEL: compressstore_v4f32_v4i1: 798; AVX512VLDQ: ## %bb.0: 799; AVX512VLDQ-NEXT: vpslld $31, %xmm1, %xmm1 800; AVX512VLDQ-NEXT: vpmovd2m %xmm1, %k1 801; AVX512VLDQ-NEXT: vcompressps %xmm0, (%rdi) {%k1} 802; AVX512VLDQ-NEXT: retq 803; 804; AVX512VLBW-LABEL: compressstore_v4f32_v4i1: 805; AVX512VLBW: ## %bb.0: 806; AVX512VLBW-NEXT: vpslld $31, %xmm1, %xmm1 807; AVX512VLBW-NEXT: vptestmd %xmm1, %xmm1, %k1 808; AVX512VLBW-NEXT: vcompressps %xmm0, (%rdi) {%k1} 809; AVX512VLBW-NEXT: retq 810 call void @llvm.masked.compressstore.v4f32(<4 x float> %V, ptr %base, <4 x i1> %mask) 811 ret void 812} 813 814define void @compressstore_v8f32_v8i1(ptr %base, <8 x float> %V, <8 x i1> %mask) { 815; SSE2-LABEL: compressstore_v8f32_v8i1: 816; SSE2: ## %bb.0: 817; SSE2-NEXT: psllw $15, %xmm2 818; SSE2-NEXT: packsswb %xmm2, %xmm2 819; SSE2-NEXT: pmovmskb %xmm2, %eax 820; SSE2-NEXT: testb $1, %al 821; SSE2-NEXT: jne LBB4_1 822; SSE2-NEXT: ## %bb.2: ## %else 823; SSE2-NEXT: testb $2, %al 824; SSE2-NEXT: jne LBB4_3 825; SSE2-NEXT: LBB4_4: ## %else2 826; SSE2-NEXT: testb $4, %al 827; SSE2-NEXT: jne LBB4_5 828; SSE2-NEXT: LBB4_6: ## %else5 829; SSE2-NEXT: testb $8, %al 830; SSE2-NEXT: jne LBB4_7 831; SSE2-NEXT: LBB4_8: ## %else8 832; SSE2-NEXT: testb $16, %al 833; SSE2-NEXT: jne LBB4_9 834; SSE2-NEXT: LBB4_10: ## %else11 835; SSE2-NEXT: testb $32, %al 836; SSE2-NEXT: jne LBB4_11 837; SSE2-NEXT: LBB4_12: ## %else14 838; SSE2-NEXT: testb $64, %al 839; SSE2-NEXT: jne LBB4_13 840; SSE2-NEXT: LBB4_14: ## %else17 841; SSE2-NEXT: testb $-128, %al 842; SSE2-NEXT: jne LBB4_15 843; SSE2-NEXT: LBB4_16: ## %else20 844; SSE2-NEXT: retq 845; SSE2-NEXT: LBB4_1: ## %cond.store 846; SSE2-NEXT: movd %xmm0, (%rdi) 847; SSE2-NEXT: addq $4, %rdi 848; SSE2-NEXT: testb $2, %al 849; SSE2-NEXT: je LBB4_4 850; SSE2-NEXT: LBB4_3: ## %cond.store1 851; SSE2-NEXT: movdqa %xmm0, %xmm2 852; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[1,1],xmm0[1,1] 853; SSE2-NEXT: movss %xmm2, (%rdi) 854; SSE2-NEXT: addq $4, %rdi 855; SSE2-NEXT: testb $4, %al 856; SSE2-NEXT: je LBB4_6 857; SSE2-NEXT: LBB4_5: ## %cond.store4 858; SSE2-NEXT: movdqa %xmm0, %xmm2 859; SSE2-NEXT: punpckhqdq {{.*#+}} xmm2 = xmm2[1],xmm0[1] 860; SSE2-NEXT: movd %xmm2, (%rdi) 861; SSE2-NEXT: addq $4, %rdi 862; SSE2-NEXT: testb $8, %al 863; SSE2-NEXT: je LBB4_8 864; SSE2-NEXT: LBB4_7: ## %cond.store7 865; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3] 866; SSE2-NEXT: movss %xmm0, (%rdi) 867; SSE2-NEXT: addq $4, %rdi 868; SSE2-NEXT: testb $16, %al 869; SSE2-NEXT: je LBB4_10 870; SSE2-NEXT: LBB4_9: ## %cond.store10 871; SSE2-NEXT: movss %xmm1, (%rdi) 872; SSE2-NEXT: addq $4, %rdi 873; SSE2-NEXT: testb $32, %al 874; SSE2-NEXT: je LBB4_12 875; SSE2-NEXT: LBB4_11: ## %cond.store13 876; SSE2-NEXT: movaps %xmm1, %xmm0 877; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm1[1,1] 878; SSE2-NEXT: movss %xmm0, (%rdi) 879; SSE2-NEXT: addq $4, %rdi 880; SSE2-NEXT: testb $64, %al 881; SSE2-NEXT: je LBB4_14 882; SSE2-NEXT: LBB4_13: ## %cond.store16 883; SSE2-NEXT: movaps %xmm1, %xmm0 884; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] 885; SSE2-NEXT: movss %xmm0, (%rdi) 886; SSE2-NEXT: addq $4, %rdi 887; SSE2-NEXT: testb $-128, %al 888; SSE2-NEXT: je LBB4_16 889; SSE2-NEXT: LBB4_15: ## %cond.store19 890; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3,3,3] 891; SSE2-NEXT: movss %xmm1, (%rdi) 892; SSE2-NEXT: retq 893; 894; SSE42-LABEL: compressstore_v8f32_v8i1: 895; SSE42: ## %bb.0: 896; SSE42-NEXT: psllw $15, %xmm2 897; SSE42-NEXT: packsswb %xmm2, %xmm2 898; SSE42-NEXT: pmovmskb %xmm2, %eax 899; SSE42-NEXT: testb $1, %al 900; SSE42-NEXT: jne LBB4_1 901; SSE42-NEXT: ## %bb.2: ## %else 902; SSE42-NEXT: testb $2, %al 903; SSE42-NEXT: jne LBB4_3 904; SSE42-NEXT: LBB4_4: ## %else2 905; SSE42-NEXT: testb $4, %al 906; SSE42-NEXT: jne LBB4_5 907; SSE42-NEXT: LBB4_6: ## %else5 908; SSE42-NEXT: testb $8, %al 909; SSE42-NEXT: jne LBB4_7 910; SSE42-NEXT: LBB4_8: ## %else8 911; SSE42-NEXT: testb $16, %al 912; SSE42-NEXT: jne LBB4_9 913; SSE42-NEXT: LBB4_10: ## %else11 914; SSE42-NEXT: testb $32, %al 915; SSE42-NEXT: jne LBB4_11 916; SSE42-NEXT: LBB4_12: ## %else14 917; SSE42-NEXT: testb $64, %al 918; SSE42-NEXT: jne LBB4_13 919; SSE42-NEXT: LBB4_14: ## %else17 920; SSE42-NEXT: testb $-128, %al 921; SSE42-NEXT: jne LBB4_15 922; SSE42-NEXT: LBB4_16: ## %else20 923; SSE42-NEXT: retq 924; SSE42-NEXT: LBB4_1: ## %cond.store 925; SSE42-NEXT: movd %xmm0, (%rdi) 926; SSE42-NEXT: addq $4, %rdi 927; SSE42-NEXT: testb $2, %al 928; SSE42-NEXT: je LBB4_4 929; SSE42-NEXT: LBB4_3: ## %cond.store1 930; SSE42-NEXT: pextrd $1, %xmm0, (%rdi) 931; SSE42-NEXT: addq $4, %rdi 932; SSE42-NEXT: testb $4, %al 933; SSE42-NEXT: je LBB4_6 934; SSE42-NEXT: LBB4_5: ## %cond.store4 935; SSE42-NEXT: pextrd $2, %xmm0, (%rdi) 936; SSE42-NEXT: addq $4, %rdi 937; SSE42-NEXT: testb $8, %al 938; SSE42-NEXT: je LBB4_8 939; SSE42-NEXT: LBB4_7: ## %cond.store7 940; SSE42-NEXT: pextrd $3, %xmm0, (%rdi) 941; SSE42-NEXT: addq $4, %rdi 942; SSE42-NEXT: testb $16, %al 943; SSE42-NEXT: je LBB4_10 944; SSE42-NEXT: LBB4_9: ## %cond.store10 945; SSE42-NEXT: movss %xmm1, (%rdi) 946; SSE42-NEXT: addq $4, %rdi 947; SSE42-NEXT: testb $32, %al 948; SSE42-NEXT: je LBB4_12 949; SSE42-NEXT: LBB4_11: ## %cond.store13 950; SSE42-NEXT: extractps $1, %xmm1, (%rdi) 951; SSE42-NEXT: addq $4, %rdi 952; SSE42-NEXT: testb $64, %al 953; SSE42-NEXT: je LBB4_14 954; SSE42-NEXT: LBB4_13: ## %cond.store16 955; SSE42-NEXT: extractps $2, %xmm1, (%rdi) 956; SSE42-NEXT: addq $4, %rdi 957; SSE42-NEXT: testb $-128, %al 958; SSE42-NEXT: je LBB4_16 959; SSE42-NEXT: LBB4_15: ## %cond.store19 960; SSE42-NEXT: extractps $3, %xmm1, (%rdi) 961; SSE42-NEXT: retq 962; 963; AVX1-LABEL: compressstore_v8f32_v8i1: 964; AVX1: ## %bb.0: 965; AVX1-NEXT: vpsllw $15, %xmm1, %xmm1 966; AVX1-NEXT: vpacksswb %xmm1, %xmm1, %xmm1 967; AVX1-NEXT: vpmovmskb %xmm1, %eax 968; AVX1-NEXT: testb $1, %al 969; AVX1-NEXT: jne LBB4_1 970; AVX1-NEXT: ## %bb.2: ## %else 971; AVX1-NEXT: testb $2, %al 972; AVX1-NEXT: jne LBB4_3 973; AVX1-NEXT: LBB4_4: ## %else2 974; AVX1-NEXT: testb $4, %al 975; AVX1-NEXT: jne LBB4_5 976; AVX1-NEXT: LBB4_6: ## %else5 977; AVX1-NEXT: testb $8, %al 978; AVX1-NEXT: je LBB4_8 979; AVX1-NEXT: LBB4_7: ## %cond.store7 980; AVX1-NEXT: vpextrd $3, %xmm0, (%rdi) 981; AVX1-NEXT: addq $4, %rdi 982; AVX1-NEXT: LBB4_8: ## %else8 983; AVX1-NEXT: testb $16, %al 984; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 985; AVX1-NEXT: jne LBB4_9 986; AVX1-NEXT: ## %bb.10: ## %else11 987; AVX1-NEXT: testb $32, %al 988; AVX1-NEXT: jne LBB4_11 989; AVX1-NEXT: LBB4_12: ## %else14 990; AVX1-NEXT: testb $64, %al 991; AVX1-NEXT: jne LBB4_13 992; AVX1-NEXT: LBB4_14: ## %else17 993; AVX1-NEXT: testb $-128, %al 994; AVX1-NEXT: jne LBB4_15 995; AVX1-NEXT: LBB4_16: ## %else20 996; AVX1-NEXT: vzeroupper 997; AVX1-NEXT: retq 998; AVX1-NEXT: LBB4_1: ## %cond.store 999; AVX1-NEXT: vmovd %xmm0, (%rdi) 1000; AVX1-NEXT: addq $4, %rdi 1001; AVX1-NEXT: testb $2, %al 1002; AVX1-NEXT: je LBB4_4 1003; AVX1-NEXT: LBB4_3: ## %cond.store1 1004; AVX1-NEXT: vpextrd $1, %xmm0, (%rdi) 1005; AVX1-NEXT: addq $4, %rdi 1006; AVX1-NEXT: testb $4, %al 1007; AVX1-NEXT: je LBB4_6 1008; AVX1-NEXT: LBB4_5: ## %cond.store4 1009; AVX1-NEXT: vpextrd $2, %xmm0, (%rdi) 1010; AVX1-NEXT: addq $4, %rdi 1011; AVX1-NEXT: testb $8, %al 1012; AVX1-NEXT: jne LBB4_7 1013; AVX1-NEXT: jmp LBB4_8 1014; AVX1-NEXT: LBB4_9: ## %cond.store10 1015; AVX1-NEXT: vmovss %xmm0, (%rdi) 1016; AVX1-NEXT: addq $4, %rdi 1017; AVX1-NEXT: testb $32, %al 1018; AVX1-NEXT: je LBB4_12 1019; AVX1-NEXT: LBB4_11: ## %cond.store13 1020; AVX1-NEXT: vextractps $1, %xmm0, (%rdi) 1021; AVX1-NEXT: addq $4, %rdi 1022; AVX1-NEXT: testb $64, %al 1023; AVX1-NEXT: je LBB4_14 1024; AVX1-NEXT: LBB4_13: ## %cond.store16 1025; AVX1-NEXT: vextractps $2, %xmm0, (%rdi) 1026; AVX1-NEXT: addq $4, %rdi 1027; AVX1-NEXT: testb $-128, %al 1028; AVX1-NEXT: je LBB4_16 1029; AVX1-NEXT: LBB4_15: ## %cond.store19 1030; AVX1-NEXT: vextractps $3, %xmm0, (%rdi) 1031; AVX1-NEXT: vzeroupper 1032; AVX1-NEXT: retq 1033; 1034; AVX2-LABEL: compressstore_v8f32_v8i1: 1035; AVX2: ## %bb.0: 1036; AVX2-NEXT: vpsllw $15, %xmm1, %xmm1 1037; AVX2-NEXT: vpacksswb %xmm1, %xmm1, %xmm1 1038; AVX2-NEXT: vpmovmskb %xmm1, %eax 1039; AVX2-NEXT: testb $1, %al 1040; AVX2-NEXT: jne LBB4_1 1041; AVX2-NEXT: ## %bb.2: ## %else 1042; AVX2-NEXT: testb $2, %al 1043; AVX2-NEXT: jne LBB4_3 1044; AVX2-NEXT: LBB4_4: ## %else2 1045; AVX2-NEXT: testb $4, %al 1046; AVX2-NEXT: jne LBB4_5 1047; AVX2-NEXT: LBB4_6: ## %else5 1048; AVX2-NEXT: testb $8, %al 1049; AVX2-NEXT: je LBB4_8 1050; AVX2-NEXT: LBB4_7: ## %cond.store7 1051; AVX2-NEXT: vpextrd $3, %xmm0, (%rdi) 1052; AVX2-NEXT: addq $4, %rdi 1053; AVX2-NEXT: LBB4_8: ## %else8 1054; AVX2-NEXT: testb $16, %al 1055; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 1056; AVX2-NEXT: jne LBB4_9 1057; AVX2-NEXT: ## %bb.10: ## %else11 1058; AVX2-NEXT: testb $32, %al 1059; AVX2-NEXT: jne LBB4_11 1060; AVX2-NEXT: LBB4_12: ## %else14 1061; AVX2-NEXT: testb $64, %al 1062; AVX2-NEXT: jne LBB4_13 1063; AVX2-NEXT: LBB4_14: ## %else17 1064; AVX2-NEXT: testb $-128, %al 1065; AVX2-NEXT: jne LBB4_15 1066; AVX2-NEXT: LBB4_16: ## %else20 1067; AVX2-NEXT: vzeroupper 1068; AVX2-NEXT: retq 1069; AVX2-NEXT: LBB4_1: ## %cond.store 1070; AVX2-NEXT: vmovd %xmm0, (%rdi) 1071; AVX2-NEXT: addq $4, %rdi 1072; AVX2-NEXT: testb $2, %al 1073; AVX2-NEXT: je LBB4_4 1074; AVX2-NEXT: LBB4_3: ## %cond.store1 1075; AVX2-NEXT: vpextrd $1, %xmm0, (%rdi) 1076; AVX2-NEXT: addq $4, %rdi 1077; AVX2-NEXT: testb $4, %al 1078; AVX2-NEXT: je LBB4_6 1079; AVX2-NEXT: LBB4_5: ## %cond.store4 1080; AVX2-NEXT: vpextrd $2, %xmm0, (%rdi) 1081; AVX2-NEXT: addq $4, %rdi 1082; AVX2-NEXT: testb $8, %al 1083; AVX2-NEXT: jne LBB4_7 1084; AVX2-NEXT: jmp LBB4_8 1085; AVX2-NEXT: LBB4_9: ## %cond.store10 1086; AVX2-NEXT: vmovd %xmm0, (%rdi) 1087; AVX2-NEXT: addq $4, %rdi 1088; AVX2-NEXT: testb $32, %al 1089; AVX2-NEXT: je LBB4_12 1090; AVX2-NEXT: LBB4_11: ## %cond.store13 1091; AVX2-NEXT: vpextrd $1, %xmm0, (%rdi) 1092; AVX2-NEXT: addq $4, %rdi 1093; AVX2-NEXT: testb $64, %al 1094; AVX2-NEXT: je LBB4_14 1095; AVX2-NEXT: LBB4_13: ## %cond.store16 1096; AVX2-NEXT: vpextrd $2, %xmm0, (%rdi) 1097; AVX2-NEXT: addq $4, %rdi 1098; AVX2-NEXT: testb $-128, %al 1099; AVX2-NEXT: je LBB4_16 1100; AVX2-NEXT: LBB4_15: ## %cond.store19 1101; AVX2-NEXT: vpextrd $3, %xmm0, (%rdi) 1102; AVX2-NEXT: vzeroupper 1103; AVX2-NEXT: retq 1104; 1105; AVX512F-LABEL: compressstore_v8f32_v8i1: 1106; AVX512F: ## %bb.0: 1107; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 def $zmm0 1108; AVX512F-NEXT: vpmovsxwq %xmm1, %zmm1 1109; AVX512F-NEXT: vpsllq $63, %zmm1, %zmm1 1110; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k1 1111; AVX512F-NEXT: vcompressps %zmm0, (%rdi) {%k1} 1112; AVX512F-NEXT: vzeroupper 1113; AVX512F-NEXT: retq 1114; 1115; AVX512VLDQ-LABEL: compressstore_v8f32_v8i1: 1116; AVX512VLDQ: ## %bb.0: 1117; AVX512VLDQ-NEXT: vpmovsxwd %xmm1, %ymm1 1118; AVX512VLDQ-NEXT: vpslld $31, %ymm1, %ymm1 1119; AVX512VLDQ-NEXT: vpmovd2m %ymm1, %k1 1120; AVX512VLDQ-NEXT: vcompressps %ymm0, (%rdi) {%k1} 1121; AVX512VLDQ-NEXT: vzeroupper 1122; AVX512VLDQ-NEXT: retq 1123; 1124; AVX512VLBW-LABEL: compressstore_v8f32_v8i1: 1125; AVX512VLBW: ## %bb.0: 1126; AVX512VLBW-NEXT: vpsllw $15, %xmm1, %xmm1 1127; AVX512VLBW-NEXT: vpmovw2m %xmm1, %k1 1128; AVX512VLBW-NEXT: vcompressps %ymm0, (%rdi) {%k1} 1129; AVX512VLBW-NEXT: vzeroupper 1130; AVX512VLBW-NEXT: retq 1131 call void @llvm.masked.compressstore.v8f32(<8 x float> %V, ptr %base, <8 x i1> %mask) 1132 ret void 1133} 1134 1135define void @compressstore_v16f32_const(ptr %base, <16 x float> %V) { 1136; SSE2-LABEL: compressstore_v16f32_const: 1137; SSE2: ## %bb.0: 1138; SSE2-NEXT: movss %xmm0, (%rdi) 1139; SSE2-NEXT: movaps %xmm0, %xmm4 1140; SSE2-NEXT: shufps {{.*#+}} xmm4 = xmm4[1,1],xmm0[1,1] 1141; SSE2-NEXT: movss %xmm4, 4(%rdi) 1142; SSE2-NEXT: movaps %xmm0, %xmm4 1143; SSE2-NEXT: unpckhpd {{.*#+}} xmm4 = xmm4[1],xmm0[1] 1144; SSE2-NEXT: movss %xmm4, 8(%rdi) 1145; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3] 1146; SSE2-NEXT: movss %xmm0, 12(%rdi) 1147; SSE2-NEXT: movss %xmm1, 16(%rdi) 1148; SSE2-NEXT: movaps %xmm1, %xmm0 1149; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm1[1,1] 1150; SSE2-NEXT: movss %xmm0, 20(%rdi) 1151; SSE2-NEXT: movaps %xmm1, %xmm0 1152; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] 1153; SSE2-NEXT: movss %xmm0, 24(%rdi) 1154; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3,3,3] 1155; SSE2-NEXT: movss %xmm1, 28(%rdi) 1156; SSE2-NEXT: movss %xmm2, 32(%rdi) 1157; SSE2-NEXT: movaps %xmm2, %xmm0 1158; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm2[1,1] 1159; SSE2-NEXT: movss %xmm0, 36(%rdi) 1160; SSE2-NEXT: movhlps {{.*#+}} xmm2 = xmm2[1,1] 1161; SSE2-NEXT: movss %xmm2, 40(%rdi) 1162; SSE2-NEXT: movss %xmm3, 44(%rdi) 1163; SSE2-NEXT: movaps %xmm3, %xmm0 1164; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm3[1,1] 1165; SSE2-NEXT: movss %xmm0, 48(%rdi) 1166; SSE2-NEXT: movaps %xmm3, %xmm0 1167; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm3[1] 1168; SSE2-NEXT: movss %xmm0, 52(%rdi) 1169; SSE2-NEXT: shufps {{.*#+}} xmm3 = xmm3[3,3,3,3] 1170; SSE2-NEXT: movss %xmm3, 56(%rdi) 1171; SSE2-NEXT: retq 1172; 1173; SSE42-LABEL: compressstore_v16f32_const: 1174; SSE42: ## %bb.0: 1175; SSE42-NEXT: movups %xmm0, (%rdi) 1176; SSE42-NEXT: movups %xmm1, 16(%rdi) 1177; SSE42-NEXT: insertps {{.*#+}} xmm2 = xmm2[0,1,2],xmm3[0] 1178; SSE42-NEXT: movups %xmm2, 32(%rdi) 1179; SSE42-NEXT: extractps $1, %xmm3, 48(%rdi) 1180; SSE42-NEXT: extractps $2, %xmm3, 52(%rdi) 1181; SSE42-NEXT: extractps $3, %xmm3, 56(%rdi) 1182; SSE42-NEXT: retq 1183; 1184; AVX1-LABEL: compressstore_v16f32_const: 1185; AVX1: ## %bb.0: 1186; AVX1-NEXT: vmovups %ymm0, (%rdi) 1187; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0 1188; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm0[0] 1189; AVX1-NEXT: vmovups %xmm1, 32(%rdi) 1190; AVX1-NEXT: vextractps $1, %xmm0, 48(%rdi) 1191; AVX1-NEXT: vextractps $2, %xmm0, 52(%rdi) 1192; AVX1-NEXT: vextractps $3, %xmm0, 56(%rdi) 1193; AVX1-NEXT: vzeroupper 1194; AVX1-NEXT: retq 1195; 1196; AVX2-LABEL: compressstore_v16f32_const: 1197; AVX2: ## %bb.0: 1198; AVX2-NEXT: vmovups %ymm0, (%rdi) 1199; AVX2-NEXT: vmovaps {{.*#+}} xmm0 = [0,1,2,4] 1200; AVX2-NEXT: vpermps %ymm1, %ymm0, %ymm0 1201; AVX2-NEXT: vmovups %xmm0, 32(%rdi) 1202; AVX2-NEXT: vextractf128 $1, %ymm1, %xmm0 1203; AVX2-NEXT: vextractps $1, %xmm0, 48(%rdi) 1204; AVX2-NEXT: vextractps $2, %xmm0, 52(%rdi) 1205; AVX2-NEXT: vextractps $3, %xmm0, 56(%rdi) 1206; AVX2-NEXT: vzeroupper 1207; AVX2-NEXT: retq 1208; 1209; AVX512F-LABEL: compressstore_v16f32_const: 1210; AVX512F: ## %bb.0: 1211; AVX512F-NEXT: movw $-2049, %ax ## imm = 0xF7FF 1212; AVX512F-NEXT: kmovw %eax, %k1 1213; AVX512F-NEXT: vcompressps %zmm0, (%rdi) {%k1} 1214; AVX512F-NEXT: vzeroupper 1215; AVX512F-NEXT: retq 1216; 1217; AVX512VLDQ-LABEL: compressstore_v16f32_const: 1218; AVX512VLDQ: ## %bb.0: 1219; AVX512VLDQ-NEXT: movw $-2049, %ax ## imm = 0xF7FF 1220; AVX512VLDQ-NEXT: kmovw %eax, %k1 1221; AVX512VLDQ-NEXT: vcompressps %zmm0, (%rdi) {%k1} 1222; AVX512VLDQ-NEXT: vzeroupper 1223; AVX512VLDQ-NEXT: retq 1224; 1225; AVX512VLBW-LABEL: compressstore_v16f32_const: 1226; AVX512VLBW: ## %bb.0: 1227; AVX512VLBW-NEXT: movw $-2049, %ax ## imm = 0xF7FF 1228; AVX512VLBW-NEXT: kmovd %eax, %k1 1229; AVX512VLBW-NEXT: vcompressps %zmm0, (%rdi) {%k1} 1230; AVX512VLBW-NEXT: vzeroupper 1231; AVX512VLBW-NEXT: retq 1232 call void @llvm.masked.compressstore.v16f32(<16 x float> %V, ptr %base, <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 false, i1 true, i1 true, i1 true, i1 true>) 1233 ret void 1234} 1235 1236define void @compressstore_v32f32_v32i32(ptr %base, <32 x float> %V, <32 x i32> %trigger) { 1237; SSE2-LABEL: compressstore_v32f32_v32i32: 1238; SSE2: ## %bb.0: 1239; SSE2-NEXT: pxor %xmm8, %xmm8 1240; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm9 1241; SSE2-NEXT: pcmpeqd %xmm8, %xmm9 1242; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm10 1243; SSE2-NEXT: pcmpeqd %xmm8, %xmm10 1244; SSE2-NEXT: packssdw %xmm9, %xmm10 1245; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm9 1246; SSE2-NEXT: pcmpeqd %xmm8, %xmm9 1247; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm11 1248; SSE2-NEXT: pcmpeqd %xmm8, %xmm11 1249; SSE2-NEXT: packssdw %xmm9, %xmm11 1250; SSE2-NEXT: packsswb %xmm10, %xmm11 1251; SSE2-NEXT: pmovmskb %xmm11, %ecx 1252; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm9 1253; SSE2-NEXT: pcmpeqd %xmm8, %xmm9 1254; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm10 1255; SSE2-NEXT: pcmpeqd %xmm8, %xmm10 1256; SSE2-NEXT: packssdw %xmm9, %xmm10 1257; SSE2-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm9 1258; SSE2-NEXT: pcmpeqd %xmm8, %xmm9 1259; SSE2-NEXT: pcmpeqd {{[0-9]+}}(%rsp), %xmm8 1260; SSE2-NEXT: packssdw %xmm9, %xmm8 1261; SSE2-NEXT: packsswb %xmm10, %xmm8 1262; SSE2-NEXT: pmovmskb %xmm8, %eax 1263; SSE2-NEXT: shll $16, %eax 1264; SSE2-NEXT: orl %ecx, %eax 1265; SSE2-NEXT: testb $1, %al 1266; SSE2-NEXT: jne LBB6_1 1267; SSE2-NEXT: ## %bb.2: ## %else 1268; SSE2-NEXT: testb $2, %al 1269; SSE2-NEXT: jne LBB6_3 1270; SSE2-NEXT: LBB6_4: ## %else2 1271; SSE2-NEXT: testb $4, %al 1272; SSE2-NEXT: jne LBB6_5 1273; SSE2-NEXT: LBB6_6: ## %else5 1274; SSE2-NEXT: testb $8, %al 1275; SSE2-NEXT: jne LBB6_7 1276; SSE2-NEXT: LBB6_8: ## %else8 1277; SSE2-NEXT: testb $16, %al 1278; SSE2-NEXT: jne LBB6_9 1279; SSE2-NEXT: LBB6_10: ## %else11 1280; SSE2-NEXT: testb $32, %al 1281; SSE2-NEXT: jne LBB6_11 1282; SSE2-NEXT: LBB6_12: ## %else14 1283; SSE2-NEXT: testb $64, %al 1284; SSE2-NEXT: jne LBB6_13 1285; SSE2-NEXT: LBB6_14: ## %else17 1286; SSE2-NEXT: testb %al, %al 1287; SSE2-NEXT: js LBB6_15 1288; SSE2-NEXT: LBB6_16: ## %else20 1289; SSE2-NEXT: testl $256, %eax ## imm = 0x100 1290; SSE2-NEXT: jne LBB6_17 1291; SSE2-NEXT: LBB6_18: ## %else23 1292; SSE2-NEXT: testl $512, %eax ## imm = 0x200 1293; SSE2-NEXT: jne LBB6_19 1294; SSE2-NEXT: LBB6_20: ## %else26 1295; SSE2-NEXT: testl $1024, %eax ## imm = 0x400 1296; SSE2-NEXT: jne LBB6_21 1297; SSE2-NEXT: LBB6_22: ## %else29 1298; SSE2-NEXT: testl $2048, %eax ## imm = 0x800 1299; SSE2-NEXT: jne LBB6_23 1300; SSE2-NEXT: LBB6_24: ## %else32 1301; SSE2-NEXT: testl $4096, %eax ## imm = 0x1000 1302; SSE2-NEXT: jne LBB6_25 1303; SSE2-NEXT: LBB6_26: ## %else35 1304; SSE2-NEXT: testl $8192, %eax ## imm = 0x2000 1305; SSE2-NEXT: jne LBB6_27 1306; SSE2-NEXT: LBB6_28: ## %else38 1307; SSE2-NEXT: testl $16384, %eax ## imm = 0x4000 1308; SSE2-NEXT: jne LBB6_29 1309; SSE2-NEXT: LBB6_30: ## %else41 1310; SSE2-NEXT: testw %ax, %ax 1311; SSE2-NEXT: js LBB6_31 1312; SSE2-NEXT: LBB6_32: ## %else44 1313; SSE2-NEXT: testl $65536, %eax ## imm = 0x10000 1314; SSE2-NEXT: jne LBB6_33 1315; SSE2-NEXT: LBB6_34: ## %else47 1316; SSE2-NEXT: testl $131072, %eax ## imm = 0x20000 1317; SSE2-NEXT: jne LBB6_35 1318; SSE2-NEXT: LBB6_36: ## %else50 1319; SSE2-NEXT: testl $262144, %eax ## imm = 0x40000 1320; SSE2-NEXT: jne LBB6_37 1321; SSE2-NEXT: LBB6_38: ## %else53 1322; SSE2-NEXT: testl $524288, %eax ## imm = 0x80000 1323; SSE2-NEXT: jne LBB6_39 1324; SSE2-NEXT: LBB6_40: ## %else56 1325; SSE2-NEXT: testl $1048576, %eax ## imm = 0x100000 1326; SSE2-NEXT: jne LBB6_41 1327; SSE2-NEXT: LBB6_42: ## %else59 1328; SSE2-NEXT: testl $2097152, %eax ## imm = 0x200000 1329; SSE2-NEXT: jne LBB6_43 1330; SSE2-NEXT: LBB6_44: ## %else62 1331; SSE2-NEXT: testl $4194304, %eax ## imm = 0x400000 1332; SSE2-NEXT: jne LBB6_45 1333; SSE2-NEXT: LBB6_46: ## %else65 1334; SSE2-NEXT: testl $8388608, %eax ## imm = 0x800000 1335; SSE2-NEXT: jne LBB6_47 1336; SSE2-NEXT: LBB6_48: ## %else68 1337; SSE2-NEXT: testl $16777216, %eax ## imm = 0x1000000 1338; SSE2-NEXT: jne LBB6_49 1339; SSE2-NEXT: LBB6_50: ## %else71 1340; SSE2-NEXT: testl $33554432, %eax ## imm = 0x2000000 1341; SSE2-NEXT: jne LBB6_51 1342; SSE2-NEXT: LBB6_52: ## %else74 1343; SSE2-NEXT: testl $67108864, %eax ## imm = 0x4000000 1344; SSE2-NEXT: jne LBB6_53 1345; SSE2-NEXT: LBB6_54: ## %else77 1346; SSE2-NEXT: testl $134217728, %eax ## imm = 0x8000000 1347; SSE2-NEXT: jne LBB6_55 1348; SSE2-NEXT: LBB6_56: ## %else80 1349; SSE2-NEXT: testl $268435456, %eax ## imm = 0x10000000 1350; SSE2-NEXT: jne LBB6_57 1351; SSE2-NEXT: LBB6_58: ## %else83 1352; SSE2-NEXT: testl $536870912, %eax ## imm = 0x20000000 1353; SSE2-NEXT: jne LBB6_59 1354; SSE2-NEXT: LBB6_60: ## %else86 1355; SSE2-NEXT: testl $1073741824, %eax ## imm = 0x40000000 1356; SSE2-NEXT: jne LBB6_61 1357; SSE2-NEXT: LBB6_62: ## %else89 1358; SSE2-NEXT: testl $-2147483648, %eax ## imm = 0x80000000 1359; SSE2-NEXT: jne LBB6_63 1360; SSE2-NEXT: LBB6_64: ## %else92 1361; SSE2-NEXT: retq 1362; SSE2-NEXT: LBB6_1: ## %cond.store 1363; SSE2-NEXT: movss %xmm0, (%rdi) 1364; SSE2-NEXT: addq $4, %rdi 1365; SSE2-NEXT: testb $2, %al 1366; SSE2-NEXT: je LBB6_4 1367; SSE2-NEXT: LBB6_3: ## %cond.store1 1368; SSE2-NEXT: movaps %xmm0, %xmm8 1369; SSE2-NEXT: shufps {{.*#+}} xmm8 = xmm8[1,1],xmm0[1,1] 1370; SSE2-NEXT: movss %xmm8, (%rdi) 1371; SSE2-NEXT: addq $4, %rdi 1372; SSE2-NEXT: testb $4, %al 1373; SSE2-NEXT: je LBB6_6 1374; SSE2-NEXT: LBB6_5: ## %cond.store4 1375; SSE2-NEXT: movaps %xmm0, %xmm8 1376; SSE2-NEXT: unpckhpd {{.*#+}} xmm8 = xmm8[1],xmm0[1] 1377; SSE2-NEXT: movss %xmm8, (%rdi) 1378; SSE2-NEXT: addq $4, %rdi 1379; SSE2-NEXT: testb $8, %al 1380; SSE2-NEXT: je LBB6_8 1381; SSE2-NEXT: LBB6_7: ## %cond.store7 1382; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3] 1383; SSE2-NEXT: movss %xmm0, (%rdi) 1384; SSE2-NEXT: addq $4, %rdi 1385; SSE2-NEXT: testb $16, %al 1386; SSE2-NEXT: je LBB6_10 1387; SSE2-NEXT: LBB6_9: ## %cond.store10 1388; SSE2-NEXT: movss %xmm1, (%rdi) 1389; SSE2-NEXT: addq $4, %rdi 1390; SSE2-NEXT: testb $32, %al 1391; SSE2-NEXT: je LBB6_12 1392; SSE2-NEXT: LBB6_11: ## %cond.store13 1393; SSE2-NEXT: movaps %xmm1, %xmm0 1394; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm1[1,1] 1395; SSE2-NEXT: movss %xmm0, (%rdi) 1396; SSE2-NEXT: addq $4, %rdi 1397; SSE2-NEXT: testb $64, %al 1398; SSE2-NEXT: je LBB6_14 1399; SSE2-NEXT: LBB6_13: ## %cond.store16 1400; SSE2-NEXT: movaps %xmm1, %xmm0 1401; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] 1402; SSE2-NEXT: movss %xmm0, (%rdi) 1403; SSE2-NEXT: addq $4, %rdi 1404; SSE2-NEXT: testb %al, %al 1405; SSE2-NEXT: jns LBB6_16 1406; SSE2-NEXT: LBB6_15: ## %cond.store19 1407; SSE2-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3,3,3] 1408; SSE2-NEXT: movss %xmm1, (%rdi) 1409; SSE2-NEXT: addq $4, %rdi 1410; SSE2-NEXT: testl $256, %eax ## imm = 0x100 1411; SSE2-NEXT: je LBB6_18 1412; SSE2-NEXT: LBB6_17: ## %cond.store22 1413; SSE2-NEXT: movss %xmm2, (%rdi) 1414; SSE2-NEXT: addq $4, %rdi 1415; SSE2-NEXT: testl $512, %eax ## imm = 0x200 1416; SSE2-NEXT: je LBB6_20 1417; SSE2-NEXT: LBB6_19: ## %cond.store25 1418; SSE2-NEXT: movaps %xmm2, %xmm0 1419; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm2[1,1] 1420; SSE2-NEXT: movss %xmm0, (%rdi) 1421; SSE2-NEXT: addq $4, %rdi 1422; SSE2-NEXT: testl $1024, %eax ## imm = 0x400 1423; SSE2-NEXT: je LBB6_22 1424; SSE2-NEXT: LBB6_21: ## %cond.store28 1425; SSE2-NEXT: movaps %xmm2, %xmm0 1426; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm2[1] 1427; SSE2-NEXT: movss %xmm0, (%rdi) 1428; SSE2-NEXT: addq $4, %rdi 1429; SSE2-NEXT: testl $2048, %eax ## imm = 0x800 1430; SSE2-NEXT: je LBB6_24 1431; SSE2-NEXT: LBB6_23: ## %cond.store31 1432; SSE2-NEXT: shufps {{.*#+}} xmm2 = xmm2[3,3,3,3] 1433; SSE2-NEXT: movss %xmm2, (%rdi) 1434; SSE2-NEXT: addq $4, %rdi 1435; SSE2-NEXT: testl $4096, %eax ## imm = 0x1000 1436; SSE2-NEXT: je LBB6_26 1437; SSE2-NEXT: LBB6_25: ## %cond.store34 1438; SSE2-NEXT: movss %xmm3, (%rdi) 1439; SSE2-NEXT: addq $4, %rdi 1440; SSE2-NEXT: testl $8192, %eax ## imm = 0x2000 1441; SSE2-NEXT: je LBB6_28 1442; SSE2-NEXT: LBB6_27: ## %cond.store37 1443; SSE2-NEXT: movaps %xmm3, %xmm0 1444; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm3[1,1] 1445; SSE2-NEXT: movss %xmm0, (%rdi) 1446; SSE2-NEXT: addq $4, %rdi 1447; SSE2-NEXT: testl $16384, %eax ## imm = 0x4000 1448; SSE2-NEXT: je LBB6_30 1449; SSE2-NEXT: LBB6_29: ## %cond.store40 1450; SSE2-NEXT: movaps %xmm3, %xmm0 1451; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm3[1] 1452; SSE2-NEXT: movss %xmm0, (%rdi) 1453; SSE2-NEXT: addq $4, %rdi 1454; SSE2-NEXT: testw %ax, %ax 1455; SSE2-NEXT: jns LBB6_32 1456; SSE2-NEXT: LBB6_31: ## %cond.store43 1457; SSE2-NEXT: shufps {{.*#+}} xmm3 = xmm3[3,3,3,3] 1458; SSE2-NEXT: movss %xmm3, (%rdi) 1459; SSE2-NEXT: addq $4, %rdi 1460; SSE2-NEXT: testl $65536, %eax ## imm = 0x10000 1461; SSE2-NEXT: je LBB6_34 1462; SSE2-NEXT: LBB6_33: ## %cond.store46 1463; SSE2-NEXT: movss %xmm4, (%rdi) 1464; SSE2-NEXT: addq $4, %rdi 1465; SSE2-NEXT: testl $131072, %eax ## imm = 0x20000 1466; SSE2-NEXT: je LBB6_36 1467; SSE2-NEXT: LBB6_35: ## %cond.store49 1468; SSE2-NEXT: movaps %xmm4, %xmm0 1469; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm4[1,1] 1470; SSE2-NEXT: movss %xmm0, (%rdi) 1471; SSE2-NEXT: addq $4, %rdi 1472; SSE2-NEXT: testl $262144, %eax ## imm = 0x40000 1473; SSE2-NEXT: je LBB6_38 1474; SSE2-NEXT: LBB6_37: ## %cond.store52 1475; SSE2-NEXT: movaps %xmm4, %xmm0 1476; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm4[1] 1477; SSE2-NEXT: movss %xmm0, (%rdi) 1478; SSE2-NEXT: addq $4, %rdi 1479; SSE2-NEXT: testl $524288, %eax ## imm = 0x80000 1480; SSE2-NEXT: je LBB6_40 1481; SSE2-NEXT: LBB6_39: ## %cond.store55 1482; SSE2-NEXT: shufps {{.*#+}} xmm4 = xmm4[3,3,3,3] 1483; SSE2-NEXT: movss %xmm4, (%rdi) 1484; SSE2-NEXT: addq $4, %rdi 1485; SSE2-NEXT: testl $1048576, %eax ## imm = 0x100000 1486; SSE2-NEXT: je LBB6_42 1487; SSE2-NEXT: LBB6_41: ## %cond.store58 1488; SSE2-NEXT: movss %xmm5, (%rdi) 1489; SSE2-NEXT: addq $4, %rdi 1490; SSE2-NEXT: testl $2097152, %eax ## imm = 0x200000 1491; SSE2-NEXT: je LBB6_44 1492; SSE2-NEXT: LBB6_43: ## %cond.store61 1493; SSE2-NEXT: movaps %xmm5, %xmm0 1494; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm5[1,1] 1495; SSE2-NEXT: movss %xmm0, (%rdi) 1496; SSE2-NEXT: addq $4, %rdi 1497; SSE2-NEXT: testl $4194304, %eax ## imm = 0x400000 1498; SSE2-NEXT: je LBB6_46 1499; SSE2-NEXT: LBB6_45: ## %cond.store64 1500; SSE2-NEXT: movaps %xmm5, %xmm0 1501; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm5[1] 1502; SSE2-NEXT: movss %xmm0, (%rdi) 1503; SSE2-NEXT: addq $4, %rdi 1504; SSE2-NEXT: testl $8388608, %eax ## imm = 0x800000 1505; SSE2-NEXT: je LBB6_48 1506; SSE2-NEXT: LBB6_47: ## %cond.store67 1507; SSE2-NEXT: shufps {{.*#+}} xmm5 = xmm5[3,3,3,3] 1508; SSE2-NEXT: movss %xmm5, (%rdi) 1509; SSE2-NEXT: addq $4, %rdi 1510; SSE2-NEXT: testl $16777216, %eax ## imm = 0x1000000 1511; SSE2-NEXT: je LBB6_50 1512; SSE2-NEXT: LBB6_49: ## %cond.store70 1513; SSE2-NEXT: movss %xmm6, (%rdi) 1514; SSE2-NEXT: addq $4, %rdi 1515; SSE2-NEXT: testl $33554432, %eax ## imm = 0x2000000 1516; SSE2-NEXT: je LBB6_52 1517; SSE2-NEXT: LBB6_51: ## %cond.store73 1518; SSE2-NEXT: movaps %xmm6, %xmm0 1519; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm6[1,1] 1520; SSE2-NEXT: movss %xmm0, (%rdi) 1521; SSE2-NEXT: addq $4, %rdi 1522; SSE2-NEXT: testl $67108864, %eax ## imm = 0x4000000 1523; SSE2-NEXT: je LBB6_54 1524; SSE2-NEXT: LBB6_53: ## %cond.store76 1525; SSE2-NEXT: movaps %xmm6, %xmm0 1526; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm6[1] 1527; SSE2-NEXT: movss %xmm0, (%rdi) 1528; SSE2-NEXT: addq $4, %rdi 1529; SSE2-NEXT: testl $134217728, %eax ## imm = 0x8000000 1530; SSE2-NEXT: je LBB6_56 1531; SSE2-NEXT: LBB6_55: ## %cond.store79 1532; SSE2-NEXT: shufps {{.*#+}} xmm6 = xmm6[3,3,3,3] 1533; SSE2-NEXT: movss %xmm6, (%rdi) 1534; SSE2-NEXT: addq $4, %rdi 1535; SSE2-NEXT: testl $268435456, %eax ## imm = 0x10000000 1536; SSE2-NEXT: je LBB6_58 1537; SSE2-NEXT: LBB6_57: ## %cond.store82 1538; SSE2-NEXT: movss %xmm7, (%rdi) 1539; SSE2-NEXT: addq $4, %rdi 1540; SSE2-NEXT: testl $536870912, %eax ## imm = 0x20000000 1541; SSE2-NEXT: je LBB6_60 1542; SSE2-NEXT: LBB6_59: ## %cond.store85 1543; SSE2-NEXT: movaps %xmm7, %xmm0 1544; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm7[1,1] 1545; SSE2-NEXT: movss %xmm0, (%rdi) 1546; SSE2-NEXT: addq $4, %rdi 1547; SSE2-NEXT: testl $1073741824, %eax ## imm = 0x40000000 1548; SSE2-NEXT: je LBB6_62 1549; SSE2-NEXT: LBB6_61: ## %cond.store88 1550; SSE2-NEXT: movaps %xmm7, %xmm0 1551; SSE2-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm7[1] 1552; SSE2-NEXT: movss %xmm0, (%rdi) 1553; SSE2-NEXT: addq $4, %rdi 1554; SSE2-NEXT: testl $-2147483648, %eax ## imm = 0x80000000 1555; SSE2-NEXT: je LBB6_64 1556; SSE2-NEXT: LBB6_63: ## %cond.store91 1557; SSE2-NEXT: shufps {{.*#+}} xmm7 = xmm7[3,3,3,3] 1558; SSE2-NEXT: movss %xmm7, (%rdi) 1559; SSE2-NEXT: retq 1560; 1561; SSE42-LABEL: compressstore_v32f32_v32i32: 1562; SSE42: ## %bb.0: 1563; SSE42-NEXT: pxor %xmm8, %xmm8 1564; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm9 1565; SSE42-NEXT: pcmpeqd %xmm8, %xmm9 1566; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm10 1567; SSE42-NEXT: pcmpeqd %xmm8, %xmm10 1568; SSE42-NEXT: packssdw %xmm9, %xmm10 1569; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm9 1570; SSE42-NEXT: pcmpeqd %xmm8, %xmm9 1571; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm11 1572; SSE42-NEXT: pcmpeqd %xmm8, %xmm11 1573; SSE42-NEXT: packssdw %xmm9, %xmm11 1574; SSE42-NEXT: packsswb %xmm10, %xmm11 1575; SSE42-NEXT: pmovmskb %xmm11, %ecx 1576; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm9 1577; SSE42-NEXT: pcmpeqd %xmm8, %xmm9 1578; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm10 1579; SSE42-NEXT: pcmpeqd %xmm8, %xmm10 1580; SSE42-NEXT: packssdw %xmm9, %xmm10 1581; SSE42-NEXT: movdqa {{[0-9]+}}(%rsp), %xmm9 1582; SSE42-NEXT: pcmpeqd %xmm8, %xmm9 1583; SSE42-NEXT: pcmpeqd {{[0-9]+}}(%rsp), %xmm8 1584; SSE42-NEXT: packssdw %xmm9, %xmm8 1585; SSE42-NEXT: packsswb %xmm10, %xmm8 1586; SSE42-NEXT: pmovmskb %xmm8, %eax 1587; SSE42-NEXT: shll $16, %eax 1588; SSE42-NEXT: orl %ecx, %eax 1589; SSE42-NEXT: testb $1, %al 1590; SSE42-NEXT: jne LBB6_1 1591; SSE42-NEXT: ## %bb.2: ## %else 1592; SSE42-NEXT: testb $2, %al 1593; SSE42-NEXT: jne LBB6_3 1594; SSE42-NEXT: LBB6_4: ## %else2 1595; SSE42-NEXT: testb $4, %al 1596; SSE42-NEXT: jne LBB6_5 1597; SSE42-NEXT: LBB6_6: ## %else5 1598; SSE42-NEXT: testb $8, %al 1599; SSE42-NEXT: jne LBB6_7 1600; SSE42-NEXT: LBB6_8: ## %else8 1601; SSE42-NEXT: testb $16, %al 1602; SSE42-NEXT: jne LBB6_9 1603; SSE42-NEXT: LBB6_10: ## %else11 1604; SSE42-NEXT: testb $32, %al 1605; SSE42-NEXT: jne LBB6_11 1606; SSE42-NEXT: LBB6_12: ## %else14 1607; SSE42-NEXT: testb $64, %al 1608; SSE42-NEXT: jne LBB6_13 1609; SSE42-NEXT: LBB6_14: ## %else17 1610; SSE42-NEXT: testb %al, %al 1611; SSE42-NEXT: js LBB6_15 1612; SSE42-NEXT: LBB6_16: ## %else20 1613; SSE42-NEXT: testl $256, %eax ## imm = 0x100 1614; SSE42-NEXT: jne LBB6_17 1615; SSE42-NEXT: LBB6_18: ## %else23 1616; SSE42-NEXT: testl $512, %eax ## imm = 0x200 1617; SSE42-NEXT: jne LBB6_19 1618; SSE42-NEXT: LBB6_20: ## %else26 1619; SSE42-NEXT: testl $1024, %eax ## imm = 0x400 1620; SSE42-NEXT: jne LBB6_21 1621; SSE42-NEXT: LBB6_22: ## %else29 1622; SSE42-NEXT: testl $2048, %eax ## imm = 0x800 1623; SSE42-NEXT: jne LBB6_23 1624; SSE42-NEXT: LBB6_24: ## %else32 1625; SSE42-NEXT: testl $4096, %eax ## imm = 0x1000 1626; SSE42-NEXT: jne LBB6_25 1627; SSE42-NEXT: LBB6_26: ## %else35 1628; SSE42-NEXT: testl $8192, %eax ## imm = 0x2000 1629; SSE42-NEXT: jne LBB6_27 1630; SSE42-NEXT: LBB6_28: ## %else38 1631; SSE42-NEXT: testl $16384, %eax ## imm = 0x4000 1632; SSE42-NEXT: jne LBB6_29 1633; SSE42-NEXT: LBB6_30: ## %else41 1634; SSE42-NEXT: testw %ax, %ax 1635; SSE42-NEXT: js LBB6_31 1636; SSE42-NEXT: LBB6_32: ## %else44 1637; SSE42-NEXT: testl $65536, %eax ## imm = 0x10000 1638; SSE42-NEXT: jne LBB6_33 1639; SSE42-NEXT: LBB6_34: ## %else47 1640; SSE42-NEXT: testl $131072, %eax ## imm = 0x20000 1641; SSE42-NEXT: jne LBB6_35 1642; SSE42-NEXT: LBB6_36: ## %else50 1643; SSE42-NEXT: testl $262144, %eax ## imm = 0x40000 1644; SSE42-NEXT: jne LBB6_37 1645; SSE42-NEXT: LBB6_38: ## %else53 1646; SSE42-NEXT: testl $524288, %eax ## imm = 0x80000 1647; SSE42-NEXT: jne LBB6_39 1648; SSE42-NEXT: LBB6_40: ## %else56 1649; SSE42-NEXT: testl $1048576, %eax ## imm = 0x100000 1650; SSE42-NEXT: jne LBB6_41 1651; SSE42-NEXT: LBB6_42: ## %else59 1652; SSE42-NEXT: testl $2097152, %eax ## imm = 0x200000 1653; SSE42-NEXT: jne LBB6_43 1654; SSE42-NEXT: LBB6_44: ## %else62 1655; SSE42-NEXT: testl $4194304, %eax ## imm = 0x400000 1656; SSE42-NEXT: jne LBB6_45 1657; SSE42-NEXT: LBB6_46: ## %else65 1658; SSE42-NEXT: testl $8388608, %eax ## imm = 0x800000 1659; SSE42-NEXT: jne LBB6_47 1660; SSE42-NEXT: LBB6_48: ## %else68 1661; SSE42-NEXT: testl $16777216, %eax ## imm = 0x1000000 1662; SSE42-NEXT: jne LBB6_49 1663; SSE42-NEXT: LBB6_50: ## %else71 1664; SSE42-NEXT: testl $33554432, %eax ## imm = 0x2000000 1665; SSE42-NEXT: jne LBB6_51 1666; SSE42-NEXT: LBB6_52: ## %else74 1667; SSE42-NEXT: testl $67108864, %eax ## imm = 0x4000000 1668; SSE42-NEXT: jne LBB6_53 1669; SSE42-NEXT: LBB6_54: ## %else77 1670; SSE42-NEXT: testl $134217728, %eax ## imm = 0x8000000 1671; SSE42-NEXT: jne LBB6_55 1672; SSE42-NEXT: LBB6_56: ## %else80 1673; SSE42-NEXT: testl $268435456, %eax ## imm = 0x10000000 1674; SSE42-NEXT: jne LBB6_57 1675; SSE42-NEXT: LBB6_58: ## %else83 1676; SSE42-NEXT: testl $536870912, %eax ## imm = 0x20000000 1677; SSE42-NEXT: jne LBB6_59 1678; SSE42-NEXT: LBB6_60: ## %else86 1679; SSE42-NEXT: testl $1073741824, %eax ## imm = 0x40000000 1680; SSE42-NEXT: jne LBB6_61 1681; SSE42-NEXT: LBB6_62: ## %else89 1682; SSE42-NEXT: testl $-2147483648, %eax ## imm = 0x80000000 1683; SSE42-NEXT: jne LBB6_63 1684; SSE42-NEXT: LBB6_64: ## %else92 1685; SSE42-NEXT: retq 1686; SSE42-NEXT: LBB6_1: ## %cond.store 1687; SSE42-NEXT: movss %xmm0, (%rdi) 1688; SSE42-NEXT: addq $4, %rdi 1689; SSE42-NEXT: testb $2, %al 1690; SSE42-NEXT: je LBB6_4 1691; SSE42-NEXT: LBB6_3: ## %cond.store1 1692; SSE42-NEXT: extractps $1, %xmm0, (%rdi) 1693; SSE42-NEXT: addq $4, %rdi 1694; SSE42-NEXT: testb $4, %al 1695; SSE42-NEXT: je LBB6_6 1696; SSE42-NEXT: LBB6_5: ## %cond.store4 1697; SSE42-NEXT: extractps $2, %xmm0, (%rdi) 1698; SSE42-NEXT: addq $4, %rdi 1699; SSE42-NEXT: testb $8, %al 1700; SSE42-NEXT: je LBB6_8 1701; SSE42-NEXT: LBB6_7: ## %cond.store7 1702; SSE42-NEXT: extractps $3, %xmm0, (%rdi) 1703; SSE42-NEXT: addq $4, %rdi 1704; SSE42-NEXT: testb $16, %al 1705; SSE42-NEXT: je LBB6_10 1706; SSE42-NEXT: LBB6_9: ## %cond.store10 1707; SSE42-NEXT: movss %xmm1, (%rdi) 1708; SSE42-NEXT: addq $4, %rdi 1709; SSE42-NEXT: testb $32, %al 1710; SSE42-NEXT: je LBB6_12 1711; SSE42-NEXT: LBB6_11: ## %cond.store13 1712; SSE42-NEXT: extractps $1, %xmm1, (%rdi) 1713; SSE42-NEXT: addq $4, %rdi 1714; SSE42-NEXT: testb $64, %al 1715; SSE42-NEXT: je LBB6_14 1716; SSE42-NEXT: LBB6_13: ## %cond.store16 1717; SSE42-NEXT: extractps $2, %xmm1, (%rdi) 1718; SSE42-NEXT: addq $4, %rdi 1719; SSE42-NEXT: testb %al, %al 1720; SSE42-NEXT: jns LBB6_16 1721; SSE42-NEXT: LBB6_15: ## %cond.store19 1722; SSE42-NEXT: extractps $3, %xmm1, (%rdi) 1723; SSE42-NEXT: addq $4, %rdi 1724; SSE42-NEXT: testl $256, %eax ## imm = 0x100 1725; SSE42-NEXT: je LBB6_18 1726; SSE42-NEXT: LBB6_17: ## %cond.store22 1727; SSE42-NEXT: movss %xmm2, (%rdi) 1728; SSE42-NEXT: addq $4, %rdi 1729; SSE42-NEXT: testl $512, %eax ## imm = 0x200 1730; SSE42-NEXT: je LBB6_20 1731; SSE42-NEXT: LBB6_19: ## %cond.store25 1732; SSE42-NEXT: extractps $1, %xmm2, (%rdi) 1733; SSE42-NEXT: addq $4, %rdi 1734; SSE42-NEXT: testl $1024, %eax ## imm = 0x400 1735; SSE42-NEXT: je LBB6_22 1736; SSE42-NEXT: LBB6_21: ## %cond.store28 1737; SSE42-NEXT: extractps $2, %xmm2, (%rdi) 1738; SSE42-NEXT: addq $4, %rdi 1739; SSE42-NEXT: testl $2048, %eax ## imm = 0x800 1740; SSE42-NEXT: je LBB6_24 1741; SSE42-NEXT: LBB6_23: ## %cond.store31 1742; SSE42-NEXT: extractps $3, %xmm2, (%rdi) 1743; SSE42-NEXT: addq $4, %rdi 1744; SSE42-NEXT: testl $4096, %eax ## imm = 0x1000 1745; SSE42-NEXT: je LBB6_26 1746; SSE42-NEXT: LBB6_25: ## %cond.store34 1747; SSE42-NEXT: movss %xmm3, (%rdi) 1748; SSE42-NEXT: addq $4, %rdi 1749; SSE42-NEXT: testl $8192, %eax ## imm = 0x2000 1750; SSE42-NEXT: je LBB6_28 1751; SSE42-NEXT: LBB6_27: ## %cond.store37 1752; SSE42-NEXT: extractps $1, %xmm3, (%rdi) 1753; SSE42-NEXT: addq $4, %rdi 1754; SSE42-NEXT: testl $16384, %eax ## imm = 0x4000 1755; SSE42-NEXT: je LBB6_30 1756; SSE42-NEXT: LBB6_29: ## %cond.store40 1757; SSE42-NEXT: extractps $2, %xmm3, (%rdi) 1758; SSE42-NEXT: addq $4, %rdi 1759; SSE42-NEXT: testw %ax, %ax 1760; SSE42-NEXT: jns LBB6_32 1761; SSE42-NEXT: LBB6_31: ## %cond.store43 1762; SSE42-NEXT: extractps $3, %xmm3, (%rdi) 1763; SSE42-NEXT: addq $4, %rdi 1764; SSE42-NEXT: testl $65536, %eax ## imm = 0x10000 1765; SSE42-NEXT: je LBB6_34 1766; SSE42-NEXT: LBB6_33: ## %cond.store46 1767; SSE42-NEXT: movss %xmm4, (%rdi) 1768; SSE42-NEXT: addq $4, %rdi 1769; SSE42-NEXT: testl $131072, %eax ## imm = 0x20000 1770; SSE42-NEXT: je LBB6_36 1771; SSE42-NEXT: LBB6_35: ## %cond.store49 1772; SSE42-NEXT: extractps $1, %xmm4, (%rdi) 1773; SSE42-NEXT: addq $4, %rdi 1774; SSE42-NEXT: testl $262144, %eax ## imm = 0x40000 1775; SSE42-NEXT: je LBB6_38 1776; SSE42-NEXT: LBB6_37: ## %cond.store52 1777; SSE42-NEXT: extractps $2, %xmm4, (%rdi) 1778; SSE42-NEXT: addq $4, %rdi 1779; SSE42-NEXT: testl $524288, %eax ## imm = 0x80000 1780; SSE42-NEXT: je LBB6_40 1781; SSE42-NEXT: LBB6_39: ## %cond.store55 1782; SSE42-NEXT: extractps $3, %xmm4, (%rdi) 1783; SSE42-NEXT: addq $4, %rdi 1784; SSE42-NEXT: testl $1048576, %eax ## imm = 0x100000 1785; SSE42-NEXT: je LBB6_42 1786; SSE42-NEXT: LBB6_41: ## %cond.store58 1787; SSE42-NEXT: movss %xmm5, (%rdi) 1788; SSE42-NEXT: addq $4, %rdi 1789; SSE42-NEXT: testl $2097152, %eax ## imm = 0x200000 1790; SSE42-NEXT: je LBB6_44 1791; SSE42-NEXT: LBB6_43: ## %cond.store61 1792; SSE42-NEXT: extractps $1, %xmm5, (%rdi) 1793; SSE42-NEXT: addq $4, %rdi 1794; SSE42-NEXT: testl $4194304, %eax ## imm = 0x400000 1795; SSE42-NEXT: je LBB6_46 1796; SSE42-NEXT: LBB6_45: ## %cond.store64 1797; SSE42-NEXT: extractps $2, %xmm5, (%rdi) 1798; SSE42-NEXT: addq $4, %rdi 1799; SSE42-NEXT: testl $8388608, %eax ## imm = 0x800000 1800; SSE42-NEXT: je LBB6_48 1801; SSE42-NEXT: LBB6_47: ## %cond.store67 1802; SSE42-NEXT: extractps $3, %xmm5, (%rdi) 1803; SSE42-NEXT: addq $4, %rdi 1804; SSE42-NEXT: testl $16777216, %eax ## imm = 0x1000000 1805; SSE42-NEXT: je LBB6_50 1806; SSE42-NEXT: LBB6_49: ## %cond.store70 1807; SSE42-NEXT: movss %xmm6, (%rdi) 1808; SSE42-NEXT: addq $4, %rdi 1809; SSE42-NEXT: testl $33554432, %eax ## imm = 0x2000000 1810; SSE42-NEXT: je LBB6_52 1811; SSE42-NEXT: LBB6_51: ## %cond.store73 1812; SSE42-NEXT: extractps $1, %xmm6, (%rdi) 1813; SSE42-NEXT: addq $4, %rdi 1814; SSE42-NEXT: testl $67108864, %eax ## imm = 0x4000000 1815; SSE42-NEXT: je LBB6_54 1816; SSE42-NEXT: LBB6_53: ## %cond.store76 1817; SSE42-NEXT: extractps $2, %xmm6, (%rdi) 1818; SSE42-NEXT: addq $4, %rdi 1819; SSE42-NEXT: testl $134217728, %eax ## imm = 0x8000000 1820; SSE42-NEXT: je LBB6_56 1821; SSE42-NEXT: LBB6_55: ## %cond.store79 1822; SSE42-NEXT: extractps $3, %xmm6, (%rdi) 1823; SSE42-NEXT: addq $4, %rdi 1824; SSE42-NEXT: testl $268435456, %eax ## imm = 0x10000000 1825; SSE42-NEXT: je LBB6_58 1826; SSE42-NEXT: LBB6_57: ## %cond.store82 1827; SSE42-NEXT: movss %xmm7, (%rdi) 1828; SSE42-NEXT: addq $4, %rdi 1829; SSE42-NEXT: testl $536870912, %eax ## imm = 0x20000000 1830; SSE42-NEXT: je LBB6_60 1831; SSE42-NEXT: LBB6_59: ## %cond.store85 1832; SSE42-NEXT: extractps $1, %xmm7, (%rdi) 1833; SSE42-NEXT: addq $4, %rdi 1834; SSE42-NEXT: testl $1073741824, %eax ## imm = 0x40000000 1835; SSE42-NEXT: je LBB6_62 1836; SSE42-NEXT: LBB6_61: ## %cond.store88 1837; SSE42-NEXT: extractps $2, %xmm7, (%rdi) 1838; SSE42-NEXT: addq $4, %rdi 1839; SSE42-NEXT: testl $-2147483648, %eax ## imm = 0x80000000 1840; SSE42-NEXT: je LBB6_64 1841; SSE42-NEXT: LBB6_63: ## %cond.store91 1842; SSE42-NEXT: extractps $3, %xmm7, (%rdi) 1843; SSE42-NEXT: retq 1844; 1845; AVX1-LABEL: compressstore_v32f32_v32i32: 1846; AVX1: ## %bb.0: 1847; AVX1-NEXT: vextractf128 $1, %ymm5, %xmm8 1848; AVX1-NEXT: vpxor %xmm9, %xmm9, %xmm9 1849; AVX1-NEXT: vpcmpeqd %xmm9, %xmm8, %xmm8 1850; AVX1-NEXT: vpcmpeqd %xmm5, %xmm9, %xmm5 1851; AVX1-NEXT: vpackssdw %xmm8, %xmm5, %xmm5 1852; AVX1-NEXT: vextractf128 $1, %ymm4, %xmm8 1853; AVX1-NEXT: vpcmpeqd %xmm9, %xmm8, %xmm8 1854; AVX1-NEXT: vpcmpeqd %xmm4, %xmm9, %xmm4 1855; AVX1-NEXT: vpackssdw %xmm8, %xmm4, %xmm4 1856; AVX1-NEXT: vpacksswb %xmm5, %xmm4, %xmm4 1857; AVX1-NEXT: vpmovmskb %xmm4, %ecx 1858; AVX1-NEXT: vextractf128 $1, %ymm7, %xmm4 1859; AVX1-NEXT: vpcmpeqd %xmm4, %xmm9, %xmm4 1860; AVX1-NEXT: vpcmpeqd %xmm7, %xmm9, %xmm5 1861; AVX1-NEXT: vpackssdw %xmm4, %xmm5, %xmm4 1862; AVX1-NEXT: vextractf128 $1, %ymm6, %xmm5 1863; AVX1-NEXT: vpcmpeqd %xmm5, %xmm9, %xmm5 1864; AVX1-NEXT: vpcmpeqd %xmm6, %xmm9, %xmm6 1865; AVX1-NEXT: vpackssdw %xmm5, %xmm6, %xmm5 1866; AVX1-NEXT: vpacksswb %xmm4, %xmm5, %xmm4 1867; AVX1-NEXT: vpmovmskb %xmm4, %eax 1868; AVX1-NEXT: shll $16, %eax 1869; AVX1-NEXT: orl %ecx, %eax 1870; AVX1-NEXT: testb $1, %al 1871; AVX1-NEXT: jne LBB6_1 1872; AVX1-NEXT: ## %bb.2: ## %else 1873; AVX1-NEXT: testb $2, %al 1874; AVX1-NEXT: jne LBB6_3 1875; AVX1-NEXT: LBB6_4: ## %else2 1876; AVX1-NEXT: testb $4, %al 1877; AVX1-NEXT: jne LBB6_5 1878; AVX1-NEXT: LBB6_6: ## %else5 1879; AVX1-NEXT: testb $8, %al 1880; AVX1-NEXT: je LBB6_8 1881; AVX1-NEXT: LBB6_7: ## %cond.store7 1882; AVX1-NEXT: vextractps $3, %xmm0, (%rdi) 1883; AVX1-NEXT: addq $4, %rdi 1884; AVX1-NEXT: LBB6_8: ## %else8 1885; AVX1-NEXT: testb $16, %al 1886; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1887; AVX1-NEXT: jne LBB6_9 1888; AVX1-NEXT: ## %bb.10: ## %else11 1889; AVX1-NEXT: testb $32, %al 1890; AVX1-NEXT: jne LBB6_11 1891; AVX1-NEXT: LBB6_12: ## %else14 1892; AVX1-NEXT: testb $64, %al 1893; AVX1-NEXT: jne LBB6_13 1894; AVX1-NEXT: LBB6_14: ## %else17 1895; AVX1-NEXT: testb %al, %al 1896; AVX1-NEXT: js LBB6_15 1897; AVX1-NEXT: LBB6_16: ## %else20 1898; AVX1-NEXT: testl $256, %eax ## imm = 0x100 1899; AVX1-NEXT: jne LBB6_17 1900; AVX1-NEXT: LBB6_18: ## %else23 1901; AVX1-NEXT: testl $512, %eax ## imm = 0x200 1902; AVX1-NEXT: jne LBB6_19 1903; AVX1-NEXT: LBB6_20: ## %else26 1904; AVX1-NEXT: testl $1024, %eax ## imm = 0x400 1905; AVX1-NEXT: jne LBB6_21 1906; AVX1-NEXT: LBB6_22: ## %else29 1907; AVX1-NEXT: testl $2048, %eax ## imm = 0x800 1908; AVX1-NEXT: je LBB6_24 1909; AVX1-NEXT: LBB6_23: ## %cond.store31 1910; AVX1-NEXT: vextractps $3, %xmm1, (%rdi) 1911; AVX1-NEXT: addq $4, %rdi 1912; AVX1-NEXT: LBB6_24: ## %else32 1913; AVX1-NEXT: testl $4096, %eax ## imm = 0x1000 1914; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0 1915; AVX1-NEXT: jne LBB6_25 1916; AVX1-NEXT: ## %bb.26: ## %else35 1917; AVX1-NEXT: testl $8192, %eax ## imm = 0x2000 1918; AVX1-NEXT: jne LBB6_27 1919; AVX1-NEXT: LBB6_28: ## %else38 1920; AVX1-NEXT: testl $16384, %eax ## imm = 0x4000 1921; AVX1-NEXT: jne LBB6_29 1922; AVX1-NEXT: LBB6_30: ## %else41 1923; AVX1-NEXT: testw %ax, %ax 1924; AVX1-NEXT: js LBB6_31 1925; AVX1-NEXT: LBB6_32: ## %else44 1926; AVX1-NEXT: testl $65536, %eax ## imm = 0x10000 1927; AVX1-NEXT: jne LBB6_33 1928; AVX1-NEXT: LBB6_34: ## %else47 1929; AVX1-NEXT: testl $131072, %eax ## imm = 0x20000 1930; AVX1-NEXT: jne LBB6_35 1931; AVX1-NEXT: LBB6_36: ## %else50 1932; AVX1-NEXT: testl $262144, %eax ## imm = 0x40000 1933; AVX1-NEXT: jne LBB6_37 1934; AVX1-NEXT: LBB6_38: ## %else53 1935; AVX1-NEXT: testl $524288, %eax ## imm = 0x80000 1936; AVX1-NEXT: je LBB6_40 1937; AVX1-NEXT: LBB6_39: ## %cond.store55 1938; AVX1-NEXT: vextractps $3, %xmm2, (%rdi) 1939; AVX1-NEXT: addq $4, %rdi 1940; AVX1-NEXT: LBB6_40: ## %else56 1941; AVX1-NEXT: testl $1048576, %eax ## imm = 0x100000 1942; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm0 1943; AVX1-NEXT: jne LBB6_41 1944; AVX1-NEXT: ## %bb.42: ## %else59 1945; AVX1-NEXT: testl $2097152, %eax ## imm = 0x200000 1946; AVX1-NEXT: jne LBB6_43 1947; AVX1-NEXT: LBB6_44: ## %else62 1948; AVX1-NEXT: testl $4194304, %eax ## imm = 0x400000 1949; AVX1-NEXT: jne LBB6_45 1950; AVX1-NEXT: LBB6_46: ## %else65 1951; AVX1-NEXT: testl $8388608, %eax ## imm = 0x800000 1952; AVX1-NEXT: jne LBB6_47 1953; AVX1-NEXT: LBB6_48: ## %else68 1954; AVX1-NEXT: testl $16777216, %eax ## imm = 0x1000000 1955; AVX1-NEXT: jne LBB6_49 1956; AVX1-NEXT: LBB6_50: ## %else71 1957; AVX1-NEXT: testl $33554432, %eax ## imm = 0x2000000 1958; AVX1-NEXT: jne LBB6_51 1959; AVX1-NEXT: LBB6_52: ## %else74 1960; AVX1-NEXT: testl $67108864, %eax ## imm = 0x4000000 1961; AVX1-NEXT: jne LBB6_53 1962; AVX1-NEXT: LBB6_54: ## %else77 1963; AVX1-NEXT: testl $134217728, %eax ## imm = 0x8000000 1964; AVX1-NEXT: je LBB6_56 1965; AVX1-NEXT: LBB6_55: ## %cond.store79 1966; AVX1-NEXT: vextractps $3, %xmm3, (%rdi) 1967; AVX1-NEXT: addq $4, %rdi 1968; AVX1-NEXT: LBB6_56: ## %else80 1969; AVX1-NEXT: testl $268435456, %eax ## imm = 0x10000000 1970; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm0 1971; AVX1-NEXT: jne LBB6_57 1972; AVX1-NEXT: ## %bb.58: ## %else83 1973; AVX1-NEXT: testl $536870912, %eax ## imm = 0x20000000 1974; AVX1-NEXT: jne LBB6_59 1975; AVX1-NEXT: LBB6_60: ## %else86 1976; AVX1-NEXT: testl $1073741824, %eax ## imm = 0x40000000 1977; AVX1-NEXT: jne LBB6_61 1978; AVX1-NEXT: LBB6_62: ## %else89 1979; AVX1-NEXT: testl $-2147483648, %eax ## imm = 0x80000000 1980; AVX1-NEXT: jne LBB6_63 1981; AVX1-NEXT: LBB6_64: ## %else92 1982; AVX1-NEXT: vzeroupper 1983; AVX1-NEXT: retq 1984; AVX1-NEXT: LBB6_1: ## %cond.store 1985; AVX1-NEXT: vmovss %xmm0, (%rdi) 1986; AVX1-NEXT: addq $4, %rdi 1987; AVX1-NEXT: testb $2, %al 1988; AVX1-NEXT: je LBB6_4 1989; AVX1-NEXT: LBB6_3: ## %cond.store1 1990; AVX1-NEXT: vextractps $1, %xmm0, (%rdi) 1991; AVX1-NEXT: addq $4, %rdi 1992; AVX1-NEXT: testb $4, %al 1993; AVX1-NEXT: je LBB6_6 1994; AVX1-NEXT: LBB6_5: ## %cond.store4 1995; AVX1-NEXT: vextractps $2, %xmm0, (%rdi) 1996; AVX1-NEXT: addq $4, %rdi 1997; AVX1-NEXT: testb $8, %al 1998; AVX1-NEXT: jne LBB6_7 1999; AVX1-NEXT: jmp LBB6_8 2000; AVX1-NEXT: LBB6_9: ## %cond.store10 2001; AVX1-NEXT: vmovss %xmm0, (%rdi) 2002; AVX1-NEXT: addq $4, %rdi 2003; AVX1-NEXT: testb $32, %al 2004; AVX1-NEXT: je LBB6_12 2005; AVX1-NEXT: LBB6_11: ## %cond.store13 2006; AVX1-NEXT: vextractps $1, %xmm0, (%rdi) 2007; AVX1-NEXT: addq $4, %rdi 2008; AVX1-NEXT: testb $64, %al 2009; AVX1-NEXT: je LBB6_14 2010; AVX1-NEXT: LBB6_13: ## %cond.store16 2011; AVX1-NEXT: vextractps $2, %xmm0, (%rdi) 2012; AVX1-NEXT: addq $4, %rdi 2013; AVX1-NEXT: testb %al, %al 2014; AVX1-NEXT: jns LBB6_16 2015; AVX1-NEXT: LBB6_15: ## %cond.store19 2016; AVX1-NEXT: vextractps $3, %xmm0, (%rdi) 2017; AVX1-NEXT: addq $4, %rdi 2018; AVX1-NEXT: testl $256, %eax ## imm = 0x100 2019; AVX1-NEXT: je LBB6_18 2020; AVX1-NEXT: LBB6_17: ## %cond.store22 2021; AVX1-NEXT: vmovss %xmm1, (%rdi) 2022; AVX1-NEXT: addq $4, %rdi 2023; AVX1-NEXT: testl $512, %eax ## imm = 0x200 2024; AVX1-NEXT: je LBB6_20 2025; AVX1-NEXT: LBB6_19: ## %cond.store25 2026; AVX1-NEXT: vextractps $1, %xmm1, (%rdi) 2027; AVX1-NEXT: addq $4, %rdi 2028; AVX1-NEXT: testl $1024, %eax ## imm = 0x400 2029; AVX1-NEXT: je LBB6_22 2030; AVX1-NEXT: LBB6_21: ## %cond.store28 2031; AVX1-NEXT: vextractps $2, %xmm1, (%rdi) 2032; AVX1-NEXT: addq $4, %rdi 2033; AVX1-NEXT: testl $2048, %eax ## imm = 0x800 2034; AVX1-NEXT: jne LBB6_23 2035; AVX1-NEXT: jmp LBB6_24 2036; AVX1-NEXT: LBB6_25: ## %cond.store34 2037; AVX1-NEXT: vmovss %xmm0, (%rdi) 2038; AVX1-NEXT: addq $4, %rdi 2039; AVX1-NEXT: testl $8192, %eax ## imm = 0x2000 2040; AVX1-NEXT: je LBB6_28 2041; AVX1-NEXT: LBB6_27: ## %cond.store37 2042; AVX1-NEXT: vextractps $1, %xmm0, (%rdi) 2043; AVX1-NEXT: addq $4, %rdi 2044; AVX1-NEXT: testl $16384, %eax ## imm = 0x4000 2045; AVX1-NEXT: je LBB6_30 2046; AVX1-NEXT: LBB6_29: ## %cond.store40 2047; AVX1-NEXT: vextractps $2, %xmm0, (%rdi) 2048; AVX1-NEXT: addq $4, %rdi 2049; AVX1-NEXT: testw %ax, %ax 2050; AVX1-NEXT: jns LBB6_32 2051; AVX1-NEXT: LBB6_31: ## %cond.store43 2052; AVX1-NEXT: vextractps $3, %xmm0, (%rdi) 2053; AVX1-NEXT: addq $4, %rdi 2054; AVX1-NEXT: testl $65536, %eax ## imm = 0x10000 2055; AVX1-NEXT: je LBB6_34 2056; AVX1-NEXT: LBB6_33: ## %cond.store46 2057; AVX1-NEXT: vmovss %xmm2, (%rdi) 2058; AVX1-NEXT: addq $4, %rdi 2059; AVX1-NEXT: testl $131072, %eax ## imm = 0x20000 2060; AVX1-NEXT: je LBB6_36 2061; AVX1-NEXT: LBB6_35: ## %cond.store49 2062; AVX1-NEXT: vextractps $1, %xmm2, (%rdi) 2063; AVX1-NEXT: addq $4, %rdi 2064; AVX1-NEXT: testl $262144, %eax ## imm = 0x40000 2065; AVX1-NEXT: je LBB6_38 2066; AVX1-NEXT: LBB6_37: ## %cond.store52 2067; AVX1-NEXT: vextractps $2, %xmm2, (%rdi) 2068; AVX1-NEXT: addq $4, %rdi 2069; AVX1-NEXT: testl $524288, %eax ## imm = 0x80000 2070; AVX1-NEXT: jne LBB6_39 2071; AVX1-NEXT: jmp LBB6_40 2072; AVX1-NEXT: LBB6_41: ## %cond.store58 2073; AVX1-NEXT: vmovss %xmm0, (%rdi) 2074; AVX1-NEXT: addq $4, %rdi 2075; AVX1-NEXT: testl $2097152, %eax ## imm = 0x200000 2076; AVX1-NEXT: je LBB6_44 2077; AVX1-NEXT: LBB6_43: ## %cond.store61 2078; AVX1-NEXT: vextractps $1, %xmm0, (%rdi) 2079; AVX1-NEXT: addq $4, %rdi 2080; AVX1-NEXT: testl $4194304, %eax ## imm = 0x400000 2081; AVX1-NEXT: je LBB6_46 2082; AVX1-NEXT: LBB6_45: ## %cond.store64 2083; AVX1-NEXT: vextractps $2, %xmm0, (%rdi) 2084; AVX1-NEXT: addq $4, %rdi 2085; AVX1-NEXT: testl $8388608, %eax ## imm = 0x800000 2086; AVX1-NEXT: je LBB6_48 2087; AVX1-NEXT: LBB6_47: ## %cond.store67 2088; AVX1-NEXT: vextractps $3, %xmm0, (%rdi) 2089; AVX1-NEXT: addq $4, %rdi 2090; AVX1-NEXT: testl $16777216, %eax ## imm = 0x1000000 2091; AVX1-NEXT: je LBB6_50 2092; AVX1-NEXT: LBB6_49: ## %cond.store70 2093; AVX1-NEXT: vmovss %xmm3, (%rdi) 2094; AVX1-NEXT: addq $4, %rdi 2095; AVX1-NEXT: testl $33554432, %eax ## imm = 0x2000000 2096; AVX1-NEXT: je LBB6_52 2097; AVX1-NEXT: LBB6_51: ## %cond.store73 2098; AVX1-NEXT: vextractps $1, %xmm3, (%rdi) 2099; AVX1-NEXT: addq $4, %rdi 2100; AVX1-NEXT: testl $67108864, %eax ## imm = 0x4000000 2101; AVX1-NEXT: je LBB6_54 2102; AVX1-NEXT: LBB6_53: ## %cond.store76 2103; AVX1-NEXT: vextractps $2, %xmm3, (%rdi) 2104; AVX1-NEXT: addq $4, %rdi 2105; AVX1-NEXT: testl $134217728, %eax ## imm = 0x8000000 2106; AVX1-NEXT: jne LBB6_55 2107; AVX1-NEXT: jmp LBB6_56 2108; AVX1-NEXT: LBB6_57: ## %cond.store82 2109; AVX1-NEXT: vmovss %xmm0, (%rdi) 2110; AVX1-NEXT: addq $4, %rdi 2111; AVX1-NEXT: testl $536870912, %eax ## imm = 0x20000000 2112; AVX1-NEXT: je LBB6_60 2113; AVX1-NEXT: LBB6_59: ## %cond.store85 2114; AVX1-NEXT: vextractps $1, %xmm0, (%rdi) 2115; AVX1-NEXT: addq $4, %rdi 2116; AVX1-NEXT: testl $1073741824, %eax ## imm = 0x40000000 2117; AVX1-NEXT: je LBB6_62 2118; AVX1-NEXT: LBB6_61: ## %cond.store88 2119; AVX1-NEXT: vextractps $2, %xmm0, (%rdi) 2120; AVX1-NEXT: addq $4, %rdi 2121; AVX1-NEXT: testl $-2147483648, %eax ## imm = 0x80000000 2122; AVX1-NEXT: je LBB6_64 2123; AVX1-NEXT: LBB6_63: ## %cond.store91 2124; AVX1-NEXT: vextractps $3, %xmm0, (%rdi) 2125; AVX1-NEXT: vzeroupper 2126; AVX1-NEXT: retq 2127; 2128; AVX2-LABEL: compressstore_v32f32_v32i32: 2129; AVX2: ## %bb.0: 2130; AVX2-NEXT: vpxor %xmm8, %xmm8, %xmm8 2131; AVX2-NEXT: vpcmpeqd %ymm7, %ymm8, %ymm7 2132; AVX2-NEXT: vpcmpeqd %ymm6, %ymm8, %ymm6 2133; AVX2-NEXT: vpackssdw %ymm7, %ymm6, %ymm6 2134; AVX2-NEXT: vpermq {{.*#+}} ymm6 = ymm6[0,2,1,3] 2135; AVX2-NEXT: vpcmpeqd %ymm5, %ymm8, %ymm5 2136; AVX2-NEXT: vpcmpeqd %ymm4, %ymm8, %ymm4 2137; AVX2-NEXT: vpackssdw %ymm5, %ymm4, %ymm4 2138; AVX2-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3] 2139; AVX2-NEXT: vpacksswb %ymm6, %ymm4, %ymm4 2140; AVX2-NEXT: vpermq {{.*#+}} ymm4 = ymm4[0,2,1,3] 2141; AVX2-NEXT: vpmovmskb %ymm4, %eax 2142; AVX2-NEXT: testb $1, %al 2143; AVX2-NEXT: jne LBB6_1 2144; AVX2-NEXT: ## %bb.2: ## %else 2145; AVX2-NEXT: testb $2, %al 2146; AVX2-NEXT: jne LBB6_3 2147; AVX2-NEXT: LBB6_4: ## %else2 2148; AVX2-NEXT: testb $4, %al 2149; AVX2-NEXT: jne LBB6_5 2150; AVX2-NEXT: LBB6_6: ## %else5 2151; AVX2-NEXT: testb $8, %al 2152; AVX2-NEXT: je LBB6_8 2153; AVX2-NEXT: LBB6_7: ## %cond.store7 2154; AVX2-NEXT: vextractps $3, %xmm0, (%rdi) 2155; AVX2-NEXT: addq $4, %rdi 2156; AVX2-NEXT: LBB6_8: ## %else8 2157; AVX2-NEXT: testb $16, %al 2158; AVX2-NEXT: vextractf128 $1, %ymm0, %xmm0 2159; AVX2-NEXT: jne LBB6_9 2160; AVX2-NEXT: ## %bb.10: ## %else11 2161; AVX2-NEXT: testb $32, %al 2162; AVX2-NEXT: jne LBB6_11 2163; AVX2-NEXT: LBB6_12: ## %else14 2164; AVX2-NEXT: testb $64, %al 2165; AVX2-NEXT: jne LBB6_13 2166; AVX2-NEXT: LBB6_14: ## %else17 2167; AVX2-NEXT: testb %al, %al 2168; AVX2-NEXT: js LBB6_15 2169; AVX2-NEXT: LBB6_16: ## %else20 2170; AVX2-NEXT: testl $256, %eax ## imm = 0x100 2171; AVX2-NEXT: jne LBB6_17 2172; AVX2-NEXT: LBB6_18: ## %else23 2173; AVX2-NEXT: testl $512, %eax ## imm = 0x200 2174; AVX2-NEXT: jne LBB6_19 2175; AVX2-NEXT: LBB6_20: ## %else26 2176; AVX2-NEXT: testl $1024, %eax ## imm = 0x400 2177; AVX2-NEXT: jne LBB6_21 2178; AVX2-NEXT: LBB6_22: ## %else29 2179; AVX2-NEXT: testl $2048, %eax ## imm = 0x800 2180; AVX2-NEXT: je LBB6_24 2181; AVX2-NEXT: LBB6_23: ## %cond.store31 2182; AVX2-NEXT: vextractps $3, %xmm1, (%rdi) 2183; AVX2-NEXT: addq $4, %rdi 2184; AVX2-NEXT: LBB6_24: ## %else32 2185; AVX2-NEXT: testl $4096, %eax ## imm = 0x1000 2186; AVX2-NEXT: vextractf128 $1, %ymm1, %xmm0 2187; AVX2-NEXT: jne LBB6_25 2188; AVX2-NEXT: ## %bb.26: ## %else35 2189; AVX2-NEXT: testl $8192, %eax ## imm = 0x2000 2190; AVX2-NEXT: jne LBB6_27 2191; AVX2-NEXT: LBB6_28: ## %else38 2192; AVX2-NEXT: testl $16384, %eax ## imm = 0x4000 2193; AVX2-NEXT: jne LBB6_29 2194; AVX2-NEXT: LBB6_30: ## %else41 2195; AVX2-NEXT: testw %ax, %ax 2196; AVX2-NEXT: js LBB6_31 2197; AVX2-NEXT: LBB6_32: ## %else44 2198; AVX2-NEXT: testl $65536, %eax ## imm = 0x10000 2199; AVX2-NEXT: jne LBB6_33 2200; AVX2-NEXT: LBB6_34: ## %else47 2201; AVX2-NEXT: testl $131072, %eax ## imm = 0x20000 2202; AVX2-NEXT: jne LBB6_35 2203; AVX2-NEXT: LBB6_36: ## %else50 2204; AVX2-NEXT: testl $262144, %eax ## imm = 0x40000 2205; AVX2-NEXT: jne LBB6_37 2206; AVX2-NEXT: LBB6_38: ## %else53 2207; AVX2-NEXT: testl $524288, %eax ## imm = 0x80000 2208; AVX2-NEXT: je LBB6_40 2209; AVX2-NEXT: LBB6_39: ## %cond.store55 2210; AVX2-NEXT: vextractps $3, %xmm2, (%rdi) 2211; AVX2-NEXT: addq $4, %rdi 2212; AVX2-NEXT: LBB6_40: ## %else56 2213; AVX2-NEXT: testl $1048576, %eax ## imm = 0x100000 2214; AVX2-NEXT: vextractf128 $1, %ymm2, %xmm0 2215; AVX2-NEXT: jne LBB6_41 2216; AVX2-NEXT: ## %bb.42: ## %else59 2217; AVX2-NEXT: testl $2097152, %eax ## imm = 0x200000 2218; AVX2-NEXT: jne LBB6_43 2219; AVX2-NEXT: LBB6_44: ## %else62 2220; AVX2-NEXT: testl $4194304, %eax ## imm = 0x400000 2221; AVX2-NEXT: jne LBB6_45 2222; AVX2-NEXT: LBB6_46: ## %else65 2223; AVX2-NEXT: testl $8388608, %eax ## imm = 0x800000 2224; AVX2-NEXT: jne LBB6_47 2225; AVX2-NEXT: LBB6_48: ## %else68 2226; AVX2-NEXT: testl $16777216, %eax ## imm = 0x1000000 2227; AVX2-NEXT: jne LBB6_49 2228; AVX2-NEXT: LBB6_50: ## %else71 2229; AVX2-NEXT: testl $33554432, %eax ## imm = 0x2000000 2230; AVX2-NEXT: jne LBB6_51 2231; AVX2-NEXT: LBB6_52: ## %else74 2232; AVX2-NEXT: testl $67108864, %eax ## imm = 0x4000000 2233; AVX2-NEXT: jne LBB6_53 2234; AVX2-NEXT: LBB6_54: ## %else77 2235; AVX2-NEXT: testl $134217728, %eax ## imm = 0x8000000 2236; AVX2-NEXT: je LBB6_56 2237; AVX2-NEXT: LBB6_55: ## %cond.store79 2238; AVX2-NEXT: vextractps $3, %xmm3, (%rdi) 2239; AVX2-NEXT: addq $4, %rdi 2240; AVX2-NEXT: LBB6_56: ## %else80 2241; AVX2-NEXT: testl $268435456, %eax ## imm = 0x10000000 2242; AVX2-NEXT: vextractf128 $1, %ymm3, %xmm0 2243; AVX2-NEXT: jne LBB6_57 2244; AVX2-NEXT: ## %bb.58: ## %else83 2245; AVX2-NEXT: testl $536870912, %eax ## imm = 0x20000000 2246; AVX2-NEXT: jne LBB6_59 2247; AVX2-NEXT: LBB6_60: ## %else86 2248; AVX2-NEXT: testl $1073741824, %eax ## imm = 0x40000000 2249; AVX2-NEXT: jne LBB6_61 2250; AVX2-NEXT: LBB6_62: ## %else89 2251; AVX2-NEXT: testl $-2147483648, %eax ## imm = 0x80000000 2252; AVX2-NEXT: jne LBB6_63 2253; AVX2-NEXT: LBB6_64: ## %else92 2254; AVX2-NEXT: vzeroupper 2255; AVX2-NEXT: retq 2256; AVX2-NEXT: LBB6_1: ## %cond.store 2257; AVX2-NEXT: vmovss %xmm0, (%rdi) 2258; AVX2-NEXT: addq $4, %rdi 2259; AVX2-NEXT: testb $2, %al 2260; AVX2-NEXT: je LBB6_4 2261; AVX2-NEXT: LBB6_3: ## %cond.store1 2262; AVX2-NEXT: vextractps $1, %xmm0, (%rdi) 2263; AVX2-NEXT: addq $4, %rdi 2264; AVX2-NEXT: testb $4, %al 2265; AVX2-NEXT: je LBB6_6 2266; AVX2-NEXT: LBB6_5: ## %cond.store4 2267; AVX2-NEXT: vextractps $2, %xmm0, (%rdi) 2268; AVX2-NEXT: addq $4, %rdi 2269; AVX2-NEXT: testb $8, %al 2270; AVX2-NEXT: jne LBB6_7 2271; AVX2-NEXT: jmp LBB6_8 2272; AVX2-NEXT: LBB6_9: ## %cond.store10 2273; AVX2-NEXT: vmovss %xmm0, (%rdi) 2274; AVX2-NEXT: addq $4, %rdi 2275; AVX2-NEXT: testb $32, %al 2276; AVX2-NEXT: je LBB6_12 2277; AVX2-NEXT: LBB6_11: ## %cond.store13 2278; AVX2-NEXT: vextractps $1, %xmm0, (%rdi) 2279; AVX2-NEXT: addq $4, %rdi 2280; AVX2-NEXT: testb $64, %al 2281; AVX2-NEXT: je LBB6_14 2282; AVX2-NEXT: LBB6_13: ## %cond.store16 2283; AVX2-NEXT: vextractps $2, %xmm0, (%rdi) 2284; AVX2-NEXT: addq $4, %rdi 2285; AVX2-NEXT: testb %al, %al 2286; AVX2-NEXT: jns LBB6_16 2287; AVX2-NEXT: LBB6_15: ## %cond.store19 2288; AVX2-NEXT: vextractps $3, %xmm0, (%rdi) 2289; AVX2-NEXT: addq $4, %rdi 2290; AVX2-NEXT: testl $256, %eax ## imm = 0x100 2291; AVX2-NEXT: je LBB6_18 2292; AVX2-NEXT: LBB6_17: ## %cond.store22 2293; AVX2-NEXT: vmovss %xmm1, (%rdi) 2294; AVX2-NEXT: addq $4, %rdi 2295; AVX2-NEXT: testl $512, %eax ## imm = 0x200 2296; AVX2-NEXT: je LBB6_20 2297; AVX2-NEXT: LBB6_19: ## %cond.store25 2298; AVX2-NEXT: vextractps $1, %xmm1, (%rdi) 2299; AVX2-NEXT: addq $4, %rdi 2300; AVX2-NEXT: testl $1024, %eax ## imm = 0x400 2301; AVX2-NEXT: je LBB6_22 2302; AVX2-NEXT: LBB6_21: ## %cond.store28 2303; AVX2-NEXT: vextractps $2, %xmm1, (%rdi) 2304; AVX2-NEXT: addq $4, %rdi 2305; AVX2-NEXT: testl $2048, %eax ## imm = 0x800 2306; AVX2-NEXT: jne LBB6_23 2307; AVX2-NEXT: jmp LBB6_24 2308; AVX2-NEXT: LBB6_25: ## %cond.store34 2309; AVX2-NEXT: vmovss %xmm0, (%rdi) 2310; AVX2-NEXT: addq $4, %rdi 2311; AVX2-NEXT: testl $8192, %eax ## imm = 0x2000 2312; AVX2-NEXT: je LBB6_28 2313; AVX2-NEXT: LBB6_27: ## %cond.store37 2314; AVX2-NEXT: vextractps $1, %xmm0, (%rdi) 2315; AVX2-NEXT: addq $4, %rdi 2316; AVX2-NEXT: testl $16384, %eax ## imm = 0x4000 2317; AVX2-NEXT: je LBB6_30 2318; AVX2-NEXT: LBB6_29: ## %cond.store40 2319; AVX2-NEXT: vextractps $2, %xmm0, (%rdi) 2320; AVX2-NEXT: addq $4, %rdi 2321; AVX2-NEXT: testw %ax, %ax 2322; AVX2-NEXT: jns LBB6_32 2323; AVX2-NEXT: LBB6_31: ## %cond.store43 2324; AVX2-NEXT: vextractps $3, %xmm0, (%rdi) 2325; AVX2-NEXT: addq $4, %rdi 2326; AVX2-NEXT: testl $65536, %eax ## imm = 0x10000 2327; AVX2-NEXT: je LBB6_34 2328; AVX2-NEXT: LBB6_33: ## %cond.store46 2329; AVX2-NEXT: vmovss %xmm2, (%rdi) 2330; AVX2-NEXT: addq $4, %rdi 2331; AVX2-NEXT: testl $131072, %eax ## imm = 0x20000 2332; AVX2-NEXT: je LBB6_36 2333; AVX2-NEXT: LBB6_35: ## %cond.store49 2334; AVX2-NEXT: vextractps $1, %xmm2, (%rdi) 2335; AVX2-NEXT: addq $4, %rdi 2336; AVX2-NEXT: testl $262144, %eax ## imm = 0x40000 2337; AVX2-NEXT: je LBB6_38 2338; AVX2-NEXT: LBB6_37: ## %cond.store52 2339; AVX2-NEXT: vextractps $2, %xmm2, (%rdi) 2340; AVX2-NEXT: addq $4, %rdi 2341; AVX2-NEXT: testl $524288, %eax ## imm = 0x80000 2342; AVX2-NEXT: jne LBB6_39 2343; AVX2-NEXT: jmp LBB6_40 2344; AVX2-NEXT: LBB6_41: ## %cond.store58 2345; AVX2-NEXT: vmovss %xmm0, (%rdi) 2346; AVX2-NEXT: addq $4, %rdi 2347; AVX2-NEXT: testl $2097152, %eax ## imm = 0x200000 2348; AVX2-NEXT: je LBB6_44 2349; AVX2-NEXT: LBB6_43: ## %cond.store61 2350; AVX2-NEXT: vextractps $1, %xmm0, (%rdi) 2351; AVX2-NEXT: addq $4, %rdi 2352; AVX2-NEXT: testl $4194304, %eax ## imm = 0x400000 2353; AVX2-NEXT: je LBB6_46 2354; AVX2-NEXT: LBB6_45: ## %cond.store64 2355; AVX2-NEXT: vextractps $2, %xmm0, (%rdi) 2356; AVX2-NEXT: addq $4, %rdi 2357; AVX2-NEXT: testl $8388608, %eax ## imm = 0x800000 2358; AVX2-NEXT: je LBB6_48 2359; AVX2-NEXT: LBB6_47: ## %cond.store67 2360; AVX2-NEXT: vextractps $3, %xmm0, (%rdi) 2361; AVX2-NEXT: addq $4, %rdi 2362; AVX2-NEXT: testl $16777216, %eax ## imm = 0x1000000 2363; AVX2-NEXT: je LBB6_50 2364; AVX2-NEXT: LBB6_49: ## %cond.store70 2365; AVX2-NEXT: vmovss %xmm3, (%rdi) 2366; AVX2-NEXT: addq $4, %rdi 2367; AVX2-NEXT: testl $33554432, %eax ## imm = 0x2000000 2368; AVX2-NEXT: je LBB6_52 2369; AVX2-NEXT: LBB6_51: ## %cond.store73 2370; AVX2-NEXT: vextractps $1, %xmm3, (%rdi) 2371; AVX2-NEXT: addq $4, %rdi 2372; AVX2-NEXT: testl $67108864, %eax ## imm = 0x4000000 2373; AVX2-NEXT: je LBB6_54 2374; AVX2-NEXT: LBB6_53: ## %cond.store76 2375; AVX2-NEXT: vextractps $2, %xmm3, (%rdi) 2376; AVX2-NEXT: addq $4, %rdi 2377; AVX2-NEXT: testl $134217728, %eax ## imm = 0x8000000 2378; AVX2-NEXT: jne LBB6_55 2379; AVX2-NEXT: jmp LBB6_56 2380; AVX2-NEXT: LBB6_57: ## %cond.store82 2381; AVX2-NEXT: vmovss %xmm0, (%rdi) 2382; AVX2-NEXT: addq $4, %rdi 2383; AVX2-NEXT: testl $536870912, %eax ## imm = 0x20000000 2384; AVX2-NEXT: je LBB6_60 2385; AVX2-NEXT: LBB6_59: ## %cond.store85 2386; AVX2-NEXT: vextractps $1, %xmm0, (%rdi) 2387; AVX2-NEXT: addq $4, %rdi 2388; AVX2-NEXT: testl $1073741824, %eax ## imm = 0x40000000 2389; AVX2-NEXT: je LBB6_62 2390; AVX2-NEXT: LBB6_61: ## %cond.store88 2391; AVX2-NEXT: vextractps $2, %xmm0, (%rdi) 2392; AVX2-NEXT: addq $4, %rdi 2393; AVX2-NEXT: testl $-2147483648, %eax ## imm = 0x80000000 2394; AVX2-NEXT: je LBB6_64 2395; AVX2-NEXT: LBB6_63: ## %cond.store91 2396; AVX2-NEXT: vextractps $3, %xmm0, (%rdi) 2397; AVX2-NEXT: vzeroupper 2398; AVX2-NEXT: retq 2399; 2400; AVX512-LABEL: compressstore_v32f32_v32i32: 2401; AVX512: ## %bb.0: 2402; AVX512-NEXT: vptestnmd %zmm3, %zmm3, %k1 2403; AVX512-NEXT: vptestnmd %zmm2, %zmm2, %k2 2404; AVX512-NEXT: kmovw %k2, %eax 2405; AVX512-NEXT: movl %eax, %ecx 2406; AVX512-NEXT: shrl %ecx 2407; AVX512-NEXT: andl $21845, %ecx ## imm = 0x5555 2408; AVX512-NEXT: subl %ecx, %eax 2409; AVX512-NEXT: movl %eax, %ecx 2410; AVX512-NEXT: andl $858993459, %ecx ## imm = 0x33333333 2411; AVX512-NEXT: shrl $2, %eax 2412; AVX512-NEXT: andl $858993459, %eax ## imm = 0x33333333 2413; AVX512-NEXT: addl %ecx, %eax 2414; AVX512-NEXT: movl %eax, %ecx 2415; AVX512-NEXT: shrl $4, %ecx 2416; AVX512-NEXT: addl %eax, %ecx 2417; AVX512-NEXT: andl $252645135, %ecx ## imm = 0xF0F0F0F 2418; AVX512-NEXT: imull $16843009, %ecx, %eax ## imm = 0x1010101 2419; AVX512-NEXT: shrl $24, %eax 2420; AVX512-NEXT: vcompressps %zmm1, (%rdi,%rax,4) {%k1} 2421; AVX512-NEXT: vcompressps %zmm0, (%rdi) {%k2} 2422; AVX512-NEXT: vzeroupper 2423; AVX512-NEXT: retq 2424 %mask = icmp eq <32 x i32> %trigger, zeroinitializer 2425 call void @llvm.masked.compressstore.v32f32(<32 x float> %V, ptr %base, <32 x i1> %mask) 2426 ret void 2427} 2428 2429; 2430; vXi64 2431; 2432 2433define void @compressstore_v2i64_v2i1(ptr %base, <2 x i64> %V, <2 x i1> %mask) { 2434; SSE2-LABEL: compressstore_v2i64_v2i1: 2435; SSE2: ## %bb.0: 2436; SSE2-NEXT: psllq $63, %xmm1 2437; SSE2-NEXT: movmskpd %xmm1, %eax 2438; SSE2-NEXT: testb $1, %al 2439; SSE2-NEXT: jne LBB7_1 2440; SSE2-NEXT: ## %bb.2: ## %else 2441; SSE2-NEXT: testb $2, %al 2442; SSE2-NEXT: jne LBB7_3 2443; SSE2-NEXT: LBB7_4: ## %else2 2444; SSE2-NEXT: retq 2445; SSE2-NEXT: LBB7_1: ## %cond.store 2446; SSE2-NEXT: movq %xmm0, (%rdi) 2447; SSE2-NEXT: addq $8, %rdi 2448; SSE2-NEXT: testb $2, %al 2449; SSE2-NEXT: je LBB7_4 2450; SSE2-NEXT: LBB7_3: ## %cond.store1 2451; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3] 2452; SSE2-NEXT: movq %xmm0, (%rdi) 2453; SSE2-NEXT: retq 2454; 2455; SSE42-LABEL: compressstore_v2i64_v2i1: 2456; SSE42: ## %bb.0: 2457; SSE42-NEXT: psllq $63, %xmm1 2458; SSE42-NEXT: movmskpd %xmm1, %eax 2459; SSE42-NEXT: testb $1, %al 2460; SSE42-NEXT: jne LBB7_1 2461; SSE42-NEXT: ## %bb.2: ## %else 2462; SSE42-NEXT: testb $2, %al 2463; SSE42-NEXT: jne LBB7_3 2464; SSE42-NEXT: LBB7_4: ## %else2 2465; SSE42-NEXT: retq 2466; SSE42-NEXT: LBB7_1: ## %cond.store 2467; SSE42-NEXT: movq %xmm0, (%rdi) 2468; SSE42-NEXT: addq $8, %rdi 2469; SSE42-NEXT: testb $2, %al 2470; SSE42-NEXT: je LBB7_4 2471; SSE42-NEXT: LBB7_3: ## %cond.store1 2472; SSE42-NEXT: pextrq $1, %xmm0, (%rdi) 2473; SSE42-NEXT: retq 2474; 2475; AVX1OR2-LABEL: compressstore_v2i64_v2i1: 2476; AVX1OR2: ## %bb.0: 2477; AVX1OR2-NEXT: vpsllq $63, %xmm1, %xmm1 2478; AVX1OR2-NEXT: vmovmskpd %xmm1, %eax 2479; AVX1OR2-NEXT: testb $1, %al 2480; AVX1OR2-NEXT: jne LBB7_1 2481; AVX1OR2-NEXT: ## %bb.2: ## %else 2482; AVX1OR2-NEXT: testb $2, %al 2483; AVX1OR2-NEXT: jne LBB7_3 2484; AVX1OR2-NEXT: LBB7_4: ## %else2 2485; AVX1OR2-NEXT: retq 2486; AVX1OR2-NEXT: LBB7_1: ## %cond.store 2487; AVX1OR2-NEXT: vmovq %xmm0, (%rdi) 2488; AVX1OR2-NEXT: addq $8, %rdi 2489; AVX1OR2-NEXT: testb $2, %al 2490; AVX1OR2-NEXT: je LBB7_4 2491; AVX1OR2-NEXT: LBB7_3: ## %cond.store1 2492; AVX1OR2-NEXT: vpextrq $1, %xmm0, (%rdi) 2493; AVX1OR2-NEXT: retq 2494; 2495; AVX512F-LABEL: compressstore_v2i64_v2i1: 2496; AVX512F: ## %bb.0: 2497; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm0 2498; AVX512F-NEXT: vpsllq $63, %xmm1, %xmm1 2499; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k0 2500; AVX512F-NEXT: kshiftlw $14, %k0, %k0 2501; AVX512F-NEXT: kshiftrw $14, %k0, %k1 2502; AVX512F-NEXT: vpcompressq %zmm0, (%rdi) {%k1} 2503; AVX512F-NEXT: vzeroupper 2504; AVX512F-NEXT: retq 2505; 2506; AVX512VLDQ-LABEL: compressstore_v2i64_v2i1: 2507; AVX512VLDQ: ## %bb.0: 2508; AVX512VLDQ-NEXT: vpsllq $63, %xmm1, %xmm1 2509; AVX512VLDQ-NEXT: vpmovq2m %xmm1, %k1 2510; AVX512VLDQ-NEXT: vpcompressq %xmm0, (%rdi) {%k1} 2511; AVX512VLDQ-NEXT: retq 2512; 2513; AVX512VLBW-LABEL: compressstore_v2i64_v2i1: 2514; AVX512VLBW: ## %bb.0: 2515; AVX512VLBW-NEXT: vpsllq $63, %xmm1, %xmm1 2516; AVX512VLBW-NEXT: vptestmq %xmm1, %xmm1, %k1 2517; AVX512VLBW-NEXT: vpcompressq %xmm0, (%rdi) {%k1} 2518; AVX512VLBW-NEXT: retq 2519 call void @llvm.masked.compressstore.v2i64(<2 x i64> %V, ptr %base, <2 x i1> %mask) 2520 ret void 2521} 2522 2523define void @compressstore_v4i64_v4i1(ptr %base, <4 x i64> %V, <4 x i1> %mask) { 2524; SSE2-LABEL: compressstore_v4i64_v4i1: 2525; SSE2: ## %bb.0: 2526; SSE2-NEXT: pslld $31, %xmm2 2527; SSE2-NEXT: movmskps %xmm2, %eax 2528; SSE2-NEXT: testb $1, %al 2529; SSE2-NEXT: jne LBB8_1 2530; SSE2-NEXT: ## %bb.2: ## %else 2531; SSE2-NEXT: testb $2, %al 2532; SSE2-NEXT: jne LBB8_3 2533; SSE2-NEXT: LBB8_4: ## %else2 2534; SSE2-NEXT: testb $4, %al 2535; SSE2-NEXT: jne LBB8_5 2536; SSE2-NEXT: LBB8_6: ## %else5 2537; SSE2-NEXT: testb $8, %al 2538; SSE2-NEXT: jne LBB8_7 2539; SSE2-NEXT: LBB8_8: ## %else8 2540; SSE2-NEXT: retq 2541; SSE2-NEXT: LBB8_1: ## %cond.store 2542; SSE2-NEXT: movq %xmm0, (%rdi) 2543; SSE2-NEXT: addq $8, %rdi 2544; SSE2-NEXT: testb $2, %al 2545; SSE2-NEXT: je LBB8_4 2546; SSE2-NEXT: LBB8_3: ## %cond.store1 2547; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3] 2548; SSE2-NEXT: movq %xmm0, (%rdi) 2549; SSE2-NEXT: addq $8, %rdi 2550; SSE2-NEXT: testb $4, %al 2551; SSE2-NEXT: je LBB8_6 2552; SSE2-NEXT: LBB8_5: ## %cond.store4 2553; SSE2-NEXT: movq %xmm1, (%rdi) 2554; SSE2-NEXT: addq $8, %rdi 2555; SSE2-NEXT: testb $8, %al 2556; SSE2-NEXT: je LBB8_8 2557; SSE2-NEXT: LBB8_7: ## %cond.store7 2558; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3] 2559; SSE2-NEXT: movq %xmm0, (%rdi) 2560; SSE2-NEXT: retq 2561; 2562; SSE42-LABEL: compressstore_v4i64_v4i1: 2563; SSE42: ## %bb.0: 2564; SSE42-NEXT: pslld $31, %xmm2 2565; SSE42-NEXT: movmskps %xmm2, %eax 2566; SSE42-NEXT: testb $1, %al 2567; SSE42-NEXT: jne LBB8_1 2568; SSE42-NEXT: ## %bb.2: ## %else 2569; SSE42-NEXT: testb $2, %al 2570; SSE42-NEXT: jne LBB8_3 2571; SSE42-NEXT: LBB8_4: ## %else2 2572; SSE42-NEXT: testb $4, %al 2573; SSE42-NEXT: jne LBB8_5 2574; SSE42-NEXT: LBB8_6: ## %else5 2575; SSE42-NEXT: testb $8, %al 2576; SSE42-NEXT: jne LBB8_7 2577; SSE42-NEXT: LBB8_8: ## %else8 2578; SSE42-NEXT: retq 2579; SSE42-NEXT: LBB8_1: ## %cond.store 2580; SSE42-NEXT: movq %xmm0, (%rdi) 2581; SSE42-NEXT: addq $8, %rdi 2582; SSE42-NEXT: testb $2, %al 2583; SSE42-NEXT: je LBB8_4 2584; SSE42-NEXT: LBB8_3: ## %cond.store1 2585; SSE42-NEXT: pextrq $1, %xmm0, (%rdi) 2586; SSE42-NEXT: addq $8, %rdi 2587; SSE42-NEXT: testb $4, %al 2588; SSE42-NEXT: je LBB8_6 2589; SSE42-NEXT: LBB8_5: ## %cond.store4 2590; SSE42-NEXT: movq %xmm1, (%rdi) 2591; SSE42-NEXT: addq $8, %rdi 2592; SSE42-NEXT: testb $8, %al 2593; SSE42-NEXT: je LBB8_8 2594; SSE42-NEXT: LBB8_7: ## %cond.store7 2595; SSE42-NEXT: pextrq $1, %xmm1, (%rdi) 2596; SSE42-NEXT: retq 2597; 2598; AVX1-LABEL: compressstore_v4i64_v4i1: 2599; AVX1: ## %bb.0: 2600; AVX1-NEXT: vpslld $31, %xmm1, %xmm1 2601; AVX1-NEXT: vmovmskps %xmm1, %eax 2602; AVX1-NEXT: testb $1, %al 2603; AVX1-NEXT: je LBB8_2 2604; AVX1-NEXT: ## %bb.1: ## %cond.store 2605; AVX1-NEXT: vmovq %xmm0, (%rdi) 2606; AVX1-NEXT: addq $8, %rdi 2607; AVX1-NEXT: LBB8_2: ## %else 2608; AVX1-NEXT: testb $2, %al 2609; AVX1-NEXT: je LBB8_4 2610; AVX1-NEXT: ## %bb.3: ## %cond.store1 2611; AVX1-NEXT: vpextrq $1, %xmm0, (%rdi) 2612; AVX1-NEXT: addq $8, %rdi 2613; AVX1-NEXT: LBB8_4: ## %else2 2614; AVX1-NEXT: testb $4, %al 2615; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2616; AVX1-NEXT: jne LBB8_5 2617; AVX1-NEXT: ## %bb.6: ## %else5 2618; AVX1-NEXT: testb $8, %al 2619; AVX1-NEXT: jne LBB8_7 2620; AVX1-NEXT: LBB8_8: ## %else8 2621; AVX1-NEXT: vzeroupper 2622; AVX1-NEXT: retq 2623; AVX1-NEXT: LBB8_5: ## %cond.store4 2624; AVX1-NEXT: vmovq %xmm0, (%rdi) 2625; AVX1-NEXT: addq $8, %rdi 2626; AVX1-NEXT: testb $8, %al 2627; AVX1-NEXT: je LBB8_8 2628; AVX1-NEXT: LBB8_7: ## %cond.store7 2629; AVX1-NEXT: vpextrq $1, %xmm0, (%rdi) 2630; AVX1-NEXT: vzeroupper 2631; AVX1-NEXT: retq 2632; 2633; AVX2-LABEL: compressstore_v4i64_v4i1: 2634; AVX2: ## %bb.0: 2635; AVX2-NEXT: vpslld $31, %xmm1, %xmm1 2636; AVX2-NEXT: vmovmskps %xmm1, %eax 2637; AVX2-NEXT: testb $1, %al 2638; AVX2-NEXT: je LBB8_2 2639; AVX2-NEXT: ## %bb.1: ## %cond.store 2640; AVX2-NEXT: vmovq %xmm0, (%rdi) 2641; AVX2-NEXT: addq $8, %rdi 2642; AVX2-NEXT: LBB8_2: ## %else 2643; AVX2-NEXT: testb $2, %al 2644; AVX2-NEXT: je LBB8_4 2645; AVX2-NEXT: ## %bb.3: ## %cond.store1 2646; AVX2-NEXT: vpextrq $1, %xmm0, (%rdi) 2647; AVX2-NEXT: addq $8, %rdi 2648; AVX2-NEXT: LBB8_4: ## %else2 2649; AVX2-NEXT: testb $4, %al 2650; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 2651; AVX2-NEXT: jne LBB8_5 2652; AVX2-NEXT: ## %bb.6: ## %else5 2653; AVX2-NEXT: testb $8, %al 2654; AVX2-NEXT: jne LBB8_7 2655; AVX2-NEXT: LBB8_8: ## %else8 2656; AVX2-NEXT: vzeroupper 2657; AVX2-NEXT: retq 2658; AVX2-NEXT: LBB8_5: ## %cond.store4 2659; AVX2-NEXT: vmovq %xmm0, (%rdi) 2660; AVX2-NEXT: addq $8, %rdi 2661; AVX2-NEXT: testb $8, %al 2662; AVX2-NEXT: je LBB8_8 2663; AVX2-NEXT: LBB8_7: ## %cond.store7 2664; AVX2-NEXT: vpextrq $1, %xmm0, (%rdi) 2665; AVX2-NEXT: vzeroupper 2666; AVX2-NEXT: retq 2667; 2668; AVX512F-LABEL: compressstore_v4i64_v4i1: 2669; AVX512F: ## %bb.0: 2670; AVX512F-NEXT: ## kill: def $ymm0 killed $ymm0 def $zmm0 2671; AVX512F-NEXT: vpslld $31, %xmm1, %xmm1 2672; AVX512F-NEXT: vptestmd %zmm1, %zmm1, %k0 2673; AVX512F-NEXT: kshiftlw $12, %k0, %k0 2674; AVX512F-NEXT: kshiftrw $12, %k0, %k1 2675; AVX512F-NEXT: vpcompressq %zmm0, (%rdi) {%k1} 2676; AVX512F-NEXT: vzeroupper 2677; AVX512F-NEXT: retq 2678; 2679; AVX512VLDQ-LABEL: compressstore_v4i64_v4i1: 2680; AVX512VLDQ: ## %bb.0: 2681; AVX512VLDQ-NEXT: vpslld $31, %xmm1, %xmm1 2682; AVX512VLDQ-NEXT: vpmovd2m %xmm1, %k1 2683; AVX512VLDQ-NEXT: vpcompressq %ymm0, (%rdi) {%k1} 2684; AVX512VLDQ-NEXT: vzeroupper 2685; AVX512VLDQ-NEXT: retq 2686; 2687; AVX512VLBW-LABEL: compressstore_v4i64_v4i1: 2688; AVX512VLBW: ## %bb.0: 2689; AVX512VLBW-NEXT: vpslld $31, %xmm1, %xmm1 2690; AVX512VLBW-NEXT: vptestmd %xmm1, %xmm1, %k1 2691; AVX512VLBW-NEXT: vpcompressq %ymm0, (%rdi) {%k1} 2692; AVX512VLBW-NEXT: vzeroupper 2693; AVX512VLBW-NEXT: retq 2694 call void @llvm.masked.compressstore.v4i64(<4 x i64> %V, ptr %base, <4 x i1> %mask) 2695 ret void 2696} 2697 2698define void @compressstore_v8i64_v8i1(ptr %base, <8 x i64> %V, <8 x i1> %mask) { 2699; SSE2-LABEL: compressstore_v8i64_v8i1: 2700; SSE2: ## %bb.0: 2701; SSE2-NEXT: psllw $15, %xmm4 2702; SSE2-NEXT: packsswb %xmm4, %xmm4 2703; SSE2-NEXT: pmovmskb %xmm4, %eax 2704; SSE2-NEXT: testb $1, %al 2705; SSE2-NEXT: jne LBB9_1 2706; SSE2-NEXT: ## %bb.2: ## %else 2707; SSE2-NEXT: testb $2, %al 2708; SSE2-NEXT: jne LBB9_3 2709; SSE2-NEXT: LBB9_4: ## %else2 2710; SSE2-NEXT: testb $4, %al 2711; SSE2-NEXT: jne LBB9_5 2712; SSE2-NEXT: LBB9_6: ## %else5 2713; SSE2-NEXT: testb $8, %al 2714; SSE2-NEXT: jne LBB9_7 2715; SSE2-NEXT: LBB9_8: ## %else8 2716; SSE2-NEXT: testb $16, %al 2717; SSE2-NEXT: jne LBB9_9 2718; SSE2-NEXT: LBB9_10: ## %else11 2719; SSE2-NEXT: testb $32, %al 2720; SSE2-NEXT: jne LBB9_11 2721; SSE2-NEXT: LBB9_12: ## %else14 2722; SSE2-NEXT: testb $64, %al 2723; SSE2-NEXT: jne LBB9_13 2724; SSE2-NEXT: LBB9_14: ## %else17 2725; SSE2-NEXT: testb $-128, %al 2726; SSE2-NEXT: jne LBB9_15 2727; SSE2-NEXT: LBB9_16: ## %else20 2728; SSE2-NEXT: retq 2729; SSE2-NEXT: LBB9_1: ## %cond.store 2730; SSE2-NEXT: movq %xmm0, (%rdi) 2731; SSE2-NEXT: addq $8, %rdi 2732; SSE2-NEXT: testb $2, %al 2733; SSE2-NEXT: je LBB9_4 2734; SSE2-NEXT: LBB9_3: ## %cond.store1 2735; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,2,3] 2736; SSE2-NEXT: movq %xmm0, (%rdi) 2737; SSE2-NEXT: addq $8, %rdi 2738; SSE2-NEXT: testb $4, %al 2739; SSE2-NEXT: je LBB9_6 2740; SSE2-NEXT: LBB9_5: ## %cond.store4 2741; SSE2-NEXT: movq %xmm1, (%rdi) 2742; SSE2-NEXT: addq $8, %rdi 2743; SSE2-NEXT: testb $8, %al 2744; SSE2-NEXT: je LBB9_8 2745; SSE2-NEXT: LBB9_7: ## %cond.store7 2746; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3] 2747; SSE2-NEXT: movq %xmm0, (%rdi) 2748; SSE2-NEXT: addq $8, %rdi 2749; SSE2-NEXT: testb $16, %al 2750; SSE2-NEXT: je LBB9_10 2751; SSE2-NEXT: LBB9_9: ## %cond.store10 2752; SSE2-NEXT: movq %xmm2, (%rdi) 2753; SSE2-NEXT: addq $8, %rdi 2754; SSE2-NEXT: testb $32, %al 2755; SSE2-NEXT: je LBB9_12 2756; SSE2-NEXT: LBB9_11: ## %cond.store13 2757; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[2,3,2,3] 2758; SSE2-NEXT: movq %xmm0, (%rdi) 2759; SSE2-NEXT: addq $8, %rdi 2760; SSE2-NEXT: testb $64, %al 2761; SSE2-NEXT: je LBB9_14 2762; SSE2-NEXT: LBB9_13: ## %cond.store16 2763; SSE2-NEXT: movq %xmm3, (%rdi) 2764; SSE2-NEXT: addq $8, %rdi 2765; SSE2-NEXT: testb $-128, %al 2766; SSE2-NEXT: je LBB9_16 2767; SSE2-NEXT: LBB9_15: ## %cond.store19 2768; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm3[2,3,2,3] 2769; SSE2-NEXT: movq %xmm0, (%rdi) 2770; SSE2-NEXT: retq 2771; 2772; SSE42-LABEL: compressstore_v8i64_v8i1: 2773; SSE42: ## %bb.0: 2774; SSE42-NEXT: psllw $15, %xmm4 2775; SSE42-NEXT: packsswb %xmm4, %xmm4 2776; SSE42-NEXT: pmovmskb %xmm4, %eax 2777; SSE42-NEXT: testb $1, %al 2778; SSE42-NEXT: jne LBB9_1 2779; SSE42-NEXT: ## %bb.2: ## %else 2780; SSE42-NEXT: testb $2, %al 2781; SSE42-NEXT: jne LBB9_3 2782; SSE42-NEXT: LBB9_4: ## %else2 2783; SSE42-NEXT: testb $4, %al 2784; SSE42-NEXT: jne LBB9_5 2785; SSE42-NEXT: LBB9_6: ## %else5 2786; SSE42-NEXT: testb $8, %al 2787; SSE42-NEXT: jne LBB9_7 2788; SSE42-NEXT: LBB9_8: ## %else8 2789; SSE42-NEXT: testb $16, %al 2790; SSE42-NEXT: jne LBB9_9 2791; SSE42-NEXT: LBB9_10: ## %else11 2792; SSE42-NEXT: testb $32, %al 2793; SSE42-NEXT: jne LBB9_11 2794; SSE42-NEXT: LBB9_12: ## %else14 2795; SSE42-NEXT: testb $64, %al 2796; SSE42-NEXT: jne LBB9_13 2797; SSE42-NEXT: LBB9_14: ## %else17 2798; SSE42-NEXT: testb $-128, %al 2799; SSE42-NEXT: jne LBB9_15 2800; SSE42-NEXT: LBB9_16: ## %else20 2801; SSE42-NEXT: retq 2802; SSE42-NEXT: LBB9_1: ## %cond.store 2803; SSE42-NEXT: movq %xmm0, (%rdi) 2804; SSE42-NEXT: addq $8, %rdi 2805; SSE42-NEXT: testb $2, %al 2806; SSE42-NEXT: je LBB9_4 2807; SSE42-NEXT: LBB9_3: ## %cond.store1 2808; SSE42-NEXT: pextrq $1, %xmm0, (%rdi) 2809; SSE42-NEXT: addq $8, %rdi 2810; SSE42-NEXT: testb $4, %al 2811; SSE42-NEXT: je LBB9_6 2812; SSE42-NEXT: LBB9_5: ## %cond.store4 2813; SSE42-NEXT: movq %xmm1, (%rdi) 2814; SSE42-NEXT: addq $8, %rdi 2815; SSE42-NEXT: testb $8, %al 2816; SSE42-NEXT: je LBB9_8 2817; SSE42-NEXT: LBB9_7: ## %cond.store7 2818; SSE42-NEXT: pextrq $1, %xmm1, (%rdi) 2819; SSE42-NEXT: addq $8, %rdi 2820; SSE42-NEXT: testb $16, %al 2821; SSE42-NEXT: je LBB9_10 2822; SSE42-NEXT: LBB9_9: ## %cond.store10 2823; SSE42-NEXT: movq %xmm2, (%rdi) 2824; SSE42-NEXT: addq $8, %rdi 2825; SSE42-NEXT: testb $32, %al 2826; SSE42-NEXT: je LBB9_12 2827; SSE42-NEXT: LBB9_11: ## %cond.store13 2828; SSE42-NEXT: pextrq $1, %xmm2, (%rdi) 2829; SSE42-NEXT: addq $8, %rdi 2830; SSE42-NEXT: testb $64, %al 2831; SSE42-NEXT: je LBB9_14 2832; SSE42-NEXT: LBB9_13: ## %cond.store16 2833; SSE42-NEXT: movq %xmm3, (%rdi) 2834; SSE42-NEXT: addq $8, %rdi 2835; SSE42-NEXT: testb $-128, %al 2836; SSE42-NEXT: je LBB9_16 2837; SSE42-NEXT: LBB9_15: ## %cond.store19 2838; SSE42-NEXT: pextrq $1, %xmm3, (%rdi) 2839; SSE42-NEXT: retq 2840; 2841; AVX1-LABEL: compressstore_v8i64_v8i1: 2842; AVX1: ## %bb.0: 2843; AVX1-NEXT: vpsllw $15, %xmm2, %xmm2 2844; AVX1-NEXT: vpacksswb %xmm2, %xmm2, %xmm2 2845; AVX1-NEXT: vpmovmskb %xmm2, %eax 2846; AVX1-NEXT: testb $1, %al 2847; AVX1-NEXT: je LBB9_2 2848; AVX1-NEXT: ## %bb.1: ## %cond.store 2849; AVX1-NEXT: vmovq %xmm0, (%rdi) 2850; AVX1-NEXT: addq $8, %rdi 2851; AVX1-NEXT: LBB9_2: ## %else 2852; AVX1-NEXT: testb $2, %al 2853; AVX1-NEXT: je LBB9_4 2854; AVX1-NEXT: ## %bb.3: ## %cond.store1 2855; AVX1-NEXT: vpextrq $1, %xmm0, (%rdi) 2856; AVX1-NEXT: addq $8, %rdi 2857; AVX1-NEXT: LBB9_4: ## %else2 2858; AVX1-NEXT: testb $4, %al 2859; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 2860; AVX1-NEXT: jne LBB9_5 2861; AVX1-NEXT: ## %bb.6: ## %else5 2862; AVX1-NEXT: testb $8, %al 2863; AVX1-NEXT: jne LBB9_7 2864; AVX1-NEXT: LBB9_8: ## %else8 2865; AVX1-NEXT: testb $16, %al 2866; AVX1-NEXT: jne LBB9_9 2867; AVX1-NEXT: LBB9_10: ## %else11 2868; AVX1-NEXT: testb $32, %al 2869; AVX1-NEXT: je LBB9_12 2870; AVX1-NEXT: LBB9_11: ## %cond.store13 2871; AVX1-NEXT: vpextrq $1, %xmm1, (%rdi) 2872; AVX1-NEXT: addq $8, %rdi 2873; AVX1-NEXT: LBB9_12: ## %else14 2874; AVX1-NEXT: testb $64, %al 2875; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm0 2876; AVX1-NEXT: jne LBB9_13 2877; AVX1-NEXT: ## %bb.14: ## %else17 2878; AVX1-NEXT: testb $-128, %al 2879; AVX1-NEXT: jne LBB9_15 2880; AVX1-NEXT: LBB9_16: ## %else20 2881; AVX1-NEXT: vzeroupper 2882; AVX1-NEXT: retq 2883; AVX1-NEXT: LBB9_5: ## %cond.store4 2884; AVX1-NEXT: vmovq %xmm0, (%rdi) 2885; AVX1-NEXT: addq $8, %rdi 2886; AVX1-NEXT: testb $8, %al 2887; AVX1-NEXT: je LBB9_8 2888; AVX1-NEXT: LBB9_7: ## %cond.store7 2889; AVX1-NEXT: vpextrq $1, %xmm0, (%rdi) 2890; AVX1-NEXT: addq $8, %rdi 2891; AVX1-NEXT: testb $16, %al 2892; AVX1-NEXT: je LBB9_10 2893; AVX1-NEXT: LBB9_9: ## %cond.store10 2894; AVX1-NEXT: vmovq %xmm1, (%rdi) 2895; AVX1-NEXT: addq $8, %rdi 2896; AVX1-NEXT: testb $32, %al 2897; AVX1-NEXT: jne LBB9_11 2898; AVX1-NEXT: jmp LBB9_12 2899; AVX1-NEXT: LBB9_13: ## %cond.store16 2900; AVX1-NEXT: vmovq %xmm0, (%rdi) 2901; AVX1-NEXT: addq $8, %rdi 2902; AVX1-NEXT: testb $-128, %al 2903; AVX1-NEXT: je LBB9_16 2904; AVX1-NEXT: LBB9_15: ## %cond.store19 2905; AVX1-NEXT: vpextrq $1, %xmm0, (%rdi) 2906; AVX1-NEXT: vzeroupper 2907; AVX1-NEXT: retq 2908; 2909; AVX2-LABEL: compressstore_v8i64_v8i1: 2910; AVX2: ## %bb.0: 2911; AVX2-NEXT: vpsllw $15, %xmm2, %xmm2 2912; AVX2-NEXT: vpacksswb %xmm2, %xmm2, %xmm2 2913; AVX2-NEXT: vpmovmskb %xmm2, %eax 2914; AVX2-NEXT: testb $1, %al 2915; AVX2-NEXT: je LBB9_2 2916; AVX2-NEXT: ## %bb.1: ## %cond.store 2917; AVX2-NEXT: vmovq %xmm0, (%rdi) 2918; AVX2-NEXT: addq $8, %rdi 2919; AVX2-NEXT: LBB9_2: ## %else 2920; AVX2-NEXT: testb $2, %al 2921; AVX2-NEXT: je LBB9_4 2922; AVX2-NEXT: ## %bb.3: ## %cond.store1 2923; AVX2-NEXT: vpextrq $1, %xmm0, (%rdi) 2924; AVX2-NEXT: addq $8, %rdi 2925; AVX2-NEXT: LBB9_4: ## %else2 2926; AVX2-NEXT: testb $4, %al 2927; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 2928; AVX2-NEXT: jne LBB9_5 2929; AVX2-NEXT: ## %bb.6: ## %else5 2930; AVX2-NEXT: testb $8, %al 2931; AVX2-NEXT: jne LBB9_7 2932; AVX2-NEXT: LBB9_8: ## %else8 2933; AVX2-NEXT: testb $16, %al 2934; AVX2-NEXT: jne LBB9_9 2935; AVX2-NEXT: LBB9_10: ## %else11 2936; AVX2-NEXT: testb $32, %al 2937; AVX2-NEXT: je LBB9_12 2938; AVX2-NEXT: LBB9_11: ## %cond.store13 2939; AVX2-NEXT: vpextrq $1, %xmm1, (%rdi) 2940; AVX2-NEXT: addq $8, %rdi 2941; AVX2-NEXT: LBB9_12: ## %else14 2942; AVX2-NEXT: testb $64, %al 2943; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm0 2944; AVX2-NEXT: jne LBB9_13 2945; AVX2-NEXT: ## %bb.14: ## %else17 2946; AVX2-NEXT: testb $-128, %al 2947; AVX2-NEXT: jne LBB9_15 2948; AVX2-NEXT: LBB9_16: ## %else20 2949; AVX2-NEXT: vzeroupper 2950; AVX2-NEXT: retq 2951; AVX2-NEXT: LBB9_5: ## %cond.store4 2952; AVX2-NEXT: vmovq %xmm0, (%rdi) 2953; AVX2-NEXT: addq $8, %rdi 2954; AVX2-NEXT: testb $8, %al 2955; AVX2-NEXT: je LBB9_8 2956; AVX2-NEXT: LBB9_7: ## %cond.store7 2957; AVX2-NEXT: vpextrq $1, %xmm0, (%rdi) 2958; AVX2-NEXT: addq $8, %rdi 2959; AVX2-NEXT: testb $16, %al 2960; AVX2-NEXT: je LBB9_10 2961; AVX2-NEXT: LBB9_9: ## %cond.store10 2962; AVX2-NEXT: vmovq %xmm1, (%rdi) 2963; AVX2-NEXT: addq $8, %rdi 2964; AVX2-NEXT: testb $32, %al 2965; AVX2-NEXT: jne LBB9_11 2966; AVX2-NEXT: jmp LBB9_12 2967; AVX2-NEXT: LBB9_13: ## %cond.store16 2968; AVX2-NEXT: vmovq %xmm0, (%rdi) 2969; AVX2-NEXT: addq $8, %rdi 2970; AVX2-NEXT: testb $-128, %al 2971; AVX2-NEXT: je LBB9_16 2972; AVX2-NEXT: LBB9_15: ## %cond.store19 2973; AVX2-NEXT: vpextrq $1, %xmm0, (%rdi) 2974; AVX2-NEXT: vzeroupper 2975; AVX2-NEXT: retq 2976; 2977; AVX512F-LABEL: compressstore_v8i64_v8i1: 2978; AVX512F: ## %bb.0: 2979; AVX512F-NEXT: vpmovsxwq %xmm1, %zmm1 2980; AVX512F-NEXT: vpsllq $63, %zmm1, %zmm1 2981; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k1 2982; AVX512F-NEXT: vpcompressq %zmm0, (%rdi) {%k1} 2983; AVX512F-NEXT: vzeroupper 2984; AVX512F-NEXT: retq 2985; 2986; AVX512VLDQ-LABEL: compressstore_v8i64_v8i1: 2987; AVX512VLDQ: ## %bb.0: 2988; AVX512VLDQ-NEXT: vpmovsxwd %xmm1, %ymm1 2989; AVX512VLDQ-NEXT: vpslld $31, %ymm1, %ymm1 2990; AVX512VLDQ-NEXT: vpmovd2m %ymm1, %k1 2991; AVX512VLDQ-NEXT: vpcompressq %zmm0, (%rdi) {%k1} 2992; AVX512VLDQ-NEXT: vzeroupper 2993; AVX512VLDQ-NEXT: retq 2994; 2995; AVX512VLBW-LABEL: compressstore_v8i64_v8i1: 2996; AVX512VLBW: ## %bb.0: 2997; AVX512VLBW-NEXT: vpsllw $15, %xmm1, %xmm1 2998; AVX512VLBW-NEXT: vpmovw2m %xmm1, %k1 2999; AVX512VLBW-NEXT: vpcompressq %zmm0, (%rdi) {%k1} 3000; AVX512VLBW-NEXT: vzeroupper 3001; AVX512VLBW-NEXT: retq 3002 call void @llvm.masked.compressstore.v8i64(<8 x i64> %V, ptr %base, <8 x i1> %mask) 3003 ret void 3004} 3005 3006; 3007; vXi32 3008; 3009 3010define void @compressstore_v4i32_v4i32(ptr %base, <4 x i32> %V, <4 x i32> %trigger) { 3011; SSE2-LABEL: compressstore_v4i32_v4i32: 3012; SSE2: ## %bb.0: 3013; SSE2-NEXT: pxor %xmm2, %xmm2 3014; SSE2-NEXT: pcmpeqd %xmm1, %xmm2 3015; SSE2-NEXT: movmskps %xmm2, %eax 3016; SSE2-NEXT: testb $1, %al 3017; SSE2-NEXT: jne LBB10_1 3018; SSE2-NEXT: ## %bb.2: ## %else 3019; SSE2-NEXT: testb $2, %al 3020; SSE2-NEXT: jne LBB10_3 3021; SSE2-NEXT: LBB10_4: ## %else2 3022; SSE2-NEXT: testb $4, %al 3023; SSE2-NEXT: jne LBB10_5 3024; SSE2-NEXT: LBB10_6: ## %else5 3025; SSE2-NEXT: testb $8, %al 3026; SSE2-NEXT: jne LBB10_7 3027; SSE2-NEXT: LBB10_8: ## %else8 3028; SSE2-NEXT: retq 3029; SSE2-NEXT: LBB10_1: ## %cond.store 3030; SSE2-NEXT: movd %xmm0, (%rdi) 3031; SSE2-NEXT: addq $4, %rdi 3032; SSE2-NEXT: testb $2, %al 3033; SSE2-NEXT: je LBB10_4 3034; SSE2-NEXT: LBB10_3: ## %cond.store1 3035; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1] 3036; SSE2-NEXT: movd %xmm1, (%rdi) 3037; SSE2-NEXT: addq $4, %rdi 3038; SSE2-NEXT: testb $4, %al 3039; SSE2-NEXT: je LBB10_6 3040; SSE2-NEXT: LBB10_5: ## %cond.store4 3041; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,2,3] 3042; SSE2-NEXT: movd %xmm1, (%rdi) 3043; SSE2-NEXT: addq $4, %rdi 3044; SSE2-NEXT: testb $8, %al 3045; SSE2-NEXT: je LBB10_8 3046; SSE2-NEXT: LBB10_7: ## %cond.store7 3047; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,3,3,3] 3048; SSE2-NEXT: movd %xmm0, (%rdi) 3049; SSE2-NEXT: retq 3050; 3051; SSE42-LABEL: compressstore_v4i32_v4i32: 3052; SSE42: ## %bb.0: 3053; SSE42-NEXT: pxor %xmm2, %xmm2 3054; SSE42-NEXT: pcmpeqd %xmm1, %xmm2 3055; SSE42-NEXT: movmskps %xmm2, %eax 3056; SSE42-NEXT: testb $1, %al 3057; SSE42-NEXT: jne LBB10_1 3058; SSE42-NEXT: ## %bb.2: ## %else 3059; SSE42-NEXT: testb $2, %al 3060; SSE42-NEXT: jne LBB10_3 3061; SSE42-NEXT: LBB10_4: ## %else2 3062; SSE42-NEXT: testb $4, %al 3063; SSE42-NEXT: jne LBB10_5 3064; SSE42-NEXT: LBB10_6: ## %else5 3065; SSE42-NEXT: testb $8, %al 3066; SSE42-NEXT: jne LBB10_7 3067; SSE42-NEXT: LBB10_8: ## %else8 3068; SSE42-NEXT: retq 3069; SSE42-NEXT: LBB10_1: ## %cond.store 3070; SSE42-NEXT: movss %xmm0, (%rdi) 3071; SSE42-NEXT: addq $4, %rdi 3072; SSE42-NEXT: testb $2, %al 3073; SSE42-NEXT: je LBB10_4 3074; SSE42-NEXT: LBB10_3: ## %cond.store1 3075; SSE42-NEXT: extractps $1, %xmm0, (%rdi) 3076; SSE42-NEXT: addq $4, %rdi 3077; SSE42-NEXT: testb $4, %al 3078; SSE42-NEXT: je LBB10_6 3079; SSE42-NEXT: LBB10_5: ## %cond.store4 3080; SSE42-NEXT: extractps $2, %xmm0, (%rdi) 3081; SSE42-NEXT: addq $4, %rdi 3082; SSE42-NEXT: testb $8, %al 3083; SSE42-NEXT: je LBB10_8 3084; SSE42-NEXT: LBB10_7: ## %cond.store7 3085; SSE42-NEXT: extractps $3, %xmm0, (%rdi) 3086; SSE42-NEXT: retq 3087; 3088; AVX1OR2-LABEL: compressstore_v4i32_v4i32: 3089; AVX1OR2: ## %bb.0: 3090; AVX1OR2-NEXT: vpxor %xmm2, %xmm2, %xmm2 3091; AVX1OR2-NEXT: vpcmpeqd %xmm2, %xmm1, %xmm1 3092; AVX1OR2-NEXT: vmovmskps %xmm1, %eax 3093; AVX1OR2-NEXT: testb $1, %al 3094; AVX1OR2-NEXT: jne LBB10_1 3095; AVX1OR2-NEXT: ## %bb.2: ## %else 3096; AVX1OR2-NEXT: testb $2, %al 3097; AVX1OR2-NEXT: jne LBB10_3 3098; AVX1OR2-NEXT: LBB10_4: ## %else2 3099; AVX1OR2-NEXT: testb $4, %al 3100; AVX1OR2-NEXT: jne LBB10_5 3101; AVX1OR2-NEXT: LBB10_6: ## %else5 3102; AVX1OR2-NEXT: testb $8, %al 3103; AVX1OR2-NEXT: jne LBB10_7 3104; AVX1OR2-NEXT: LBB10_8: ## %else8 3105; AVX1OR2-NEXT: retq 3106; AVX1OR2-NEXT: LBB10_1: ## %cond.store 3107; AVX1OR2-NEXT: vmovss %xmm0, (%rdi) 3108; AVX1OR2-NEXT: addq $4, %rdi 3109; AVX1OR2-NEXT: testb $2, %al 3110; AVX1OR2-NEXT: je LBB10_4 3111; AVX1OR2-NEXT: LBB10_3: ## %cond.store1 3112; AVX1OR2-NEXT: vextractps $1, %xmm0, (%rdi) 3113; AVX1OR2-NEXT: addq $4, %rdi 3114; AVX1OR2-NEXT: testb $4, %al 3115; AVX1OR2-NEXT: je LBB10_6 3116; AVX1OR2-NEXT: LBB10_5: ## %cond.store4 3117; AVX1OR2-NEXT: vextractps $2, %xmm0, (%rdi) 3118; AVX1OR2-NEXT: addq $4, %rdi 3119; AVX1OR2-NEXT: testb $8, %al 3120; AVX1OR2-NEXT: je LBB10_8 3121; AVX1OR2-NEXT: LBB10_7: ## %cond.store7 3122; AVX1OR2-NEXT: vextractps $3, %xmm0, (%rdi) 3123; AVX1OR2-NEXT: retq 3124; 3125; AVX512F-LABEL: compressstore_v4i32_v4i32: 3126; AVX512F: ## %bb.0: 3127; AVX512F-NEXT: ## kill: def $xmm1 killed $xmm1 def $zmm1 3128; AVX512F-NEXT: ## kill: def $xmm0 killed $xmm0 def $zmm0 3129; AVX512F-NEXT: vptestnmd %zmm1, %zmm1, %k0 3130; AVX512F-NEXT: kshiftlw $12, %k0, %k0 3131; AVX512F-NEXT: kshiftrw $12, %k0, %k1 3132; AVX512F-NEXT: vpcompressd %zmm0, (%rdi) {%k1} 3133; AVX512F-NEXT: vzeroupper 3134; AVX512F-NEXT: retq 3135; 3136; AVX512VL-LABEL: compressstore_v4i32_v4i32: 3137; AVX512VL: ## %bb.0: 3138; AVX512VL-NEXT: vptestnmd %xmm1, %xmm1, %k1 3139; AVX512VL-NEXT: vpcompressd %xmm0, (%rdi) {%k1} 3140; AVX512VL-NEXT: retq 3141 %mask = icmp eq <4 x i32> %trigger, zeroinitializer 3142 call void @llvm.masked.compressstore.v4i32(<4 x i32> %V, ptr %base, <4 x i1> %mask) 3143 ret void 3144} 3145 3146; 3147; vXi16 3148; 3149 3150define void @compressstore_v8i16_v8i16(ptr %base, <8 x i16> %V, <8 x i16> %trigger) { 3151; SSE2-LABEL: compressstore_v8i16_v8i16: 3152; SSE2: ## %bb.0: 3153; SSE2-NEXT: pxor %xmm2, %xmm2 3154; SSE2-NEXT: pcmpeqw %xmm1, %xmm2 3155; SSE2-NEXT: packsswb %xmm2, %xmm2 3156; SSE2-NEXT: pmovmskb %xmm2, %eax 3157; SSE2-NEXT: testb $1, %al 3158; SSE2-NEXT: jne LBB11_1 3159; SSE2-NEXT: ## %bb.2: ## %else 3160; SSE2-NEXT: testb $2, %al 3161; SSE2-NEXT: jne LBB11_3 3162; SSE2-NEXT: LBB11_4: ## %else2 3163; SSE2-NEXT: testb $4, %al 3164; SSE2-NEXT: jne LBB11_5 3165; SSE2-NEXT: LBB11_6: ## %else5 3166; SSE2-NEXT: testb $8, %al 3167; SSE2-NEXT: jne LBB11_7 3168; SSE2-NEXT: LBB11_8: ## %else8 3169; SSE2-NEXT: testb $16, %al 3170; SSE2-NEXT: jne LBB11_9 3171; SSE2-NEXT: LBB11_10: ## %else11 3172; SSE2-NEXT: testb $32, %al 3173; SSE2-NEXT: jne LBB11_11 3174; SSE2-NEXT: LBB11_12: ## %else14 3175; SSE2-NEXT: testb $64, %al 3176; SSE2-NEXT: jne LBB11_13 3177; SSE2-NEXT: LBB11_14: ## %else17 3178; SSE2-NEXT: testb $-128, %al 3179; SSE2-NEXT: jne LBB11_15 3180; SSE2-NEXT: LBB11_16: ## %else20 3181; SSE2-NEXT: retq 3182; SSE2-NEXT: LBB11_1: ## %cond.store 3183; SSE2-NEXT: movd %xmm0, %ecx 3184; SSE2-NEXT: movw %cx, (%rdi) 3185; SSE2-NEXT: addq $2, %rdi 3186; SSE2-NEXT: testb $2, %al 3187; SSE2-NEXT: je LBB11_4 3188; SSE2-NEXT: LBB11_3: ## %cond.store1 3189; SSE2-NEXT: pextrw $1, %xmm0, %ecx 3190; SSE2-NEXT: movw %cx, (%rdi) 3191; SSE2-NEXT: addq $2, %rdi 3192; SSE2-NEXT: testb $4, %al 3193; SSE2-NEXT: je LBB11_6 3194; SSE2-NEXT: LBB11_5: ## %cond.store4 3195; SSE2-NEXT: pextrw $2, %xmm0, %ecx 3196; SSE2-NEXT: movw %cx, (%rdi) 3197; SSE2-NEXT: addq $2, %rdi 3198; SSE2-NEXT: testb $8, %al 3199; SSE2-NEXT: je LBB11_8 3200; SSE2-NEXT: LBB11_7: ## %cond.store7 3201; SSE2-NEXT: pextrw $3, %xmm0, %ecx 3202; SSE2-NEXT: movw %cx, (%rdi) 3203; SSE2-NEXT: addq $2, %rdi 3204; SSE2-NEXT: testb $16, %al 3205; SSE2-NEXT: je LBB11_10 3206; SSE2-NEXT: LBB11_9: ## %cond.store10 3207; SSE2-NEXT: pextrw $4, %xmm0, %ecx 3208; SSE2-NEXT: movw %cx, (%rdi) 3209; SSE2-NEXT: addq $2, %rdi 3210; SSE2-NEXT: testb $32, %al 3211; SSE2-NEXT: je LBB11_12 3212; SSE2-NEXT: LBB11_11: ## %cond.store13 3213; SSE2-NEXT: pextrw $5, %xmm0, %ecx 3214; SSE2-NEXT: movw %cx, (%rdi) 3215; SSE2-NEXT: addq $2, %rdi 3216; SSE2-NEXT: testb $64, %al 3217; SSE2-NEXT: je LBB11_14 3218; SSE2-NEXT: LBB11_13: ## %cond.store16 3219; SSE2-NEXT: pextrw $6, %xmm0, %ecx 3220; SSE2-NEXT: movw %cx, (%rdi) 3221; SSE2-NEXT: addq $2, %rdi 3222; SSE2-NEXT: testb $-128, %al 3223; SSE2-NEXT: je LBB11_16 3224; SSE2-NEXT: LBB11_15: ## %cond.store19 3225; SSE2-NEXT: pextrw $7, %xmm0, %eax 3226; SSE2-NEXT: movw %ax, (%rdi) 3227; SSE2-NEXT: retq 3228; 3229; SSE42-LABEL: compressstore_v8i16_v8i16: 3230; SSE42: ## %bb.0: 3231; SSE42-NEXT: pxor %xmm2, %xmm2 3232; SSE42-NEXT: pcmpeqw %xmm1, %xmm2 3233; SSE42-NEXT: packsswb %xmm2, %xmm2 3234; SSE42-NEXT: pmovmskb %xmm2, %eax 3235; SSE42-NEXT: testb $1, %al 3236; SSE42-NEXT: jne LBB11_1 3237; SSE42-NEXT: ## %bb.2: ## %else 3238; SSE42-NEXT: testb $2, %al 3239; SSE42-NEXT: jne LBB11_3 3240; SSE42-NEXT: LBB11_4: ## %else2 3241; SSE42-NEXT: testb $4, %al 3242; SSE42-NEXT: jne LBB11_5 3243; SSE42-NEXT: LBB11_6: ## %else5 3244; SSE42-NEXT: testb $8, %al 3245; SSE42-NEXT: jne LBB11_7 3246; SSE42-NEXT: LBB11_8: ## %else8 3247; SSE42-NEXT: testb $16, %al 3248; SSE42-NEXT: jne LBB11_9 3249; SSE42-NEXT: LBB11_10: ## %else11 3250; SSE42-NEXT: testb $32, %al 3251; SSE42-NEXT: jne LBB11_11 3252; SSE42-NEXT: LBB11_12: ## %else14 3253; SSE42-NEXT: testb $64, %al 3254; SSE42-NEXT: jne LBB11_13 3255; SSE42-NEXT: LBB11_14: ## %else17 3256; SSE42-NEXT: testb $-128, %al 3257; SSE42-NEXT: jne LBB11_15 3258; SSE42-NEXT: LBB11_16: ## %else20 3259; SSE42-NEXT: retq 3260; SSE42-NEXT: LBB11_1: ## %cond.store 3261; SSE42-NEXT: pextrw $0, %xmm0, (%rdi) 3262; SSE42-NEXT: addq $2, %rdi 3263; SSE42-NEXT: testb $2, %al 3264; SSE42-NEXT: je LBB11_4 3265; SSE42-NEXT: LBB11_3: ## %cond.store1 3266; SSE42-NEXT: pextrw $1, %xmm0, (%rdi) 3267; SSE42-NEXT: addq $2, %rdi 3268; SSE42-NEXT: testb $4, %al 3269; SSE42-NEXT: je LBB11_6 3270; SSE42-NEXT: LBB11_5: ## %cond.store4 3271; SSE42-NEXT: pextrw $2, %xmm0, (%rdi) 3272; SSE42-NEXT: addq $2, %rdi 3273; SSE42-NEXT: testb $8, %al 3274; SSE42-NEXT: je LBB11_8 3275; SSE42-NEXT: LBB11_7: ## %cond.store7 3276; SSE42-NEXT: pextrw $3, %xmm0, (%rdi) 3277; SSE42-NEXT: addq $2, %rdi 3278; SSE42-NEXT: testb $16, %al 3279; SSE42-NEXT: je LBB11_10 3280; SSE42-NEXT: LBB11_9: ## %cond.store10 3281; SSE42-NEXT: pextrw $4, %xmm0, (%rdi) 3282; SSE42-NEXT: addq $2, %rdi 3283; SSE42-NEXT: testb $32, %al 3284; SSE42-NEXT: je LBB11_12 3285; SSE42-NEXT: LBB11_11: ## %cond.store13 3286; SSE42-NEXT: pextrw $5, %xmm0, (%rdi) 3287; SSE42-NEXT: addq $2, %rdi 3288; SSE42-NEXT: testb $64, %al 3289; SSE42-NEXT: je LBB11_14 3290; SSE42-NEXT: LBB11_13: ## %cond.store16 3291; SSE42-NEXT: pextrw $6, %xmm0, (%rdi) 3292; SSE42-NEXT: addq $2, %rdi 3293; SSE42-NEXT: testb $-128, %al 3294; SSE42-NEXT: je LBB11_16 3295; SSE42-NEXT: LBB11_15: ## %cond.store19 3296; SSE42-NEXT: pextrw $7, %xmm0, (%rdi) 3297; SSE42-NEXT: retq 3298; 3299; AVX1OR2-LABEL: compressstore_v8i16_v8i16: 3300; AVX1OR2: ## %bb.0: 3301; AVX1OR2-NEXT: vpxor %xmm2, %xmm2, %xmm2 3302; AVX1OR2-NEXT: vpcmpeqw %xmm2, %xmm1, %xmm1 3303; AVX1OR2-NEXT: vpacksswb %xmm1, %xmm1, %xmm1 3304; AVX1OR2-NEXT: vpmovmskb %xmm1, %eax 3305; AVX1OR2-NEXT: testb $1, %al 3306; AVX1OR2-NEXT: jne LBB11_1 3307; AVX1OR2-NEXT: ## %bb.2: ## %else 3308; AVX1OR2-NEXT: testb $2, %al 3309; AVX1OR2-NEXT: jne LBB11_3 3310; AVX1OR2-NEXT: LBB11_4: ## %else2 3311; AVX1OR2-NEXT: testb $4, %al 3312; AVX1OR2-NEXT: jne LBB11_5 3313; AVX1OR2-NEXT: LBB11_6: ## %else5 3314; AVX1OR2-NEXT: testb $8, %al 3315; AVX1OR2-NEXT: jne LBB11_7 3316; AVX1OR2-NEXT: LBB11_8: ## %else8 3317; AVX1OR2-NEXT: testb $16, %al 3318; AVX1OR2-NEXT: jne LBB11_9 3319; AVX1OR2-NEXT: LBB11_10: ## %else11 3320; AVX1OR2-NEXT: testb $32, %al 3321; AVX1OR2-NEXT: jne LBB11_11 3322; AVX1OR2-NEXT: LBB11_12: ## %else14 3323; AVX1OR2-NEXT: testb $64, %al 3324; AVX1OR2-NEXT: jne LBB11_13 3325; AVX1OR2-NEXT: LBB11_14: ## %else17 3326; AVX1OR2-NEXT: testb $-128, %al 3327; AVX1OR2-NEXT: jne LBB11_15 3328; AVX1OR2-NEXT: LBB11_16: ## %else20 3329; AVX1OR2-NEXT: retq 3330; AVX1OR2-NEXT: LBB11_1: ## %cond.store 3331; AVX1OR2-NEXT: vpextrw $0, %xmm0, (%rdi) 3332; AVX1OR2-NEXT: addq $2, %rdi 3333; AVX1OR2-NEXT: testb $2, %al 3334; AVX1OR2-NEXT: je LBB11_4 3335; AVX1OR2-NEXT: LBB11_3: ## %cond.store1 3336; AVX1OR2-NEXT: vpextrw $1, %xmm0, (%rdi) 3337; AVX1OR2-NEXT: addq $2, %rdi 3338; AVX1OR2-NEXT: testb $4, %al 3339; AVX1OR2-NEXT: je LBB11_6 3340; AVX1OR2-NEXT: LBB11_5: ## %cond.store4 3341; AVX1OR2-NEXT: vpextrw $2, %xmm0, (%rdi) 3342; AVX1OR2-NEXT: addq $2, %rdi 3343; AVX1OR2-NEXT: testb $8, %al 3344; AVX1OR2-NEXT: je LBB11_8 3345; AVX1OR2-NEXT: LBB11_7: ## %cond.store7 3346; AVX1OR2-NEXT: vpextrw $3, %xmm0, (%rdi) 3347; AVX1OR2-NEXT: addq $2, %rdi 3348; AVX1OR2-NEXT: testb $16, %al 3349; AVX1OR2-NEXT: je LBB11_10 3350; AVX1OR2-NEXT: LBB11_9: ## %cond.store10 3351; AVX1OR2-NEXT: vpextrw $4, %xmm0, (%rdi) 3352; AVX1OR2-NEXT: addq $2, %rdi 3353; AVX1OR2-NEXT: testb $32, %al 3354; AVX1OR2-NEXT: je LBB11_12 3355; AVX1OR2-NEXT: LBB11_11: ## %cond.store13 3356; AVX1OR2-NEXT: vpextrw $5, %xmm0, (%rdi) 3357; AVX1OR2-NEXT: addq $2, %rdi 3358; AVX1OR2-NEXT: testb $64, %al 3359; AVX1OR2-NEXT: je LBB11_14 3360; AVX1OR2-NEXT: LBB11_13: ## %cond.store16 3361; AVX1OR2-NEXT: vpextrw $6, %xmm0, (%rdi) 3362; AVX1OR2-NEXT: addq $2, %rdi 3363; AVX1OR2-NEXT: testb $-128, %al 3364; AVX1OR2-NEXT: je LBB11_16 3365; AVX1OR2-NEXT: LBB11_15: ## %cond.store19 3366; AVX1OR2-NEXT: vpextrw $7, %xmm0, (%rdi) 3367; AVX1OR2-NEXT: retq 3368; 3369; AVX512F-LABEL: compressstore_v8i16_v8i16: 3370; AVX512F: ## %bb.0: 3371; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm2 3372; AVX512F-NEXT: vpcmpeqw %xmm2, %xmm1, %xmm1 3373; AVX512F-NEXT: vpmovsxwq %xmm1, %zmm1 3374; AVX512F-NEXT: vptestmq %zmm1, %zmm1, %k0 3375; AVX512F-NEXT: kmovw %k0, %eax 3376; AVX512F-NEXT: testb $1, %al 3377; AVX512F-NEXT: jne LBB11_1 3378; AVX512F-NEXT: ## %bb.2: ## %else 3379; AVX512F-NEXT: testb $2, %al 3380; AVX512F-NEXT: jne LBB11_3 3381; AVX512F-NEXT: LBB11_4: ## %else2 3382; AVX512F-NEXT: testb $4, %al 3383; AVX512F-NEXT: jne LBB11_5 3384; AVX512F-NEXT: LBB11_6: ## %else5 3385; AVX512F-NEXT: testb $8, %al 3386; AVX512F-NEXT: jne LBB11_7 3387; AVX512F-NEXT: LBB11_8: ## %else8 3388; AVX512F-NEXT: testb $16, %al 3389; AVX512F-NEXT: jne LBB11_9 3390; AVX512F-NEXT: LBB11_10: ## %else11 3391; AVX512F-NEXT: testb $32, %al 3392; AVX512F-NEXT: jne LBB11_11 3393; AVX512F-NEXT: LBB11_12: ## %else14 3394; AVX512F-NEXT: testb $64, %al 3395; AVX512F-NEXT: jne LBB11_13 3396; AVX512F-NEXT: LBB11_14: ## %else17 3397; AVX512F-NEXT: testb $-128, %al 3398; AVX512F-NEXT: jne LBB11_15 3399; AVX512F-NEXT: LBB11_16: ## %else20 3400; AVX512F-NEXT: vzeroupper 3401; AVX512F-NEXT: retq 3402; AVX512F-NEXT: LBB11_1: ## %cond.store 3403; AVX512F-NEXT: vpextrw $0, %xmm0, (%rdi) 3404; AVX512F-NEXT: addq $2, %rdi 3405; AVX512F-NEXT: testb $2, %al 3406; AVX512F-NEXT: je LBB11_4 3407; AVX512F-NEXT: LBB11_3: ## %cond.store1 3408; AVX512F-NEXT: vpextrw $1, %xmm0, (%rdi) 3409; AVX512F-NEXT: addq $2, %rdi 3410; AVX512F-NEXT: testb $4, %al 3411; AVX512F-NEXT: je LBB11_6 3412; AVX512F-NEXT: LBB11_5: ## %cond.store4 3413; AVX512F-NEXT: vpextrw $2, %xmm0, (%rdi) 3414; AVX512F-NEXT: addq $2, %rdi 3415; AVX512F-NEXT: testb $8, %al 3416; AVX512F-NEXT: je LBB11_8 3417; AVX512F-NEXT: LBB11_7: ## %cond.store7 3418; AVX512F-NEXT: vpextrw $3, %xmm0, (%rdi) 3419; AVX512F-NEXT: addq $2, %rdi 3420; AVX512F-NEXT: testb $16, %al 3421; AVX512F-NEXT: je LBB11_10 3422; AVX512F-NEXT: LBB11_9: ## %cond.store10 3423; AVX512F-NEXT: vpextrw $4, %xmm0, (%rdi) 3424; AVX512F-NEXT: addq $2, %rdi 3425; AVX512F-NEXT: testb $32, %al 3426; AVX512F-NEXT: je LBB11_12 3427; AVX512F-NEXT: LBB11_11: ## %cond.store13 3428; AVX512F-NEXT: vpextrw $5, %xmm0, (%rdi) 3429; AVX512F-NEXT: addq $2, %rdi 3430; AVX512F-NEXT: testb $64, %al 3431; AVX512F-NEXT: je LBB11_14 3432; AVX512F-NEXT: LBB11_13: ## %cond.store16 3433; AVX512F-NEXT: vpextrw $6, %xmm0, (%rdi) 3434; AVX512F-NEXT: addq $2, %rdi 3435; AVX512F-NEXT: testb $-128, %al 3436; AVX512F-NEXT: je LBB11_16 3437; AVX512F-NEXT: LBB11_15: ## %cond.store19 3438; AVX512F-NEXT: vpextrw $7, %xmm0, (%rdi) 3439; AVX512F-NEXT: vzeroupper 3440; AVX512F-NEXT: retq 3441; 3442; AVX512VLDQ-LABEL: compressstore_v8i16_v8i16: 3443; AVX512VLDQ: ## %bb.0: 3444; AVX512VLDQ-NEXT: vpxor %xmm2, %xmm2, %xmm2 3445; AVX512VLDQ-NEXT: vpcmpeqw %xmm2, %xmm1, %xmm1 3446; AVX512VLDQ-NEXT: vpmovsxwd %xmm1, %ymm1 3447; AVX512VLDQ-NEXT: vpmovd2m %ymm1, %k0 3448; AVX512VLDQ-NEXT: kmovw %k0, %eax 3449; AVX512VLDQ-NEXT: testb $1, %al 3450; AVX512VLDQ-NEXT: jne LBB11_1 3451; AVX512VLDQ-NEXT: ## %bb.2: ## %else 3452; AVX512VLDQ-NEXT: testb $2, %al 3453; AVX512VLDQ-NEXT: jne LBB11_3 3454; AVX512VLDQ-NEXT: LBB11_4: ## %else2 3455; AVX512VLDQ-NEXT: testb $4, %al 3456; AVX512VLDQ-NEXT: jne LBB11_5 3457; AVX512VLDQ-NEXT: LBB11_6: ## %else5 3458; AVX512VLDQ-NEXT: testb $8, %al 3459; AVX512VLDQ-NEXT: jne LBB11_7 3460; AVX512VLDQ-NEXT: LBB11_8: ## %else8 3461; AVX512VLDQ-NEXT: testb $16, %al 3462; AVX512VLDQ-NEXT: jne LBB11_9 3463; AVX512VLDQ-NEXT: LBB11_10: ## %else11 3464; AVX512VLDQ-NEXT: testb $32, %al 3465; AVX512VLDQ-NEXT: jne LBB11_11 3466; AVX512VLDQ-NEXT: LBB11_12: ## %else14 3467; AVX512VLDQ-NEXT: testb $64, %al 3468; AVX512VLDQ-NEXT: jne LBB11_13 3469; AVX512VLDQ-NEXT: LBB11_14: ## %else17 3470; AVX512VLDQ-NEXT: testb $-128, %al 3471; AVX512VLDQ-NEXT: jne LBB11_15 3472; AVX512VLDQ-NEXT: LBB11_16: ## %else20 3473; AVX512VLDQ-NEXT: vzeroupper 3474; AVX512VLDQ-NEXT: retq 3475; AVX512VLDQ-NEXT: LBB11_1: ## %cond.store 3476; AVX512VLDQ-NEXT: vpextrw $0, %xmm0, (%rdi) 3477; AVX512VLDQ-NEXT: addq $2, %rdi 3478; AVX512VLDQ-NEXT: testb $2, %al 3479; AVX512VLDQ-NEXT: je LBB11_4 3480; AVX512VLDQ-NEXT: LBB11_3: ## %cond.store1 3481; AVX512VLDQ-NEXT: vpextrw $1, %xmm0, (%rdi) 3482; AVX512VLDQ-NEXT: addq $2, %rdi 3483; AVX512VLDQ-NEXT: testb $4, %al 3484; AVX512VLDQ-NEXT: je LBB11_6 3485; AVX512VLDQ-NEXT: LBB11_5: ## %cond.store4 3486; AVX512VLDQ-NEXT: vpextrw $2, %xmm0, (%rdi) 3487; AVX512VLDQ-NEXT: addq $2, %rdi 3488; AVX512VLDQ-NEXT: testb $8, %al 3489; AVX512VLDQ-NEXT: je LBB11_8 3490; AVX512VLDQ-NEXT: LBB11_7: ## %cond.store7 3491; AVX512VLDQ-NEXT: vpextrw $3, %xmm0, (%rdi) 3492; AVX512VLDQ-NEXT: addq $2, %rdi 3493; AVX512VLDQ-NEXT: testb $16, %al 3494; AVX512VLDQ-NEXT: je LBB11_10 3495; AVX512VLDQ-NEXT: LBB11_9: ## %cond.store10 3496; AVX512VLDQ-NEXT: vpextrw $4, %xmm0, (%rdi) 3497; AVX512VLDQ-NEXT: addq $2, %rdi 3498; AVX512VLDQ-NEXT: testb $32, %al 3499; AVX512VLDQ-NEXT: je LBB11_12 3500; AVX512VLDQ-NEXT: LBB11_11: ## %cond.store13 3501; AVX512VLDQ-NEXT: vpextrw $5, %xmm0, (%rdi) 3502; AVX512VLDQ-NEXT: addq $2, %rdi 3503; AVX512VLDQ-NEXT: testb $64, %al 3504; AVX512VLDQ-NEXT: je LBB11_14 3505; AVX512VLDQ-NEXT: LBB11_13: ## %cond.store16 3506; AVX512VLDQ-NEXT: vpextrw $6, %xmm0, (%rdi) 3507; AVX512VLDQ-NEXT: addq $2, %rdi 3508; AVX512VLDQ-NEXT: testb $-128, %al 3509; AVX512VLDQ-NEXT: je LBB11_16 3510; AVX512VLDQ-NEXT: LBB11_15: ## %cond.store19 3511; AVX512VLDQ-NEXT: vpextrw $7, %xmm0, (%rdi) 3512; AVX512VLDQ-NEXT: vzeroupper 3513; AVX512VLDQ-NEXT: retq 3514; 3515; AVX512VLBW-LABEL: compressstore_v8i16_v8i16: 3516; AVX512VLBW: ## %bb.0: 3517; AVX512VLBW-NEXT: vptestnmw %xmm1, %xmm1, %k0 3518; AVX512VLBW-NEXT: kmovd %k0, %eax 3519; AVX512VLBW-NEXT: testb $1, %al 3520; AVX512VLBW-NEXT: jne LBB11_1 3521; AVX512VLBW-NEXT: ## %bb.2: ## %else 3522; AVX512VLBW-NEXT: testb $2, %al 3523; AVX512VLBW-NEXT: jne LBB11_3 3524; AVX512VLBW-NEXT: LBB11_4: ## %else2 3525; AVX512VLBW-NEXT: testb $4, %al 3526; AVX512VLBW-NEXT: jne LBB11_5 3527; AVX512VLBW-NEXT: LBB11_6: ## %else5 3528; AVX512VLBW-NEXT: testb $8, %al 3529; AVX512VLBW-NEXT: jne LBB11_7 3530; AVX512VLBW-NEXT: LBB11_8: ## %else8 3531; AVX512VLBW-NEXT: testb $16, %al 3532; AVX512VLBW-NEXT: jne LBB11_9 3533; AVX512VLBW-NEXT: LBB11_10: ## %else11 3534; AVX512VLBW-NEXT: testb $32, %al 3535; AVX512VLBW-NEXT: jne LBB11_11 3536; AVX512VLBW-NEXT: LBB11_12: ## %else14 3537; AVX512VLBW-NEXT: testb $64, %al 3538; AVX512VLBW-NEXT: jne LBB11_13 3539; AVX512VLBW-NEXT: LBB11_14: ## %else17 3540; AVX512VLBW-NEXT: testb $-128, %al 3541; AVX512VLBW-NEXT: jne LBB11_15 3542; AVX512VLBW-NEXT: LBB11_16: ## %else20 3543; AVX512VLBW-NEXT: retq 3544; AVX512VLBW-NEXT: LBB11_1: ## %cond.store 3545; AVX512VLBW-NEXT: vpextrw $0, %xmm0, (%rdi) 3546; AVX512VLBW-NEXT: addq $2, %rdi 3547; AVX512VLBW-NEXT: testb $2, %al 3548; AVX512VLBW-NEXT: je LBB11_4 3549; AVX512VLBW-NEXT: LBB11_3: ## %cond.store1 3550; AVX512VLBW-NEXT: vpextrw $1, %xmm0, (%rdi) 3551; AVX512VLBW-NEXT: addq $2, %rdi 3552; AVX512VLBW-NEXT: testb $4, %al 3553; AVX512VLBW-NEXT: je LBB11_6 3554; AVX512VLBW-NEXT: LBB11_5: ## %cond.store4 3555; AVX512VLBW-NEXT: vpextrw $2, %xmm0, (%rdi) 3556; AVX512VLBW-NEXT: addq $2, %rdi 3557; AVX512VLBW-NEXT: testb $8, %al 3558; AVX512VLBW-NEXT: je LBB11_8 3559; AVX512VLBW-NEXT: LBB11_7: ## %cond.store7 3560; AVX512VLBW-NEXT: vpextrw $3, %xmm0, (%rdi) 3561; AVX512VLBW-NEXT: addq $2, %rdi 3562; AVX512VLBW-NEXT: testb $16, %al 3563; AVX512VLBW-NEXT: je LBB11_10 3564; AVX512VLBW-NEXT: LBB11_9: ## %cond.store10 3565; AVX512VLBW-NEXT: vpextrw $4, %xmm0, (%rdi) 3566; AVX512VLBW-NEXT: addq $2, %rdi 3567; AVX512VLBW-NEXT: testb $32, %al 3568; AVX512VLBW-NEXT: je LBB11_12 3569; AVX512VLBW-NEXT: LBB11_11: ## %cond.store13 3570; AVX512VLBW-NEXT: vpextrw $5, %xmm0, (%rdi) 3571; AVX512VLBW-NEXT: addq $2, %rdi 3572; AVX512VLBW-NEXT: testb $64, %al 3573; AVX512VLBW-NEXT: je LBB11_14 3574; AVX512VLBW-NEXT: LBB11_13: ## %cond.store16 3575; AVX512VLBW-NEXT: vpextrw $6, %xmm0, (%rdi) 3576; AVX512VLBW-NEXT: addq $2, %rdi 3577; AVX512VLBW-NEXT: testb $-128, %al 3578; AVX512VLBW-NEXT: je LBB11_16 3579; AVX512VLBW-NEXT: LBB11_15: ## %cond.store19 3580; AVX512VLBW-NEXT: vpextrw $7, %xmm0, (%rdi) 3581; AVX512VLBW-NEXT: retq 3582 %mask = icmp eq <8 x i16> %trigger, zeroinitializer 3583 call void @llvm.masked.compressstore.v8i16(<8 x i16> %V, ptr %base, <8 x i1> %mask) 3584 ret void 3585} 3586 3587; 3588; vXi8 3589; 3590 3591define void @compressstore_v16i8_v16i8(ptr %base, <16 x i8> %V, <16 x i8> %trigger) { 3592; SSE2-LABEL: compressstore_v16i8_v16i8: 3593; SSE2: ## %bb.0: 3594; SSE2-NEXT: pxor %xmm2, %xmm2 3595; SSE2-NEXT: pcmpeqb %xmm1, %xmm2 3596; SSE2-NEXT: pmovmskb %xmm2, %eax 3597; SSE2-NEXT: testb $1, %al 3598; SSE2-NEXT: movd %xmm0, %ecx 3599; SSE2-NEXT: jne LBB12_1 3600; SSE2-NEXT: ## %bb.2: ## %else 3601; SSE2-NEXT: testb $2, %al 3602; SSE2-NEXT: jne LBB12_3 3603; SSE2-NEXT: LBB12_4: ## %else2 3604; SSE2-NEXT: testb $4, %al 3605; SSE2-NEXT: jne LBB12_5 3606; SSE2-NEXT: LBB12_6: ## %else5 3607; SSE2-NEXT: testb $8, %al 3608; SSE2-NEXT: je LBB12_8 3609; SSE2-NEXT: LBB12_7: ## %cond.store7 3610; SSE2-NEXT: shrl $24, %ecx 3611; SSE2-NEXT: movb %cl, (%rdi) 3612; SSE2-NEXT: incq %rdi 3613; SSE2-NEXT: LBB12_8: ## %else8 3614; SSE2-NEXT: testb $16, %al 3615; SSE2-NEXT: pextrw $2, %xmm0, %ecx 3616; SSE2-NEXT: je LBB12_10 3617; SSE2-NEXT: ## %bb.9: ## %cond.store10 3618; SSE2-NEXT: movb %cl, (%rdi) 3619; SSE2-NEXT: incq %rdi 3620; SSE2-NEXT: LBB12_10: ## %else11 3621; SSE2-NEXT: testb $32, %al 3622; SSE2-NEXT: je LBB12_12 3623; SSE2-NEXT: ## %bb.11: ## %cond.store13 3624; SSE2-NEXT: movb %ch, (%rdi) 3625; SSE2-NEXT: incq %rdi 3626; SSE2-NEXT: LBB12_12: ## %else14 3627; SSE2-NEXT: testb $64, %al 3628; SSE2-NEXT: pextrw $3, %xmm0, %ecx 3629; SSE2-NEXT: je LBB12_14 3630; SSE2-NEXT: ## %bb.13: ## %cond.store16 3631; SSE2-NEXT: movb %cl, (%rdi) 3632; SSE2-NEXT: incq %rdi 3633; SSE2-NEXT: LBB12_14: ## %else17 3634; SSE2-NEXT: testb %al, %al 3635; SSE2-NEXT: jns LBB12_16 3636; SSE2-NEXT: ## %bb.15: ## %cond.store19 3637; SSE2-NEXT: movb %ch, (%rdi) 3638; SSE2-NEXT: incq %rdi 3639; SSE2-NEXT: LBB12_16: ## %else20 3640; SSE2-NEXT: testl $256, %eax ## imm = 0x100 3641; SSE2-NEXT: pextrw $4, %xmm0, %ecx 3642; SSE2-NEXT: je LBB12_18 3643; SSE2-NEXT: ## %bb.17: ## %cond.store22 3644; SSE2-NEXT: movb %cl, (%rdi) 3645; SSE2-NEXT: incq %rdi 3646; SSE2-NEXT: LBB12_18: ## %else23 3647; SSE2-NEXT: testl $512, %eax ## imm = 0x200 3648; SSE2-NEXT: je LBB12_20 3649; SSE2-NEXT: ## %bb.19: ## %cond.store25 3650; SSE2-NEXT: movb %ch, (%rdi) 3651; SSE2-NEXT: incq %rdi 3652; SSE2-NEXT: LBB12_20: ## %else26 3653; SSE2-NEXT: testl $1024, %eax ## imm = 0x400 3654; SSE2-NEXT: pextrw $5, %xmm0, %ecx 3655; SSE2-NEXT: je LBB12_22 3656; SSE2-NEXT: ## %bb.21: ## %cond.store28 3657; SSE2-NEXT: movb %cl, (%rdi) 3658; SSE2-NEXT: incq %rdi 3659; SSE2-NEXT: LBB12_22: ## %else29 3660; SSE2-NEXT: testl $2048, %eax ## imm = 0x800 3661; SSE2-NEXT: je LBB12_24 3662; SSE2-NEXT: ## %bb.23: ## %cond.store31 3663; SSE2-NEXT: movb %ch, (%rdi) 3664; SSE2-NEXT: incq %rdi 3665; SSE2-NEXT: LBB12_24: ## %else32 3666; SSE2-NEXT: testl $4096, %eax ## imm = 0x1000 3667; SSE2-NEXT: pextrw $6, %xmm0, %ecx 3668; SSE2-NEXT: je LBB12_26 3669; SSE2-NEXT: ## %bb.25: ## %cond.store34 3670; SSE2-NEXT: movb %cl, (%rdi) 3671; SSE2-NEXT: incq %rdi 3672; SSE2-NEXT: LBB12_26: ## %else35 3673; SSE2-NEXT: testl $8192, %eax ## imm = 0x2000 3674; SSE2-NEXT: je LBB12_28 3675; SSE2-NEXT: ## %bb.27: ## %cond.store37 3676; SSE2-NEXT: movb %ch, (%rdi) 3677; SSE2-NEXT: incq %rdi 3678; SSE2-NEXT: LBB12_28: ## %else38 3679; SSE2-NEXT: testl $16384, %eax ## imm = 0x4000 3680; SSE2-NEXT: pextrw $7, %xmm0, %ecx 3681; SSE2-NEXT: jne LBB12_29 3682; SSE2-NEXT: ## %bb.30: ## %else41 3683; SSE2-NEXT: testl $32768, %eax ## imm = 0x8000 3684; SSE2-NEXT: jne LBB12_31 3685; SSE2-NEXT: LBB12_32: ## %else44 3686; SSE2-NEXT: retq 3687; SSE2-NEXT: LBB12_1: ## %cond.store 3688; SSE2-NEXT: movb %cl, (%rdi) 3689; SSE2-NEXT: incq %rdi 3690; SSE2-NEXT: testb $2, %al 3691; SSE2-NEXT: je LBB12_4 3692; SSE2-NEXT: LBB12_3: ## %cond.store1 3693; SSE2-NEXT: movb %ch, (%rdi) 3694; SSE2-NEXT: incq %rdi 3695; SSE2-NEXT: testb $4, %al 3696; SSE2-NEXT: je LBB12_6 3697; SSE2-NEXT: LBB12_5: ## %cond.store4 3698; SSE2-NEXT: movl %ecx, %edx 3699; SSE2-NEXT: shrl $16, %edx 3700; SSE2-NEXT: movb %dl, (%rdi) 3701; SSE2-NEXT: incq %rdi 3702; SSE2-NEXT: testb $8, %al 3703; SSE2-NEXT: jne LBB12_7 3704; SSE2-NEXT: jmp LBB12_8 3705; SSE2-NEXT: LBB12_29: ## %cond.store40 3706; SSE2-NEXT: movb %cl, (%rdi) 3707; SSE2-NEXT: incq %rdi 3708; SSE2-NEXT: testl $32768, %eax ## imm = 0x8000 3709; SSE2-NEXT: je LBB12_32 3710; SSE2-NEXT: LBB12_31: ## %cond.store43 3711; SSE2-NEXT: movb %ch, (%rdi) 3712; SSE2-NEXT: retq 3713; 3714; SSE42-LABEL: compressstore_v16i8_v16i8: 3715; SSE42: ## %bb.0: 3716; SSE42-NEXT: pxor %xmm2, %xmm2 3717; SSE42-NEXT: pcmpeqb %xmm1, %xmm2 3718; SSE42-NEXT: pmovmskb %xmm2, %eax 3719; SSE42-NEXT: testb $1, %al 3720; SSE42-NEXT: jne LBB12_1 3721; SSE42-NEXT: ## %bb.2: ## %else 3722; SSE42-NEXT: testb $2, %al 3723; SSE42-NEXT: jne LBB12_3 3724; SSE42-NEXT: LBB12_4: ## %else2 3725; SSE42-NEXT: testb $4, %al 3726; SSE42-NEXT: jne LBB12_5 3727; SSE42-NEXT: LBB12_6: ## %else5 3728; SSE42-NEXT: testb $8, %al 3729; SSE42-NEXT: jne LBB12_7 3730; SSE42-NEXT: LBB12_8: ## %else8 3731; SSE42-NEXT: testb $16, %al 3732; SSE42-NEXT: jne LBB12_9 3733; SSE42-NEXT: LBB12_10: ## %else11 3734; SSE42-NEXT: testb $32, %al 3735; SSE42-NEXT: jne LBB12_11 3736; SSE42-NEXT: LBB12_12: ## %else14 3737; SSE42-NEXT: testb $64, %al 3738; SSE42-NEXT: jne LBB12_13 3739; SSE42-NEXT: LBB12_14: ## %else17 3740; SSE42-NEXT: testb %al, %al 3741; SSE42-NEXT: js LBB12_15 3742; SSE42-NEXT: LBB12_16: ## %else20 3743; SSE42-NEXT: testl $256, %eax ## imm = 0x100 3744; SSE42-NEXT: jne LBB12_17 3745; SSE42-NEXT: LBB12_18: ## %else23 3746; SSE42-NEXT: testl $512, %eax ## imm = 0x200 3747; SSE42-NEXT: jne LBB12_19 3748; SSE42-NEXT: LBB12_20: ## %else26 3749; SSE42-NEXT: testl $1024, %eax ## imm = 0x400 3750; SSE42-NEXT: jne LBB12_21 3751; SSE42-NEXT: LBB12_22: ## %else29 3752; SSE42-NEXT: testl $2048, %eax ## imm = 0x800 3753; SSE42-NEXT: jne LBB12_23 3754; SSE42-NEXT: LBB12_24: ## %else32 3755; SSE42-NEXT: testl $4096, %eax ## imm = 0x1000 3756; SSE42-NEXT: jne LBB12_25 3757; SSE42-NEXT: LBB12_26: ## %else35 3758; SSE42-NEXT: testl $8192, %eax ## imm = 0x2000 3759; SSE42-NEXT: jne LBB12_27 3760; SSE42-NEXT: LBB12_28: ## %else38 3761; SSE42-NEXT: testl $16384, %eax ## imm = 0x4000 3762; SSE42-NEXT: jne LBB12_29 3763; SSE42-NEXT: LBB12_30: ## %else41 3764; SSE42-NEXT: testl $32768, %eax ## imm = 0x8000 3765; SSE42-NEXT: jne LBB12_31 3766; SSE42-NEXT: LBB12_32: ## %else44 3767; SSE42-NEXT: retq 3768; SSE42-NEXT: LBB12_1: ## %cond.store 3769; SSE42-NEXT: pextrb $0, %xmm0, (%rdi) 3770; SSE42-NEXT: incq %rdi 3771; SSE42-NEXT: testb $2, %al 3772; SSE42-NEXT: je LBB12_4 3773; SSE42-NEXT: LBB12_3: ## %cond.store1 3774; SSE42-NEXT: pextrb $1, %xmm0, (%rdi) 3775; SSE42-NEXT: incq %rdi 3776; SSE42-NEXT: testb $4, %al 3777; SSE42-NEXT: je LBB12_6 3778; SSE42-NEXT: LBB12_5: ## %cond.store4 3779; SSE42-NEXT: pextrb $2, %xmm0, (%rdi) 3780; SSE42-NEXT: incq %rdi 3781; SSE42-NEXT: testb $8, %al 3782; SSE42-NEXT: je LBB12_8 3783; SSE42-NEXT: LBB12_7: ## %cond.store7 3784; SSE42-NEXT: pextrb $3, %xmm0, (%rdi) 3785; SSE42-NEXT: incq %rdi 3786; SSE42-NEXT: testb $16, %al 3787; SSE42-NEXT: je LBB12_10 3788; SSE42-NEXT: LBB12_9: ## %cond.store10 3789; SSE42-NEXT: pextrb $4, %xmm0, (%rdi) 3790; SSE42-NEXT: incq %rdi 3791; SSE42-NEXT: testb $32, %al 3792; SSE42-NEXT: je LBB12_12 3793; SSE42-NEXT: LBB12_11: ## %cond.store13 3794; SSE42-NEXT: pextrb $5, %xmm0, (%rdi) 3795; SSE42-NEXT: incq %rdi 3796; SSE42-NEXT: testb $64, %al 3797; SSE42-NEXT: je LBB12_14 3798; SSE42-NEXT: LBB12_13: ## %cond.store16 3799; SSE42-NEXT: pextrb $6, %xmm0, (%rdi) 3800; SSE42-NEXT: incq %rdi 3801; SSE42-NEXT: testb %al, %al 3802; SSE42-NEXT: jns LBB12_16 3803; SSE42-NEXT: LBB12_15: ## %cond.store19 3804; SSE42-NEXT: pextrb $7, %xmm0, (%rdi) 3805; SSE42-NEXT: incq %rdi 3806; SSE42-NEXT: testl $256, %eax ## imm = 0x100 3807; SSE42-NEXT: je LBB12_18 3808; SSE42-NEXT: LBB12_17: ## %cond.store22 3809; SSE42-NEXT: pextrb $8, %xmm0, (%rdi) 3810; SSE42-NEXT: incq %rdi 3811; SSE42-NEXT: testl $512, %eax ## imm = 0x200 3812; SSE42-NEXT: je LBB12_20 3813; SSE42-NEXT: LBB12_19: ## %cond.store25 3814; SSE42-NEXT: pextrb $9, %xmm0, (%rdi) 3815; SSE42-NEXT: incq %rdi 3816; SSE42-NEXT: testl $1024, %eax ## imm = 0x400 3817; SSE42-NEXT: je LBB12_22 3818; SSE42-NEXT: LBB12_21: ## %cond.store28 3819; SSE42-NEXT: pextrb $10, %xmm0, (%rdi) 3820; SSE42-NEXT: incq %rdi 3821; SSE42-NEXT: testl $2048, %eax ## imm = 0x800 3822; SSE42-NEXT: je LBB12_24 3823; SSE42-NEXT: LBB12_23: ## %cond.store31 3824; SSE42-NEXT: pextrb $11, %xmm0, (%rdi) 3825; SSE42-NEXT: incq %rdi 3826; SSE42-NEXT: testl $4096, %eax ## imm = 0x1000 3827; SSE42-NEXT: je LBB12_26 3828; SSE42-NEXT: LBB12_25: ## %cond.store34 3829; SSE42-NEXT: pextrb $12, %xmm0, (%rdi) 3830; SSE42-NEXT: incq %rdi 3831; SSE42-NEXT: testl $8192, %eax ## imm = 0x2000 3832; SSE42-NEXT: je LBB12_28 3833; SSE42-NEXT: LBB12_27: ## %cond.store37 3834; SSE42-NEXT: pextrb $13, %xmm0, (%rdi) 3835; SSE42-NEXT: incq %rdi 3836; SSE42-NEXT: testl $16384, %eax ## imm = 0x4000 3837; SSE42-NEXT: je LBB12_30 3838; SSE42-NEXT: LBB12_29: ## %cond.store40 3839; SSE42-NEXT: pextrb $14, %xmm0, (%rdi) 3840; SSE42-NEXT: incq %rdi 3841; SSE42-NEXT: testl $32768, %eax ## imm = 0x8000 3842; SSE42-NEXT: je LBB12_32 3843; SSE42-NEXT: LBB12_31: ## %cond.store43 3844; SSE42-NEXT: pextrb $15, %xmm0, (%rdi) 3845; SSE42-NEXT: retq 3846; 3847; AVX1OR2-LABEL: compressstore_v16i8_v16i8: 3848; AVX1OR2: ## %bb.0: 3849; AVX1OR2-NEXT: vpxor %xmm2, %xmm2, %xmm2 3850; AVX1OR2-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm1 3851; AVX1OR2-NEXT: vpmovmskb %xmm1, %eax 3852; AVX1OR2-NEXT: testb $1, %al 3853; AVX1OR2-NEXT: jne LBB12_1 3854; AVX1OR2-NEXT: ## %bb.2: ## %else 3855; AVX1OR2-NEXT: testb $2, %al 3856; AVX1OR2-NEXT: jne LBB12_3 3857; AVX1OR2-NEXT: LBB12_4: ## %else2 3858; AVX1OR2-NEXT: testb $4, %al 3859; AVX1OR2-NEXT: jne LBB12_5 3860; AVX1OR2-NEXT: LBB12_6: ## %else5 3861; AVX1OR2-NEXT: testb $8, %al 3862; AVX1OR2-NEXT: jne LBB12_7 3863; AVX1OR2-NEXT: LBB12_8: ## %else8 3864; AVX1OR2-NEXT: testb $16, %al 3865; AVX1OR2-NEXT: jne LBB12_9 3866; AVX1OR2-NEXT: LBB12_10: ## %else11 3867; AVX1OR2-NEXT: testb $32, %al 3868; AVX1OR2-NEXT: jne LBB12_11 3869; AVX1OR2-NEXT: LBB12_12: ## %else14 3870; AVX1OR2-NEXT: testb $64, %al 3871; AVX1OR2-NEXT: jne LBB12_13 3872; AVX1OR2-NEXT: LBB12_14: ## %else17 3873; AVX1OR2-NEXT: testb %al, %al 3874; AVX1OR2-NEXT: js LBB12_15 3875; AVX1OR2-NEXT: LBB12_16: ## %else20 3876; AVX1OR2-NEXT: testl $256, %eax ## imm = 0x100 3877; AVX1OR2-NEXT: jne LBB12_17 3878; AVX1OR2-NEXT: LBB12_18: ## %else23 3879; AVX1OR2-NEXT: testl $512, %eax ## imm = 0x200 3880; AVX1OR2-NEXT: jne LBB12_19 3881; AVX1OR2-NEXT: LBB12_20: ## %else26 3882; AVX1OR2-NEXT: testl $1024, %eax ## imm = 0x400 3883; AVX1OR2-NEXT: jne LBB12_21 3884; AVX1OR2-NEXT: LBB12_22: ## %else29 3885; AVX1OR2-NEXT: testl $2048, %eax ## imm = 0x800 3886; AVX1OR2-NEXT: jne LBB12_23 3887; AVX1OR2-NEXT: LBB12_24: ## %else32 3888; AVX1OR2-NEXT: testl $4096, %eax ## imm = 0x1000 3889; AVX1OR2-NEXT: jne LBB12_25 3890; AVX1OR2-NEXT: LBB12_26: ## %else35 3891; AVX1OR2-NEXT: testl $8192, %eax ## imm = 0x2000 3892; AVX1OR2-NEXT: jne LBB12_27 3893; AVX1OR2-NEXT: LBB12_28: ## %else38 3894; AVX1OR2-NEXT: testl $16384, %eax ## imm = 0x4000 3895; AVX1OR2-NEXT: jne LBB12_29 3896; AVX1OR2-NEXT: LBB12_30: ## %else41 3897; AVX1OR2-NEXT: testl $32768, %eax ## imm = 0x8000 3898; AVX1OR2-NEXT: jne LBB12_31 3899; AVX1OR2-NEXT: LBB12_32: ## %else44 3900; AVX1OR2-NEXT: retq 3901; AVX1OR2-NEXT: LBB12_1: ## %cond.store 3902; AVX1OR2-NEXT: vpextrb $0, %xmm0, (%rdi) 3903; AVX1OR2-NEXT: incq %rdi 3904; AVX1OR2-NEXT: testb $2, %al 3905; AVX1OR2-NEXT: je LBB12_4 3906; AVX1OR2-NEXT: LBB12_3: ## %cond.store1 3907; AVX1OR2-NEXT: vpextrb $1, %xmm0, (%rdi) 3908; AVX1OR2-NEXT: incq %rdi 3909; AVX1OR2-NEXT: testb $4, %al 3910; AVX1OR2-NEXT: je LBB12_6 3911; AVX1OR2-NEXT: LBB12_5: ## %cond.store4 3912; AVX1OR2-NEXT: vpextrb $2, %xmm0, (%rdi) 3913; AVX1OR2-NEXT: incq %rdi 3914; AVX1OR2-NEXT: testb $8, %al 3915; AVX1OR2-NEXT: je LBB12_8 3916; AVX1OR2-NEXT: LBB12_7: ## %cond.store7 3917; AVX1OR2-NEXT: vpextrb $3, %xmm0, (%rdi) 3918; AVX1OR2-NEXT: incq %rdi 3919; AVX1OR2-NEXT: testb $16, %al 3920; AVX1OR2-NEXT: je LBB12_10 3921; AVX1OR2-NEXT: LBB12_9: ## %cond.store10 3922; AVX1OR2-NEXT: vpextrb $4, %xmm0, (%rdi) 3923; AVX1OR2-NEXT: incq %rdi 3924; AVX1OR2-NEXT: testb $32, %al 3925; AVX1OR2-NEXT: je LBB12_12 3926; AVX1OR2-NEXT: LBB12_11: ## %cond.store13 3927; AVX1OR2-NEXT: vpextrb $5, %xmm0, (%rdi) 3928; AVX1OR2-NEXT: incq %rdi 3929; AVX1OR2-NEXT: testb $64, %al 3930; AVX1OR2-NEXT: je LBB12_14 3931; AVX1OR2-NEXT: LBB12_13: ## %cond.store16 3932; AVX1OR2-NEXT: vpextrb $6, %xmm0, (%rdi) 3933; AVX1OR2-NEXT: incq %rdi 3934; AVX1OR2-NEXT: testb %al, %al 3935; AVX1OR2-NEXT: jns LBB12_16 3936; AVX1OR2-NEXT: LBB12_15: ## %cond.store19 3937; AVX1OR2-NEXT: vpextrb $7, %xmm0, (%rdi) 3938; AVX1OR2-NEXT: incq %rdi 3939; AVX1OR2-NEXT: testl $256, %eax ## imm = 0x100 3940; AVX1OR2-NEXT: je LBB12_18 3941; AVX1OR2-NEXT: LBB12_17: ## %cond.store22 3942; AVX1OR2-NEXT: vpextrb $8, %xmm0, (%rdi) 3943; AVX1OR2-NEXT: incq %rdi 3944; AVX1OR2-NEXT: testl $512, %eax ## imm = 0x200 3945; AVX1OR2-NEXT: je LBB12_20 3946; AVX1OR2-NEXT: LBB12_19: ## %cond.store25 3947; AVX1OR2-NEXT: vpextrb $9, %xmm0, (%rdi) 3948; AVX1OR2-NEXT: incq %rdi 3949; AVX1OR2-NEXT: testl $1024, %eax ## imm = 0x400 3950; AVX1OR2-NEXT: je LBB12_22 3951; AVX1OR2-NEXT: LBB12_21: ## %cond.store28 3952; AVX1OR2-NEXT: vpextrb $10, %xmm0, (%rdi) 3953; AVX1OR2-NEXT: incq %rdi 3954; AVX1OR2-NEXT: testl $2048, %eax ## imm = 0x800 3955; AVX1OR2-NEXT: je LBB12_24 3956; AVX1OR2-NEXT: LBB12_23: ## %cond.store31 3957; AVX1OR2-NEXT: vpextrb $11, %xmm0, (%rdi) 3958; AVX1OR2-NEXT: incq %rdi 3959; AVX1OR2-NEXT: testl $4096, %eax ## imm = 0x1000 3960; AVX1OR2-NEXT: je LBB12_26 3961; AVX1OR2-NEXT: LBB12_25: ## %cond.store34 3962; AVX1OR2-NEXT: vpextrb $12, %xmm0, (%rdi) 3963; AVX1OR2-NEXT: incq %rdi 3964; AVX1OR2-NEXT: testl $8192, %eax ## imm = 0x2000 3965; AVX1OR2-NEXT: je LBB12_28 3966; AVX1OR2-NEXT: LBB12_27: ## %cond.store37 3967; AVX1OR2-NEXT: vpextrb $13, %xmm0, (%rdi) 3968; AVX1OR2-NEXT: incq %rdi 3969; AVX1OR2-NEXT: testl $16384, %eax ## imm = 0x4000 3970; AVX1OR2-NEXT: je LBB12_30 3971; AVX1OR2-NEXT: LBB12_29: ## %cond.store40 3972; AVX1OR2-NEXT: vpextrb $14, %xmm0, (%rdi) 3973; AVX1OR2-NEXT: incq %rdi 3974; AVX1OR2-NEXT: testl $32768, %eax ## imm = 0x8000 3975; AVX1OR2-NEXT: je LBB12_32 3976; AVX1OR2-NEXT: LBB12_31: ## %cond.store43 3977; AVX1OR2-NEXT: vpextrb $15, %xmm0, (%rdi) 3978; AVX1OR2-NEXT: retq 3979; 3980; AVX512F-LABEL: compressstore_v16i8_v16i8: 3981; AVX512F: ## %bb.0: 3982; AVX512F-NEXT: vpxor %xmm2, %xmm2, %xmm2 3983; AVX512F-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm1 3984; AVX512F-NEXT: vpmovmskb %xmm1, %eax 3985; AVX512F-NEXT: testb $1, %al 3986; AVX512F-NEXT: jne LBB12_1 3987; AVX512F-NEXT: ## %bb.2: ## %else 3988; AVX512F-NEXT: testb $2, %al 3989; AVX512F-NEXT: jne LBB12_3 3990; AVX512F-NEXT: LBB12_4: ## %else2 3991; AVX512F-NEXT: testb $4, %al 3992; AVX512F-NEXT: jne LBB12_5 3993; AVX512F-NEXT: LBB12_6: ## %else5 3994; AVX512F-NEXT: testb $8, %al 3995; AVX512F-NEXT: jne LBB12_7 3996; AVX512F-NEXT: LBB12_8: ## %else8 3997; AVX512F-NEXT: testb $16, %al 3998; AVX512F-NEXT: jne LBB12_9 3999; AVX512F-NEXT: LBB12_10: ## %else11 4000; AVX512F-NEXT: testb $32, %al 4001; AVX512F-NEXT: jne LBB12_11 4002; AVX512F-NEXT: LBB12_12: ## %else14 4003; AVX512F-NEXT: testb $64, %al 4004; AVX512F-NEXT: jne LBB12_13 4005; AVX512F-NEXT: LBB12_14: ## %else17 4006; AVX512F-NEXT: testb %al, %al 4007; AVX512F-NEXT: js LBB12_15 4008; AVX512F-NEXT: LBB12_16: ## %else20 4009; AVX512F-NEXT: testl $256, %eax ## imm = 0x100 4010; AVX512F-NEXT: jne LBB12_17 4011; AVX512F-NEXT: LBB12_18: ## %else23 4012; AVX512F-NEXT: testl $512, %eax ## imm = 0x200 4013; AVX512F-NEXT: jne LBB12_19 4014; AVX512F-NEXT: LBB12_20: ## %else26 4015; AVX512F-NEXT: testl $1024, %eax ## imm = 0x400 4016; AVX512F-NEXT: jne LBB12_21 4017; AVX512F-NEXT: LBB12_22: ## %else29 4018; AVX512F-NEXT: testl $2048, %eax ## imm = 0x800 4019; AVX512F-NEXT: jne LBB12_23 4020; AVX512F-NEXT: LBB12_24: ## %else32 4021; AVX512F-NEXT: testl $4096, %eax ## imm = 0x1000 4022; AVX512F-NEXT: jne LBB12_25 4023; AVX512F-NEXT: LBB12_26: ## %else35 4024; AVX512F-NEXT: testl $8192, %eax ## imm = 0x2000 4025; AVX512F-NEXT: jne LBB12_27 4026; AVX512F-NEXT: LBB12_28: ## %else38 4027; AVX512F-NEXT: testl $16384, %eax ## imm = 0x4000 4028; AVX512F-NEXT: jne LBB12_29 4029; AVX512F-NEXT: LBB12_30: ## %else41 4030; AVX512F-NEXT: testl $32768, %eax ## imm = 0x8000 4031; AVX512F-NEXT: jne LBB12_31 4032; AVX512F-NEXT: LBB12_32: ## %else44 4033; AVX512F-NEXT: retq 4034; AVX512F-NEXT: LBB12_1: ## %cond.store 4035; AVX512F-NEXT: vpextrb $0, %xmm0, (%rdi) 4036; AVX512F-NEXT: incq %rdi 4037; AVX512F-NEXT: testb $2, %al 4038; AVX512F-NEXT: je LBB12_4 4039; AVX512F-NEXT: LBB12_3: ## %cond.store1 4040; AVX512F-NEXT: vpextrb $1, %xmm0, (%rdi) 4041; AVX512F-NEXT: incq %rdi 4042; AVX512F-NEXT: testb $4, %al 4043; AVX512F-NEXT: je LBB12_6 4044; AVX512F-NEXT: LBB12_5: ## %cond.store4 4045; AVX512F-NEXT: vpextrb $2, %xmm0, (%rdi) 4046; AVX512F-NEXT: incq %rdi 4047; AVX512F-NEXT: testb $8, %al 4048; AVX512F-NEXT: je LBB12_8 4049; AVX512F-NEXT: LBB12_7: ## %cond.store7 4050; AVX512F-NEXT: vpextrb $3, %xmm0, (%rdi) 4051; AVX512F-NEXT: incq %rdi 4052; AVX512F-NEXT: testb $16, %al 4053; AVX512F-NEXT: je LBB12_10 4054; AVX512F-NEXT: LBB12_9: ## %cond.store10 4055; AVX512F-NEXT: vpextrb $4, %xmm0, (%rdi) 4056; AVX512F-NEXT: incq %rdi 4057; AVX512F-NEXT: testb $32, %al 4058; AVX512F-NEXT: je LBB12_12 4059; AVX512F-NEXT: LBB12_11: ## %cond.store13 4060; AVX512F-NEXT: vpextrb $5, %xmm0, (%rdi) 4061; AVX512F-NEXT: incq %rdi 4062; AVX512F-NEXT: testb $64, %al 4063; AVX512F-NEXT: je LBB12_14 4064; AVX512F-NEXT: LBB12_13: ## %cond.store16 4065; AVX512F-NEXT: vpextrb $6, %xmm0, (%rdi) 4066; AVX512F-NEXT: incq %rdi 4067; AVX512F-NEXT: testb %al, %al 4068; AVX512F-NEXT: jns LBB12_16 4069; AVX512F-NEXT: LBB12_15: ## %cond.store19 4070; AVX512F-NEXT: vpextrb $7, %xmm0, (%rdi) 4071; AVX512F-NEXT: incq %rdi 4072; AVX512F-NEXT: testl $256, %eax ## imm = 0x100 4073; AVX512F-NEXT: je LBB12_18 4074; AVX512F-NEXT: LBB12_17: ## %cond.store22 4075; AVX512F-NEXT: vpextrb $8, %xmm0, (%rdi) 4076; AVX512F-NEXT: incq %rdi 4077; AVX512F-NEXT: testl $512, %eax ## imm = 0x200 4078; AVX512F-NEXT: je LBB12_20 4079; AVX512F-NEXT: LBB12_19: ## %cond.store25 4080; AVX512F-NEXT: vpextrb $9, %xmm0, (%rdi) 4081; AVX512F-NEXT: incq %rdi 4082; AVX512F-NEXT: testl $1024, %eax ## imm = 0x400 4083; AVX512F-NEXT: je LBB12_22 4084; AVX512F-NEXT: LBB12_21: ## %cond.store28 4085; AVX512F-NEXT: vpextrb $10, %xmm0, (%rdi) 4086; AVX512F-NEXT: incq %rdi 4087; AVX512F-NEXT: testl $2048, %eax ## imm = 0x800 4088; AVX512F-NEXT: je LBB12_24 4089; AVX512F-NEXT: LBB12_23: ## %cond.store31 4090; AVX512F-NEXT: vpextrb $11, %xmm0, (%rdi) 4091; AVX512F-NEXT: incq %rdi 4092; AVX512F-NEXT: testl $4096, %eax ## imm = 0x1000 4093; AVX512F-NEXT: je LBB12_26 4094; AVX512F-NEXT: LBB12_25: ## %cond.store34 4095; AVX512F-NEXT: vpextrb $12, %xmm0, (%rdi) 4096; AVX512F-NEXT: incq %rdi 4097; AVX512F-NEXT: testl $8192, %eax ## imm = 0x2000 4098; AVX512F-NEXT: je LBB12_28 4099; AVX512F-NEXT: LBB12_27: ## %cond.store37 4100; AVX512F-NEXT: vpextrb $13, %xmm0, (%rdi) 4101; AVX512F-NEXT: incq %rdi 4102; AVX512F-NEXT: testl $16384, %eax ## imm = 0x4000 4103; AVX512F-NEXT: je LBB12_30 4104; AVX512F-NEXT: LBB12_29: ## %cond.store40 4105; AVX512F-NEXT: vpextrb $14, %xmm0, (%rdi) 4106; AVX512F-NEXT: incq %rdi 4107; AVX512F-NEXT: testl $32768, %eax ## imm = 0x8000 4108; AVX512F-NEXT: je LBB12_32 4109; AVX512F-NEXT: LBB12_31: ## %cond.store43 4110; AVX512F-NEXT: vpextrb $15, %xmm0, (%rdi) 4111; AVX512F-NEXT: retq 4112; 4113; AVX512VLDQ-LABEL: compressstore_v16i8_v16i8: 4114; AVX512VLDQ: ## %bb.0: 4115; AVX512VLDQ-NEXT: vpxor %xmm2, %xmm2, %xmm2 4116; AVX512VLDQ-NEXT: vpcmpeqb %xmm2, %xmm1, %xmm1 4117; AVX512VLDQ-NEXT: vpmovmskb %xmm1, %eax 4118; AVX512VLDQ-NEXT: testb $1, %al 4119; AVX512VLDQ-NEXT: jne LBB12_1 4120; AVX512VLDQ-NEXT: ## %bb.2: ## %else 4121; AVX512VLDQ-NEXT: testb $2, %al 4122; AVX512VLDQ-NEXT: jne LBB12_3 4123; AVX512VLDQ-NEXT: LBB12_4: ## %else2 4124; AVX512VLDQ-NEXT: testb $4, %al 4125; AVX512VLDQ-NEXT: jne LBB12_5 4126; AVX512VLDQ-NEXT: LBB12_6: ## %else5 4127; AVX512VLDQ-NEXT: testb $8, %al 4128; AVX512VLDQ-NEXT: jne LBB12_7 4129; AVX512VLDQ-NEXT: LBB12_8: ## %else8 4130; AVX512VLDQ-NEXT: testb $16, %al 4131; AVX512VLDQ-NEXT: jne LBB12_9 4132; AVX512VLDQ-NEXT: LBB12_10: ## %else11 4133; AVX512VLDQ-NEXT: testb $32, %al 4134; AVX512VLDQ-NEXT: jne LBB12_11 4135; AVX512VLDQ-NEXT: LBB12_12: ## %else14 4136; AVX512VLDQ-NEXT: testb $64, %al 4137; AVX512VLDQ-NEXT: jne LBB12_13 4138; AVX512VLDQ-NEXT: LBB12_14: ## %else17 4139; AVX512VLDQ-NEXT: testb %al, %al 4140; AVX512VLDQ-NEXT: js LBB12_15 4141; AVX512VLDQ-NEXT: LBB12_16: ## %else20 4142; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x100 4143; AVX512VLDQ-NEXT: jne LBB12_17 4144; AVX512VLDQ-NEXT: LBB12_18: ## %else23 4145; AVX512VLDQ-NEXT: testl $512, %eax ## imm = 0x200 4146; AVX512VLDQ-NEXT: jne LBB12_19 4147; AVX512VLDQ-NEXT: LBB12_20: ## %else26 4148; AVX512VLDQ-NEXT: testl $1024, %eax ## imm = 0x400 4149; AVX512VLDQ-NEXT: jne LBB12_21 4150; AVX512VLDQ-NEXT: LBB12_22: ## %else29 4151; AVX512VLDQ-NEXT: testl $2048, %eax ## imm = 0x800 4152; AVX512VLDQ-NEXT: jne LBB12_23 4153; AVX512VLDQ-NEXT: LBB12_24: ## %else32 4154; AVX512VLDQ-NEXT: testl $4096, %eax ## imm = 0x1000 4155; AVX512VLDQ-NEXT: jne LBB12_25 4156; AVX512VLDQ-NEXT: LBB12_26: ## %else35 4157; AVX512VLDQ-NEXT: testl $8192, %eax ## imm = 0x2000 4158; AVX512VLDQ-NEXT: jne LBB12_27 4159; AVX512VLDQ-NEXT: LBB12_28: ## %else38 4160; AVX512VLDQ-NEXT: testl $16384, %eax ## imm = 0x4000 4161; AVX512VLDQ-NEXT: jne LBB12_29 4162; AVX512VLDQ-NEXT: LBB12_30: ## %else41 4163; AVX512VLDQ-NEXT: testl $32768, %eax ## imm = 0x8000 4164; AVX512VLDQ-NEXT: jne LBB12_31 4165; AVX512VLDQ-NEXT: LBB12_32: ## %else44 4166; AVX512VLDQ-NEXT: retq 4167; AVX512VLDQ-NEXT: LBB12_1: ## %cond.store 4168; AVX512VLDQ-NEXT: vpextrb $0, %xmm0, (%rdi) 4169; AVX512VLDQ-NEXT: incq %rdi 4170; AVX512VLDQ-NEXT: testb $2, %al 4171; AVX512VLDQ-NEXT: je LBB12_4 4172; AVX512VLDQ-NEXT: LBB12_3: ## %cond.store1 4173; AVX512VLDQ-NEXT: vpextrb $1, %xmm0, (%rdi) 4174; AVX512VLDQ-NEXT: incq %rdi 4175; AVX512VLDQ-NEXT: testb $4, %al 4176; AVX512VLDQ-NEXT: je LBB12_6 4177; AVX512VLDQ-NEXT: LBB12_5: ## %cond.store4 4178; AVX512VLDQ-NEXT: vpextrb $2, %xmm0, (%rdi) 4179; AVX512VLDQ-NEXT: incq %rdi 4180; AVX512VLDQ-NEXT: testb $8, %al 4181; AVX512VLDQ-NEXT: je LBB12_8 4182; AVX512VLDQ-NEXT: LBB12_7: ## %cond.store7 4183; AVX512VLDQ-NEXT: vpextrb $3, %xmm0, (%rdi) 4184; AVX512VLDQ-NEXT: incq %rdi 4185; AVX512VLDQ-NEXT: testb $16, %al 4186; AVX512VLDQ-NEXT: je LBB12_10 4187; AVX512VLDQ-NEXT: LBB12_9: ## %cond.store10 4188; AVX512VLDQ-NEXT: vpextrb $4, %xmm0, (%rdi) 4189; AVX512VLDQ-NEXT: incq %rdi 4190; AVX512VLDQ-NEXT: testb $32, %al 4191; AVX512VLDQ-NEXT: je LBB12_12 4192; AVX512VLDQ-NEXT: LBB12_11: ## %cond.store13 4193; AVX512VLDQ-NEXT: vpextrb $5, %xmm0, (%rdi) 4194; AVX512VLDQ-NEXT: incq %rdi 4195; AVX512VLDQ-NEXT: testb $64, %al 4196; AVX512VLDQ-NEXT: je LBB12_14 4197; AVX512VLDQ-NEXT: LBB12_13: ## %cond.store16 4198; AVX512VLDQ-NEXT: vpextrb $6, %xmm0, (%rdi) 4199; AVX512VLDQ-NEXT: incq %rdi 4200; AVX512VLDQ-NEXT: testb %al, %al 4201; AVX512VLDQ-NEXT: jns LBB12_16 4202; AVX512VLDQ-NEXT: LBB12_15: ## %cond.store19 4203; AVX512VLDQ-NEXT: vpextrb $7, %xmm0, (%rdi) 4204; AVX512VLDQ-NEXT: incq %rdi 4205; AVX512VLDQ-NEXT: testl $256, %eax ## imm = 0x100 4206; AVX512VLDQ-NEXT: je LBB12_18 4207; AVX512VLDQ-NEXT: LBB12_17: ## %cond.store22 4208; AVX512VLDQ-NEXT: vpextrb $8, %xmm0, (%rdi) 4209; AVX512VLDQ-NEXT: incq %rdi 4210; AVX512VLDQ-NEXT: testl $512, %eax ## imm = 0x200 4211; AVX512VLDQ-NEXT: je LBB12_20 4212; AVX512VLDQ-NEXT: LBB12_19: ## %cond.store25 4213; AVX512VLDQ-NEXT: vpextrb $9, %xmm0, (%rdi) 4214; AVX512VLDQ-NEXT: incq %rdi 4215; AVX512VLDQ-NEXT: testl $1024, %eax ## imm = 0x400 4216; AVX512VLDQ-NEXT: je LBB12_22 4217; AVX512VLDQ-NEXT: LBB12_21: ## %cond.store28 4218; AVX512VLDQ-NEXT: vpextrb $10, %xmm0, (%rdi) 4219; AVX512VLDQ-NEXT: incq %rdi 4220; AVX512VLDQ-NEXT: testl $2048, %eax ## imm = 0x800 4221; AVX512VLDQ-NEXT: je LBB12_24 4222; AVX512VLDQ-NEXT: LBB12_23: ## %cond.store31 4223; AVX512VLDQ-NEXT: vpextrb $11, %xmm0, (%rdi) 4224; AVX512VLDQ-NEXT: incq %rdi 4225; AVX512VLDQ-NEXT: testl $4096, %eax ## imm = 0x1000 4226; AVX512VLDQ-NEXT: je LBB12_26 4227; AVX512VLDQ-NEXT: LBB12_25: ## %cond.store34 4228; AVX512VLDQ-NEXT: vpextrb $12, %xmm0, (%rdi) 4229; AVX512VLDQ-NEXT: incq %rdi 4230; AVX512VLDQ-NEXT: testl $8192, %eax ## imm = 0x2000 4231; AVX512VLDQ-NEXT: je LBB12_28 4232; AVX512VLDQ-NEXT: LBB12_27: ## %cond.store37 4233; AVX512VLDQ-NEXT: vpextrb $13, %xmm0, (%rdi) 4234; AVX512VLDQ-NEXT: incq %rdi 4235; AVX512VLDQ-NEXT: testl $16384, %eax ## imm = 0x4000 4236; AVX512VLDQ-NEXT: je LBB12_30 4237; AVX512VLDQ-NEXT: LBB12_29: ## %cond.store40 4238; AVX512VLDQ-NEXT: vpextrb $14, %xmm0, (%rdi) 4239; AVX512VLDQ-NEXT: incq %rdi 4240; AVX512VLDQ-NEXT: testl $32768, %eax ## imm = 0x8000 4241; AVX512VLDQ-NEXT: je LBB12_32 4242; AVX512VLDQ-NEXT: LBB12_31: ## %cond.store43 4243; AVX512VLDQ-NEXT: vpextrb $15, %xmm0, (%rdi) 4244; AVX512VLDQ-NEXT: retq 4245; 4246; AVX512VLBW-LABEL: compressstore_v16i8_v16i8: 4247; AVX512VLBW: ## %bb.0: 4248; AVX512VLBW-NEXT: vptestnmb %xmm1, %xmm1, %k0 4249; AVX512VLBW-NEXT: kmovd %k0, %eax 4250; AVX512VLBW-NEXT: testb $1, %al 4251; AVX512VLBW-NEXT: jne LBB12_1 4252; AVX512VLBW-NEXT: ## %bb.2: ## %else 4253; AVX512VLBW-NEXT: testb $2, %al 4254; AVX512VLBW-NEXT: jne LBB12_3 4255; AVX512VLBW-NEXT: LBB12_4: ## %else2 4256; AVX512VLBW-NEXT: testb $4, %al 4257; AVX512VLBW-NEXT: jne LBB12_5 4258; AVX512VLBW-NEXT: LBB12_6: ## %else5 4259; AVX512VLBW-NEXT: testb $8, %al 4260; AVX512VLBW-NEXT: jne LBB12_7 4261; AVX512VLBW-NEXT: LBB12_8: ## %else8 4262; AVX512VLBW-NEXT: testb $16, %al 4263; AVX512VLBW-NEXT: jne LBB12_9 4264; AVX512VLBW-NEXT: LBB12_10: ## %else11 4265; AVX512VLBW-NEXT: testb $32, %al 4266; AVX512VLBW-NEXT: jne LBB12_11 4267; AVX512VLBW-NEXT: LBB12_12: ## %else14 4268; AVX512VLBW-NEXT: testb $64, %al 4269; AVX512VLBW-NEXT: jne LBB12_13 4270; AVX512VLBW-NEXT: LBB12_14: ## %else17 4271; AVX512VLBW-NEXT: testb %al, %al 4272; AVX512VLBW-NEXT: js LBB12_15 4273; AVX512VLBW-NEXT: LBB12_16: ## %else20 4274; AVX512VLBW-NEXT: testl $256, %eax ## imm = 0x100 4275; AVX512VLBW-NEXT: jne LBB12_17 4276; AVX512VLBW-NEXT: LBB12_18: ## %else23 4277; AVX512VLBW-NEXT: testl $512, %eax ## imm = 0x200 4278; AVX512VLBW-NEXT: jne LBB12_19 4279; AVX512VLBW-NEXT: LBB12_20: ## %else26 4280; AVX512VLBW-NEXT: testl $1024, %eax ## imm = 0x400 4281; AVX512VLBW-NEXT: jne LBB12_21 4282; AVX512VLBW-NEXT: LBB12_22: ## %else29 4283; AVX512VLBW-NEXT: testl $2048, %eax ## imm = 0x800 4284; AVX512VLBW-NEXT: jne LBB12_23 4285; AVX512VLBW-NEXT: LBB12_24: ## %else32 4286; AVX512VLBW-NEXT: testl $4096, %eax ## imm = 0x1000 4287; AVX512VLBW-NEXT: jne LBB12_25 4288; AVX512VLBW-NEXT: LBB12_26: ## %else35 4289; AVX512VLBW-NEXT: testl $8192, %eax ## imm = 0x2000 4290; AVX512VLBW-NEXT: jne LBB12_27 4291; AVX512VLBW-NEXT: LBB12_28: ## %else38 4292; AVX512VLBW-NEXT: testl $16384, %eax ## imm = 0x4000 4293; AVX512VLBW-NEXT: jne LBB12_29 4294; AVX512VLBW-NEXT: LBB12_30: ## %else41 4295; AVX512VLBW-NEXT: testl $32768, %eax ## imm = 0x8000 4296; AVX512VLBW-NEXT: jne LBB12_31 4297; AVX512VLBW-NEXT: LBB12_32: ## %else44 4298; AVX512VLBW-NEXT: retq 4299; AVX512VLBW-NEXT: LBB12_1: ## %cond.store 4300; AVX512VLBW-NEXT: vpextrb $0, %xmm0, (%rdi) 4301; AVX512VLBW-NEXT: incq %rdi 4302; AVX512VLBW-NEXT: testb $2, %al 4303; AVX512VLBW-NEXT: je LBB12_4 4304; AVX512VLBW-NEXT: LBB12_3: ## %cond.store1 4305; AVX512VLBW-NEXT: vpextrb $1, %xmm0, (%rdi) 4306; AVX512VLBW-NEXT: incq %rdi 4307; AVX512VLBW-NEXT: testb $4, %al 4308; AVX512VLBW-NEXT: je LBB12_6 4309; AVX512VLBW-NEXT: LBB12_5: ## %cond.store4 4310; AVX512VLBW-NEXT: vpextrb $2, %xmm0, (%rdi) 4311; AVX512VLBW-NEXT: incq %rdi 4312; AVX512VLBW-NEXT: testb $8, %al 4313; AVX512VLBW-NEXT: je LBB12_8 4314; AVX512VLBW-NEXT: LBB12_7: ## %cond.store7 4315; AVX512VLBW-NEXT: vpextrb $3, %xmm0, (%rdi) 4316; AVX512VLBW-NEXT: incq %rdi 4317; AVX512VLBW-NEXT: testb $16, %al 4318; AVX512VLBW-NEXT: je LBB12_10 4319; AVX512VLBW-NEXT: LBB12_9: ## %cond.store10 4320; AVX512VLBW-NEXT: vpextrb $4, %xmm0, (%rdi) 4321; AVX512VLBW-NEXT: incq %rdi 4322; AVX512VLBW-NEXT: testb $32, %al 4323; AVX512VLBW-NEXT: je LBB12_12 4324; AVX512VLBW-NEXT: LBB12_11: ## %cond.store13 4325; AVX512VLBW-NEXT: vpextrb $5, %xmm0, (%rdi) 4326; AVX512VLBW-NEXT: incq %rdi 4327; AVX512VLBW-NEXT: testb $64, %al 4328; AVX512VLBW-NEXT: je LBB12_14 4329; AVX512VLBW-NEXT: LBB12_13: ## %cond.store16 4330; AVX512VLBW-NEXT: vpextrb $6, %xmm0, (%rdi) 4331; AVX512VLBW-NEXT: incq %rdi 4332; AVX512VLBW-NEXT: testb %al, %al 4333; AVX512VLBW-NEXT: jns LBB12_16 4334; AVX512VLBW-NEXT: LBB12_15: ## %cond.store19 4335; AVX512VLBW-NEXT: vpextrb $7, %xmm0, (%rdi) 4336; AVX512VLBW-NEXT: incq %rdi 4337; AVX512VLBW-NEXT: testl $256, %eax ## imm = 0x100 4338; AVX512VLBW-NEXT: je LBB12_18 4339; AVX512VLBW-NEXT: LBB12_17: ## %cond.store22 4340; AVX512VLBW-NEXT: vpextrb $8, %xmm0, (%rdi) 4341; AVX512VLBW-NEXT: incq %rdi 4342; AVX512VLBW-NEXT: testl $512, %eax ## imm = 0x200 4343; AVX512VLBW-NEXT: je LBB12_20 4344; AVX512VLBW-NEXT: LBB12_19: ## %cond.store25 4345; AVX512VLBW-NEXT: vpextrb $9, %xmm0, (%rdi) 4346; AVX512VLBW-NEXT: incq %rdi 4347; AVX512VLBW-NEXT: testl $1024, %eax ## imm = 0x400 4348; AVX512VLBW-NEXT: je LBB12_22 4349; AVX512VLBW-NEXT: LBB12_21: ## %cond.store28 4350; AVX512VLBW-NEXT: vpextrb $10, %xmm0, (%rdi) 4351; AVX512VLBW-NEXT: incq %rdi 4352; AVX512VLBW-NEXT: testl $2048, %eax ## imm = 0x800 4353; AVX512VLBW-NEXT: je LBB12_24 4354; AVX512VLBW-NEXT: LBB12_23: ## %cond.store31 4355; AVX512VLBW-NEXT: vpextrb $11, %xmm0, (%rdi) 4356; AVX512VLBW-NEXT: incq %rdi 4357; AVX512VLBW-NEXT: testl $4096, %eax ## imm = 0x1000 4358; AVX512VLBW-NEXT: je LBB12_26 4359; AVX512VLBW-NEXT: LBB12_25: ## %cond.store34 4360; AVX512VLBW-NEXT: vpextrb $12, %xmm0, (%rdi) 4361; AVX512VLBW-NEXT: incq %rdi 4362; AVX512VLBW-NEXT: testl $8192, %eax ## imm = 0x2000 4363; AVX512VLBW-NEXT: je LBB12_28 4364; AVX512VLBW-NEXT: LBB12_27: ## %cond.store37 4365; AVX512VLBW-NEXT: vpextrb $13, %xmm0, (%rdi) 4366; AVX512VLBW-NEXT: incq %rdi 4367; AVX512VLBW-NEXT: testl $16384, %eax ## imm = 0x4000 4368; AVX512VLBW-NEXT: je LBB12_30 4369; AVX512VLBW-NEXT: LBB12_29: ## %cond.store40 4370; AVX512VLBW-NEXT: vpextrb $14, %xmm0, (%rdi) 4371; AVX512VLBW-NEXT: incq %rdi 4372; AVX512VLBW-NEXT: testl $32768, %eax ## imm = 0x8000 4373; AVX512VLBW-NEXT: je LBB12_32 4374; AVX512VLBW-NEXT: LBB12_31: ## %cond.store43 4375; AVX512VLBW-NEXT: vpextrb $15, %xmm0, (%rdi) 4376; AVX512VLBW-NEXT: retq 4377 %mask = icmp eq <16 x i8> %trigger, zeroinitializer 4378 call void @llvm.masked.compressstore.v16i8(<16 x i8> %V, ptr %base, <16 x i1> %mask) 4379 ret void 4380} 4381 4382declare void @llvm.masked.compressstore.v16f64(<16 x double>, ptr, <16 x i1>) 4383declare void @llvm.masked.compressstore.v8f64(<8 x double>, ptr, <8 x i1>) 4384declare void @llvm.masked.compressstore.v4f64(<4 x double>, ptr, <4 x i1>) 4385declare void @llvm.masked.compressstore.v2f64(<2 x double>, ptr, <2 x i1>) 4386declare void @llvm.masked.compressstore.v1f64(<1 x double>, ptr, <1 x i1>) 4387 4388declare void @llvm.masked.compressstore.v32f32(<32 x float>, ptr, <32 x i1>) 4389declare void @llvm.masked.compressstore.v16f32(<16 x float>, ptr, <16 x i1>) 4390declare void @llvm.masked.compressstore.v8f32(<8 x float>, ptr, <8 x i1>) 4391declare void @llvm.masked.compressstore.v4f32(<4 x float>, ptr, <4 x i1>) 4392declare void @llvm.masked.compressstore.v2f32(<2 x float>, ptr, <2 x i1>) 4393 4394declare void @llvm.masked.compressstore.v8i64(<8 x i64>, ptr, <8 x i1>) 4395declare void @llvm.masked.compressstore.v4i64(<4 x i64>, ptr, <4 x i1>) 4396declare void @llvm.masked.compressstore.v2i64(<2 x i64>, ptr, <2 x i1>) 4397declare void @llvm.masked.compressstore.v1i64(<1 x i64>, ptr, <1 x i1>) 4398 4399declare void @llvm.masked.compressstore.v16i32(<16 x i32>, ptr, <16 x i1>) 4400declare void @llvm.masked.compressstore.v8i32(<8 x i32>, ptr, <8 x i1>) 4401declare void @llvm.masked.compressstore.v4i32(<4 x i32>, ptr, <4 x i1>) 4402declare void @llvm.masked.compressstore.v2i32(<2 x i32>, ptr, <2 x i1>) 4403 4404declare void @llvm.masked.compressstore.v32i16(<32 x i16>, ptr, <32 x i1>) 4405declare void @llvm.masked.compressstore.v16i16(<16 x i16>, ptr, <16 x i1>) 4406declare void @llvm.masked.compressstore.v8i16(<8 x i16>, ptr, <8 x i1>) 4407declare void @llvm.masked.compressstore.v4i16(<4 x i16>, ptr, <4 x i1>) 4408 4409declare void @llvm.masked.compressstore.v64i8(<64 x i8>, ptr, <64 x i1>) 4410declare void @llvm.masked.compressstore.v32i8(<32 x i8>, ptr, <32 x i1>) 4411declare void @llvm.masked.compressstore.v16i8(<16 x i8>, ptr, <16 x i1>) 4412declare void @llvm.masked.compressstore.v8i8(<8 x i8>, ptr, <8 x i1>) 4413