brintos

brintos / llvm-project-archived public Read only

0
0
Text · 20.3 KiB · 921cf88 Raw
583 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=SSE2-SSSE3,SSE23; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefixes=SSE2-SSSE3,SSSE34; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX125; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX126; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl | FileCheck %s --check-prefix=AVX512F7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512vl,+avx512bw | FileCheck %s --check-prefix=AVX512BW8 9define i8 @v8i16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c, <8 x i16> %d) {10; SSE2-SSSE3-LABEL: v8i16:11; SSE2-SSSE3:       # %bb.0:12; SSE2-SSSE3-NEXT:    pcmpgtw %xmm1, %xmm013; SSE2-SSSE3-NEXT:    pcmpgtw %xmm3, %xmm214; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm215; SSE2-SSSE3-NEXT:    packsswb %xmm2, %xmm216; SSE2-SSSE3-NEXT:    pmovmskb %xmm2, %eax17; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax18; SSE2-SSSE3-NEXT:    retq19;20; AVX12-LABEL: v8i16:21; AVX12:       # %bb.0:22; AVX12-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm023; AVX12-NEXT:    vpcmpgtw %xmm3, %xmm2, %xmm124; AVX12-NEXT:    vpand %xmm1, %xmm0, %xmm025; AVX12-NEXT:    vpacksswb %xmm0, %xmm0, %xmm026; AVX12-NEXT:    vpmovmskb %xmm0, %eax27; AVX12-NEXT:    # kill: def $al killed $al killed $eax28; AVX12-NEXT:    retq29;30; AVX512F-LABEL: v8i16:31; AVX512F:       # %bb.0:32; AVX512F-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm033; AVX512F-NEXT:    vpcmpgtw %xmm3, %xmm2, %xmm134; AVX512F-NEXT:    vpand %xmm1, %xmm0, %xmm035; AVX512F-NEXT:    vpmovsxwd %xmm0, %ymm036; AVX512F-NEXT:    vptestmd %ymm0, %ymm0, %k037; AVX512F-NEXT:    kmovw %k0, %eax38; AVX512F-NEXT:    # kill: def $al killed $al killed $eax39; AVX512F-NEXT:    vzeroupper40; AVX512F-NEXT:    retq41;42; AVX512BW-LABEL: v8i16:43; AVX512BW:       # %bb.0:44; AVX512BW-NEXT:    vpcmpgtw %xmm1, %xmm0, %k145; AVX512BW-NEXT:    vpcmpgtw %xmm3, %xmm2, %k0 {%k1}46; AVX512BW-NEXT:    kmovd %k0, %eax47; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax48; AVX512BW-NEXT:    retq49  %x0 = icmp sgt <8 x i16> %a, %b50  %x1 = icmp sgt <8 x i16> %c, %d51  %y = and <8 x i1> %x0, %x152  %res = bitcast <8 x i1> %y to i853  ret i8 %res54}55 56define i4 @v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, <4 x i32> %d) {57; SSE2-SSSE3-LABEL: v4i32:58; SSE2-SSSE3:       # %bb.0:59; SSE2-SSSE3-NEXT:    pcmpgtd %xmm1, %xmm060; SSE2-SSSE3-NEXT:    pcmpgtd %xmm3, %xmm261; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm262; SSE2-SSSE3-NEXT:    movmskps %xmm2, %eax63; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax64; SSE2-SSSE3-NEXT:    retq65;66; AVX12-LABEL: v4i32:67; AVX12:       # %bb.0:68; AVX12-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm069; AVX12-NEXT:    vpcmpgtd %xmm3, %xmm2, %xmm170; AVX12-NEXT:    vpand %xmm1, %xmm0, %xmm071; AVX12-NEXT:    vmovmskps %xmm0, %eax72; AVX12-NEXT:    # kill: def $al killed $al killed $eax73; AVX12-NEXT:    retq74;75; AVX512F-LABEL: v4i32:76; AVX512F:       # %bb.0:77; AVX512F-NEXT:    vpcmpgtd %xmm1, %xmm0, %k178; AVX512F-NEXT:    vpcmpgtd %xmm3, %xmm2, %k0 {%k1}79; AVX512F-NEXT:    kmovw %k0, %eax80; AVX512F-NEXT:    # kill: def $al killed $al killed $eax81; AVX512F-NEXT:    retq82;83; AVX512BW-LABEL: v4i32:84; AVX512BW:       # %bb.0:85; AVX512BW-NEXT:    vpcmpgtd %xmm1, %xmm0, %k186; AVX512BW-NEXT:    vpcmpgtd %xmm3, %xmm2, %k0 {%k1}87; AVX512BW-NEXT:    kmovd %k0, %eax88; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax89; AVX512BW-NEXT:    retq90  %x0 = icmp sgt <4 x i32> %a, %b91  %x1 = icmp sgt <4 x i32> %c, %d92  %y = and <4 x i1> %x0, %x193  %res = bitcast <4 x i1> %y to i494  ret i4 %res95}96 97define i4 @v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d) {98; SSE2-SSSE3-LABEL: v4f32:99; SSE2-SSSE3:       # %bb.0:100; SSE2-SSSE3-NEXT:    cmpltps %xmm0, %xmm1101; SSE2-SSSE3-NEXT:    cmpltps %xmm2, %xmm3102; SSE2-SSSE3-NEXT:    andps %xmm1, %xmm3103; SSE2-SSSE3-NEXT:    movmskps %xmm3, %eax104; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax105; SSE2-SSSE3-NEXT:    retq106;107; AVX12-LABEL: v4f32:108; AVX12:       # %bb.0:109; AVX12-NEXT:    vcmpltps %xmm0, %xmm1, %xmm0110; AVX12-NEXT:    vcmpltps %xmm2, %xmm3, %xmm1111; AVX12-NEXT:    vandps %xmm1, %xmm0, %xmm0112; AVX12-NEXT:    vmovmskps %xmm0, %eax113; AVX12-NEXT:    # kill: def $al killed $al killed $eax114; AVX12-NEXT:    retq115;116; AVX512F-LABEL: v4f32:117; AVX512F:       # %bb.0:118; AVX512F-NEXT:    vcmpltps %xmm0, %xmm1, %k1119; AVX512F-NEXT:    vcmpltps %xmm2, %xmm3, %k0 {%k1}120; AVX512F-NEXT:    kmovw %k0, %eax121; AVX512F-NEXT:    # kill: def $al killed $al killed $eax122; AVX512F-NEXT:    retq123;124; AVX512BW-LABEL: v4f32:125; AVX512BW:       # %bb.0:126; AVX512BW-NEXT:    vcmpltps %xmm0, %xmm1, %k1127; AVX512BW-NEXT:    vcmpltps %xmm2, %xmm3, %k0 {%k1}128; AVX512BW-NEXT:    kmovd %k0, %eax129; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax130; AVX512BW-NEXT:    retq131  %x0 = fcmp ogt <4 x float> %a, %b132  %x1 = fcmp ogt <4 x float> %c, %d133  %y = and <4 x i1> %x0, %x1134  %res = bitcast <4 x i1> %y to i4135  ret i4 %res136}137 138define i16 @v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i8> %d) {139; SSE2-SSSE3-LABEL: v16i8:140; SSE2-SSSE3:       # %bb.0:141; SSE2-SSSE3-NEXT:    pcmpgtb %xmm1, %xmm0142; SSE2-SSSE3-NEXT:    pcmpgtb %xmm3, %xmm2143; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm2144; SSE2-SSSE3-NEXT:    pmovmskb %xmm2, %eax145; SSE2-SSSE3-NEXT:    # kill: def $ax killed $ax killed $eax146; SSE2-SSSE3-NEXT:    retq147;148; AVX12-LABEL: v16i8:149; AVX12:       # %bb.0:150; AVX12-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0151; AVX12-NEXT:    vpcmpgtb %xmm3, %xmm2, %xmm1152; AVX12-NEXT:    vpand %xmm1, %xmm0, %xmm0153; AVX12-NEXT:    vpmovmskb %xmm0, %eax154; AVX12-NEXT:    # kill: def $ax killed $ax killed $eax155; AVX12-NEXT:    retq156;157; AVX512F-LABEL: v16i8:158; AVX512F:       # %bb.0:159; AVX512F-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0160; AVX512F-NEXT:    vpcmpgtb %xmm3, %xmm2, %xmm1161; AVX512F-NEXT:    vpand %xmm1, %xmm0, %xmm0162; AVX512F-NEXT:    vpmovmskb %xmm0, %eax163; AVX512F-NEXT:    # kill: def $ax killed $ax killed $eax164; AVX512F-NEXT:    retq165;166; AVX512BW-LABEL: v16i8:167; AVX512BW:       # %bb.0:168; AVX512BW-NEXT:    vpcmpgtb %xmm1, %xmm0, %k1169; AVX512BW-NEXT:    vpcmpgtb %xmm3, %xmm2, %k0 {%k1}170; AVX512BW-NEXT:    kmovd %k0, %eax171; AVX512BW-NEXT:    # kill: def $ax killed $ax killed $eax172; AVX512BW-NEXT:    retq173  %x0 = icmp sgt <16 x i8> %a, %b174  %x1 = icmp sgt <16 x i8> %c, %d175  %y = and <16 x i1> %x0, %x1176  %res = bitcast <16 x i1> %y to i16177  ret i16 %res178}179 180define i2 @v2i8(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i8> %d) {181; SSE2-LABEL: v2i8:182; SSE2:       # %bb.0:183; SSE2-NEXT:    pcmpgtb %xmm1, %xmm0184; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2185; SSE2-NEXT:    pand %xmm0, %xmm2186; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]187; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm2[0,0,1,1,4,5,6,7]188; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]189; SSE2-NEXT:    movmskpd %xmm0, %eax190; SSE2-NEXT:    # kill: def $al killed $al killed $eax191; SSE2-NEXT:    retq192;193; SSSE3-LABEL: v2i8:194; SSSE3:       # %bb.0:195; SSSE3-NEXT:    pcmpgtb %xmm1, %xmm0196; SSSE3-NEXT:    pcmpgtb %xmm3, %xmm2197; SSSE3-NEXT:    pand %xmm0, %xmm2198; SSSE3-NEXT:    pshufb {{.*#+}} xmm2 = xmm2[u,u,u,u,u,u,u,0,u,u,u,u,u,u,u,1]199; SSSE3-NEXT:    movmskpd %xmm2, %eax200; SSSE3-NEXT:    # kill: def $al killed $al killed $eax201; SSSE3-NEXT:    retq202;203; AVX12-LABEL: v2i8:204; AVX12:       # %bb.0:205; AVX12-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0206; AVX12-NEXT:    vpcmpgtb %xmm3, %xmm2, %xmm1207; AVX12-NEXT:    vpand %xmm1, %xmm0, %xmm0208; AVX12-NEXT:    vpmovsxbq %xmm0, %xmm0209; AVX12-NEXT:    vmovmskpd %xmm0, %eax210; AVX12-NEXT:    # kill: def $al killed $al killed $eax211; AVX12-NEXT:    retq212;213; AVX512F-LABEL: v2i8:214; AVX512F:       # %bb.0:215; AVX512F-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0216; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0217; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0218; AVX512F-NEXT:    vpcmpgtb %xmm3, %xmm2, %xmm0219; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0220; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k1221; AVX512F-NEXT:    kandw %k1, %k0, %k0222; AVX512F-NEXT:    kmovw %k0, %eax223; AVX512F-NEXT:    # kill: def $al killed $al killed $eax224; AVX512F-NEXT:    vzeroupper225; AVX512F-NEXT:    retq226;227; AVX512BW-LABEL: v2i8:228; AVX512BW:       # %bb.0:229; AVX512BW-NEXT:    vpcmpgtb %xmm1, %xmm0, %k0230; AVX512BW-NEXT:    vpcmpgtb %xmm3, %xmm2, %k1231; AVX512BW-NEXT:    kandw %k1, %k0, %k0232; AVX512BW-NEXT:    kmovd %k0, %eax233; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax234; AVX512BW-NEXT:    retq235  %x0 = icmp sgt <2 x i8> %a, %b236  %x1 = icmp sgt <2 x i8> %c, %d237  %y = and <2 x i1> %x0, %x1238  %res = bitcast <2 x i1> %y to i2239  ret i2 %res240}241 242define i2 @v2i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i16> %d) {243; SSE2-SSSE3-LABEL: v2i16:244; SSE2-SSSE3:       # %bb.0:245; SSE2-SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0246; SSE2-SSSE3-NEXT:    pcmpgtw %xmm3, %xmm2247; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm2248; SSE2-SSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm2[0,0,1,1,4,5,6,7]249; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,1,1]250; SSE2-SSSE3-NEXT:    movmskpd %xmm0, %eax251; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax252; SSE2-SSSE3-NEXT:    retq253;254; AVX12-LABEL: v2i16:255; AVX12:       # %bb.0:256; AVX12-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0257; AVX12-NEXT:    vpcmpgtw %xmm3, %xmm2, %xmm1258; AVX12-NEXT:    vpand %xmm1, %xmm0, %xmm0259; AVX12-NEXT:    vpmovsxwq %xmm0, %xmm0260; AVX12-NEXT:    vmovmskpd %xmm0, %eax261; AVX12-NEXT:    # kill: def $al killed $al killed $eax262; AVX12-NEXT:    retq263;264; AVX512F-LABEL: v2i16:265; AVX512F:       # %bb.0:266; AVX512F-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0267; AVX512F-NEXT:    vpmovsxwd %xmm0, %ymm0268; AVX512F-NEXT:    vptestmd %ymm0, %ymm0, %k0269; AVX512F-NEXT:    vpcmpgtw %xmm3, %xmm2, %xmm0270; AVX512F-NEXT:    vpmovsxwd %xmm0, %ymm0271; AVX512F-NEXT:    vptestmd %ymm0, %ymm0, %k1272; AVX512F-NEXT:    kandw %k1, %k0, %k0273; AVX512F-NEXT:    kmovw %k0, %eax274; AVX512F-NEXT:    # kill: def $al killed $al killed $eax275; AVX512F-NEXT:    vzeroupper276; AVX512F-NEXT:    retq277;278; AVX512BW-LABEL: v2i16:279; AVX512BW:       # %bb.0:280; AVX512BW-NEXT:    vpcmpgtw %xmm1, %xmm0, %k0281; AVX512BW-NEXT:    vpcmpgtw %xmm3, %xmm2, %k1282; AVX512BW-NEXT:    kandw %k1, %k0, %k0283; AVX512BW-NEXT:    kmovd %k0, %eax284; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax285; AVX512BW-NEXT:    retq286  %x0 = icmp sgt <2 x i16> %a, %b287  %x1 = icmp sgt <2 x i16> %c, %d288  %y = and <2 x i1> %x0, %x1289  %res = bitcast <2 x i1> %y to i2290  ret i2 %res291}292 293define i2 @v2i32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c, <2 x i32> %d) {294; SSE2-SSSE3-LABEL: v2i32:295; SSE2-SSSE3:       # %bb.0:296; SSE2-SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0297; SSE2-SSSE3-NEXT:    pcmpgtd %xmm3, %xmm2298; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm2299; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,0,1,1]300; SSE2-SSSE3-NEXT:    movmskpd %xmm0, %eax301; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax302; SSE2-SSSE3-NEXT:    retq303;304; AVX12-LABEL: v2i32:305; AVX12:       # %bb.0:306; AVX12-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0307; AVX12-NEXT:    vpcmpgtd %xmm3, %xmm2, %xmm1308; AVX12-NEXT:    vpand %xmm1, %xmm0, %xmm0309; AVX12-NEXT:    vpmovsxdq %xmm0, %xmm0310; AVX12-NEXT:    vmovmskpd %xmm0, %eax311; AVX12-NEXT:    # kill: def $al killed $al killed $eax312; AVX12-NEXT:    retq313;314; AVX512F-LABEL: v2i32:315; AVX512F:       # %bb.0:316; AVX512F-NEXT:    vpcmpgtd %xmm1, %xmm0, %k0317; AVX512F-NEXT:    vpcmpgtd %xmm3, %xmm2, %k1318; AVX512F-NEXT:    kandw %k1, %k0, %k0319; AVX512F-NEXT:    kmovw %k0, %eax320; AVX512F-NEXT:    # kill: def $al killed $al killed $eax321; AVX512F-NEXT:    retq322;323; AVX512BW-LABEL: v2i32:324; AVX512BW:       # %bb.0:325; AVX512BW-NEXT:    vpcmpgtd %xmm1, %xmm0, %k0326; AVX512BW-NEXT:    vpcmpgtd %xmm3, %xmm2, %k1327; AVX512BW-NEXT:    kandw %k1, %k0, %k0328; AVX512BW-NEXT:    kmovd %k0, %eax329; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax330; AVX512BW-NEXT:    retq331  %x0 = icmp sgt <2 x i32> %a, %b332  %x1 = icmp sgt <2 x i32> %c, %d333  %y = and <2 x i1> %x0, %x1334  %res = bitcast <2 x i1> %y to i2335  ret i2 %res336}337 338define i2 @v2i64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c, <2 x i64> %d) {339; SSE2-SSSE3-LABEL: v2i64:340; SSE2-SSSE3:       # %bb.0:341; SSE2-SSSE3-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]342; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm1343; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm0344; SSE2-SSSE3-NEXT:    movdqa %xmm0, %xmm5345; SSE2-SSSE3-NEXT:    pcmpeqd %xmm1, %xmm5346; SSE2-SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0347; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]348; SSE2-SSSE3-NEXT:    pand %xmm5, %xmm1349; SSE2-SSSE3-NEXT:    por %xmm0, %xmm1350; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm3351; SSE2-SSSE3-NEXT:    pxor %xmm4, %xmm2352; SSE2-SSSE3-NEXT:    movdqa %xmm2, %xmm0353; SSE2-SSSE3-NEXT:    pcmpeqd %xmm3, %xmm0354; SSE2-SSSE3-NEXT:    pcmpgtd %xmm3, %xmm2355; SSE2-SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]356; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm3357; SSE2-SSSE3-NEXT:    por %xmm2, %xmm3358; SSE2-SSSE3-NEXT:    pand %xmm1, %xmm3359; SSE2-SSSE3-NEXT:    movmskpd %xmm3, %eax360; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax361; SSE2-SSSE3-NEXT:    retq362;363; AVX12-LABEL: v2i64:364; AVX12:       # %bb.0:365; AVX12-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0366; AVX12-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm1367; AVX12-NEXT:    vpand %xmm1, %xmm0, %xmm0368; AVX12-NEXT:    vmovmskpd %xmm0, %eax369; AVX12-NEXT:    # kill: def $al killed $al killed $eax370; AVX12-NEXT:    retq371;372; AVX512F-LABEL: v2i64:373; AVX512F:       # %bb.0:374; AVX512F-NEXT:    vpcmpgtq %xmm1, %xmm0, %k1375; AVX512F-NEXT:    vpcmpgtq %xmm3, %xmm2, %k0 {%k1}376; AVX512F-NEXT:    kmovw %k0, %eax377; AVX512F-NEXT:    # kill: def $al killed $al killed $eax378; AVX512F-NEXT:    retq379;380; AVX512BW-LABEL: v2i64:381; AVX512BW:       # %bb.0:382; AVX512BW-NEXT:    vpcmpgtq %xmm1, %xmm0, %k1383; AVX512BW-NEXT:    vpcmpgtq %xmm3, %xmm2, %k0 {%k1}384; AVX512BW-NEXT:    kmovd %k0, %eax385; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax386; AVX512BW-NEXT:    retq387  %x0 = icmp sgt <2 x i64> %a, %b388  %x1 = icmp sgt <2 x i64> %c, %d389  %y = and <2 x i1> %x0, %x1390  %res = bitcast <2 x i1> %y to i2391  ret i2 %res392}393 394define i2 @v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c, <2 x double> %d) {395; SSE2-SSSE3-LABEL: v2f64:396; SSE2-SSSE3:       # %bb.0:397; SSE2-SSSE3-NEXT:    cmpltpd %xmm0, %xmm1398; SSE2-SSSE3-NEXT:    cmpltpd %xmm2, %xmm3399; SSE2-SSSE3-NEXT:    andpd %xmm1, %xmm3400; SSE2-SSSE3-NEXT:    movmskpd %xmm3, %eax401; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax402; SSE2-SSSE3-NEXT:    retq403;404; AVX12-LABEL: v2f64:405; AVX12:       # %bb.0:406; AVX12-NEXT:    vcmpltpd %xmm0, %xmm1, %xmm0407; AVX12-NEXT:    vcmpltpd %xmm2, %xmm3, %xmm1408; AVX12-NEXT:    vandpd %xmm1, %xmm0, %xmm0409; AVX12-NEXT:    vmovmskpd %xmm0, %eax410; AVX12-NEXT:    # kill: def $al killed $al killed $eax411; AVX12-NEXT:    retq412;413; AVX512F-LABEL: v2f64:414; AVX512F:       # %bb.0:415; AVX512F-NEXT:    vcmpltpd %xmm0, %xmm1, %k1416; AVX512F-NEXT:    vcmpltpd %xmm2, %xmm3, %k0 {%k1}417; AVX512F-NEXT:    kmovw %k0, %eax418; AVX512F-NEXT:    # kill: def $al killed $al killed $eax419; AVX512F-NEXT:    retq420;421; AVX512BW-LABEL: v2f64:422; AVX512BW:       # %bb.0:423; AVX512BW-NEXT:    vcmpltpd %xmm0, %xmm1, %k1424; AVX512BW-NEXT:    vcmpltpd %xmm2, %xmm3, %k0 {%k1}425; AVX512BW-NEXT:    kmovd %k0, %eax426; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax427; AVX512BW-NEXT:    retq428  %x0 = fcmp ogt <2 x double> %a, %b429  %x1 = fcmp ogt <2 x double> %c, %d430  %y = and <2 x i1> %x0, %x1431  %res = bitcast <2 x i1> %y to i2432  ret i2 %res433}434 435define i4 @v4i8(<4 x i8> %a, <4 x i8> %b, <4 x i8> %c, <4 x i8> %d) {436; SSE2-SSSE3-LABEL: v4i8:437; SSE2-SSSE3:       # %bb.0:438; SSE2-SSSE3-NEXT:    pcmpgtb %xmm1, %xmm0439; SSE2-SSSE3-NEXT:    pcmpgtb %xmm3, %xmm2440; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm2441; SSE2-SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]442; SSE2-SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3]443; SSE2-SSSE3-NEXT:    movmskps %xmm2, %eax444; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax445; SSE2-SSSE3-NEXT:    retq446;447; AVX12-LABEL: v4i8:448; AVX12:       # %bb.0:449; AVX12-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0450; AVX12-NEXT:    vpcmpgtb %xmm3, %xmm2, %xmm1451; AVX12-NEXT:    vpand %xmm1, %xmm0, %xmm0452; AVX12-NEXT:    vpmovsxbd %xmm0, %xmm0453; AVX12-NEXT:    vmovmskps %xmm0, %eax454; AVX12-NEXT:    # kill: def $al killed $al killed $eax455; AVX12-NEXT:    retq456;457; AVX512F-LABEL: v4i8:458; AVX512F:       # %bb.0:459; AVX512F-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0460; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0461; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0462; AVX512F-NEXT:    vpcmpgtb %xmm3, %xmm2, %xmm0463; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0464; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k1465; AVX512F-NEXT:    kandw %k1, %k0, %k0466; AVX512F-NEXT:    kmovw %k0, %eax467; AVX512F-NEXT:    # kill: def $al killed $al killed $eax468; AVX512F-NEXT:    vzeroupper469; AVX512F-NEXT:    retq470;471; AVX512BW-LABEL: v4i8:472; AVX512BW:       # %bb.0:473; AVX512BW-NEXT:    vpcmpgtb %xmm1, %xmm0, %k0474; AVX512BW-NEXT:    vpcmpgtb %xmm3, %xmm2, %k1475; AVX512BW-NEXT:    kandw %k1, %k0, %k0476; AVX512BW-NEXT:    kmovd %k0, %eax477; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax478; AVX512BW-NEXT:    retq479  %x0 = icmp sgt <4 x i8> %a, %b480  %x1 = icmp sgt <4 x i8> %c, %d481  %y = and <4 x i1> %x0, %x1482  %res = bitcast <4 x i1> %y to i4483  ret i4 %res484}485 486define i4 @v4i16(<4 x i16> %a, <4 x i16> %b, <4 x i16> %c, <4 x i16> %d) {487; SSE2-SSSE3-LABEL: v4i16:488; SSE2-SSSE3:       # %bb.0:489; SSE2-SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0490; SSE2-SSSE3-NEXT:    pcmpgtw %xmm3, %xmm2491; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm2492; SSE2-SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3]493; SSE2-SSSE3-NEXT:    movmskps %xmm2, %eax494; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax495; SSE2-SSSE3-NEXT:    retq496;497; AVX12-LABEL: v4i16:498; AVX12:       # %bb.0:499; AVX12-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0500; AVX12-NEXT:    vpcmpgtw %xmm3, %xmm2, %xmm1501; AVX12-NEXT:    vpand %xmm1, %xmm0, %xmm0502; AVX12-NEXT:    vpmovsxwd %xmm0, %xmm0503; AVX12-NEXT:    vmovmskps %xmm0, %eax504; AVX12-NEXT:    # kill: def $al killed $al killed $eax505; AVX12-NEXT:    retq506;507; AVX512F-LABEL: v4i16:508; AVX512F:       # %bb.0:509; AVX512F-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0510; AVX512F-NEXT:    vpmovsxwd %xmm0, %ymm0511; AVX512F-NEXT:    vptestmd %ymm0, %ymm0, %k0512; AVX512F-NEXT:    vpcmpgtw %xmm3, %xmm2, %xmm0513; AVX512F-NEXT:    vpmovsxwd %xmm0, %ymm0514; AVX512F-NEXT:    vptestmd %ymm0, %ymm0, %k1515; AVX512F-NEXT:    kandw %k1, %k0, %k0516; AVX512F-NEXT:    kmovw %k0, %eax517; AVX512F-NEXT:    # kill: def $al killed $al killed $eax518; AVX512F-NEXT:    vzeroupper519; AVX512F-NEXT:    retq520;521; AVX512BW-LABEL: v4i16:522; AVX512BW:       # %bb.0:523; AVX512BW-NEXT:    vpcmpgtw %xmm1, %xmm0, %k0524; AVX512BW-NEXT:    vpcmpgtw %xmm3, %xmm2, %k1525; AVX512BW-NEXT:    kandw %k1, %k0, %k0526; AVX512BW-NEXT:    kmovd %k0, %eax527; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax528; AVX512BW-NEXT:    retq529  %x0 = icmp sgt <4 x i16> %a, %b530  %x1 = icmp sgt <4 x i16> %c, %d531  %y = and <4 x i1> %x0, %x1532  %res = bitcast <4 x i1> %y to i4533  ret i4 %res534}535 536define i8 @v8i8(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c, <8 x i8> %d) {537; SSE2-SSSE3-LABEL: v8i8:538; SSE2-SSSE3:       # %bb.0:539; SSE2-SSSE3-NEXT:    pcmpgtb %xmm1, %xmm0540; SSE2-SSSE3-NEXT:    pcmpgtb %xmm3, %xmm2541; SSE2-SSSE3-NEXT:    pand %xmm0, %xmm2542; SSE2-SSSE3-NEXT:    pmovmskb %xmm2, %eax543; SSE2-SSSE3-NEXT:    # kill: def $al killed $al killed $eax544; SSE2-SSSE3-NEXT:    retq545;546; AVX12-LABEL: v8i8:547; AVX12:       # %bb.0:548; AVX12-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0549; AVX12-NEXT:    vpcmpgtb %xmm3, %xmm2, %xmm1550; AVX12-NEXT:    vpand %xmm1, %xmm0, %xmm0551; AVX12-NEXT:    vpmovmskb %xmm0, %eax552; AVX12-NEXT:    # kill: def $al killed $al killed $eax553; AVX12-NEXT:    retq554;555; AVX512F-LABEL: v8i8:556; AVX512F:       # %bb.0:557; AVX512F-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0558; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0559; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0560; AVX512F-NEXT:    vpcmpgtb %xmm3, %xmm2, %xmm0561; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0562; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k1563; AVX512F-NEXT:    kandw %k1, %k0, %k0564; AVX512F-NEXT:    kmovw %k0, %eax565; AVX512F-NEXT:    # kill: def $al killed $al killed $eax566; AVX512F-NEXT:    vzeroupper567; AVX512F-NEXT:    retq568;569; AVX512BW-LABEL: v8i8:570; AVX512BW:       # %bb.0:571; AVX512BW-NEXT:    vpcmpgtb %xmm1, %xmm0, %k0572; AVX512BW-NEXT:    vpcmpgtb %xmm3, %xmm2, %k1573; AVX512BW-NEXT:    kandw %k1, %k0, %k0574; AVX512BW-NEXT:    kmovd %k0, %eax575; AVX512BW-NEXT:    # kill: def $al killed $al killed $eax576; AVX512BW-NEXT:    retq577  %x0 = icmp sgt <8 x i8> %a, %b578  %x1 = icmp sgt <8 x i8> %c, %d579  %y = and <8 x i1> %x0, %x1580  %res = bitcast <8 x i1> %y to i8581  ret i8 %res582}583