ó
\K]c           @@ s\  d  d l  m Z m Z d  d l Z d  d l m Z m Z d  d l Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 m Z d  d l m Z d  d l m Z d d l m Z d d	 l m Z d d
 l m Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z e Z e Z e d „  ƒ Z d „  Z d e f d „  ƒ  YZ  d e f d „  ƒ  YZ! d S(   i    (   t   print_functiont   absolute_importN(   t
   check_callt   check_output(   t
   namedtuple(   t   config(   t   devicesi   (   t   AMDGCNModule(   t   ROCM_BC_PATH(   t   TRIPLE(   t   datetime(   t   contextmanager(   t   utils(   t   HsaSupportErrorc          c@ sI   t  r t j Vn4 t j r% t j Vn  t t j d ƒ  }  |  VWd  QXd  S(   Nt   wb(	   t   NOISY_CMDLINEt
   subprocesst   STDOUTR   t   IS_PY3t   DEVNULLt   opent   ost   devnull(   R   (    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyt
   error_pipe   s    	c       	   O@ s£   yv t  ƒ  g } t rZ t t j ƒ  j d ƒ d t j ƒt d d j |  ƒ d t j ƒn  t	 d | |  | Ž } Wd  QXWn& t
 j k
 rž } t | ƒ | ‚ n X| S(   Ns   %b %d %H:%M:%St   files   CMD: t   ;t   stderr(   R   R   t   printR
   t   nowt   strftimet   syst   stdoutt   joint   _real_check_callR   t   CalledProcessError(   t   argst   kwargsR   t   rett   e(    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyR   %   s    
#

t   CmdLinec           B@ sY   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   c      
   C@ sj  |  j  s: t j ƒ  } | j j j d ƒ } d | |  _ n  d j |  j d |  j	 |  j d d d d d	 g	 ƒ |  _
 d j |  j d |  j	 |  j d d d	 g ƒ |  _ d j |  j d
 |  j	 |  j d d d	 g ƒ |  _ d j |  j d
 |  j	 |  j d d d	 g ƒ |  _ d j |  j d d d	 d g ƒ |  _ d j |  j d d d	 g ƒ |  _ d j |  j d d d	 g ƒ |  _ d  S(   Ns   UTF-8s   -mcpu %st    s   -O3s   -disable-simplify-libcallss   -verifys   -Ss	   -o {fout}s   {fin}s   -O2s   -filetype=asms   -filetype=objs   {lib}s   -shared(   t   initializedR   t   get_contextt   agentt   namet   decodet
   target_cpuR    t   optt   triple_flagt   CMD_OPTt
   CMD_VERIFYt   llct   CMD_GEN_HSAILt   CMD_GEN_BRIGt	   llvm_linkt   CMD_LINK_BUILTINSt   CMD_LINK_LIBSt   ld_lldt   CMD_LINK_BRIG(   t   selft   dev_ctxR.   (    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyt   _initialize:   sd    	c         @ s‰   t  j j d d  ƒ ˆ  _ ‡  f d †  } t ˆ  _ | d ƒ ˆ  _ | d ƒ ˆ  _ | d ƒ ˆ  _	 | d ƒ ˆ  _
 d ˆ  j ˆ  _ t ˆ  _ d  S(   Nt   HSAILBINc         @ sH   ˆ  j  d  k	 r% t j j ˆ  j  |  ƒ St j j t j d |  ƒ } | Sd  S(   Nt   bin(   t   _binary_patht   NoneR   t   pathR    R   t   prefix(   t   toolt   binpath(   R;   (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyt   _setup_pathw   s    R/   R3   s	   llvm-links   ld.llds   -mtriple %s(   R   t   environt   getRA   R@   R	   t   _tripleR/   R3   R6   R9   R0   t   FalseR)   (   R;   RF   (    (   R;   s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyt   __init__u   s    	c   	      C@ sÕ   y¸ t  j j |  j ƒ s' t d ƒ ‚ n  t |  j d g d t ƒ} g  | j ƒ  D] } | j ƒ  ^ qO } | j	 d ƒ } | | d } x0 | D] } d | k r‹ Pq‹ q‹ Wd } t | ƒ ‚ Wn t
 k
 rÐ } ‚  n Xd  S(   Ns   llc not founds	   --versiont   universal_newliness   Registered Targets:i   t   amdgcns5   Command line tooling does not support "amdgcn" target(   R   RB   t   isfileR3   R   R   t   Truet
   splitlinest   stript   indext   BaseException(	   R;   t   outputt   xt   olinest   tgtidxt   targetst   tgtt   msgR&   (    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyt   check_tooling†   s    	%c         C@ s?   |  j  s |  j ƒ  n  t |  j j d | d | ƒ d t ƒd  S(   Nt   foutt   fint   shell(   R)   R=   R   R2   t   formatRO   (   R;   t   ipatht   opath(    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyt   verifyœ   s    	c         C@ s?   |  j  s |  j ƒ  n  t |  j j d | d | ƒ d t ƒd  S(   NR\   R]   R^   (   R)   R=   R   R1   R_   RO   (   R;   R`   Ra   (    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyt   optimize¡   s    	c         C@ s?   |  j  s |  j ƒ  n  t |  j j d | d | ƒ d t ƒd  S(   NR\   R]   R^   (   R)   R=   R   R4   R_   RO   (   R;   R`   Ra   (    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyt   generate_hsail¦   s    	c         C@ s?   |  j  s |  j ƒ  n  t |  j j d | d | ƒ d t ƒd  S(   NR\   R]   R^   (   R)   R=   R   R5   R_   RO   (   R;   R`   Ra   (    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyt   generate_brig«   s    	c         C@ st   |  j  s |  j ƒ  n  |  j j d | d | ƒ } | d j g  | D] } d j | ƒ ^ qA ƒ 7} t | d t ƒd  S(   NR\   R]   R(   s   {0}R^   (   R)   R=   R8   R_   R    R   RO   (   R;   R`   t   libpathsRa   t   cmdlinet   lib(    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyt	   link_libs°   s
    	/c         C@ s?   |  j  s |  j ƒ  n  t |  j j d | d | ƒ d t ƒd  S(   NR\   R]   R^   (   R)   R=   R   R:   R_   RO   (   R;   R`   Ra   (    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyt	   link_brig·   s    	(   t   __name__t
   __module__R=   RK   R[   Rb   Rc   Rd   Re   Ri   Rj   (    (    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyR'   8   s   	;							t   Modulec           B@ sS   e  Z d  „  Z d „  Z d „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z	 RS(	   c         C@ s>   t  j ƒ  |  _ g  |  _ g  |  _ t ƒ  |  _ t j |  ƒ d S(   s   
        Setup
        N(	   t   tempfilet   mkdtempt   _tmpdirt
   _tempfilest
   _linkfilesR'   t   _cmdR   RK   (   R;   (    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyRK   ¾   s
    		c         C@ s   d  S|  j  ƒ  (   N(   t   close(   R;   (    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyt   __del__È   s    c         C@ s5   x |  j  D] } t j | ƒ q
 Wt j |  j ƒ d  S(   N(   Rq   R   t   unlinkt   rmdirRp   (   R;   t   afile(    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyRt   Ì   s    R   c         C@ s+   |  j  | ƒ } t | d | ƒ} | | f S(   Nt   mode(   t   _track_temp_fileR   (   R;   R,   Ry   RB   t   fobj(    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyt   _create_temp_fileÓ   s    c         C@ sA   t  j j |  j d j t |  j ƒ | ƒ ƒ } |  j j | ƒ | S(   Ns   {0}-{1}(   R   RB   R    Rp   R_   t   lenRq   t   append(   R;   R,   RB   (    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyRz   Ø   s    c         C@ sÀ   |  j  | ƒ } |  j d ƒ \ } } |  | j | j d ƒ ƒ Wd QX|  j d ƒ } |  j j d | d | ƒ t j r¬ t	 | d ƒ   } t
 | j ƒ  j d ƒ ƒ Wd QXn  |  j j | ƒ d S(   s0   
        Load LLVM with HSAIL SPIR spec
        s   dump-llvm-irt   asciiNs   verified-llvm-irR`   Ra   t   rb(   t   _preprocessR|   t   writet   encodeRz   Rs   Rb   R   t   DUMP_OPTIMIZEDR   R   t   readR-   Rr   R~   (   R;   t   llvmirt   tmp_llvm_irR]   R\   t   fin_opt(    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyt	   load_llvmÞ   s    	"c         C@ s¥   xž |  j  D]“ } | |  j  d k rH | | j d d ƒ j d d ƒ } n | } t j j t | ƒ } |  j j j d | d | d | ƒ } t	 | d t
 ƒ| } q
 Wd  S(	   Niÿÿÿÿt   /t   _t   .R\   R]   Rh   R^   (   t   bitcodest   replaceR   RB   R    R   Rs   R7   R_   R   RO   (   R;   R`   Ra   t   bct	   tmp_opathRh   t   cmd(    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyt   link_builtinsô   s    %$c         C@ sì  |  j  s t d ƒ ‚ |  j d } |  j d ƒ } |  j d } |  j j d | d | d | ƒ |  j d ƒ } |  j d | d | ƒ |  j d	 ƒ } |  j j d | d | ƒ t j	 rè t
 | d
 ƒ   } t | j ƒ  j d ƒ ƒ Wd QXn  |  j d ƒ } |  j j d | d | ƒ |  j d ƒ } |  j j d | d | ƒ |  j d ƒ }	 |  j j d | d |	 ƒ t |  _  t
 | d
 ƒ  } | j ƒ  j d ƒ }
 Wd QXt
 |	 d
 ƒ  } | j ƒ  } Wd QXt j rÐt |
 ƒ n  t d d d g ƒ |
 | ƒ S(   sL   
        Generate GCN from a module and also return the HSAIL code.
        s    Module already has GCN generatedi    s   link-depi   R`   Rf   Ra   s   linked-paths   optimized-llvm-irR€   R   Ns   create-hsails   create-brigs   linked-brigt   FinalizerResultt   hsailt   brig(   t
   _finalizedt   AssertionErrorRr   Rz   Rs   Ri   R’   Rc   R   R„   R   R   R…   R-   Rd   Re   Rj   RO   t   DUMP_ASSEMBLYR   (   R;   t   llvmfilet   pre_builtin_pathRf   t   linked_patht   opt_pathR]   t
   hsail_patht	   brig_patht   end_brig_pathR”   R•   (    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyt   generateGCN  s6    	"		(
   Rk   Rl   RK   Ru   Rt   R|   Rz   R‰   R’   R    (    (    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyRm   ½   s   	
					("   t
   __future__R    R   R   R   R   R   Rn   R   t   ret   collectionsR   t   numbaR   t   numba.roc.hsadrvR   t   commonR   R   t    R	   R
   t
   contextlibR   R   t   numba.roc.hsadrv.errorR   R!   RJ   R   R   t   objectR'   Rm   (    (    (    s0   lib/python2.7/site-packages/numba/roc/hlc/hlc.pyt   <module>   s,   	…