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 2627, Sat May 17 00:44:22 2014 UTC revision 2631, Fri May 23 18:13:12 2014 UTC
# Line 40  Line 40 
40      structure SrcOp = LowOps      structure SrcOp = LowOps
41      structure DstOp = TreeOps      structure DstOp = TreeOps
42    
43            structure gT=getTypes
44            structure TreetoCFN=TreetoCFN
45    (* create new tree IL variables *)    (* create new tree IL variables *)
46      local      local
47        val newVar = T.Var.new        val newVar = T.Var.new
# Line 52  Line 53 
53                String.concat[prefix, "_", Int.toString n]                String.concat[prefix, "_", Int.toString n]
54              end              end
55      in      in
56   fun newGlobal x=newVar (genName("G_" ^ V.name x), T.VK_Global, V.ty x)      val testing=1
57        fun pntTest str=(case testing
58            of 1=> (print(str);1)
59            | _ =>1
60        (*end case*))
61    
62    
63        fun newGlobal x=newVar (genName("G_" ^ V.name x), T.VK_Global, V.ty x)
64      fun newParam x = newVar (genName("p_" ^ V.name x), T.VK_Local, V.ty x)      fun newParam x = newVar (genName("p_" ^ V.name x), T.VK_Local, V.ty x)
65      fun newLocal x = newVar (genName("l_" ^ V.name x), T.VK_Local, V.ty x)      fun newLocal x = newVar (genName("l_" ^ V.name x), T.VK_Local, V.ty x)
66      fun newIter x = newVar (genName("i_" ^ V.name x), T.VK_Local, V.ty x)      fun newIter x = newVar (genName("i_" ^ V.name x), T.VK_Local, V.ty x)
# Line 265  Line 272 
272            val getPieces= Target.getPieces            val getPieces= Target.getPieces
273            val isVecTy= Target.isVecTy            val isVecTy= Target.isVecTy
274    
275           fun foundVec(lhs,rator,n,[a,b])= let          (*foundVec: Found low-IL vector*)
276             fun foundVec(lhs,rator,n,argsS, argsV,nextfn)= let
             fun Done _ =[T.S_Assign([lhs],T.E_Op(rator n,[a,b]))]  
                 (* ExpOp.creatLd(lhs,rator,n,[n],[a,b]) (*Done*)*)  
