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 3854, Fri May 13 19:21:27 2016 UTC revision 3855, Fri May 13 20:47:16 2016 UTC
# Line 112  Line 112 
112            (* end case *))            (* end case *))
113    
114      fun vectorArg (env, x) = (case Env.useVar env x      fun vectorArg (env, x) = (case Env.useVar env x
115             of Env.TREE e => (case IR.Var.ty x             of Env.TREE e => (case V.ty x
116                   of Ty.TensorTy[d] => let                   of Ty.TensorTy[d] => let
117                        val layout = Env.layoutVec env d                        val layout = Env.layoutVec env d
118  (* QUESTION: can "e" be a complicated expression or are we guaranteed that it will just  (* QUESTION: can "e" be a complicated expression or are we guaranteed that it will just
# Line 124  Line 124 
124                        in                        in
125                          (layout, es)                          (layout, es)
126                        end                        end
127                    | ty => raise Fail("expected TensorTy[_], but found " ^ Ty.toString ty)                    | ty => raise Fail(concat[
128                            "expected ", V.toString x, " : TensorTy[_], but found " ^ Ty.toString ty
129                          ])
130                  (* end case *))                  (* end case *))
131              | Env.VEC(layout, es) => (layout, es)              | Env.VEC(layout, es) => (layout, es)
132            (* end case *))            (* end case *))
# Line 184  Line 186 
186                | Op.RLerp => bindOp TOp.RLerp                | Op.RLerp => bindOp TOp.RLerp
187                | Op.VAdd _ => bindVOp TOp.VAdd                | Op.VAdd _ => bindVOp TOp.VAdd
188                | Op.VSub _ => bindVOp TOp.VSub                | Op.VSub _ => bindVOp TOp.VSub
189                | Op.VScale _ => bindVOp TOp.VScale                | Op.VScale _ => let
190                      val [s, v] = args
191                      val s = scalarArg env s
192                      val (layout, vs) = vectorArg (env, v)
193                      val exps = ListPair.map
194                          (fn (w, x) => T.E_Op(TOp.VScale w, [s, x]))
195                            (#pieces layout, vs)
196                      in
197                        Env.VEC(layout, exps)
198                      end
199                | Op.VMul _ => bindVOp TOp.VMul                | Op.VMul _ => bindVOp TOp.VMul
200                | Op.VNeg _ => bindVOp TOp.VNeg                | Op.VNeg _ => bindVOp TOp.VNeg
201                | Op.VSum _ => raise Fail "FIXME: VSum"                | Op.VSum _ => raise Fail "FIXME: VSum"
# Line 200  Line 211 
211                    in                    in
212                      select (i, pieces, es)                      select (i, pieces, es)
213                    end                    end
214                | Op.VClamp n => bindVOp TOp.VClamp                | Op.VClamp n => let
215                      val [v, lo, hi] = args
216                      val (layout, vs) = vectorArg (env, v)
217                      val lo = scalarArg env lo
218                      val hi = scalarArg env hi
219                      val exps = ListPair.map
220                          (fn (w, x) => T.E_Op(TOp.VClamp w, [x, lo, hi]))
221                            (#pieces layout, vs)
222                      in
223                        Env.VEC(layout, exps)
224                      end
225                | Op.VMapClamp n => bindVOp TOp.VMapClamp                | Op.VMapClamp n => bindVOp TOp.VMapClamp
226                | Op.VLerp n => bindVOp TOp.VLerp                | Op.VLerp n => bindVOp TOp.VLerp
227                | Op.TensorIndex(ty, idxs) => bindOp(TOp.TensorIndex(Util.trType ty, idxs))                | Op.TensorIndex(ty, idxs) => bindOp(TOp.TensorIndex(Util.trType ty, idxs))
# Line 321  Line 342 
342                    fun mkVecs (args, w::ws) = let                    fun mkVecs (args, w::ws) = let
343  (* FIXME: what about padding? *)  (* FIXME: what about padding? *)
344                          fun take (0, args, es) = T.E_Vec(List.rev es) :: mkVecs (args, ws)                          fun take (0, args, es) = T.E_Vec(List.rev es) :: mkVecs (args, ws)
345                              | take (i, [], es) = if #padded layout andalso null ws
346                                  then let
347                                    val zero = T.E_Lit(Literal.Real(RealLit.zero false))
348                                    in
349                                      [T.E_Vec(List.rev(List.tabulate(i, fn _ => zero)))]
350                                    end
351                                  else raise Fail "too few arguments for CONS"
352                            | take (i, arg::args, es) = take (i-1, args, scalarArg env arg :: es)                            | take (i, arg::args, es) = take (i-1, args, scalarArg env arg :: es)
                           | take _ = raise Fail "too few arguments for CONS"  
353                          in                          in
354                            take (w, args, [])                            take (w, args, [])
355                          end                          end

Legend:
Removed from v.3854  
changed lines
  Added in v.3855

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