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 2628, Wed May 21 04:02:06 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    (* create new tree IL variables *)    (* create new tree IL variables *)
45      local      local
46        val newVar = T.Var.new        val newVar = T.Var.new
# Line 52  Line 52 
52                String.concat[prefix, "_", Int.toString n]                String.concat[prefix, "_", Int.toString n]
53              end              end
54      in      in
55   fun newGlobal x=newVar (genName("G_" ^ V.name x), T.VK_Global, V.ty x)      val testing=1
56        fun pntTest str=(case testing
57            of 1=> (print(str);1)
58            | _ =>1
59        (*end case*))
60    
61    
62        fun newGlobal x=newVar (genName("G_" ^ V.name x), T.VK_Global, V.ty x)
63      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)
64      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)
65      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 271 
271            val getPieces= Target.getPieces            val getPieces= Target.getPieces
272            val isVecTy= Target.isVecTy            val isVecTy= Target.isVecTy
273    
274           fun foundVec(lhs,rator,n,[a,b])= let          (*foundVec: Found low-IL vector*)
275             fun foundVec(lhs,rator,n,args)= let
             fun Done _ =[T.S_Assign([lhs],T.E_Op(rator n,[a,b]))]  
                 (* ExpOp.creatLd(lhs,rator,n,[n],[a,b]) (*Done*)*)  
276    
277                (*Looks for next largest length supported*)
278              fun fillVec vn =(case (isVecTy vn)              fun fillVec vn =(case (isVecTy vn)
279                  of true => ExpOp.creatFl(lhs,rator,n,vn,[a,b])                  of true => (vn,[vn])
280                  | false => fillVec(vn+1)                  | false => fillVec(vn+1))
281                  (*end case*))              val (newSize,Pieces)= (case (isVecTy n)
282                    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  
283                  | false=>(case isHwVec n                  | false=>(case isHwVec n
284                      of true=> fillVec (n+1)                      of false=> (n,(getPieces n))
285                      | false=>splitV 1                      | true=> fillVec (n+1)
286                      (*end case*))                      (*end case*))
287                  (*end case*))                  (*end case*))
288                val _=(case testing
289                    of 1=>(print(String.concat["\n ***********\n ",DstOp.toString(rator n) ,"\n \t =>"]);1)
290                    | _=>1)
291                in
292                    ExpOp.creatLd(lhs,rator,newSize,n,Pieces,args)
293              end              end
            | foundVec _ =raise Fail"Not the right number of args"  
   
   
294    
295    
296          (* 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 380  Line 379 
379       *)       *)
380        | 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
381    
382    
383    
384      fun trCFG (env, prefix, finish, cfg) = let      fun trCFG (env, prefix, finish, cfg) = let
385             val typesAll=ref []
386            fun join (env, [], _, IL.JOIN _) = raise Fail "JOIN with no open if"            fun join (env, [], _, IL.JOIN _) = raise Fail "JOIN with no open if"
387              | join (env, [], stms, _) = endScope (env, prefix @ List.rev stms)              | join (env, [], stms, _) = endScope (env, prefix @ List.rev stms)
388              | 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 431 
431                        doNode (env, ifStk, T.S_Comment text :: stms, !succ)                        doNode (env, ifStk, T.S_Comment text :: stms, !succ)
432                    | IL.ASSIGN{stm, succ, ...} => let                    | IL.ASSIGN{stm, succ, ...} => let
433                        val (env, stms') = doAssign (env, stm)                        val (env, stms') = doAssign (env, stm)
434                            (*Printing out types*)
435                            val types=(case testing
436                                    of 1 =>(List.map gT.getTypesFilteredPnt stms')
437                                    | _ =>(List.map gT.getTypesFiltered stms'))
438                            val _=typesAll:=(!typesAll@(gT.flat types))
439                        in                        in
440                          doNode (env, ifStk, stms' @ stms, !succ)                          doNode (env, ifStk, stms' @ stms, !succ)
441                        end                        end
# Line 494  Line 501 
501                          | ExitKind.DIE => join (env, ifStk, T.S_Die :: stms, k)                          | ExitKind.DIE => join (env, ifStk, T.S_Die :: stms, k)
502                        (* end case *))                        (* end case *))
503                  (* end case *))                  (* end case *))
504            in  
505              doNode (env, [], [], CFG.entry cfg)            val Y=doNode (env, [], [], CFG.entry cfg)
506             (* val _=gT.gotFiltered(!typesAll)*)
507              in Y
508            end            end
509    
510      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 594 
594                    (IL.CFG.liveAtExit globalInit)                    (IL.CFG.liveAtExit globalInit)
595            val {inputInit, globalInit} = splitGlobalInit globalInit            val {inputInit, globalInit} = splitGlobalInit globalInit
596            val strands = List.map (trStrand env) strands            val strands = List.map (trStrand env) strands
597            in  
598              val HH=
599              T.Program{              T.Program{
600                  props = props,                  props = props,
601                  globals = globals,                  globals = globals,
# Line 594  Line 604 
604                  strands = strands,                  strands = strands,
605                  initially = trInitially (env, initially)                  initially = trInitially (env, initially)
606                }                }
607                    in (print "\n \t ---------------- Target Code --------------\n";HH)
608            end            end
609    
610    end    end

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

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