277    
278                (*Looks for next largest length supported*)
279              fun fillVec vn =(case (isVecTy vn)              fun fillVec vn =(case (isVecTy vn)
280                  of true => ExpOp.creatFl(lhs,rator,n,vn,[a,b])                  of true => (vn,[vn])
281                  | false => fillVec(vn+1)                  | false => fillVec(vn+1))
282                  (*end case*))              val (newSize,Pieces)= (case (isVecTy n)
283                    of true=> (n,[n])
             fun splitV _ =let  
                 val n'=getPieces n  
                 in  
                     ExpOp.creatLd(lhs,rator,n,n',[a,b])  
                 end  
   
             in (case (isVecTy n)  
                 of true=> Done 1  
284                  | false=>(case isHwVec n                  | false=>(case isHwVec n
285                      of true=> fillVec (n+1)                      of false=> (n,(getPieces n))
286                      | false=>splitV 1                      | true=> fillVec (n+1)
287                      (*end case*))                      (*end case*))
288                  (*end case*))                  (*end case*))
289                val _=(case testing
290                    of 1=>(print(String.concat["\n ***********\n ",DstOp.toString(rator n) ,"\n \t =>"]);1)
291                    | _=>1)
292                in
293                    nextfn(lhs,rator,newSize,n,Pieces,argsS,argsV)
294              end              end
            | foundVec _ =raise Fail"Not the right number of args"  
   
   
295    
296    
297          (* 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 *)
# Line 336  Line 336 
336                  val args'=List.map (useVar env) args                  val args'=List.map (useVar env) args
337                  val (env, t) = doLHS()                  val (env, t) = doLHS()
338                  in (case rator                  in (case rator
339                       of SrcOp.addVec n   => (env, foundVec(t,DstOp.addVec,n,args'))                       of SrcOp.addVec n   => (env, foundVec(t,DstOp.addVec,n,[],args',ExpOp.creatLd))
340                       | SrcOp.subVec n    => (env, foundVec(t,DstOp.subVec,n,args'))                       | SrcOp.subVec n    => (env, foundVec(t,DstOp.subVec,n,[],args',ExpOp.creatLd))
341                       | SrcOp.prodScaV n  => (env, foundVec(t,DstOp.prodScaV ,n,args'))                       | SrcOp.prodScaV n  => (env, foundVec(t,DstOp.prodScaV ,n, [hd(args')], tl(args'),ExpOp.creatLd))
342                       | SrcOp.prodVec n   => (env, foundVec(t,DstOp.prodVec,n,args'))                       | SrcOp.prodVec n   => (env, foundVec(t,DstOp.prodVec,n,[],args',ExpOp.creatLd))
343                       | SrcOp.sumVec n    => (env, foundVec(t,DstOp.sumVec ,n,args'))                       | SrcOp.sumVec n    => (env, foundVec(t,DstOp.sumVec ,n,[],args',ExpOp.creatLd))
344                       | SrcOp.C c         => (env,[T.S_Assign([t],T.E_Lit(Literal.Int 0))])                       | SrcOp.C c         => (env,[T.S_Assign([t],T.E_Lit(Literal.Int 0))])
345                       | _ => let                       | _ => let
346                          val Trator = ExpOp.expandOp rator                          val Trator = ExpOp.expandOp rator
# Line 380  Line 380 
380       *)       *)
381        | ELSE_BR of T.stm list * T.exp * T.stm list * IL.node_kind        | ELSE_BR of T.stm list * T.exp * T.stm list * IL.node_kind
382    
383    
384    
385      fun trCFG (env, prefix, finish, cfg) = let      fun trCFG (env, prefix, finish, cfg) = let
386             val typesAll=ref []
387             val namesAll=ref []
388            fun join (env, [], _, IL.JOIN _) = raise Fail "JOIN with no open if"            fun join (env, [], _, IL.JOIN _) = raise Fail "JOIN with no open if"
389              | join (env, [], stms, _) = endScope (env, prefix @ List.rev stms)              | join (env, [], stms, _) = endScope (env, prefix @ List.rev stms)
390              | join (env, THEN_BR(stms1, cond, elseBr)::stk, thenBlk, k) = let              | join (env, THEN_BR(stms1, cond, elseBr)::stk, thenBlk, k) = let
# Line 429  Line 433 
433                        doNode (env, ifStk, T.S_Comment text :: stms, !succ)                        doNode (env, ifStk, T.S_Comment text :: stms, !succ)
434                    | IL.ASSIGN{stm, succ, ...} => let                    | IL.ASSIGN{stm, succ, ...} => let
435                        val (env, stms') = doAssign (env, stm)                        val (env, stms') = doAssign (env, stm)
436                            (*Printing out types*)
437                            val types=(case testing
438                                    of 1 =>(List.map gT.getTypesFilteredPnt stms')
439                                    | _ =>(List.map gT.getTypesFiltered stms'))
440                            val _=typesAll:=(!typesAll@(gT.flat types))
441                            val names=(case testing
442                                    of 1 =>(List.map fnNames.ExptoCStringPnt stms')
443                                    |_  => (List.map fnNames.ExptoCString stms'))
444                            val _=namesAll:=(!namesAll@(gT.flat names))
445    
446                            val _=List.map TreetoCFN.ExptoCfnPnt stms'
447                        in                        in
448                          doNode (env, ifStk, stms' @ stms, !succ)                          doNode (env, ifStk, stms' @ stms, !succ)
449                        end                        end
# Line 494  Line 509 
509                          | ExitKind.DIE => join (env, ifStk, T.S_Die :: stms, k)                          | ExitKind.DIE => join (env, ifStk, T.S_Die :: stms, k)
510                        (* end case *))                        (* end case *))
511                  (* end case *))                  (* end case *))
512            in  
513              doNode (env, [], [], CFG.entry cfg)            val Y=doNode (env, [], [], CFG.entry cfg)
514              val _=gT.gotFiltered(!typesAll)
515              val _=fnNames.gotFiltered(!namesAll)
516              in Y
517            end            end
518    
519      fun trInitially (env, IL.Initially{isArray, rangeInit, iters, create=(createInit, strand, args)}) =      fun trInitially (env, IL.Initially{isArray, rangeInit, iters, create=(createInit, strand, args)}) =
# Line 585  Line 603 
603                    (IL.CFG.liveAtExit globalInit)                    (IL.CFG.liveAtExit globalInit)
604            val {inputInit, globalInit} = splitGlobalInit globalInit            val {inputInit, globalInit} = splitGlobalInit globalInit
605            val strands = List.map (trStrand env) strands            val strands = List.map (trStrand env) strands
606            in  
607              val HH=
608              T.Program{              T.Program{
609                  props = props,                  props = props,
610                  globals = globals,                  globals = globals,
# Line 594  Line 613 
613                  strands = strands,                  strands = strands,
614                  initially = trInitially (env, initially)                  initially = trInitially (env, initially)
615                }                }
616                    in (print "\n \t ---------------- Target Code --------------\n";HH)
617            end            end
618    
619    end    end

Legend:
Removed from v.2627  
changed lines
  Added in v.2631

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