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 3168, Sun Mar 29 20:46:53 2015 UTC revision 3169, Sun Mar 29 22:17:50 2015 UTC
# Line 16  Line 16 
16    (* tests for whether various expression forms can appear inline *)    (* tests for whether various expression forms can appear inline *)
17      val inlineCons : int -> bool        (* can n'th-order tensor construction appear inline *)      val inlineCons : int -> bool        (* can n'th-order tensor construction appear inline *)
18      val inlineMatrixExp : bool          (* can matrix-valued expressions appear inline? *)      val inlineMatrixExp : bool          (* can matrix-valued expressions appear inline? *)
19    (* FIXME: isHwVec, isVecTy, and getPieces do not appear to be used *)
20      val isHwVec   : int -> bool      val isHwVec   : int -> bool
21      val isVecTy   : int -> bool      val isVecTy   : int -> bool
22      val getPieces : int -> int list      val getPieces : int -> int list
23    (* FIXME: what does this function do?  what are its results? *)
24      val getVecTy  : int -> bool * int * int list      val getVecTy  : int -> bool * int * int list
25    
26    end) : sig    end) : sig
# Line 355  Line 357 
357        | trInitialization (InP.Int n) = ([], Dst.E_Lit(Literal.Int n))        | trInitialization (InP.Int n) = ([], Dst.E_Lit(Literal.Int n))
358        | trInitialization (InP.Real f) = ([], Dst.E_Lit(Literal.Float f))        | trInitialization (InP.Real f) = ([], Dst.E_Lit(Literal.Float f))
359        | trInitialization (InP.Bool b) = ([], Dst.E_Lit(Literal.Bool b))        | trInitialization (InP.Bool b) = ([], Dst.E_Lit(Literal.Bool b))
360        | trInitialization (InP.Tensor([d], vs)) = raise Fail "trInitialization: Tensor"        | trInitialization (InP.Tensor([d], vs)) = let
361            (* make a literal expression for i'th initializer *)
362              fun mk i = Dst.E_Lit(Literal.Float(Vector.sub(vs, i)))
363            (* get representation of the the vector type *)
364              val (isPadded, wid, pieces) = Target.getVecTy d
365              val exp = LowOpToTreeOp.consVecToTree(wid, d, pieces, List.tabulate(Vector.length vs, mk), isPadded)
366              in
367                ([], exp)
368              end
369  (*  (*
370        | trInitialization (InP.Tensor(shp, vs)) = let        | trInitialization (InP.Tensor(shp, vs)) = let
371            fun mk i = Dst.E_Lit(Literal.Float(Vector.sub(vs, i)))            fun mk i = Dst.E_Lit(Literal.Float(Vector.sub(vs, i)))
# Line 435  Line 445 
445                      *  fun iter([],_)=[]                      *  fun iter([],_)=[]
446                      * | iter(e1::es,counter)=[Dst.E_LoadArr(isFill ,e1,oSize, t , Dst.E_Lit(Literal.Int counter))]@                      * | iter(e1::es,counter)=[Dst.E_LoadArr(isFill ,e1,oSize, t , Dst.E_Lit(Literal.Int counter))]@
447                      * | iter(es,counter+ IntInf.fromInt e1)                      * | iter(es,counter+ IntInf.fromInt e1)
448                      * val ops=iter(Pieces,0)                      * val ops=iter(pieces,0)
449                      *)                      *)
450                      val (env, vt) = doLHS()                      val (env, vt) = doLHS()
451                      val t=Dst.E_State(getStateVar x)                      val t=Dst.E_State(getStateVar x)
452                      val exp=(case (DstV.kind vt, DstV.ty vt)                      val exp=(case (DstV.kind vt, DstV.ty vt)
453                          of (Dst.VK_Local,DstTy.TensorTy [oSize])=>let                          of (Dst.VK_Local,DstTy.TensorTy [oSize])=>let
454                                  val (isFill,nSize,Pieces)=Target.getVecTy oSize                                  val (isFill,nSize,pieces)=Target.getVecTy oSize
455                                  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))
456                                    val splitTy=DstTy.vectorLength Pieces                                    val splitTy=DstTy.vectorLength pieces
457                                  in    Dst.E_Mux(false,isFill,oSize,splitTy,[op1])                                  in    Dst.E_Mux(false,isFill,oSize,splitTy,[op1])
458                                  end                                  end
459                          | _ => t                          | _ => t
# Line 531  Line 541 
541                      val IndexArgs= List.tabulate(oSize,                      val IndexArgs= List.tabulate(oSize,
542                          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,Ty.indexTy [n*stride],Ty.TensorTy [oSize]),[Dst.E_Var vp]))
543                      (*create cons expressions*)                      (*create cons expressions*)
544                      val (isFill,nSize,Pieces)=Target.getVecTy oSize                      val (isFill,nSize,pieces)=Target.getVecTy oSize
545                      val exp=LowOpToTreeOp.consVecToTree(nSize,oSize,Pieces,IndexArgs,isFill)                      val exp=LowOpToTreeOp.consVecToTree(nSize,oSize,pieces,IndexArgs,isFill)
546                      (*increase use count so it is easier to read c-file*)                      (*increase use count so it is easier to read c-file*)
547                      fun incUse (Src.V{useCnt, ...}) = (useCnt := !useCnt + 1)                      fun incUse (Src.V{useCnt, ...}) = (useCnt := !useCnt + 1)
548                      val _ = incUse lhs                      val _ = incUse lhs
# Line 579  Line 589 
589                      * Rewrites to correctly-sized vector operations                      * Rewrites to correctly-sized vector operations
590                      *)                      *)
591                      fun foundVec(origrator,rator,oSize,argsS,argsV)= let                      fun foundVec(origrator,rator,oSize,argsS,argsV)= let
592                          val (isFill,nSize,Pieces)=Target.getVecTy oSize                          val (isFill,nSize,pieces)=Target.getVecTy oSize
593                          val (env, t) = doLHS()                          val (env, t) = doLHS()
594                          val stmt = LowOpToTreeOp.vecToTree(t,origrator,rator,nSize,oSize,Pieces,argsS,argsV,isFill)                          val stmt = LowOpToTreeOp.vecToTree(t,origrator,rator,nSize,oSize,pieces,argsS,argsV,isFill)
595                          val (envv,stmts)=(case stmt                          val (envv,stmts)=(case stmt
596                              of Dst.S_Assign(_,exp)=> bind (env, lhs, exp)                              of Dst.S_Assign(_,exp)=> bind (env, lhs, exp)
597                              | stmt=> (env,[stmt])                              | stmt=> (env,[stmt])
# Line 628  Line 638 
638                      val (env2, t) = doLHS()                      val (env2, t) = doLHS()
639                      in case DstV.kind t                      in case DstV.kind t
640                          of TreeIL.VK_Local=> let                          of TreeIL.VK_Local=> let
641                              val (isFill,nSize,Pieces)=Target.getVecTy oSize                              val (isFill,nSize,pieces)=Target.getVecTy oSize
642                              val exp = LowOpToTreeOp.consVecToTree(nSize,oSize,Pieces,args',isFill)                              val exp = LowOpToTreeOp.consVecToTree(nSize,oSize,pieces,args',isFill)
643                              val _ =testp["\nExp\n",Dst.toString exp]                              val _ =testp["\nExp\n",Dst.toString exp]
644                              in                              in
645                                bind (env2, lhs, exp)                                bind (env2, lhs, exp)
# Line 659  Line 669 
669    
670    
671                      (*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*)
672                      val (isFill,nSize,Pieces)=Target.getVecTy j                      val (isFill,nSize,pieces)=Target.getVecTy j
673                      val splitTy=LowILTypes.vectorLength  Pieces                      val splitTy=LowILTypes.vectorLength  pieces
674                      val n=length Pieces                      val n=length pieces
675                      val A =LowOpToTreeOp.isAlignedStore(isFill,n)                      val A =LowOpToTreeOp.isAlignedStore(isFill,n)
676                      fun f ([], _ ) = []                      fun f ([], _ ) = []
677                      | f (e1::es,count)=let                      | f (e1::es,count)=let
# Line 776  Line 786 
786                      | (_, _) => raise Fail "no path to exit unimplemented" (* FIXME *)                      | (_, _) => raise Fail "no path to exit unimplemented" (* FIXME *)
787                    (* end case *)                    (* end case *)
788                  end                  end
789                  and doNode (env, ifStk : open_if list, stms, nd) =                  and doNode (env, ifStk : open_if list, stms, nd) = (
790                 (* testp ["******************* \n doNode\n ",LowToS.printNode (Nd.kind nd),"\n"]*)                 (* testp ["******************* \n doNode\n ",LowToS.printNode (Nd.kind nd),"\n"]*)
791                  (case Nd.kind nd                  case Nd.kind nd
792                   of Src.NULL => raise Fail "unexpected NULL"                   of Src.NULL => raise Fail "unexpected NULL"
793                    | Src.ENTRY{succ} => doNode (env, ifStk, stms, !succ)                    | Src.ENTRY{succ} => doNode (env, ifStk, stms, !succ)
794                    | k as Src.JOIN{phis, succ, ...} =>  (join (env, ifStk, stms, k))                    | k as Src.JOIN{phis, succ, ...} =>  (join (env, ifStk, stms, k))
# Line 843  Line 853 
853                          |  Dst.E_Var rhs3               => (case (DstV.kind rhs3,DstV.rTy rhs3)                          |  Dst.E_Var rhs3               => (case (DstV.kind rhs3,DstV.rTy rhs3)
854                              of ( _ ,Ty.TensorTy [])              => Dst.S_Save([x], rhs2)                              of ( _ ,Ty.TensorTy [])              => Dst.S_Save([x], rhs2)
855                              | (Dst.VK_Local,Ty.TensorTy [oSize]) =>let                              | (Dst.VK_Local,Ty.TensorTy [oSize]) =>let
856                                  val (isFill,nSize,Pieces)=Target.getVecTy oSize                                  val (isFill,nSize,pieces)=Target.getVecTy oSize
857                                  in  Dst.S_StoreVec( Dst.E_State x,0, false,isFill, oSize,Ty.TensorTy [oSize],Ty.vectorLength Pieces,[rhs2])                                  in  Dst.S_StoreVec( Dst.E_State x,0, false,isFill, oSize,Ty.TensorTy [oSize],Ty.vectorLength pieces,[rhs2])
858                                  end                                  end
859                              | (_,Ty.TensorTy xs)                 => Dst.S_Copy( Dst.E_State x, rhs2,0,size xs)                              | (_,Ty.TensorTy xs)                 => Dst.S_Copy( Dst.E_State x, rhs2,0,size xs)
860                              | _                                  => Dst.S_Save([x], rhs2)                              | _                                  => Dst.S_Save([x], rhs2)
# Line 1013  Line 1023 
1023            val typsList=TySet.listItems(typs);            val typsList=TySet.listItems(typs);
1024            val oprList=OprSet.listItems(opr);            val oprList=OprSet.listItems(opr);
1025            val _=testp[(Fnc.setListToString(typsList,oprList,"--FinalPostStrands--"))]            val _=testp[(Fnc.setListToString(typsList,oprList,"--FinalPostStrands--"))]
1026              in
1027            in  Dst.Program{              Dst.Program{
1028                    props = props,                    props = props,
1029                    types=typsList,                    types=typsList,
1030                    operations = oprList,                    operations = oprList,

Legend:
Removed from v.3168  
changed lines
  Added in v.3169

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