Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=sse4.2 | FileCheck %s
      3 
      4 define double @test1(double %a, double %b, double %eps) {
      5 ; CHECK-LABEL: test1:
      6 ; CHECK:       # %bb.0:
      7 ; CHECK-NEXT:    cmpltsd %xmm2, %xmm0
      8 ; CHECK-NEXT:    andpd %xmm1, %xmm0
      9 ; CHECK-NEXT:    retq
     10   %cmp = fcmp olt double %a, %eps
     11   %cond = select i1 %cmp, double %b, double 0.000000e+00
     12   ret double %cond
     13 }
     14 
     15 define double @test2(double %a, double %b, double %eps) {
     16 ; CHECK-LABEL: test2:
     17 ; CHECK:       # %bb.0:
     18 ; CHECK-NEXT:    cmplesd %xmm2, %xmm0
     19 ; CHECK-NEXT:    andpd %xmm1, %xmm0
     20 ; CHECK-NEXT:    retq
     21   %cmp = fcmp ole double %a, %eps
     22   %cond = select i1 %cmp, double %b, double 0.000000e+00
     23   ret double %cond
     24 }
     25 
     26 define double @test3(double %a, double %b, double %eps) {
     27 ; CHECK-LABEL: test3:
     28 ; CHECK:       # %bb.0:
     29 ; CHECK-NEXT:    cmpltsd %xmm0, %xmm2
     30 ; CHECK-NEXT:    andpd %xmm1, %xmm2
     31 ; CHECK-NEXT:    movapd %xmm2, %xmm0
     32 ; CHECK-NEXT:    retq
     33   %cmp = fcmp ogt double %a, %eps
     34   %cond = select i1 %cmp, double %b, double 0.000000e+00
     35   ret double %cond
     36 }
     37 
     38 define double @test4(double %a, double %b, double %eps) {
     39 ; CHECK-LABEL: test4:
     40 ; CHECK:       # %bb.0:
     41 ; CHECK-NEXT:    cmplesd %xmm0, %xmm2
     42 ; CHECK-NEXT:    andpd %xmm1, %xmm2
     43 ; CHECK-NEXT:    movapd %xmm2, %xmm0
     44 ; CHECK-NEXT:    retq
     45   %cmp = fcmp oge double %a, %eps
     46   %cond = select i1 %cmp, double %b, double 0.000000e+00
     47   ret double %cond
     48 }
     49 
     50 define double @test5(double %a, double %b, double %eps) {
     51 ; CHECK-LABEL: test5:
     52 ; CHECK:       # %bb.0:
     53 ; CHECK-NEXT:    cmpltsd %xmm2, %xmm0
     54 ; CHECK-NEXT:    andnpd %xmm1, %xmm0
     55 ; CHECK-NEXT:    retq
     56   %cmp = fcmp olt double %a, %eps
     57   %cond = select i1 %cmp, double 0.000000e+00, double %b
     58   ret double %cond
     59 }
     60 
     61 define double @test6(double %a, double %b, double %eps) {
     62 ; CHECK-LABEL: test6:
     63 ; CHECK:       # %bb.0:
     64 ; CHECK-NEXT:    cmplesd %xmm2, %xmm0
     65 ; CHECK-NEXT:    andnpd %xmm1, %xmm0
     66 ; CHECK-NEXT:    retq
     67   %cmp = fcmp ole double %a, %eps
     68   %cond = select i1 %cmp, double 0.000000e+00, double %b
     69   ret double %cond
     70 }
     71 
     72 define double @test7(double %a, double %b, double %eps) {
     73 ; CHECK-LABEL: test7:
     74 ; CHECK:       # %bb.0:
     75 ; CHECK-NEXT:    cmpltsd %xmm0, %xmm2
     76 ; CHECK-NEXT:    andnpd %xmm1, %xmm2
     77 ; CHECK-NEXT:    movapd %xmm2, %xmm0
     78 ; CHECK-NEXT:    retq
     79   %cmp = fcmp ogt double %a, %eps
     80   %cond = select i1 %cmp, double 0.000000e+00, double %b
     81   ret double %cond
     82 }
     83 
     84 define double @test8(double %a, double %b, double %eps) {
     85 ; CHECK-LABEL: test8:
     86 ; CHECK:       # %bb.0:
     87 ; CHECK-NEXT:    cmplesd %xmm0, %xmm2
     88 ; CHECK-NEXT:    andnpd %xmm1, %xmm2
     89 ; CHECK-NEXT:    movapd %xmm2, %xmm0
     90 ; CHECK-NEXT:    retq
     91   %cmp = fcmp oge double %a, %eps
     92   %cond = select i1 %cmp, double 0.000000e+00, double %b
     93   ret double %cond
     94 }
     95 
     96 define float @test9(float %a, float %b, float %eps) {
     97 ; CHECK-LABEL: test9:
     98 ; CHECK:       # %bb.0:
     99 ; CHECK-NEXT:    cmpltss %xmm2, %xmm0
    100 ; CHECK-NEXT:    andps %xmm1, %xmm0
    101 ; CHECK-NEXT:    retq
    102   %cmp = fcmp olt float %a, %eps
    103   %cond = select i1 %cmp, float %b, float 0.000000e+00
    104   ret float %cond
    105 }
    106 
    107 define float @test10(float %a, float %b, float %eps) {
    108 ; CHECK-LABEL: test10:
    109 ; CHECK:       # %bb.0:
    110 ; CHECK-NEXT:    cmpless %xmm2, %xmm0
    111 ; CHECK-NEXT:    andps %xmm1, %xmm0
    112 ; CHECK-NEXT:    retq
    113   %cmp = fcmp ole float %a, %eps
    114   %cond = select i1 %cmp, float %b, float 0.000000e+00
    115   ret float %cond
    116 }
    117 
    118 define float @test11(float %a, float %b, float %eps) {
    119 ; CHECK-LABEL: test11:
    120 ; CHECK:       # %bb.0:
    121 ; CHECK-NEXT:    cmpltss %xmm0, %xmm2
    122 ; CHECK-NEXT:    andps %xmm1, %xmm2
    123 ; CHECK-NEXT:    movaps %xmm2, %xmm0
    124 ; CHECK-NEXT:    retq
    125   %cmp = fcmp ogt float %a, %eps
    126   %cond = select i1 %cmp, float %b, float 0.000000e+00
    127   ret float %cond
    128 }
    129 
    130 define float @test12(float %a, float %b, float %eps) {
    131 ; CHECK-LABEL: test12:
    132 ; CHECK:       # %bb.0:
    133 ; CHECK-NEXT:    cmpless %xmm0, %xmm2
    134 ; CHECK-NEXT:    andps %xmm1, %xmm2
    135 ; CHECK-NEXT:    movaps %xmm2, %xmm0
    136 ; CHECK-NEXT:    retq
    137   %cmp = fcmp oge float %a, %eps
    138   %cond = select i1 %cmp, float %b, float 0.000000e+00
    139   ret float %cond
    140 }
    141 
    142 define float @test13(float %a, float %b, float %eps) {
    143 ; CHECK-LABEL: test13:
    144 ; CHECK:       # %bb.0:
    145 ; CHECK-NEXT:    cmpltss %xmm2, %xmm0
    146 ; CHECK-NEXT:    andnps %xmm1, %xmm0
    147 ; CHECK-NEXT:    retq
    148   %cmp = fcmp olt float %a, %eps
    149   %cond = select i1 %cmp, float 0.000000e+00, float %b
    150   ret float %cond
    151 }
    152 
    153 define float @test14(float %a, float %b, float %eps) {
    154 ; CHECK-LABEL: test14:
    155 ; CHECK:       # %bb.0:
    156 ; CHECK-NEXT:    cmpless %xmm2, %xmm0
    157 ; CHECK-NEXT:    andnps %xmm1, %xmm0
    158 ; CHECK-NEXT:    retq
    159   %cmp = fcmp ole float %a, %eps
    160   %cond = select i1 %cmp, float 0.000000e+00, float %b
    161   ret float %cond
    162 }
    163 
    164 define float @test15(float %a, float %b, float %eps) {
    165 ; CHECK-LABEL: test15:
    166 ; CHECK:       # %bb.0:
    167 ; CHECK-NEXT:    cmpltss %xmm0, %xmm2
    168 ; CHECK-NEXT:    andnps %xmm1, %xmm2
    169 ; CHECK-NEXT:    movaps %xmm2, %xmm0
    170 ; CHECK-NEXT:    retq
    171   %cmp = fcmp ogt float %a, %eps
    172   %cond = select i1 %cmp, float 0.000000e+00, float %b
    173   ret float %cond
    174 }
    175 
    176 define float @test16(float %a, float %b, float %eps) {
    177 ; CHECK-LABEL: test16:
    178 ; CHECK:       # %bb.0:
    179 ; CHECK-NEXT:    cmpless %xmm0, %xmm2
    180 ; CHECK-NEXT:    andnps %xmm1, %xmm2
    181 ; CHECK-NEXT:    movaps %xmm2, %xmm0
    182 ; CHECK-NEXT:    retq
    183   %cmp = fcmp oge float %a, %eps
    184   %cond = select i1 %cmp, float 0.000000e+00, float %b
    185   ret float %cond
    186 }
    187 
    188 define float @test17(float %a, float %b, float %c, float %eps) {
    189 ; CHECK-LABEL: test17:
    190 ; CHECK:       # %bb.0:
    191 ; CHECK-NEXT:    cmpless %xmm0, %xmm3
    192 ; CHECK-NEXT:    andps %xmm3, %xmm2
    193 ; CHECK-NEXT:    andnps %xmm1, %xmm3
    194 ; CHECK-NEXT:    orps %xmm2, %xmm3
    195 ; CHECK-NEXT:    movaps %xmm3, %xmm0
    196 ; CHECK-NEXT:    retq
    197   %cmp = fcmp oge float %a, %eps
    198   %cond = select i1 %cmp, float %c, float %b
    199   ret float %cond
    200 }
    201 
    202 define double @test18(double %a, double %b, double %c, double %eps) {
    203 ; CHECK-LABEL: test18:
    204 ; CHECK:       # %bb.0:
    205 ; CHECK-NEXT:    cmplesd %xmm0, %xmm3
    206 ; CHECK-NEXT:    andpd %xmm3, %xmm2
    207 ; CHECK-NEXT:    andnpd %xmm1, %xmm3
    208 ; CHECK-NEXT:    orpd %xmm2, %xmm3
    209 ; CHECK-NEXT:    movapd %xmm3, %xmm0
    210 ; CHECK-NEXT:    retq
    211   %cmp = fcmp oge double %a, %eps
    212   %cond = select i1 %cmp, double %c, double %b
    213   ret double %cond
    214 }
    215 
    216