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                        | FileCheck %s --check-prefixes=ANY,STRICT
      3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -enable-unsafe-fp-math | FileCheck %s --check-prefixes=ANY,UNSAFE
      4 
      5 define float @fadd_zero(float %x) {
      6 ; STRICT-LABEL: fadd_zero:
      7 ; STRICT:       # %bb.0:
      8 ; STRICT-NEXT:    xorps %xmm1, %xmm1
      9 ; STRICT-NEXT:    addss %xmm1, %xmm0
     10 ; STRICT-NEXT:    retq
     11 ;
     12 ; UNSAFE-LABEL: fadd_zero:
     13 ; UNSAFE:       # %bb.0:
     14 ; UNSAFE-NEXT:    retq
     15   %r = fadd float %x, 0.0
     16   ret float %r
     17 }
     18 
     19 define float @fadd_negzero(float %x) {
     20 ; ANY-LABEL: fadd_negzero:
     21 ; ANY:       # %bb.0:
     22 ; ANY-NEXT:    retq
     23   %r = fadd float %x, -0.0
     24   ret float %r
     25 }
     26 
     27 define float @fadd_produce_zero(float %x) {
     28 ; ANY-LABEL: fadd_produce_zero:
     29 ; ANY:       # %bb.0:
     30 ; ANY-NEXT:    xorps %xmm0, %xmm0
     31 ; ANY-NEXT:    retq
     32   %neg = fsub nsz float 0.0, %x
     33   %r = fadd nnan float %neg, %x
     34   ret float %r
     35 }
     36 
     37 define float @fadd_reassociate(float %x) {
     38 ; ANY-LABEL: fadd_reassociate:
     39 ; ANY:       # %bb.0:
     40 ; ANY-NEXT:    addss {{.*}}(%rip), %xmm0
     41 ; ANY-NEXT:    retq
     42   %sum = fadd float %x, 8.0
     43   %r = fadd reassoc nsz float %sum, 12.0
     44   ret float %r
     45 }
     46 
     47 define float @fadd_negzero_nsz(float %x) {
     48 ; ANY-LABEL: fadd_negzero_nsz:
     49 ; ANY:       # %bb.0:
     50 ; ANY-NEXT:    retq
     51   %r = fadd nsz float %x, -0.0
     52   ret float %r
     53 }
     54 
     55 define float @fadd_zero_nsz(float %x) {
     56 ; ANY-LABEL: fadd_zero_nsz:
     57 ; ANY:       # %bb.0:
     58 ; ANY-NEXT:    retq
     59   %r = fadd nsz float %x, 0.0
     60   ret float %r
     61 }
     62 
     63 define float @fsub_zero(float %x) {
     64 ; ANY-LABEL: fsub_zero:
     65 ; ANY:       # %bb.0:
     66 ; ANY-NEXT:    retq
     67   %r = fsub float %x, 0.0
     68   ret float %r
     69 }
     70 
     71 define float @fsub_self(float %x) {
     72 ; ANY-LABEL: fsub_self:
     73 ; ANY:       # %bb.0:
     74 ; ANY-NEXT:    xorps %xmm0, %xmm0
     75 ; ANY-NEXT:    retq
     76   %r = fsub nnan float %x, %x 
     77   ret float %r
     78 }
     79 
     80 define float @fsub_neg_x_y(float %x, float %y) {
     81 ; ANY-LABEL: fsub_neg_x_y:
     82 ; ANY:       # %bb.0:
     83 ; ANY-NEXT:    subss %xmm0, %xmm1
     84 ; ANY-NEXT:    movaps %xmm1, %xmm0
     85 ; ANY-NEXT:    retq
     86   %neg = fsub nsz float 0.0, %x
     87   %r = fadd nsz float %neg, %y
     88   ret float %r
     89 }
     90 
     91 define float @fsub_negzero(float %x) {
     92 ; STRICT-LABEL: fsub_negzero:
     93 ; STRICT:       # %bb.0:
     94 ; STRICT-NEXT:    xorps %xmm1, %xmm1
     95 ; STRICT-NEXT:    addss %xmm1, %xmm0
     96 ; STRICT-NEXT:    retq
     97 ;
     98 ; UNSAFE-LABEL: fsub_negzero:
     99 ; UNSAFE:       # %bb.0:
    100 ; UNSAFE-NEXT:    retq
    101   %r = fsub float %x, -0.0
    102   ret float %r
    103 }
    104 
    105 define float @fsub_zero_nsz_1(float %x) {
    106 ; ANY-LABEL: fsub_zero_nsz_1:
    107 ; ANY:       # %bb.0:
    108 ; ANY-NEXT:    retq
    109   %r = fsub nsz float %x, 0.0
    110   ret float %r
    111 }
    112 
    113 define float @fsub_zero_nsz_2(float %x) {
    114 ; ANY-LABEL: fsub_zero_nsz_2:
    115 ; ANY:       # %bb.0:
    116 ; ANY-NEXT:    xorps {{.*}}(%rip), %xmm0
    117 ; ANY-NEXT:    retq
    118   %r = fsub nsz float 0.0, %x
    119   ret float %r
    120 }
    121 
    122 define float @fsub_negzero_nsz(float %x) {
    123 ; ANY-LABEL: fsub_negzero_nsz:
    124 ; ANY:       # %bb.0:
    125 ; ANY-NEXT:    retq
    126   %r = fsub nsz float %x, -0.0
    127   ret float %r
    128 }
    129 
    130 define float @fmul_zero(float %x) {
    131 ; ANY-LABEL: fmul_zero:
    132 ; ANY:       # %bb.0:
    133 ; ANY-NEXT:    xorps %xmm0, %xmm0
    134 ; ANY-NEXT:    retq
    135   %r = fmul nnan nsz float %x, 0.0
    136   ret float %r
    137 }
    138 
    139 define float @fmul_one(float %x) {
    140 ; ANY-LABEL: fmul_one:
    141 ; ANY:       # %bb.0:
    142 ; ANY-NEXT:    retq
    143   %r = fmul float %x, 1.0
    144   ret float %r
    145 }
    146 
    147 define float @fmul_x_const_const(float %x) {
    148 ; ANY-LABEL: fmul_x_const_const:
    149 ; ANY:       # %bb.0:
    150 ; ANY-NEXT:    mulss {{.*}}(%rip), %xmm0
    151 ; ANY-NEXT:    retq
    152   %mul = fmul reassoc float %x, 9.0
    153   %r = fmul reassoc float %mul, 4.0
    154   ret float %r
    155 }
    156