Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/charisee/src/compiler/tree-il/low-to-tree-fn.sml
ViewVC logotype

Diff of /branches/charisee/src/compiler/tree-il/low-to-tree-fn.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3543, Mon Jan 4 21:06:20 2016 UTC revision 3544, Tue Jan 5 00:01:44 2016 UTC
# Line 223  Line 223 
223          (case (SrcV.useCount lhs,rhs)          (case (SrcV.useCount lhs,rhs)
224              of (0,_) => (env,[])              of (0,_) => (env,[])
225              | (1,_)  =>   (insert(addOprFromExp(env,rhs), lhs, rhs), [])              | (1,_)  =>   (insert(addOprFromExp(env,rhs), lhs, rhs), [])
226              | (_,Dst.E_Mux(A,isFill, nOrig,Tys as Ty.vectorLength tys,exps))=> let              | (_,Dst.E_Mux(A,isFill, nOrig, tys,exps))=> let
227                  val name=SrcV.name lhs                  val name=SrcV.name lhs
228                  val vs=List.map (fn n=>  newLocalWithTy(name,n) ) tys                  val vs=List.map (fn n=>  newLocalWithTy(name,n) ) tys (*vector length*)
229                  val rhs=Dst.E_Mux(A, isFill,nOrig,Tys,List.map (fn v=>Dst.E_Var v) vs)                  val rhs=Dst.E_Mux(A, isFill,nOrig,tys,List.map (fn v=>Dst.E_Var v) vs)
230                  val stmts=ListPair.map  (fn(x,e)=>Dst.S_Assign([x],e)) (vs,exps)                  val stmts=ListPair.map  (fn(x,e)=>Dst.S_Assign([x],e)) (vs,exps)
231                  in                  in
232                      (renameExp(addLocals(env,vs),lhs,rhs),stmts)                      (renameExp(addLocals(env,vs),lhs,rhs),stmts)
# Line 298  Line 298 
298    
299            in            in
300             case rator             case rator
301               of  SrcOp.LoadVoxels(_, 1) => true               of SrcOp.EigenVecs2x2 => false
               |  SrcOp.LoadVoxels _ => false  
               |  SrcOp.EigenVecs2x2 => false  
302                |  SrcOp.EigenVecs3x3 => false                |  SrcOp.EigenVecs3x3 => false
303                |  SrcOp.EigenVals2x2 => false                |  SrcOp.EigenVals2x2 => false
304                |  SrcOp.EigenVals3x3 => false                |  SrcOp.EigenVals3x3 => false
# Line 388  Line 386 
386                              val (isFill,nSize,pieces)=Target.getVecTy 6                              val (isFill,nSize,pieces)=Target.getVecTy 6
387                              val op1= Dst.E_LoadArr(false ,4,6, t , Dst.E_Lit(Literal.Int 0))                              val op1= Dst.E_LoadArr(false ,4,6, t , Dst.E_Lit(Literal.Int 0))
388                              val op2= Dst.E_LoadArr(false ,2,6, t , Dst.E_Lit(Literal.Int 4))                              val op2= Dst.E_LoadArr(false ,2,6, t , Dst.E_Lit(Literal.Int 4))
389                              val splitTy=DstTy.vectorLength pieces                              val splitTy=pieces
390                              in    Dst.E_Mux(false,false,6,splitTy,[op1,op2])                              in    Dst.E_Mux(false,false,6,splitTy,[op1,op2])
391                              end                              end
392                          | (Dst.VK_Local,DstTy.TensorTy [oSize])=>let                          | (Dst.VK_Local,DstTy.TensorTy [oSize])=>let
393                                  val (isFill,nSize,pieces)=Target.getVecTy oSize                                  val (isFill,nSize,pieces)=Target.getVecTy oSize
394                                  val op1= Dst.E_LoadArr(false ,nSize,oSize, t , Dst.E_Lit(Literal.Int 0))                                  val op1= Dst.E_LoadArr(false ,nSize,oSize, t , Dst.E_Lit(Literal.Int 0))
395                                    val splitTy=DstTy.vectorLength pieces                                    val splitTy= pieces
396                                  in    Dst.E_Mux(false,isFill,oSize,splitTy,[op1])                                  in    Dst.E_Mux(false,isFill,oSize,splitTy,[op1])
397                                  end                                  end
398                          | _ => t                          | _ => t
# Line 450  Line 448 
448                  | Src.OP(SrcOp.Translate v, [a])=> let                  | Src.OP(SrcOp.Translate v, [a])=> let
449                      (*Result is a vector so we have to use Mux*)                      (*Result is a vector so we have to use Mux*)
450                      val dim = ImageInfo.dim v                      val dim = ImageInfo.dim v
451                      val splitTy=DstTy.vectorLength [dim]                      val splitTy= [dim]
452                      val op1= Dst.E_Op(DstOp.Translate v,[(useVar env a)])                      val op1= Dst.E_Op(DstOp.Translate v,[(useVar env a)])
453                      val exp= (case dim                      val exp= (case dim
454                          of 1=> op1                          of 1=> op1
# Line 470  Line 468 
468                      val a=List.tabulate(dim,(fn n=> Dst.E_Op(DstOp.Transform(v,n),args')))                      val a=List.tabulate(dim,(fn n=> Dst.E_Op(DstOp.Transform(v,n),args')))
469                      val (env2,stmt)= (case dim                      val (env2,stmt)= (case dim
470                          of 1=>   bind(env2,lhs,Dst.E_Op(DstOp.Transform (v,1),args'))                          of 1=>   bind(env2,lhs,Dst.E_Op(DstOp.Transform (v,1),args'))
471                          | 2 =>(env2,[Dst.S_StoreVec(V,0,true,false,dim,ty,DstTy.vectorLength [2,2],a)])                          | 2 =>(env2,[Dst.S_StoreVec(V,0,true,false,dim,ty,[2,2],a)])
472                          | 3 =>(env2,[Dst.S_StoreVec(V,0,false,true,dim,ty,DstTy.vectorLength [4,4,4] ,a)])                          | 3 =>(env2,[Dst.S_StoreVec(V,0,false,true,dim,ty, [4,4,4] ,a)])
473                          (*end case*))                          (*end case*))
474                      in                      in
475                          (env2,stmt)                          (env2,stmt)
# Line 482  Line 480 
480                      val stmt=Dst.S_Assign([vp], useVar env a)                      val stmt=Dst.S_Assign([vp], useVar env a)
481                      val stride = ImageInfo.stride info                      val stride = ImageInfo.stride info
482                      val IndexArgs= List.tabulate(oSize,                      val IndexArgs= List.tabulate(oSize,
483                          fn n=> Dst.E_Op(DstOp.IndexTensor(false,Ty.indexTy [n*stride],Ty.TensorTy [oSize]),[Dst.E_Var vp]))                          fn n=> Dst.E_Op(DstOp.IndexTensor(false, [n*stride],Ty.TensorTy [oSize]),[Dst.E_Var vp]))
484                      (*create cons expressions*)                      (*create cons expressions*)
485                      val (isFill,nSize,pieces)=Target.getVecTy oSize                      val (isFill,nSize,pieces)=Target.getVecTy oSize
486                      val exp=LowOpToTreeOp.consVecToTree(nSize,oSize,pieces,IndexArgs,isFill)                      val exp=LowOpToTreeOp.consVecToTree(nSize,oSize,pieces,IndexArgs,isFill)
# Line 503  Line 501 
501                      *)                      *)
502                      val a'=(useVar env a)                      val a'=(useVar env a)
503                      val exp=(case ((SrcOp.IndexTensor e),a')                      val exp=(case ((SrcOp.IndexTensor e),a')
504                          of (SrcOp.IndexTensor(_ ,Ty.indexTy [i],_),Dst.E_Mux(_,_,_,DstTy.vectorLength pieces,ops))=>                          of (SrcOp.IndexTensor(_ , [i],_),Dst.E_Mux(_,_,_, pieces,ops))=>
505                              let                              let
506                                  fun findLocal(c,i,indexAt,v::vs,a1::args)=let                                  fun findLocal(c,i,indexAt,v::vs,a1::args)=let
507                                      val newsize=c+v                                      val newsize=c+v
508                                      in                                      in
509                                          if(newsize>i)                                          if(newsize>i)
510                                          then Dst.E_Op(DstOp.IndexTensor(true,Ty.indexTy [indexAt],Ty.TensorTy [v]), [a1])                                          then Dst.E_Op(DstOp.IndexTensor(true, [indexAt],Ty.TensorTy [v]), [a1])
511                                          else findLocal(newsize,i,indexAt-v,vs,args)                                          else findLocal(newsize,i,indexAt-v,vs,args)
512                                      end                                      end
513                              in                              in
# Line 595  Line 593 
593    
594                      (*Vector params for last matrix index. Retrieved in case we use S_Store*)                      (*Vector params for last matrix index. Retrieved in case we use S_Store*)
595                      val (isFill,nSize,pieces)=Target.getVecTy j                      val (isFill,nSize,pieces)=Target.getVecTy j
596                      val splitTy=LowILTypes.vectorLength  pieces                      val splitTy=(*vector Length*)  pieces
597                      val n=length pieces                      val n=length pieces
598                      val A =LowOpToTreeOp.isAlignedStore(isFill,n)                      val A =LowOpToTreeOp.isAlignedStore(isFill,n)
599                      fun f ([], _ ) = []                      fun f ([], _ ) = []
# Line 781  Line 779 
779                              of ( _ ,Ty.TensorTy [])              => Dst.S_Save([x], rhs2)                              of ( _ ,Ty.TensorTy [])              => Dst.S_Save([x], rhs2)
780                              | (Dst.VK_Local,Ty.TensorTy [oSize]) =>let                              | (Dst.VK_Local,Ty.TensorTy [oSize]) =>let
781                                  val (isFill,nSize,pieces)=Target.getVecTy oSize                                  val (isFill,nSize,pieces)=Target.getVecTy oSize
782                                  val tyP=Ty.vectorLength pieces                                  val tyP=pieces
783                                  val tyO=Ty.TensorTy [oSize]                                  val tyO=Ty.TensorTy [oSize]
784                                  in  Dst.S_StoreVec(Dst.E_State x,0, false,isFill, oSize,tyO,tyP,[rhs2])                                  in  Dst.S_StoreVec(Dst.E_State x,0, false,isFill, oSize,tyO,tyP,[rhs2])
785                                  end                                  end

Legend:
Removed from v.3543  
changed lines
  Added in v.3544

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0