Home | History | Annotate | Download | only in PowerPC
      1 ; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s
      2 ; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 -enable-no-infs-fp-math -enable-no-nans-fp-math | FileCheck -check-prefix=CHECK-FM %s
      3 target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-v128:128:128-n32:64"
      4 target triple = "powerpc64-unknown-linux-gnu"
      5 
      6 define double @zerocmp1(double %a, double %y, double %z) #0 {
      7 entry:
      8   %cmp = fcmp ult double %a, 0.000000e+00
      9   %z.y = select i1 %cmp, double %z, double %y
     10   ret double %z.y
     11 
     12 ; CHECK: @zerocmp1
     13 ; CHECK-NOT: fsel
     14 ; CHECK: blr
     15 
     16 ; CHECK-FM: @zerocmp1
     17 ; CHECK-FM: fsel 1, 1, 2, 3
     18 ; CHECK-FM: blr
     19 }
     20 
     21 define double @zerocmp2(double %a, double %y, double %z) #0 {
     22 entry:
     23   %cmp = fcmp ogt double %a, 0.000000e+00
     24   %y.z = select i1 %cmp, double %y, double %z
     25   ret double %y.z
     26 
     27 ; CHECK: @zerocmp2
     28 ; CHECK-NOT: fsel
     29 ; CHECK: blr
     30 
     31 ; CHECK-FM: @zerocmp2
     32 ; CHECK-FM: fneg [[REG:[0-9]+]], 1
     33 ; CHECK-FM: fsel 1, [[REG]], 3, 2
     34 ; CHECK-FM: blr
     35 }
     36 
     37 define double @zerocmp3(double %a, double %y, double %z) #0 {
     38 entry:
     39   %cmp = fcmp oeq double %a, 0.000000e+00
     40   %y.z = select i1 %cmp, double %y, double %z
     41   ret double %y.z
     42 
     43 ; CHECK: @zerocmp3
     44 ; CHECK-NOT: fsel
     45 ; CHECK: blr
     46 
     47 ; CHECK-FM: @zerocmp3
     48 ; CHECK-FM: fsel [[REG:[0-9]+]], 1, 2, 3
     49 ; CHECK-FM: fneg [[REG2:[0-9]+]], 1
     50 ; CHECK-FM: fsel 1, [[REG2]], [[REG]], 3
     51 ; CHECK-FM: blr
     52 }
     53 
     54 define double @min1(double %a, double %b) #0 {
     55 entry:
     56   %cmp = fcmp ole double %a, %b
     57   %cond = select i1 %cmp, double %a, double %b
     58   ret double %cond
     59 
     60 ; CHECK: @min1
     61 ; CHECK-NOT: fsel
     62 ; CHECK: blr
     63 
     64 ; CHECK-FM: @min1
     65 ; CHECK-FM: fsub [[REG:[0-9]+]], 2, 1
     66 ; CHECK-FM: fsel 1, [[REG]], 1, 2
     67 ; CHECK-FM: blr
     68 }
     69 
     70 define double @max1(double %a, double %b) #0 {
     71 entry:
     72   %cmp = fcmp oge double %a, %b
     73   %cond = select i1 %cmp, double %a, double %b
     74   ret double %cond
     75 
     76 ; CHECK: @max1
     77 ; CHECK-NOT: fsel
     78 ; CHECK: blr
     79 
     80 ; CHECK-FM: @max1
     81 ; CHECK-FM: fsub [[REG:[0-9]+]], 1, 2
     82 ; CHECK-FM: fsel 1, [[REG]], 1, 2
     83 ; CHECK-FM: blr
     84 }
     85 
     86 define double @cmp1(double %a, double %b, double %y, double %z) #0 {
     87 entry:
     88   %cmp = fcmp ult double %a, %b
     89   %z.y = select i1 %cmp, double %z, double %y
     90   ret double %z.y
     91 
     92 ; CHECK: @cmp1
     93 ; CHECK-NOT: fsel
     94 ; CHECK: blr
     95 
     96 ; CHECK-FM: @cmp1
     97 ; CHECK-FM: fsub [[REG:[0-9]+]], 1, 2
     98 ; CHECK-FM: fsel 1, [[REG]], 3, 4
     99 ; CHECK-FM: blr
    100 }
    101 
    102 define double @cmp2(double %a, double %b, double %y, double %z) #0 {
    103 entry:
    104   %cmp = fcmp ogt double %a, %b
    105   %y.z = select i1 %cmp, double %y, double %z
    106   ret double %y.z
    107 
    108 ; CHECK: @cmp2
    109 ; CHECK-NOT: fsel
    110 ; CHECK: blr
    111 
    112 ; CHECK-FM: @cmp2
    113 ; CHECK-FM: fsub [[REG:[0-9]+]], 2, 1
    114 ; CHECK-FM: fsel 1, [[REG]], 4, 3
    115 ; CHECK-FM: blr
    116 }
    117 
    118 define double @cmp3(double %a, double %b, double %y, double %z) #0 {
    119 entry:
    120   %cmp = fcmp oeq double %a, %b
    121   %y.z = select i1 %cmp, double %y, double %z
    122   ret double %y.z
    123 
    124 ; CHECK: @cmp3
    125 ; CHECK-NOT: fsel
    126 ; CHECK: blr
    127 
    128 ; CHECK-FM: @cmp3
    129 ; CHECK-FM: fsub [[REG:[0-9]+]], 1, 2
    130 ; CHECK-FM: fsel [[REG2:[0-9]+]], [[REG]], 3, 4
    131 ; CHECK-FM: fneg [[REG3:[0-9]+]], [[REG]]
    132 ; CHECK-FM: fsel 1, [[REG3]], [[REG2]], 4
    133 ; CHECK-FM: blr
    134 }
    135 
    136 attributes #0 = { nounwind readnone }
    137 
    138