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

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/low-to-tree/low-to-tree.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/low-to-tree/low-to-tree.sml

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

revision 3843, Tue May 10 15:10:58 2016 UTC revision 3844, Tue May 10 19:15:03 2016 UTC
# Line 156  Line 156 
156                | Op.VMul _ => bindVOp TOp.VMul                | Op.VMul _ => bindVOp TOp.VMul
157                | Op.VNeg _ => bindVOp TOp.VNeg                | Op.VNeg _ => bindVOp TOp.VNeg
158                | Op.VSum _ => ??                | Op.VSum _ => ??
159                | Op.VIndex(d, i) => ??                | Op.VIndex(_, i) => let
160    (* FIXME: more efficient to lookup the variable and avoid expanding TREE args *)
161                      val ({pieces, ...}, es) = vectorArg (env, hd args)
162                      fun select (i, w::ws, e::es) =
163                            if (i < w)
164                              then Env.TREE(T.E_Op(TOp.VIndex(w, i), [e]))
165                              else select (i-w, ws, es)
166                        | select _ = raise Fail("bogus " ^ Op.toString srcRator)
167                      in
168                        select (i, pieces, es)
169                      end
170                | Op.VClamp n => bindVOp TOp.VClamp                | Op.VClamp n => bindVOp TOp.VClamp
171                | Op.VMapClamp n => bindVOp TOp.VMapClamp                | Op.VMapClamp n => bindVOp TOp.VMapClamp
172                | Op.VLerp n => bindVOp TOp.VLerp                | Op.VLerp n => bindVOp TOp.VLerp
# Line 195  Line 205 
205                | Op.IntToReal => bindOp TOp.IntToReal                | Op.IntToReal => bindOp TOp.IntToReal
206                | Op.RealToInt 1 => ??                | Op.RealToInt 1 => ??
207                | Op.RealToInt d => ??                | Op.RealToInt d => ??
208    (* FIXME
209                | Op.R_All ty => ??                | Op.R_All ty => ??
210                | Op.R_Exists ty => ??                | Op.R_Exists ty => ??
211                | Op.R_Max ty => ??                | Op.R_Max ty => ??
# Line 203  Line 214 
214                | Op.R_Product ty => ??                | Op.R_Product ty => ??
215                | Op.R_Mean ty => ??                | Op.R_Mean ty => ??
216                | Op.R_Variance ty => ??                | Op.R_Variance ty => ??
217    *)
218                | Op.Transform info => ??                | Op.Transform info => ??
219                | Op.Translate info => ??                | Op.Translate info => ??
220                | Op.ControlIndex(info, ctl, d) => ??                | Op.ControlIndex(info, ctl, d) => ??
# Line 212  Line 224 
224                | Op.LoadSeq(ty, file) => ??                | Op.LoadSeq(ty, file) => ??
225                | Op.LoadImage(ty, file) => ??                | Op.LoadImage(ty, file) => ??
226                | Op.MathFn f => bindOp (TOp.MathFn f)                | Op.MathFn f => bindOp (TOp.MathFn f)
227                | rator => raise Fail("bogus operator " ^ Op.toString rator)                | rator => raise Fail("bogus operator " ^ Op.toString srcRator)
228              (* end case *)              (* end case *)
229            end            end
230    
# Line 226  Line 238 
238                  (* end case *))                  (* end case *))
239            in            in
240              case rhs              case rhs
241               of IR.GLOBAL x => bindSimple (T.E_Global(getGlobalVar x))               of IR.GLOBAL x => bindSimple (T.E_Global(mkGlobalVar x))
242                | IR.STATE x => bindSimple (T.E_State(getStateVar x))                | IR.STATE x => bindSimple (T.E_State(getStateVar x))
243                | IR.VAR x => (case Env.useVar env x                | IR.VAR x => (case Env.useVar env x
244                     of Env.TREE e => ??                     of Env.TREE e => ??
# Line 315  Line 327 
327                        end                        end
328                    | IR.FOREACH{var, src, bodyEntry, succ, ...} => let                    | IR.FOREACH{var, src, bodyEntry, succ, ...} => let
329                        val src = useScalar (!src)                        val src = useScalar (!src)
330                        val var = ??                        val var = Util.newIterVar var
331                        val (env, stms) = Env.flushPending (env, stms)                        val (env, stms) = Env.flushPending (env, stms)
332                        val body = doNode (env, !bodyEntry, [], [])                        val body = doNode (env, !bodyEntry, [], [])
333                        val stm = T.S_Foreach(var, src, body)                        val stm = T.S_Foreach(var, src, body)
# Line 333  Line 345 
345                    | IR.MASSIGN{stm=(ys, rator, xs), succ, ...} => let                    | IR.MASSIGN{stm=(ys, rator, xs), succ, ...} => let
346                        fun doit () = let                        fun doit () = let
347                              fun doLHSVar (y, (env, ys)) = let                              fun doLHSVar (y, (env, ys)) = let
348                                    val t = newLocal y                                    val t = Util.newLocalVar y
349                                    in                                    in
350                                      (rename (addLocal(env, t), y, t), t::ys)                                      (rename (Util.addLocalVar(env, t), y, t), t::ys)
351                                    end                                    end
352                              val (env, ys) = List.foldr doLHSVar (env, []) ys                              val (env, ys) = List.foldr doLHSVar (env, []) ys
353  (* FIXME: need to translate the operator *)  (* FIXME: need to translate the operator *)
354                              val exp = T.E_Op(rator, List.map (useVar env) xs)                              val exp = T.E_Op(??, List.map (Env.useVar env) xs)
355                              val stm = T.S_Assign(ys, exp)                              val stm = T.S_MAssign(ys, exp)
356                              in                              in
357                                doNode (env, !succ, ifStk, stm :: stms)                                doNode (env, !succ, ifStk, stm :: stms)
358                              end                              end
# Line 354  Line 366 
366                        end                        end
367                    | IR.GASSIGN{lhs, rhs, succ, ...} => let                    | IR.GASSIGN{lhs, rhs, succ, ...} => let
368                        val stm = (case useAsInput(env, rhs)                        val stm = (case useAsInput(env, rhs)
369                               of NONE => T.S_GAssign(getGlobalVar lhs, useVar env rhs)                               of NONE => T.S_GAssign(mkGlobalVar lhs, Env.useVar env rhs)
370                                | SOME mkStm => mkStm(getGlobalVar lhs)                                | SOME mkStm => mkStm(mkGlobalVar lhs)
371                              (* end case *))                              (* end case *))
372                        in                        in
373                          doNode (env, !succ, ifStk, stm::stms)                          doNode (env, !succ, ifStk, stm::stms)
374                        end                        end
375                    | IR.NEW{strand, args, succ, ...} => raise Fail "NEW unimplemented"                    | IR.NEW{strand, args, succ, ...} => raise Fail "NEW unimplemented"
376                    | IR.SAVE{lhs, rhs, succ, ...} => let                    | IR.SAVE{lhs, rhs, succ, ...} => let
377                        val stm = T.S_Save([getStateVar lhs], useVar env rhs)                        val stm = T.S_Save([getStateVar lhs], Env.useVar env rhs)
378                        in                        in
379                          doNode (env, !succ, ifStk, stm::stms)                          doNode (env, !succ, ifStk, stm::stms)
380                        end                        end
# Line 392  Line 404 
404                        (* end case *))                        (* end case *))
405                  (* end case *))                  (* end case *))
406            in            in
407              doNode (env, CFG.entry cfg, [], [])              doNode (env, IR.CFG.entry cfg, [], [])
408            end            end
409    
410      fun trCFG vecLayout (prefix, cfg) = trCFGWithEnv (Env.new vecLayout, prefix, cfg)      fun trCFG vecLayout (prefix, cfg) = trCFGWithEnv (Env.new vecLayout, prefix, cfg)
411    
412      fun trStrand strand = let      fun trStrand layout strand = let
413              val trCFG = trCFG layout
414            val IR.Strand{name, params, state, stateInit, initM, updateM, stabilizeM} = strand            val IR.Strand{name, params, state, stateInit, initM, updateM, stabilizeM} = strand
415            val params' = List.map newParam params            val params' = List.map Util.newParamVar params
416            val env = ListPair.foldlEq            val env = ListPair.foldlEq
417                  (fn (x, x', env) => rename(env, x, x')) ?? (params, params')                  (fn (x, x', env) => rename(env, x, x')) (Env.new layout) (params, params')
418            val state' = List.map getStateVar state            val state' = List.map getStateVar state
419            in            in
420              T.Strand{              T.Strand{
# Line 427  Line 440 
440                  constInit = ??,                  constInit = ??,
441                  globals = ??,                  globals = ??,
442                  globalInit = ??,                  globalInit = ??,
443                  strand = ??,                  strand = trStrand vecLayout strand,
444                  create = ??,                  create = ??,
445                  update = ??                  update = ??
446                }                }

Legend:
Removed from v.3843  
changed lines
  Added in v.3844

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