Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -march=x86 -mcpu=corei7-avx | FileCheck %s
      2 
      3 
      4 define <2 x double> @floor_v2f64(<2 x double> %p)
      5 {
      6   ; CHECK: floor_v2f64
      7   ; CHECK: vroundpd
      8   %t = call <2 x double> @llvm.floor.v2f64(<2 x double> %p)
      9   ret <2 x double> %t
     10 }
     11 declare <2 x double> @llvm.floor.v2f64(<2 x double> %p)
     12 
     13 define <4 x float> @floor_v4f32(<4 x float> %p)
     14 {
     15   ; CHECK: floor_v4f32
     16   ; CHECK: vroundps
     17   %t = call <4 x float> @llvm.floor.v4f32(<4 x float> %p)
     18   ret <4 x float> %t
     19 }
     20 declare <4 x float> @llvm.floor.v4f32(<4 x float> %p)
     21 
     22 define <4 x double> @floor_v4f64(<4 x double> %p)
     23 {
     24   ; CHECK: floor_v4f64
     25   ; CHECK: vroundpd
     26   %t = call <4 x double> @llvm.floor.v4f64(<4 x double> %p)
     27   ret <4 x double> %t
     28 }
     29 declare <4 x double> @llvm.floor.v4f64(<4 x double> %p)
     30 
     31 define <8 x float> @floor_v8f32(<8 x float> %p)
     32 {
     33   ; CHECK: floor_v8f32
     34   ; CHECK: vroundps
     35   %t = call <8 x float> @llvm.floor.v8f32(<8 x float> %p)
     36   ret <8 x float> %t
     37 }
     38 declare <8 x float> @llvm.floor.v8f32(<8 x float> %p)
     39 
     40 define <2 x double> @ceil_v2f64(<2 x double> %p)
     41 {
     42   ; CHECK: ceil_v2f64
     43   ; CHECK: vroundpd
     44   %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> %p)
     45   ret <2 x double> %t
     46 }
     47 declare <2 x double> @llvm.ceil.v2f64(<2 x double> %p)
     48 
     49 define <4 x float> @ceil_v4f32(<4 x float> %p)
     50 {
     51   ; CHECK: ceil_v4f32
     52   ; CHECK: vroundps
     53   %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> %p)
     54   ret <4 x float> %t
     55 }
     56 declare <4 x float> @llvm.ceil.v4f32(<4 x float> %p)
     57 
     58 define <4 x double> @ceil_v4f64(<4 x double> %p)
     59 {
     60   ; CHECK: ceil_v4f64
     61   ; CHECK: vroundpd
     62   %t = call <4 x double> @llvm.ceil.v4f64(<4 x double> %p)
     63   ret <4 x double> %t
     64 }
     65 declare <4 x double> @llvm.ceil.v4f64(<4 x double> %p)
     66 
     67 define <8 x float> @ceil_v8f32(<8 x float> %p)
     68 {
     69   ; CHECK: ceil_v8f32
     70   ; CHECK: vroundps
     71   %t = call <8 x float> @llvm.ceil.v8f32(<8 x float> %p)
     72   ret <8 x float> %t
     73 }
     74 declare <8 x float> @llvm.ceil.v8f32(<8 x float> %p)
     75 
     76 define <2 x double> @trunc_v2f64(<2 x double> %p)
     77 {
     78   ; CHECK: trunc_v2f64
     79   ; CHECK: vroundpd
     80   %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> %p)
     81   ret <2 x double> %t
     82 }
     83 declare <2 x double> @llvm.trunc.v2f64(<2 x double> %p)
     84 
     85 define <4 x float> @trunc_v4f32(<4 x float> %p)
     86 {
     87   ; CHECK: trunc_v4f32
     88   ; CHECK: vroundps
     89   %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> %p)
     90   ret <4 x float> %t
     91 }
     92 declare <4 x float> @llvm.trunc.v4f32(<4 x float> %p)
     93 
     94 define <4 x double> @trunc_v4f64(<4 x double> %p)
     95 {
     96   ; CHECK: trunc_v4f64
     97   ; CHECK: vroundpd
     98   %t = call <4 x double> @llvm.trunc.v4f64(<4 x double> %p)
     99   ret <4 x double> %t
    100 }
    101 declare <4 x double> @llvm.trunc.v4f64(<4 x double> %p)
    102 
    103 define <8 x float> @trunc_v8f32(<8 x float> %p)
    104 {
    105   ; CHECK: trunc_v8f32
    106   ; CHECK: vroundps
    107   %t = call <8 x float> @llvm.trunc.v8f32(<8 x float> %p)
    108   ret <8 x float> %t
    109 }
    110 declare <8 x float> @llvm.trunc.v8f32(<8 x float> %p)
    111 
    112 define <2 x double> @rint_v2f64(<2 x double> %p)
    113 {
    114   ; CHECK: rint_v2f64
    115   ; CHECK: vroundpd
    116   %t = call <2 x double> @llvm.rint.v2f64(<2 x double> %p)
    117   ret <2 x double> %t
    118 }
    119 declare <2 x double> @llvm.rint.v2f64(<2 x double> %p)
    120 
    121 define <4 x float> @rint_v4f32(<4 x float> %p)
    122 {
    123   ; CHECK: rint_v4f32
    124   ; CHECK: vroundps
    125   %t = call <4 x float> @llvm.rint.v4f32(<4 x float> %p)
    126   ret <4 x float> %t
    127 }
    128 declare <4 x float> @llvm.rint.v4f32(<4 x float> %p)
    129 
    130 define <4 x double> @rint_v4f64(<4 x double> %p)
    131 {
    132   ; CHECK: rint_v4f64
    133   ; CHECK: vroundpd
    134   %t = call <4 x double> @llvm.rint.v4f64(<4 x double> %p)
    135   ret <4 x double> %t
    136 }
    137 declare <4 x double> @llvm.rint.v4f64(<4 x double> %p)
    138 
    139 define <8 x float> @rint_v8f32(<8 x float> %p)
    140 {
    141   ; CHECK: rint_v8f32
    142   ; CHECK: vroundps
    143   %t = call <8 x float> @llvm.rint.v8f32(<8 x float> %p)
    144   ret <8 x float> %t
    145 }
    146 declare <8 x float> @llvm.rint.v8f32(<8 x float> %p)
    147 
    148 define <2 x double> @nearbyint_v2f64(<2 x double> %p)
    149 {
    150   ; CHECK: nearbyint_v2f64
    151   ; CHECK: vroundpd
    152   %t = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)
    153   ret <2 x double> %t
    154 }
    155 declare <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)
    156 
    157 define <4 x float> @nearbyint_v4f32(<4 x float> %p)
    158 {
    159   ; CHECK: nearbyint_v4f32
    160   ; CHECK: vroundps
    161   %t = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)
    162   ret <4 x float> %t
    163 }
    164 declare <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)
    165 
    166 define <4 x double> @nearbyint_v4f64(<4 x double> %p)
    167 {
    168   ; CHECK: nearbyint_v4f64
    169   ; CHECK: vroundpd
    170   %t = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)
    171   ret <4 x double> %t
    172 }
    173 declare <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)
    174 
    175 define <8 x float> @nearbyint_v8f32(<8 x float> %p)
    176 {
    177   ; CHECK: nearbyint_v8f32
    178   ; CHECK: vroundps
    179   %t = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)
    180   ret <8 x float> %t
    181 }
    182 declare <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)
    183 
    184 ;
    185 ; Constant Folding
    186 ;
    187 
    188 define <2 x double> @const_floor_v2f64() {
    189   ; CHECK: const_floor_v2f64
    190   ; CHECK: movaps {{.*#+}} xmm0 = [-2.000000e+00,2.000000e+00]
    191   %t = call <2 x double> @llvm.floor.v2f64(<2 x double> <double -1.5, double 2.5>)
    192   ret <2 x double> %t
    193 }
    194 
    195 define <4 x float> @const_floor_v4f32() {
    196   ; CHECK: const_floor_v4f32
    197   ; CHECK: movaps {{.*#+}} xmm0 = [-4.000000e+00,6.000000e+00,-9.000000e+00,2.000000e+00]
    198   %t = call <4 x float> @llvm.floor.v4f32(<4 x float> <float -3.5, float 6.0, float -9.0, float 2.5>)
    199   ret <4 x float> %t
    200 }
    201 
    202 define <2 x double> @const_ceil_v2f64() {
    203   ; CHECK: const_ceil_v2f64
    204   ; CHECK: movaps {{.*#+}} xmm0 = [-1.000000e+00,3.000000e+00]
    205   %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> <double -1.5, double 2.5>)
    206   ret <2 x double> %t
    207 }
    208 
    209 define <4 x float> @const_ceil_v4f32() {
    210   ; CHECK: const_ceil_v4f32
    211   ; CHECK: movaps {{.*#+}} xmm0 = [-3.000000e+00,6.000000e+00,-9.000000e+00,3.000000e+00]
    212   %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> <float -3.5, float 6.0, float -9.0, float 2.5>)
    213   ret <4 x float> %t
    214 }
    215 
    216 define <2 x double> @const_trunc_v2f64() {
    217   ; CHECK: const_trunc_v2f64
    218   ; CHECK: movaps {{.*#+}} xmm0 = [-1.000000e+00,2.000000e+00]
    219   %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> <double -1.5, double 2.5>)
    220   ret <2 x double> %t
    221 }
    222 
    223 define <4 x float> @const_trunc_v4f32() {
    224   ; CHECK: const_trunc_v4f32
    225   ; CHECK: movaps {{.*#+}} xmm0 = [-3.000000e+00,6.000000e+00,-9.000000e+00,2.000000e+00]
    226   %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> <float -3.5, float 6.0, float -9.0, float 2.5>)
    227   ret <4 x float> %t
    228 }
    229