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

SCM Repository

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

Diff of /branches/charisee/src/compiler/c-util/tree-to-c-fn.sml

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

revision 2687, Wed Aug 27 13:28:50 2014 UTC revision 2688, Thu Aug 28 02:21:14 2014 UTC
# Line 50  Line 50 
50      structure Op = IL.Op      structure Op = IL.Op
51      structure Ty = IL.Ty      structure Ty = IL.Ty
52      structure V = IL.Var      structure V = IL.Var
53      structure StV = IL.StateVar
54    
55      datatype var = datatype CLang.typed_var      datatype var = datatype CLang.typed_var
56      type env = CLang.typed_var TreeIL.Var.Map.map      type env = CLang.typed_var TreeIL.Var.Map.map
57    
58      val testing =1      val testing =0
59      fun pntTest str=(case testing      fun pntTest str=(case testing
60          of 1=> (print(str);1)          of 1=> (print(str);1)
61          | _ =>1          | _ =>1
# Line 359  Line 360 
360    
361              | IL.E_LoadArr(aligned,n, orig, v,arg) =>              | IL.E_LoadArr(aligned,n, orig, v,arg) =>
362                      CL.mkApply(N.NameLd(aligned,n,orig,true), trExps(env, [v,arg]))                      CL.mkApply(N.NameLd(aligned,n,orig,true), trExps(env, [v,arg]))
363              | IL.E_Mux(pieces,ops,_)=>  CL.mkApply(N.NameMux , trExps(env, ops))             (* | IL.E_Mux(pieces,ops,_)=>  CL.mkApply(N.NameMux , trExps(env, ops))*)
364    
365    
366                | _=>raise Fail (String.concat["un matched expression",(IL.toString e)])
           (*  | _=>raise Fail (String.concat["un matched expression",(IL.toString e)])*)  
367            (* end case *))            (* end case *))
368            val _=pntTest(CL.expToString CLExp)            val _=pntTest(CL.expToString CLExp)
369          in          in
# Line 374  Line 374 
374      and trExps (env, exps) = List.map (fn exp => trExp(env, exp)) exps      and trExps (env, exps) = List.map (fn exp => trExp(env, exp)) exps
375    
376    
377      fun storeVec(env,x',A, rty, orig,indexAt,pieces,args,isArr)=let      fun storeVec(env,x',A, rty, orig,pieces,args,isArr)=let
378          (*val x' =VarToC.lvalueVar (env, x)*)          (*val x' =VarToC.lvalueVar (env, x)*)
379          fun sort([],_,_)=[]          fun sort([],_,_)=[]
380            | sort(p::ps,e::es,offset)=            | sort(p::ps,e::es,offset)=
381              [CL.mkApply(N.NameMkVec(A,p,orig,isArr), [x']@trExps(env, [IL.E_Lit(Literal.Int offset),e]))]              [CL.mkApply(N.NameMkVec(A,p,orig,isArr),
382              @ sort(ps, es,offset + IntInf.fromInt p)              [x']@trExps(env, [IL.E_Lit(Literal.Int offset),e]))]  @ sort(ps, es,offset + IntInf.fromInt p)
383          val exp =sort(pieces,args,indexAt)          val exp =sort(pieces,args,0)
384          in          in
385              List.map (fn e=> CL.S_Exp e ) exp              List.map (fn e=> CL.S_Exp e ) exp
386          end          end
# Line 556  Line 556 
556                   of Ty.TensorTy[n,m] => [CL.mkCall(N.copyMat(n,m), [lhs, VarToC.rvalueVar(env, x)])]                   of Ty.TensorTy[n,m] => [CL.mkCall(N.copyMat(n,m), [lhs, VarToC.rvalueVar(env, x)])]
557                    | _ => [CL.mkAssign(lhs, VarToC.rvalueVar(env, x))]                    | _ => [CL.mkAssign(lhs, VarToC.rvalueVar(env, x))]
558                  (* end case *))                  (* end case *))
559              | _ =>  (pnttreeTest(String.concat["\n mk assign  ",IL.toString rhs, "\n ---end make assign-- \n "]) ; let              | _ =>   [CL.mkAssign(lhs, trExp(env, rhs))]
560                      val ii=[CL.mkAssign(lhs, trExp(env, rhs))]  
                     val _= pnttreeTest "post make assign" in ii  end  )  
561            (* end case *))            (* end case *))
562    
563      fun trMultiAssign (env, lhs, IL.E_Op(rator, args)) = (case (lhs, rator, args)      fun trMultiAssign (env, lhs, IL.E_Op(rator, args)) = (case (lhs, rator, args)
# Line 629  Line 628 
628                    | IL.S_Assign([x], IL.E_Cons _ ) =>raise Fail "Cons not written yet "                    | IL.S_Assign([x], IL.E_Cons _ ) =>raise Fail "Cons not written yet "
629    
630    
631                    | IL.S_Assign([x], exp) =>(pnttreeTest(String.concat["\n base",IL.toString exp,"end base\n "]);                    | IL.S_Assign([x], exp) =>
632                          trAssign (env, VarToC.lvalueVar (env, x) , exp))                          trAssign (env, VarToC.lvalueVar (env, x) , exp)
633    
634    
635                    | IL.S_Assign(xs, exp) =>                    | IL.S_Assign(xs, exp) =>trMultiAssign (env, List.map (fn x => VarToC.lvalueVar (env, x)) xs, exp)
                   (pnttreeTest(String.concat[ "multiAssign",IL.toString exp]);trMultiAssign (env, List.map (fn x => VarToC.lvalueVar (env, x)) xs, exp))  
636                    | IL.S_IfThen(cond, thenBlk) =>                    | IL.S_IfThen(cond, thenBlk) =>
637                    (pnttreeTest"if then "; [CL.mkIfThen(trExp(env, cond), trBlk(env, thenBlk))])                    (pnttreeTest"if then "; [CL.mkIfThen(trExp(env, cond), trBlk(env, thenBlk))])
638                    | IL.S_IfThenElse(cond, thenBlk, elseBlk) =>                    | IL.S_IfThenElse(cond, thenBlk, elseBlk) =>
# Line 645  Line 643 
643                    | IL.S_Save([x],IL.E_Cons _) =>                    | IL.S_Save([x],IL.E_Cons _) =>
644                  raise Fail "roses"                  raise Fail "roses"
645    
646                    | IL.S_Save([x],exp) =>(pnttreeTest "save";                    (*
647                      | IL.S_Save([x], exp as IL.E_Mux(A, rty, orig, Ty.vectorLength pieces,args)) =>let
648                            val _=print(String.concat["\n\n\n *** found saveMux\n",StV.name x, "=save=",IL.toString exp])
649                            (*used when Statement isn't changed to storeVec *)
650                      in
651                        storeVec(env,  VarToC.lvalueStateVar x,A, rty, orig,pieces,args,true)
652                      end
653                      *)
654                      | IL.S_Save([x],exp) =>let
655                        val _ =print(String.concat[ "\n\n\n *** found save-no mux \n", StV.name x,"=save=",IL.toString exp ])
656                      in (
657                  trAssign (env, VarToC.lvalueStateVar x, exp))                  trAssign (env, VarToC.lvalueStateVar x, exp))
658                      end
659                    | IL.S_Save(xs, exp) =>                    | IL.S_Save(xs, exp) =>let
660                        trMultiAssign (env, List.map VarToC.lvalueStateVar xs, exp)                          val _=print "\n\n\n *** found a save";
661                            in  trMultiAssign (env, List.map VarToC.lvalueStateVar xs, exp)
662                            end
663                   | IL.S_LoadImage(lhs, dim, name) => checkSts (fn sts => let                   | IL.S_LoadImage(lhs, dim, name) => checkSts (fn sts => let
664                      val _= pnttreeTest "ld image  "                      val _= pnttreeTest "ld image  "
665                        val lhs = VarToC.lvalueVar (env, lhs)                        val lhs = VarToC.lvalueVar (env, lhs)
# Line 684  Line 692 
692                    | IL.S_Active => [CL.mkReturn(SOME(CL.mkVar N.kActive))]                    | IL.S_Active => [CL.mkReturn(SOME(CL.mkVar N.kActive))]
693                    | IL.S_Stabilize => [CL.mkReturn(SOME(CL.mkVar N.kStabilize))]                    | IL.S_Stabilize => [CL.mkReturn(SOME(CL.mkVar N.kStabilize))]
694                    | IL.S_Die => [CL.mkReturn(SOME(CL.mkVar N.kDie))]                    | IL.S_Die => [CL.mkReturn(SOME(CL.mkVar N.kDie))]
695                    | IL.S_StoreVec(x,A, rty, orig, IL.E_Lit(Literal.Int indexAt),Ty.vectorLength pieces,args,isArr)=>                    | IL.S_StoreVec(v,A, rty, orig, Ty.vectorLength pieces,args)=>let
696                          storeVec(env,VarToC.lvalueVar (env, x),A, rty, orig,indexAt,pieces,args,isArr)                          val v'=(case v
697                                of IL.E_Var x=>VarToC.lvalueVar (env, x)
698                                | IL.E_State x =>VarToC.lvalueStateVar (x)
699                            (*end case *))
700                            in
701                                storeVec(env,v',A, rty, orig,pieces,args,true)
702                            end
703                  (* end case *))                  (* end case *))
704    
705    

Legend:
Removed from v.2687  
changed lines
  Added in v.2688

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