brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.2 KiB · b67e70e Raw
562 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=SSE,SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE,SSE414; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX1OR2,AVX15; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64-v3 | FileCheck %s --check-prefixes=AVX,AVX1OR2,AVX26; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64-v4 | FileCheck %s --check-prefixes=AVX,AVX5127 8 9; PR66191 - movmsk msb bit extraction10 11define i32 @movmsk_eq_v2i64_0(<2 x i64> %v, i32 %a, i32 %b) {12; SSE-LABEL: movmsk_eq_v2i64_0:13; SSE:       # %bb.0:14; SSE-NEXT:    movl %edi, %eax15; SSE-NEXT:    movmskpd %xmm0, %ecx16; SSE-NEXT:    testb $1, %cl17; SSE-NEXT:    cmovel %esi, %eax18; SSE-NEXT:    retq19;20; AVX-LABEL: movmsk_eq_v2i64_0:21; AVX:       # %bb.0:22; AVX-NEXT:    movl %edi, %eax23; AVX-NEXT:    vmovmskpd %xmm0, %ecx24; AVX-NEXT:    testb $1, %cl25; AVX-NEXT:    cmovel %esi, %eax26; AVX-NEXT:    retq27  %cmp = icmp slt <2 x i64> %v, zeroinitializer28  %msk = bitcast <2 x i1> %cmp to i229  %bit = and i2 %msk, 130  %icmp = icmp eq i2 %bit, 031  %cond = select i1 %icmp, i32 %b, i32 %a32  ret i32 %cond33}34 35define i32 @movmsk_slt_v2i64_1(<2 x i64> %v, i32 %a, i32 %b) {36; SSE-LABEL: movmsk_slt_v2i64_1:37; SSE:       # %bb.0:38; SSE-NEXT:    movl %edi, %eax39; SSE-NEXT:    movmskpd %xmm0, %ecx40; SSE-NEXT:    testb $2, %cl41; SSE-NEXT:    cmovel %esi, %eax42; SSE-NEXT:    retq43;44; AVX-LABEL: movmsk_slt_v2i64_1:45; AVX:       # %bb.0:46; AVX-NEXT:    movl %edi, %eax47; AVX-NEXT:    vmovmskpd %xmm0, %ecx48; AVX-NEXT:    testb $2, %cl49; AVX-NEXT:    cmovel %esi, %eax50; AVX-NEXT:    retq51  %cmp = icmp slt <2 x i64> %v, zeroinitializer52  %msk = bitcast <2 x i1> %cmp to i253  %icmp = icmp slt i2 %msk, 054  %cond = select i1 %icmp, i32 %a, i32 %b55  ret i32 %cond56}57 58define i32 @movmsk_sgt_v2i64_1(<2 x i64> %v, i32 %a, i32 %b) {59; SSE-LABEL: movmsk_sgt_v2i64_1:60; SSE:       # %bb.0:61; SSE-NEXT:    movl %edi, %eax62; SSE-NEXT:    movmskpd %xmm0, %ecx63; SSE-NEXT:    testb $2, %cl64; SSE-NEXT:    cmovnel %esi, %eax65; SSE-NEXT:    retq66;67; AVX-LABEL: movmsk_sgt_v2i64_1:68; AVX:       # %bb.0:69; AVX-NEXT:    movl %edi, %eax70; AVX-NEXT:    vmovmskpd %xmm0, %ecx71; AVX-NEXT:    testb $2, %cl72; AVX-NEXT:    cmovnel %esi, %eax73; AVX-NEXT:    retq74  %cmp = icmp slt <2 x i64> %v, zeroinitializer75  %msk = bitcast <2 x i1> %cmp to i276  %icmp = icmp sgt i2 %msk, -177  %cond = select i1 %icmp, i32 %a, i32 %b78  ret i32 %cond79}80 81define i32 @movmsk_eq_v4i32_0(<4 x i32> %v, i32 %a, i32 %b) {82; SSE-LABEL: movmsk_eq_v4i32_0:83; SSE:       # %bb.0:84; SSE-NEXT:    movl %edi, %eax85; SSE-NEXT:    movmskps %xmm0, %ecx86; SSE-NEXT:    testb $1, %cl87; SSE-NEXT:    cmovel %esi, %eax88; SSE-NEXT:    retq89;90; AVX-LABEL: movmsk_eq_v4i32_0:91; AVX:       # %bb.0:92; AVX-NEXT:    movl %edi, %eax93; AVX-NEXT:    vmovmskps %xmm0, %ecx94; AVX-NEXT:    testb $1, %cl95; AVX-NEXT:    cmovel %esi, %eax96; AVX-NEXT:    retq97  %cmp = icmp slt <4 x i32> %v, zeroinitializer98  %msk = bitcast <4 x i1> %cmp to i499  %bit = and i4 %msk, 1100  %icmp = icmp eq i4 %bit, 0101  %cond = select i1 %icmp, i32 %b, i32 %a102  ret i32 %cond103}104 105define i32 @movmsk_slt_v4i32_3(<4 x i32> %v, i32 %a, i32 %b) {106; SSE-LABEL: movmsk_slt_v4i32_3:107; SSE:       # %bb.0:108; SSE-NEXT:    movl %edi, %eax109; SSE-NEXT:    movmskps %xmm0, %ecx110; SSE-NEXT:    testb $8, %cl111; SSE-NEXT:    cmovel %esi, %eax112; SSE-NEXT:    retq113;114; AVX-LABEL: movmsk_slt_v4i32_3:115; AVX:       # %bb.0:116; AVX-NEXT:    movl %edi, %eax117; AVX-NEXT:    vmovmskps %xmm0, %ecx118; AVX-NEXT:    testb $8, %cl119; AVX-NEXT:    cmovel %esi, %eax120; AVX-NEXT:    retq121  %cmp = icmp slt <4 x i32> %v, zeroinitializer122  %msk = bitcast <4 x i1> %cmp to i4123  %icmp = icmp slt i4 %msk, 0124  %cond = select i1 %icmp, i32 %a, i32 %b125  ret i32 %cond126}127 128define i32 @movmsk_sgt_v4i32_3(<4 x i32> %v, i32 %a, i32 %b) {129; SSE-LABEL: movmsk_sgt_v4i32_3:130; SSE:       # %bb.0:131; SSE-NEXT:    movl %edi, %eax132; SSE-NEXT:    movmskps %xmm0, %ecx133; SSE-NEXT:    testb $8, %cl134; SSE-NEXT:    cmovnel %esi, %eax135; SSE-NEXT:    retq136;137; AVX-LABEL: movmsk_sgt_v4i32_3:138; AVX:       # %bb.0:139; AVX-NEXT:    movl %edi, %eax140; AVX-NEXT:    vmovmskps %xmm0, %ecx141; AVX-NEXT:    testb $8, %cl142; AVX-NEXT:    cmovnel %esi, %eax143; AVX-NEXT:    retq144  %cmp = icmp slt <4 x i32> %v, zeroinitializer145  %msk = bitcast <4 x i1> %cmp to i4146  %icmp = icmp sgt i4 %msk, -1147  %cond = select i1 %icmp, i32 %a, i32 %b148  ret i32 %cond149}150 151define i32 @movmsk_eq_v16i8_0(<16 x i8> %v, i32 %a, i32 %b) {152; SSE-LABEL: movmsk_eq_v16i8_0:153; SSE:       # %bb.0:154; SSE-NEXT:    movl %edi, %eax155; SSE-NEXT:    pmovmskb %xmm0, %ecx156; SSE-NEXT:    testb $1, %cl157; SSE-NEXT:    cmovel %esi, %eax158; SSE-NEXT:    retq159;160; AVX-LABEL: movmsk_eq_v16i8_0:161; AVX:       # %bb.0:162; AVX-NEXT:    movl %edi, %eax163; AVX-NEXT:    vpmovmskb %xmm0, %ecx164; AVX-NEXT:    testb $1, %cl165; AVX-NEXT:    cmovel %esi, %eax166; AVX-NEXT:    retq167  %cmp = icmp slt <16 x i8> %v, zeroinitializer168  %msk = bitcast <16 x i1> %cmp to i16169  %bit = and i16 %msk, 1170  %icmp = icmp eq i16 %bit, 0171  %cond = select i1 %icmp, i32 %b, i32 %a172  ret i32 %cond173}174 175define i32 @movmsk_slt_v16i8_15(<16 x i8> %v, i32 %a, i32 %b) {176; SSE-LABEL: movmsk_slt_v16i8_15:177; SSE:       # %bb.0:178; SSE-NEXT:    movl %edi, %eax179; SSE-NEXT:    pmovmskb %xmm0, %ecx180; SSE-NEXT:    testw %cx, %cx181; SSE-NEXT:    cmovnsl %esi, %eax182; SSE-NEXT:    retq183;184; AVX-LABEL: movmsk_slt_v16i8_15:185; AVX:       # %bb.0:186; AVX-NEXT:    movl %edi, %eax187; AVX-NEXT:    vpmovmskb %xmm0, %ecx188; AVX-NEXT:    testw %cx, %cx189; AVX-NEXT:    cmovnsl %esi, %eax190; AVX-NEXT:    retq191  %cmp = icmp slt <16 x i8> %v, zeroinitializer192  %msk = bitcast <16 x i1> %cmp to i16193  %icmp = icmp slt i16 %msk, 0194  %cond = select i1 %icmp, i32 %a, i32 %b195  ret i32 %cond196}197 198define i32 @movmsk_sgt_v16i8_15(<16 x i8> %v, i32 %a, i32 %b) {199; SSE-LABEL: movmsk_sgt_v16i8_15:200; SSE:       # %bb.0:201; SSE-NEXT:    movl %edi, %eax202; SSE-NEXT:    pmovmskb %xmm0, %ecx203; SSE-NEXT:    testw %cx, %cx204; SSE-NEXT:    cmovsl %esi, %eax205; SSE-NEXT:    retq206;207; AVX-LABEL: movmsk_sgt_v16i8_15:208; AVX:       # %bb.0:209; AVX-NEXT:    movl %edi, %eax210; AVX-NEXT:    vpmovmskb %xmm0, %ecx211; AVX-NEXT:    testw %cx, %cx212; AVX-NEXT:    cmovsl %esi, %eax213; AVX-NEXT:    retq214  %cmp = icmp slt <16 x i8> %v, zeroinitializer215  %msk = bitcast <16 x i1> %cmp to i16216  %icmp = icmp sgt i16 %msk, -1217  %cond = select i1 %icmp, i32 %a, i32 %b218  ret i32 %cond219}220 221define i32 @movmsk_eq_v4i64_0(<4 x i64> %v, i32 %a, i32 %b) {222; SSE-LABEL: movmsk_eq_v4i64_0:223; SSE:       # %bb.0:224; SSE-NEXT:    movl %edi, %eax225; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]226; SSE-NEXT:    movmskps %xmm0, %ecx227; SSE-NEXT:    testb $1, %cl228; SSE-NEXT:    cmovel %esi, %eax229; SSE-NEXT:    retq230;231; AVX-LABEL: movmsk_eq_v4i64_0:232; AVX:       # %bb.0:233; AVX-NEXT:    movl %edi, %eax234; AVX-NEXT:    vmovmskpd %xmm0, %ecx235; AVX-NEXT:    testb $1, %cl236; AVX-NEXT:    cmovel %esi, %eax237; AVX-NEXT:    vzeroupper238; AVX-NEXT:    retq239  %cmp = icmp slt <4 x i64> %v, zeroinitializer240  %msk = bitcast <4 x i1> %cmp to i4241  %bit = and i4 %msk, 1242  %icmp = icmp eq i4 %bit, 0243  %cond = select i1 %icmp, i32 %b, i32 %a244  ret i32 %cond245}246 247define i32 @movmsk_slt_v4i64_3(<4 x i64> %v, i32 %a, i32 %b) {248; SSE-LABEL: movmsk_slt_v4i64_3:249; SSE:       # %bb.0:250; SSE-NEXT:    movl %edi, %eax251; SSE-NEXT:    movmskps %xmm1, %ecx252; SSE-NEXT:    testb $8, %cl253; SSE-NEXT:    cmovel %esi, %eax254; SSE-NEXT:    retq255;256; AVX-LABEL: movmsk_slt_v4i64_3:257; AVX:       # %bb.0:258; AVX-NEXT:    movl %edi, %eax259; AVX-NEXT:    vmovmskpd %ymm0, %ecx260; AVX-NEXT:    testb $8, %cl261; AVX-NEXT:    cmovel %esi, %eax262; AVX-NEXT:    vzeroupper263; AVX-NEXT:    retq264  %cmp = icmp slt <4 x i64> %v, zeroinitializer265  %msk = bitcast <4 x i1> %cmp to i4266  %icmp = icmp slt i4 %msk, 0267  %cond = select i1 %icmp, i32 %a, i32 %b268  ret i32 %cond269}270 271define i32 @movmsk_sgt_v4i64_3(<4 x i64> %v, i32 %a, i32 %b) {272; SSE-LABEL: movmsk_sgt_v4i64_3:273; SSE:       # %bb.0:274; SSE-NEXT:    movl %edi, %eax275; SSE-NEXT:    movmskps %xmm1, %ecx276; SSE-NEXT:    testb $8, %cl277; SSE-NEXT:    cmovnel %esi, %eax278; SSE-NEXT:    retq279;280; AVX-LABEL: movmsk_sgt_v4i64_3:281; AVX:       # %bb.0:282; AVX-NEXT:    movl %edi, %eax283; AVX-NEXT:    vmovmskpd %ymm0, %ecx284; AVX-NEXT:    testb $8, %cl285; AVX-NEXT:    cmovnel %esi, %eax286; AVX-NEXT:    vzeroupper287; AVX-NEXT:    retq288  %cmp = icmp slt <4 x i64> %v, zeroinitializer289  %msk = bitcast <4 x i1> %cmp to i4290  %icmp = icmp sgt i4 %msk, -1291  %cond = select i1 %icmp, i32 %a, i32 %b292  ret i32 %cond293}294 295define i32 @movmsk_eq_v8i32_0(<8 x i32> %v, i32 %a, i32 %b) {296; SSE-LABEL: movmsk_eq_v8i32_0:297; SSE:       # %bb.0:298; SSE-NEXT:    movl %edi, %eax299; SSE-NEXT:    packssdw %xmm0, %xmm0300; SSE-NEXT:    packsswb %xmm0, %xmm0301; SSE-NEXT:    pmovmskb %xmm0, %ecx302; SSE-NEXT:    testb $1, %cl303; SSE-NEXT:    cmovel %esi, %eax304; SSE-NEXT:    retq305;306; AVX-LABEL: movmsk_eq_v8i32_0:307; AVX:       # %bb.0:308; AVX-NEXT:    movl %edi, %eax309; AVX-NEXT:    vmovmskps %xmm0, %ecx310; AVX-NEXT:    testb $1, %cl311; AVX-NEXT:    cmovel %esi, %eax312; AVX-NEXT:    vzeroupper313; AVX-NEXT:    retq314  %cmp = icmp slt <8 x i32> %v, zeroinitializer315  %msk = bitcast <8 x i1> %cmp to i8316  %bit = and i8 %msk, 1317  %icmp = icmp eq i8 %bit, 0318  %cond = select i1 %icmp, i32 %b, i32 %a319  ret i32 %cond320}321 322define i32 @movmsk_eq_v8i32_3(<8 x i32> %v, i32 %a, i32 %b) {323; SSE-LABEL: movmsk_eq_v8i32_3:324; SSE:       # %bb.0:325; SSE-NEXT:    movl %edi, %eax326; SSE-NEXT:    packssdw %xmm0, %xmm0327; SSE-NEXT:    packsswb %xmm0, %xmm0328; SSE-NEXT:    pmovmskb %xmm0, %ecx329; SSE-NEXT:    testb $8, %cl330; SSE-NEXT:    cmovel %esi, %eax331; SSE-NEXT:    retq332;333; AVX-LABEL: movmsk_eq_v8i32_3:334; AVX:       # %bb.0:335; AVX-NEXT:    movl %edi, %eax336; AVX-NEXT:    vmovmskps %xmm0, %ecx337; AVX-NEXT:    testb $8, %cl338; AVX-NEXT:    cmovel %esi, %eax339; AVX-NEXT:    vzeroupper340; AVX-NEXT:    retq341  %cmp = icmp slt <8 x i32> %v, zeroinitializer342  %msk = bitcast <8 x i1> %cmp to i8343  %bit = and i8 %msk, 8344  %icmp = icmp eq i8 %bit, 0345  %cond = select i1 %icmp, i32 %b, i32 %a346  ret i32 %cond347}348 349define i32 @movmsk_slt_v8i32_7(<8 x i32> %v, i32 %a, i32 %b) {350; SSE-LABEL: movmsk_slt_v8i32_7:351; SSE:       # %bb.0:352; SSE-NEXT:    movl %edi, %eax353; SSE-NEXT:    packssdw %xmm1, %xmm0354; SSE-NEXT:    packsswb %xmm0, %xmm0355; SSE-NEXT:    pmovmskb %xmm0, %ecx356; SSE-NEXT:    testb %cl, %cl357; SSE-NEXT:    cmovnsl %esi, %eax358; SSE-NEXT:    retq359;360; AVX-LABEL: movmsk_slt_v8i32_7:361; AVX:       # %bb.0:362; AVX-NEXT:    movl %edi, %eax363; AVX-NEXT:    vmovmskps %ymm0, %ecx364; AVX-NEXT:    testb %cl, %cl365; AVX-NEXT:    cmovnsl %esi, %eax366; AVX-NEXT:    vzeroupper367; AVX-NEXT:    retq368  %cmp = icmp slt <8 x i32> %v, zeroinitializer369  %msk = bitcast <8 x i1> %cmp to i8370  %icmp = icmp slt i8 %msk, 0371  %cond = select i1 %icmp, i32 %a, i32 %b372  ret i32 %cond373}374 375define i32 @movmsk_sgt_v8i32_7(<8 x i32> %v, i32 %a, i32 %b) {376; SSE-LABEL: movmsk_sgt_v8i32_7:377; SSE:       # %bb.0:378; SSE-NEXT:    movl %edi, %eax379; SSE-NEXT:    packssdw %xmm1, %xmm0380; SSE-NEXT:    packsswb %xmm0, %xmm0381; SSE-NEXT:    pmovmskb %xmm0, %ecx382; SSE-NEXT:    testb %cl, %cl383; SSE-NEXT:    cmovsl %esi, %eax384; SSE-NEXT:    retq385;386; AVX-LABEL: movmsk_sgt_v8i32_7:387; AVX:       # %bb.0:388; AVX-NEXT:    movl %edi, %eax389; AVX-NEXT:    vmovmskps %ymm0, %ecx390; AVX-NEXT:    testb %cl, %cl391; AVX-NEXT:    cmovsl %esi, %eax392; AVX-NEXT:    vzeroupper393; AVX-NEXT:    retq394  %cmp = icmp slt <8 x i32> %v, zeroinitializer395  %msk = bitcast <8 x i1> %cmp to i8396  %icmp = icmp sgt i8 %msk, -1397  %cond = select i1 %icmp, i32 %a, i32 %b398  ret i32 %cond399}400 401define i32 @movmsk_eq_v32i8_0(<32 x i8> %v, i32 %a, i32 %b) {402; SSE-LABEL: movmsk_eq_v32i8_0:403; SSE:       # %bb.0:404; SSE-NEXT:    movl %edi, %eax405; SSE-NEXT:    pmovmskb %xmm0, %ecx406; SSE-NEXT:    testb $1, %cl407; SSE-NEXT:    cmovel %esi, %eax408; SSE-NEXT:    retq409;410; AVX-LABEL: movmsk_eq_v32i8_0:411; AVX:       # %bb.0:412; AVX-NEXT:    movl %edi, %eax413; AVX-NEXT:    vpmovmskb %xmm0, %ecx414; AVX-NEXT:    testb $1, %cl415; AVX-NEXT:    cmovel %esi, %eax416; AVX-NEXT:    vzeroupper417; AVX-NEXT:    retq418  %cmp = icmp slt <32 x i8> %v, zeroinitializer419  %msk = bitcast <32 x i1> %cmp to i32420  %bit = and i32 %msk, 1421  %icmp = icmp eq i32 %bit, 0422  %cond = select i1 %icmp, i32 %b, i32 %a423  ret i32 %cond424}425 426define i32 @movmsk_eq_v32i8_30(<32 x i8> %v, i32 %a, i32 %b) {427; SSE-LABEL: movmsk_eq_v32i8_30:428; SSE:       # %bb.0:429; SSE-NEXT:    movl %edi, %eax430; SSE-NEXT:    pmovmskb %xmm1, %ecx431; SSE-NEXT:    shll $16, %ecx432; SSE-NEXT:    testl $1073741824, %ecx # imm = 0x40000000433; SSE-NEXT:    cmovel %esi, %eax434; SSE-NEXT:    retq435;436; AVX1-LABEL: movmsk_eq_v32i8_30:437; AVX1:       # %bb.0:438; AVX1-NEXT:    movl %edi, %eax439; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0440; AVX1-NEXT:    vpmovmskb %xmm0, %ecx441; AVX1-NEXT:    shll $16, %ecx442; AVX1-NEXT:    testl $1073741824, %ecx # imm = 0x40000000443; AVX1-NEXT:    cmovel %esi, %eax444; AVX1-NEXT:    vzeroupper445; AVX1-NEXT:    retq446;447; AVX2-LABEL: movmsk_eq_v32i8_30:448; AVX2:       # %bb.0:449; AVX2-NEXT:    movl %edi, %eax450; AVX2-NEXT:    vpmovmskb %ymm0, %ecx451; AVX2-NEXT:    testl $1073741824, %ecx # imm = 0x40000000452; AVX2-NEXT:    cmovel %esi, %eax453; AVX2-NEXT:    vzeroupper454; AVX2-NEXT:    retq455;456; AVX512-LABEL: movmsk_eq_v32i8_30:457; AVX512:       # %bb.0:458; AVX512-NEXT:    movl %edi, %eax459; AVX512-NEXT:    vpmovmskb %ymm0, %ecx460; AVX512-NEXT:    testl $1073741824, %ecx # imm = 0x40000000461; AVX512-NEXT:    cmovel %esi, %eax462; AVX512-NEXT:    vzeroupper463; AVX512-NEXT:    retq464  %cmp = icmp slt <32 x i8> %v, zeroinitializer465  %msk = bitcast <32 x i1> %cmp to i32466  %bit = and i32 %msk, 1073741824467  %icmp = icmp eq i32 %bit, 0468  %cond = select i1 %icmp, i32 %b, i32 %a469  ret i32 %cond470}471 472define i32 @movmsk_slt_v32i8_31(<32 x i8> %v, i32 %a, i32 %b) {473; SSE-LABEL: movmsk_slt_v32i8_31:474; SSE:       # %bb.0:475; SSE-NEXT:    movl %edi, %eax476; SSE-NEXT:    pmovmskb %xmm1, %ecx477; SSE-NEXT:    testl $32768, %ecx # imm = 0x8000478; SSE-NEXT:    cmovel %esi, %eax479; SSE-NEXT:    retq480;481; AVX1-LABEL: movmsk_slt_v32i8_31:482; AVX1:       # %bb.0:483; AVX1-NEXT:    movl %edi, %eax484; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0485; AVX1-NEXT:    vpmovmskb %xmm0, %ecx486; AVX1-NEXT:    testl $32768, %ecx # imm = 0x8000487; AVX1-NEXT:    cmovel %esi, %eax488; AVX1-NEXT:    vzeroupper489; AVX1-NEXT:    retq490;491; AVX2-LABEL: movmsk_slt_v32i8_31:492; AVX2:       # %bb.0:493; AVX2-NEXT:    movl %edi, %eax494; AVX2-NEXT:    vpmovmskb %ymm0, %ecx495; AVX2-NEXT:    testl %ecx, %ecx496; AVX2-NEXT:    cmovnsl %esi, %eax497; AVX2-NEXT:    vzeroupper498; AVX2-NEXT:    retq499;500; AVX512-LABEL: movmsk_slt_v32i8_31:501; AVX512:       # %bb.0:502; AVX512-NEXT:    movl %edi, %eax503; AVX512-NEXT:    vpmovmskb %ymm0, %ecx504; AVX512-NEXT:    testl %ecx, %ecx505; AVX512-NEXT:    cmovnsl %esi, %eax506; AVX512-NEXT:    vzeroupper507; AVX512-NEXT:    retq508  %cmp = icmp slt <32 x i8> %v, zeroinitializer509  %msk = bitcast <32 x i1> %cmp to i32510  %icmp = icmp slt i32 %msk, 0511  %cond = select i1 %icmp, i32 %a, i32 %b512  ret i32 %cond513}514 515define i32 @movmsk_sgt_v32i8_31(<32 x i8> %v, i32 %a, i32 %b) {516; SSE-LABEL: movmsk_sgt_v32i8_31:517; SSE:       # %bb.0:518; SSE-NEXT:    movl %edi, %eax519; SSE-NEXT:    pmovmskb %xmm1, %ecx520; SSE-NEXT:    testl $32768, %ecx # imm = 0x8000521; SSE-NEXT:    cmovnel %esi, %eax522; SSE-NEXT:    retq523;524; AVX1-LABEL: movmsk_sgt_v32i8_31:525; AVX1:       # %bb.0:526; AVX1-NEXT:    movl %edi, %eax527; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0528; AVX1-NEXT:    vpmovmskb %xmm0, %ecx529; AVX1-NEXT:    testl $32768, %ecx # imm = 0x8000530; AVX1-NEXT:    cmovnel %esi, %eax531; AVX1-NEXT:    vzeroupper532; AVX1-NEXT:    retq533;534; AVX2-LABEL: movmsk_sgt_v32i8_31:535; AVX2:       # %bb.0:536; AVX2-NEXT:    movl %edi, %eax537; AVX2-NEXT:    vpmovmskb %ymm0, %ecx538; AVX2-NEXT:    testl %ecx, %ecx539; AVX2-NEXT:    cmovsl %esi, %eax540; AVX2-NEXT:    vzeroupper541; AVX2-NEXT:    retq542;543; AVX512-LABEL: movmsk_sgt_v32i8_31:544; AVX512:       # %bb.0:545; AVX512-NEXT:    movl %edi, %eax546; AVX512-NEXT:    vpmovmskb %ymm0, %ecx547; AVX512-NEXT:    testl %ecx, %ecx548; AVX512-NEXT:    cmovsl %esi, %eax549; AVX512-NEXT:    vzeroupper550; AVX512-NEXT:    retq551  %cmp = icmp slt <32 x i8> %v, zeroinitializer552  %msk = bitcast <32 x i1> %cmp to i32553  %icmp = icmp sgt i32 %msk, -1554  %cond = select i1 %icmp, i32 %a, i32 %b555  ret i32 %cond556}557 558;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:559; AVX1OR2: {{.*}}560; SSE2: {{.*}}561; SSE41: {{.*}}562