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
 [diderot] / branches / charisee / src / compiler / tree-il / low-to-tree-fn.sml

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

revision 3167, Sun Mar 29 20:01:07 2015 UTC revision 3168, Sun Mar 29 20:46:53 2015 UTC
# Line 355  Line 355
355        | trInitialization (InP.Int n) = ([], Dst.E_Lit(Literal.Int n))        | trInitialization (InP.Int n) = ([], Dst.E_Lit(Literal.Int n))
356        | trInitialization (InP.Real f) = ([], Dst.E_Lit(Literal.Float f))        | trInitialization (InP.Real f) = ([], Dst.E_Lit(Literal.Float f))
357        | trInitialization (InP.Bool b) = ([], Dst.E_Lit(Literal.Bool b))        | trInitialization (InP.Bool b) = ([], Dst.E_Lit(Literal.Bool b))
358          | trInitialization (InP.Tensor([d], vs)) = raise Fail "trInitialization: Tensor"
359  (*  (*
360        | trInitialization (InP.Tensor(shp, vs)) = let        | trInitialization (InP.Tensor(shp, vs)) = let
361            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 388  Line 389
389     * order.     * order.
390     *)     *)
391      fun doAssign (env, (lhs, rhs)) = let      fun doAssign (env, (lhs, rhs)) = let

392            fun doLHS () = (case peekGlobal(env, lhs)            fun doLHS () = (case peekGlobal(env, lhs)
393              of SOME lhs' => (env, lhs')              of SOME lhs' => (env, lhs')
394              | NONE => let              | NONE => let
# Line 397  Line 397
397                      (rename (addLocal(env, t), lhs, t), t)                      (rename (addLocal(env, t), lhs, t), t)
398                  end                  end
399              (* end case *))              (* end case *))

400          (* for expressions that are going to be compiled to a call statement *)          (* for expressions that are going to be compiled to a call statement *)
401            fun assignExp (env, exp) = let            fun assignExp (env, exp) = let
402                (* operations that return matrices may not be supported inline *)                (* operations that return matrices may not be supported inline *)
# Line 405  Line 404
404                  in                  in
405                    (env, [Dst.S_Assign([t], exp)])                    (env, [Dst.S_Assign([t], exp)])
406                  end                  end

407          (* force an argument to be stored in something that will be mapped to an l-value *)          (* force an argument to be stored in something that will be mapped to an l-value *)
408            fun bindVar (env, x) = (case useVar env x            fun bindVar (env, x) = (case useVar env x
409                  of x' as Dst.E_State _  =>(env, x', [])                  of x' as Dst.E_State _  =>(env, x', [])
# Line 417  Line 414
414                          (addLocal(env, x'), Dst.E_Var x', [Dst.S_Assign([x'], e)])                          (addLocal(env, x'), Dst.E_Var x', [Dst.S_Assign([x'], e)])
415                        end                        end
416                  (* end case *))                  (* end case *))

417          val _= LowToS.ASSIGNtoString(lhs,rhs)          val _= LowToS.ASSIGNtoString(lhs,rhs)

418          (* opToString:LowIL.Ops* LowIL.Var list-> int          (* opToString:LowIL.Ops* LowIL.Var list-> int
419          *Just used to print information about the op          *Just used to print information about the op
420          *)          *)
# Line 427  Line 422
422                  val r=SrcOp.toString rator                  val r=SrcOp.toString rator
423                  val a= String.concatWith " , " (List.map (fn e=> Dst.toString e) arg)                  val a= String.concatWith " , " (List.map (fn e=> Dst.toString e) arg)
424                  in                  in

425                     testp[ "\n ***** New Op****  \n ",r,"\n Args(",a,")"]                     testp[ "\n ***** New Op****  \n ",r,"\n Args(",a,")"]

426                  end                  end
427            in            in
428              case rhs              case rhs
# Line 597  Line 590
590                          in                          in
591                              (envv,stmts)                              (envv,stmts)
592                          end                          end
593                  in (case (rator,args')                  in case (rator,args')
595                       | (SrcOp.subVec n,_)                       =>  foundVec(rator,DstOp.subVec,n,[],args')                       | (SrcOp.subVec n,_)                       =>  foundVec(rator,DstOp.subVec,n,[],args')
596                       | (SrcOp.prodScaV n,e1::es)                =>  foundVec(rator,DstOp.prodScaV ,n, [e1], es)                       | (SrcOp.prodScaV n,e1::es)                =>  foundVec(rator,DstOp.prodScaV ,n, [e1], es)
# Line 618  Line 611
611                              if isInlineOp rator then (bind (env, lhs, exp))                              if isInlineOp rator then (bind (env, lhs, exp))
612                              else (assignExp (env, exp))                              else (assignExp (env, exp))
613                          end                          end
614                      (*end case*))                      (*end case *)
615                   end                   end
616                | Src.APPLY(f, args) =>                | Src.APPLY(f, args) =>
617                    bind (env, lhs, Dst.E_Apply(f, List.map (useVar env) args))                    bind (env, lhs, Dst.E_Apply(f, List.map (useVar env) args))
# Line 633  Line 626
626                      *)                      *)
627                      val args'=List.map (useVar env) args                      val args'=List.map (useVar env) args
628                      val (env2, t) = doLHS()                      val (env2, t) = doLHS()
629                      in (case DstV.kind t                      in case DstV.kind t
630                          of TreeIL.VK_Local=> let                          of TreeIL.VK_Local=> let
631                              val (isFill,nSize,Pieces)=Target.getVecTy oSize                              val (isFill,nSize,Pieces)=Target.getVecTy oSize
632                              val exp = LowOpToTreeOp.consVecToTree(nSize,oSize,Pieces,args',isFill)                              val exp = LowOpToTreeOp.consVecToTree(nSize,oSize,Pieces,args',isFill)
# Line 642  Line 635
635                                  bind (env2, lhs, exp)                                  bind (env2, lhs, exp)
636                              end                              end
637                          | _ =>(env2,[Dst.S_Cons(t,oSize,args')])                          | _ =>(env2,[Dst.S_Cons(t,oSize,args')])
638                          (*end case*))                          (*end case*)
639                      end                      end
640                  (*| Src.CONS(ty as Ty.TensorTy [_,2], args)=>let                  (*| Src.CONS(ty as Ty.TensorTy [_,2], args)=>let
641                      val args'=List.map (useVar env) args                      val args'=List.map (useVar env) args

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

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