ó
ŰłY]c           @@ su   d  d l  m Z m Z d  d l m Z d  d l m Z m Z d e f d     YZ d e f d     YZ	 d   Z
 d	 S(
   i    (   t   absolute_importt   print_function(   t   ir(   t   Visitort   CallVisitort   FastFloatBinOpVisitorc           B@ s5   e  Z d  Z e d d d d d d g  Z d   Z RS(   sb   
    A pass to add fastmath flag to float-binop instruction if they don't have
    any flags.
    t   faddt   fsubt   fmult   fdivt   fremt   fcmpc         C@ s5   | j  |  j k r1 | j s1 | j j d  q1 n  d  S(   Nt   fast(   t   opnamet   float_binopst   flagst   append(   t   selft   instr(    (    s9   lib/python2.7/site-packages/numba/targets/fastmathpass.pyt   visit_Instruction   s    	(   t   __name__t
   __module__t   __doc__t	   frozensetR   R   (    (    (    s9   lib/python2.7/site-packages/numba/targets/fastmathpass.pyR      s   t   FastFloatCallVisitorc           B@ s   e  Z d  Z d   Z RS(   sD   
    A pass to change all float function calls to use fastmath.
    c         C@ s8   | j  t j   t j   f k r4 | j j d  n  d  S(   NR   (   t   typeR   t	   FloatTypet
   DoubleTypet   fastmatht   add(   R   R   (    (    s9   lib/python2.7/site-packages/numba/targets/fastmathpass.pyt
   visit_Call   s    !(   R   R   R   R   (    (    (    s9   lib/python2.7/site-packages/numba/targets/fastmathpass.pyR      s   c         C@ s$   t    j |   t   j |   d S(   sC   
    Rewrite the given LLVM module to use fastmath everywhere.
    N(   R   t   visitR   (   t   mod(    (    s9   lib/python2.7/site-packages/numba/targets/fastmathpass.pyt   rewrite_module   s    N(   t
   __future__R    R   t   llvmliteR   t   llvmlite.ir.transformsR   R   R   R   R!   (    (    (    s9   lib/python2.7/site-packages/numba/targets/fastmathpass.pyt   <module>   s
   
