Home | History | Annotate | Download | only in Assembler
      1 ; RUN: llvm-as < %s | llvm-dis | FileCheck %s
      2 ; RUN: opt -S < %s | FileCheck %s
      3 ; RUN: verify-uselistorder %s
      4 
      5 @addr   = external global i64
      6 @select = external global i1
      7 @vec    = external global <3 x float>
      8 @arr    = external global [3 x float]
      9 
     10 define float @none(float %x, float %y) {
     11 entry:
     12 ; CHECK:  %vec = load  <3 x float>,  <3 x float>* @vec
     13   %vec    = load  <3 x float>,  <3 x float>* @vec
     14 ; CHECK:  %select = load i1, i1* @select
     15   %select = load i1, i1* @select
     16 ; CHECK:  %arr    = load [3 x float], [3 x float]* @arr
     17   %arr    = load [3 x float], [3 x float]* @arr
     18 
     19 ; CHECK:  %a = fadd  float %x, %y
     20   %a = fadd  float %x, %y
     21 ; CHECK:  %a_vec = fadd  <3 x float> %vec, %vec
     22   %a_vec = fadd  <3 x float> %vec, %vec
     23 ; CHECK:  %b = fsub  float %x, %y
     24   %b = fsub  float %x, %y
     25 ; CHECK:  %b_vec = fsub  <3 x float> %vec, %vec
     26   %b_vec = fsub  <3 x float> %vec, %vec
     27 ; CHECK:  %c = fmul  float %x, %y
     28   %c = fmul  float %x, %y
     29 ; CHECK:  %c_vec = fmul  <3 x float> %vec, %vec
     30   %c_vec = fmul  <3 x float> %vec, %vec
     31 ; CHECK:  %d = fdiv  float %x, %y
     32   %d = fdiv  float %x, %y
     33 ; CHECK:  %d_vec = fdiv  <3 x float> %vec, %vec
     34   %d_vec = fdiv  <3 x float> %vec, %vec
     35 ; CHECK:  %e = frem  float %x, %y
     36   %e = frem  float %x, %y
     37 ; CHECK:  %e_vec = frem  <3 x float> %vec, %vec
     38   %e_vec = frem  <3 x float> %vec, %vec
     39 ; CHECK:  ret  float %e
     40   ret  float %e
     41 }
     42 
     43 ; CHECK: no_nan
     44 define float @no_nan(float %x, float %y) {
     45 entry:
     46 ; CHECK:  %vec = load <3 x float>, <3 x float>* @vec
     47   %vec    = load  <3 x float>,  <3 x float>* @vec
     48 ; CHECK:  %select = load i1, i1* @select
     49   %select = load i1, i1* @select
     50 ; CHECK:  %arr = load  [3 x float],  [3 x float]* @arr
     51   %arr    = load  [3 x float],  [3 x float]* @arr
     52 
     53 ; CHECK:  %a = fadd nnan  float %x, %y
     54   %a = fadd nnan  float %x, %y
     55 ; CHECK:  %a_vec = fadd nnan  <3 x float> %vec, %vec
     56   %a_vec = fadd nnan  <3 x float> %vec, %vec
     57 ; CHECK:  %b = fsub nnan  float %x, %y
     58   %b = fsub nnan  float %x, %y
     59 ; CHECK:  %b_vec = fsub nnan  <3 x float> %vec, %vec
     60   %b_vec = fsub nnan  <3 x float> %vec, %vec
     61 ; CHECK:  %c = fmul nnan  float %x, %y
     62   %c = fmul nnan  float %x, %y
     63 ; CHECK:  %c_vec = fmul nnan  <3 x float> %vec, %vec
     64   %c_vec = fmul nnan <3 x float> %vec, %vec
     65 ; CHECK:  %d = fdiv nnan  float %x, %y
     66   %d = fdiv nnan float %x, %y
     67 ; CHECK:  %d_vec = fdiv nnan  <3 x float> %vec, %vec
     68   %d_vec = fdiv nnan <3 x float> %vec, %vec
     69 ; CHECK:  %e = frem nnan  float %x, %y
     70   %e = frem nnan  float %x, %y
     71 ; CHECK:  %e_vec = frem nnan  <3 x float> %vec, %vec
     72   %e_vec = frem nnan  <3 x float> %vec, %vec
     73 ; CHECK:  ret float %e
     74   ret float %e
     75 }
     76 
     77 ; CHECK: no_nan_inf
     78 define float @no_nan_inf(float %x, float %y) {
     79 entry:
     80 ; CHECK:  %vec = load <3 x float>, <3 x float>* @vec
     81   %vec    = load <3 x float>, <3 x float>* @vec
     82 ; CHECK:  %select = load i1, i1* @select
     83   %select = load i1, i1* @select
     84 ; CHECK:  %arr = load [3 x float], [3 x float]* @arr
     85   %arr    = load [3 x float], [3 x float]* @arr
     86 
     87 ; CHECK:  %a = fadd nnan ninf  float %x, %y
     88   %a = fadd ninf nnan  float %x, %y
     89 ; CHECK:  %a_vec = fadd nnan  <3 x float> %vec, %vec
     90   %a_vec = fadd nnan  <3 x float> %vec, %vec
     91 ; CHECK:  %b = fsub nnan  float %x, %y
     92   %b = fsub nnan  float %x, %y
     93 ; CHECK:  %b_vec = fsub nnan ninf  <3 x float> %vec, %vec
     94   %b_vec = fsub ninf nnan  <3 x float> %vec, %vec
     95 ; CHECK:  %c = fmul nnan  float %x, %y
     96   %c = fmul nnan  float %x, %y
     97 ; CHECK:  %c_vec = fmul nnan  <3 x float> %vec, %vec
     98   %c_vec = fmul nnan <3 x float> %vec, %vec
     99 ; CHECK:  %d = fdiv nnan ninf  float %x, %y
    100   %d = fdiv ninf nnan float %x, %y
    101 ; CHECK:  %d_vec = fdiv nnan  <3 x float> %vec, %vec
    102   %d_vec = fdiv nnan <3 x float> %vec, %vec
    103 ; CHECK:  %e = frem nnan  float %x, %y
    104   %e = frem nnan  float %x, %y
    105 ; CHECK:  %e_vec = frem nnan ninf  <3 x float> %vec, %vec
    106   %e_vec = frem ninf nnan  <3 x float> %vec, %vec
    107 ; CHECK:  ret  float %e
    108   ret  float %e
    109 }
    110 
    111 ; CHECK: mixed_flags
    112 define float @mixed_flags(float %x, float %y) {
    113 entry:
    114 ; CHECK:  %vec = load <3 x float>, <3 x float>* @vec
    115   %vec    = load <3 x float>, <3 x float>* @vec
    116 ; CHECK:  %select = load i1, i1* @select
    117   %select = load i1, i1* @select
    118 ; CHECK:  %arr    = load [3 x float], [3 x float]* @arr
    119   %arr    = load [3 x float], [3 x float]* @arr
    120 
    121 ; CHECK:  %a = fadd nnan ninf float %x, %y
    122   %a = fadd ninf nnan float %x, %y
    123 ; CHECK:  %a_vec = fadd nnan <3 x float> %vec, %vec
    124   %a_vec = fadd nnan <3 x float> %vec, %vec
    125 ; CHECK:  %b = fsub fast float %x, %y
    126   %b = fsub nnan nsz fast float %x, %y
    127 ; CHECK:  %b_vec = fsub nnan <3 x float> %vec, %vec
    128   %b_vec = fsub nnan <3 x float> %vec, %vec
    129 ; CHECK:  %c = fmul fast float %x, %y
    130   %c = fmul nsz fast arcp float %x, %y
    131 ; CHECK:  %c_vec = fmul nsz <3 x float> %vec, %vec
    132   %c_vec = fmul nsz <3 x float> %vec, %vec
    133 ; CHECK:  %d = fdiv nnan ninf arcp float %x, %y
    134   %d = fdiv arcp ninf nnan float %x, %y
    135 ; CHECK:  %d_vec = fdiv fast <3 x float> %vec, %vec
    136   %d_vec = fdiv fast nnan arcp <3 x float> %vec, %vec
    137 ; CHECK:  %e = frem nnan nsz float %x, %y
    138   %e = frem nnan nsz float %x, %y
    139 ; CHECK:  %e_vec = frem nnan <3 x float> %vec, %vec
    140   %e_vec = frem nnan <3 x float> %vec, %vec
    141 ; CHECK:  ret  float %e
    142   ret  float %e
    143 }
    144