Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=sse2 | FileCheck %s -check-prefix=SSE2
      2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=sse41 | FileCheck %s -check-prefix=SSE41
      3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=avx | FileCheck %s -check-prefix=AVX
      4 
      5 define <16 x i8> @v16i8_icmp_uge(<16 x i8> %a, <16 x i8> %b) nounwind readnone ssp uwtable {
      6   %1 = icmp uge <16 x i8> %a, %b
      7   %2 = sext <16 x i1> %1 to <16 x i8>
      8   ret <16 x i8> %2
      9 ; SSE2-LABEL: v16i8_icmp_uge:
     10 ; SSE2: pmaxub  %xmm0, %xmm1
     11 ; SSE2: pcmpeqb %xmm1, %xmm0
     12 
     13 ; SSE41-LABEL: v16i8_icmp_uge:
     14 ; SSE41: pmaxub  %xmm0, %xmm1
     15 ; SSE41: pcmpeqb %xmm1, %xmm0
     16 
     17 ; AVX-LABEL: v16i8_icmp_uge:
     18 ; AVX: vpmaxub  %xmm1, %xmm0, %xmm1
     19 ; AVX: vpcmpeqb %xmm1, %xmm0, %xmm0
     20 }
     21 
     22 define <16 x i8> @v16i8_icmp_ule(<16 x i8> %a, <16 x i8> %b) nounwind readnone ssp uwtable {
     23   %1 = icmp ule <16 x i8> %a, %b
     24   %2 = sext <16 x i1> %1 to <16 x i8>
     25   ret <16 x i8> %2
     26 ; SSE2-LABEL: v16i8_icmp_ule:
     27 ; SSE2: pminub  %xmm0, %xmm1
     28 ; SSE2: pcmpeqb %xmm1, %xmm0
     29 
     30 ; SSE41-LABEL: v16i8_icmp_ule:
     31 ; SSE41: pminub  %xmm0, %xmm1
     32 ; SSE41: pcmpeqb %xmm1, %xmm0
     33 
     34 ; AVX-LABEL: v16i8_icmp_ule:
     35 ; AVX: vpminub  %xmm1, %xmm0, %xmm1
     36 ; AVX: vpcmpeqb %xmm1, %xmm0, %xmm0
     37 }
     38 
     39 
     40 define <8 x i16> @v8i16_icmp_uge(<8 x i16> %a, <8 x i16> %b) nounwind readnone ssp uwtable {
     41   %1 = icmp uge <8 x i16> %a, %b
     42   %2 = sext <8 x i1> %1 to <8 x i16>
     43   ret <8 x i16> %2
     44 ; SSE2-LABEL: v8i16_icmp_uge:
     45 ; SSE2: movdqa  {{.*}}(%rip), %xmm2
     46 ; SEE2: pxor    %xmm2, %xmm0
     47 ; SSE2: pxor    %xmm1, %xmm2
     48 ; SSE2: pcmpgtw %xmm0, %xmm2
     49 ; SSE2: pcmpeqd %xmm0, %xmm0
     50 ; SSE2: pxor    %xmm2, %xmm0
     51 
     52 ; SSE41-LABEL: v8i16_icmp_uge:
     53 ; SSE41: pmaxuw  %xmm0, %xmm1
     54 ; SSE41: pcmpeqw %xmm1, %xmm0
     55 
     56 ; AVX-LABEL: v8i16_icmp_uge:
     57 ; AVX: vpmaxuw  %xmm1, %xmm0, %xmm1
     58 ; AVX: vpcmpeqw %xmm1, %xmm0, %xmm0
     59 }
     60 
     61 define <8 x i16> @v8i16_icmp_ule(<8 x i16> %a, <8 x i16> %b) nounwind readnone ssp uwtable {
     62   %1 = icmp ule <8 x i16> %a, %b
     63   %2 = sext <8 x i1> %1 to <8 x i16>
     64   ret <8 x i16> %2
     65 ; SSE2-LABEL: v8i16_icmp_ule:
     66 ; SSE2: movdqa  {{.*}}(%rip), %xmm2
     67 ; SSE2: pxor    %xmm2, %xmm1
     68 ; SSE2: pxor    %xmm2, %xmm0
     69 ; SSE2: pcmpgtw %xmm1, %xmm0
     70 ; SSE2: pcmpeqd %xmm1, %xmm1
     71 ; SSE2: pxor    %xmm0, %xmm1
     72 ; SSE2: movdqa  %xmm1, %xmm0
     73 
     74 ; SSE41-LABEL: v8i16_icmp_ule:
     75 ; SSE41: pminuw  %xmm0, %xmm1
     76 ; SSE41: pcmpeqw %xmm1, %xmm0
     77 
     78 ; AVX-LABEL: v8i16_icmp_ule:
     79 ; AVX: vpminuw  %xmm1, %xmm0, %xmm1
     80 ; AVX: vpcmpeqw %xmm1, %xmm0, %xmm0
     81 }
     82 
     83 
     84 define <4 x i32> @v4i32_icmp_uge(<4 x i32> %a, <4 x i32> %b) nounwind readnone ssp uwtable {
     85   %1 = icmp uge <4 x i32> %a, %b
     86   %2 = sext <4 x i1> %1 to <4 x i32>
     87   ret <4 x i32> %2
     88 ; SSE2-LABEL: v4i32_icmp_uge:
     89 ; SSE2: movdqa  {{.*}}(%rip), %xmm2
     90 ; SSE2: pxor    %xmm2, %xmm0
     91 ; SSE2: pxor    %xmm1, %xmm2
     92 ; SSE2: pcmpgtd %xmm0, %xmm2
     93 ; SSE2: pcmpeqd %xmm0, %xmm0
     94 ; SSE2: pxor    %xmm2, %xmm0
     95 
     96 ; SSE41-LABEL: v4i32_icmp_uge:
     97 ; SSE41: pmaxud  %xmm0, %xmm1
     98 ; SSE41: pcmpeqd %xmm1, %xmm0
     99 
    100 ; AVX-LABEL: v4i32_icmp_uge:
    101 ; AVX: vpmaxud  %xmm1, %xmm0, %xmm1
    102 ; AVX: vpcmpeqd %xmm1, %xmm0, %xmm0
    103 }
    104 
    105 define <4 x i32> @v4i32_icmp_ule(<4 x i32> %a, <4 x i32> %b) nounwind readnone ssp uwtable {
    106   %1 = icmp ule <4 x i32> %a, %b
    107   %2 = sext <4 x i1> %1 to <4 x i32>
    108   ret <4 x i32> %2
    109 ; SSE2-LABEL: v4i32_icmp_ule:
    110 ; SSE2: movdqa  {{.*}}(%rip), %xmm2
    111 ; SSE2: pxor    %xmm2, %xmm1
    112 ; SSE2: pxor    %xmm2, %xmm0
    113 ; SSE2: pcmpgtd %xmm1, %xmm0
    114 ; SSE2: pcmpeqd %xmm1, %xmm1
    115 ; SSE2: pxor    %xmm0, %xmm1
    116 ; SSE2: movdqa  %xmm1, %xmm0
    117 
    118 ; SSE41-LABEL: v4i32_icmp_ule:
    119 ; SSE41: pminud  %xmm0, %xmm1
    120 ; SSE41: pcmpeqd %xmm1, %xmm0
    121 
    122 ; AVX-LABEL: v4i32_icmp_ule:
    123 ; AVX: pminud  %xmm1, %xmm0, %xmm1
    124 ; AVX: pcmpeqd %xmm1, %xmm0, %xmm0
    125 }
    126 
    127