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

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/codegen/collect-info.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/codegen/collect-info.sml

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

revision 3866, Mon May 16 16:48:13 2016 UTC revision 3919, Mon May 30 06:53:48 2016 UTC
# Line 9  Line 9 
9   * All rights reserved.   * All rights reserved.
10   *)   *)
11    
12    (* operators to record:
13            RClamp
14            RLerp
15            VClamp
16            VMapClamp
17            VLerp
18            VScale
19            VSum
20            EigenVecs2x2
21            EigenVecs3x3
22            EigenVals2x2
23            EigenVals3x3
24     *)
25  structure CollectInfo : sig  structure CollectInfo : sig
26    
27      type t      type t
28    
29      val collect : TreeIR.program -> t      val collect : TreeIR.program -> t
30    
31      val mapOverTypes : (TreeTypes.t * bool -> 'a) -> t -> 'a list      val foldOverTypes : (TreeTypes.t * bool * 'a -> 'a) -> 'a -> t -> 'a
32        val applyToTypes : (TreeTypes.t * bool -> unit) -> t -> unit
33    
34    end = struct    end = struct
35    
36      structure IR = TreeIR      structure IR = TreeIR
37        structure Ty = TreeTypes
38    
39      datatype t = Info of {      datatype t = Info of {
40          tys : bool TreeTypes.Tbl.hash_table     (* mapping for types in program; the bool is true *)          tys : bool TreeTypes.Tbl.hash_table     (* mapping for types in program; the bool is true *)
# Line 29  Line 44 
44      fun addType (Info{tys, ...}) = let      fun addType (Info{tys, ...}) = let
45            val find = TreeTypes.Tbl.find tys            val find = TreeTypes.Tbl.find tys
46            val ins = TreeTypes.Tbl.insert tys            val ins = TreeTypes.Tbl.insert tys
47            fun addTy (ty, inPrint) = (case ty            fun addTy (ty, inPrint) =  let
48                    fun insert ty = (case find ty
49                           of NONE => ins (ty, inPrint)
50                            | SOME b => if inPrint andalso (not b) then ins (ty, true) else ()
51                          (* end case *))
52                    fun add ty = (case ty
53                   of TreeTypes.BoolTy => ()                   of TreeTypes.BoolTy => ()
54                    | TreeTypes.IntTy => ()                    | TreeTypes.IntTy => ()
55                    | TreeTypes.StringTy => ()                    | TreeTypes.StringTy => ()
56                    | TreeTypes.VecTy(1, 1) => ()                    | TreeTypes.VecTy(1, 1) => ()
57                    | TreeTypes.StrandTy _ => ()                    | TreeTypes.StrandTy _ => ()
58                    | _ => (case find ty                          | TreeTypes.TupleTy tys => (insert ty; List.app add tys)
59                         of NONE => ins (ty, inPrint)                          | TreeTypes.SeqTy(ty', _) => (insert ty; add ty')
60                          | SOME b => if inPrint andalso (not b) then ins (ty, true) else ()                          | _ => insert ty
                       (* end case *))  
61                  (* end case *))                  (* end case *))
62            in            in
63                      add ty
64                    end
65              in
66              addTy              addTy
67            end            end
68    
# Line 62  Line 84 
84                    | IR.E_Op(rator, args) => (                    | IR.E_Op(rator, args) => (
85                        (* TODO: check rator *)                        (* TODO: check rator *)
86                        List.app doExp args)                        List.app doExp args)
87                    | IR.E_Vec(_, es) => List.app doExp es                    | IR.E_Vec(w, pw, es) => (addType(Ty.VecTy(w, pw), false); List.app doExp es)
88                    | IR.E_Cons(es, ty) => (addType(ty, false); List.app doExp es)                    | IR.E_Cons(es, ty) => (addType(ty, false); List.app doExp es)
89                    | IR.E_Seq(es, ty) => (addType(ty, false); List.app doExp es)                    | IR.E_Seq(es, ty) => (addType(ty, false); List.app doExp es)
90                    | IR.E_Pack(_, es) => List.app doExp es                    | IR.E_Pack(_, es) => List.app doExp es
91                    | IR.E_VLoad(_, e, _) => doExp e                    | IR.E_VLoad(layout, e, i) => (addType(Ty.nthVec(layout, i), false); doExp e)
92                    | _ => ()                    | _ => ()
93                  (* end case *))                  (* end case *))
94            fun doStm stm = (case stm            fun doStm stm = (case stm
# Line 105  Line 127 
127              info              info
128            end            end
129    
130      fun mapOverTypes f (Info{tys}) =      fun foldOverTypes f init (Info{tys}) = TreeTypes.Tbl.foldi f init tys
131            TreeTypes.Tbl.foldi (fn (ty, isPrinted, acc) => f(ty, isPrinted) :: acc) [] tys  
132        fun applyToTypes f (Info{tys}) = TreeTypes.Tbl.appi f tys
133    
134    end    end

Legend:
Removed from v.3866  
changed lines
  Added in v.3919

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