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

SCM Repository

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

Diff of /branches/vis15/src/compiler/low-opt/low-contract.sml

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

revision 3813, Wed May 4 13:20:06 2016 UTC revision 3814, Wed May 4 14:26:07 2016 UTC
# Line 48  Line 48 
48              | _ => NONE              | _ => NONE
49            (* end case *))            (* end case *))
50    
51      (* get the local definition of a variable.  Unlike getDef, this function does
52       * not chase through global definitions, which means that we do not have to
53       * worry about lifting local variables in the globalInit to global scope.
54       *)
55        fun getLocalDef (x as IR.V{bind, ...}) = (case !bind
56               of IR.VB_RHS rhs => (case rhs
57                     of IR.VAR x => getLocalDef x
58                      | _ => rhs
59                    (* end case *))
60                | _ => IR.VAR x
61              (* end case *))
62    
63  (* TODO: tensor selection operations *)  (* TODO: tensor selection operations *)
64      fun doAssign (lhs, IR.OP rhs) = (case rhs      fun doAssign (lhs, IR.OP rhs) = (case rhs
65             of (Op.IAdd, [a, b]) => (case getRHSOpt b             of (Op.IAdd, [a, b]) => (case getRHSOpt b
# Line 90  Line 102 
102              | (Op.TensorIndex(Ty.TensorTy dims, idxs), [t]) => let              | (Op.TensorIndex(Ty.TensorTy dims, idxs), [t]) => let
103                  fun get ([], [], x) = (                  fun get ([], [], x) = (
104                        SOME[(lhs, IR.VAR(use x))])                        SOME[(lhs, IR.VAR(use x))])
105                    | get (ix::ixs, d::ds, x) = (case V.getDef x                    | get (ix::ixs, d::ds, x) = (case getLocalDef x
106                         of IR.CONS(ys, _) => get(ixs, ds, List.nth(ys, ix))                         of IR.CONS(ys, _) => get(ixs, ds, List.nth(ys, ix))
107                          | _ => SOME[(lhs, IR.OP(Op.TensorIndex(Ty.tensorTy(d::ds), ix::ixs), [use x]))]                          | _ => SOME[
108                                  (lhs, IR.OP(Op.TensorIndex(Ty.tensorTy(d::ds), ix::ixs), [use x]))
109                                ]
110                        (* end case *))                        (* end case *))
111                    | get _ = raise Fail "malformed TensorIndex"                    | get _ = raise Fail "malformed TensorIndex"
112                  in                  in
113                    case V.getDef t                    case getLocalDef t
114                     of IR.CONS _ => (ST.tick cntTensorIndex; decUse t; get(idxs, dims, t))                     of IR.CONS _ => (ST.tick cntTensorIndex; decUse t; get(idxs, dims, t))
115                      | _ => NONE                      | _ => NONE
116                    (* end case *)                    (* end case *)
# Line 104  Line 118 
118              | (Op.ProjectLast(Ty.TensorTy dims, idxs), [t]) => let              | (Op.ProjectLast(Ty.TensorTy dims, idxs), [t]) => let
119                  fun get ([], [_], x) = (                  fun get ([], [_], x) = (
120                        SOME[(lhs, IR.VAR(use x))])                        SOME[(lhs, IR.VAR(use x))])
121                    | get (ix::ixs, d::ds, x) = (case V.getDef x                    | get (ix::ixs, d::ds, x) = (case getLocalDef x
122                         of IR.CONS(ys, _) => get(ixs, ds, List.nth(ys, ix))                         of IR.CONS(ys, _) => get(ixs, ds, List.nth(ys, ix))
123                          | _ => SOME[(lhs, IR.OP(Op.ProjectLast(Ty.tensorTy ds, ix::ixs), [use x]))]                          | _ => SOME[
124                                  (lhs, IR.OP(Op.ProjectLast(Ty.tensorTy(d::ds), ix::ixs), [use x]))
125                                ]
126                        (* end case *))                        (* end case *))
127                    | get _ = raise Fail "malformed ProjectLast"                    | get _ = raise Fail "malformed ProjectLast"
128                  in                  in
129                    case V.getDef t                    case getLocalDef t
130                     of IR.CONS _ => (ST.tick cntProjectLast; decUse t; get(idxs, dims, t))                     of IR.CONS _ => (ST.tick cntProjectLast; decUse t; get(idxs, dims, t))
131                      | _ => NONE                      | _ => NONE
132                    (* end case *)                    (* end case *)

Legend:
Removed from v.3813  
changed lines
  Added in v.3814

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