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

SCM Repository

[diderot] Diff of /branches/vis12/src/compiler/simplify/simplify.sml
ViewVC logotype

Diff of /branches/vis12/src/compiler/simplify/simplify.sml

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

revision 2012, Mon Oct 8 14:27:53 2012 UTC revision 2014, Mon Oct 8 14:58:19 2012 UTC
# Line 14  Line 14 
14    
15      structure Ty = Types      structure Ty = Types
16      structure S = Simple      structure S = Simple
17        structure InP = Inputs
18    
19      local      local
20        val tempName = Atom.atom "_t"        val tempName = Atom.atom "_t"
# Line 28  Line 29 
29     * limits the forms of expression that we might encounter in this context.     * limits the forms of expression that we might encounter in this context.
30     *)     *)
31      fun expToInit exp = (case exp      fun expToInit exp = (case exp
32             of AST.E_Lit(Literal.Int n) => Inputs.Int n             of AST.E_Lit(Literal.Int n) => InP.Int n
33              | AST.E_Lit(Literal.Float f) => Inputs.Real f              | AST.E_Lit(Literal.Float f) => InP.Real f
34              | AST.E_Lit(Literal.String s) => Inputs.String s              | AST.E_Lit(Literal.String s) => InP.String s
35              | AST.E_Lit(Bool b) => Inputs.Bool b              | AST.E_Lit(Literal.Bool b) => InP.Bool b
36              | AST.E_Tuple es => raise Fail "E_Tuple not yet implemented"              | AST.E_Tuple es => raise Fail "E_Tuple not yet implemented"
37    (*
38              | AST.E_Cons es => let              | AST.E_Cons es => let
39                  fun toReal (AST.E_Lit(Literal.Int n)) = FloatLit.fromInt n                  fun toReal (AST.E_Lit(Literal.Int n)) = FloatLit.fromInt n
40                    | toReal (AST.E_Lit(Literal.Float f)) = f                    | toReal (AST.E_Lit(Literal.Float f)) = f
# Line 48  Line 50 
50                          | _ => ([List.length es], List.map toReal (e1::es))                          | _ => ([List.length es], List.map toReal (e1::es))
51                        (* end case *))                        (* end case *))
52                  in                  in
53                    Inputs.Tensor(shp, Vector.fromList vs)                    InP.Tensor(shp, Vector.fromList vs)
54                  end                  end
55              | AST.E_Seq es => ??              | AST.E_Seq es => ??
56              | AST.E_Coerce{srcTy, dstTy, e} => ??              | AST.E_Coerce{srcTy, dstTy, e} => ??
57    *)
58              | _ => raise Fail "impossible initialization expression"              | _ => raise Fail "impossible initialization expression"
59            (* end case *))            (* end case *))
60    
61        fun inputImage (nrrd, dim, shape) = let
62              val dim = TypeUtil.monoDim dim
63              val shp = TypeUtil.monoShape shape
64              in
65                case ImageInfo.fromNrrd(NrrdInfo.getInfo nrrd, dim, shp)
66                 of NONE => raise Fail(concat["nrrd file \"", nrrd, "\" does not have expected type"])
67                  | SOME info => InP.Proxy(nrrd, info)
68                (* end case *)
69              end
70    
71      fun simplifyProgram (AST.Program dcls) = let      fun simplifyProgram (AST.Program dcls) = let
72            val inputs = ref []            val inputs = ref []
73            val globals = ref []            val globals = ref []
# Line 69  Line 82 
82            fun simplifyDecl dcl = (case dcl            fun simplifyDecl dcl = (case dcl
83                   of AST.D_Input(x, desc, NONE) => let                   of AST.D_Input(x, desc, NONE) => let
84                        val (ty, init) = (case Var.monoTypeOf x                        val (ty, init) = (case Var.monoTypeOf x
85                               of ty as Ty.T_Image{dim, shape} =>                               of ty as Ty.T_Image{dim, shape} => let
86                                    (ty, SOME(Inputs.Image(ImageInfo.fromNrrd(NrrdInfo.getInfo nrrd, ?, ?))))                                    val info = ImageInfo.mkInfo(TypeUtil.monoDim dim, TypeUtil.monoShape shape)
87                                      in
88                                        (ty, SOME(InP.Image info))
89                                      end
90                                | ty => (ty, NONE)                                | ty => (ty, NONE)
91                              (* end case *))                              (* end case *))
92                        val inp = Inputs.INP{                        val inp = InP.INP{
93                                ty = ty,                                ty = ty,
94                                name = Var.nameOf x,                                name = Var.nameOf x,
95                                desc = desc,                                desc = desc,
# Line 86  Line 102 
102                      (* load the nrrd proxy here *)                      (* load the nrrd proxy here *)
103                        val info = NrrdInfo.getInfo nrrd                        val info = NrrdInfo.getInfo nrrd
104                        val (ty, init) = (case Var.monoTypeOf x                        val (ty, init) = (case Var.monoTypeOf x
105                               of ty as Ty.T_DynSequence _ => (ty, Inputs.DynSeq nrrd)                               of ty as Ty.T_DynSequence _ => (ty, InP.DynSeq nrrd)
106                                | ty as Ty.T_Image{dim, shape} =>                                | ty as Ty.T_Image{dim, shape} => (ty, inputImage(nrrd, dim, shape))
                                   (ty, Inputs.Proxy(nrrd, ImageInfo.fromNrrd(NrrdInfo.getInfo nrrd, ?, ?)))  
107                                | _ => raise Fail "impossible"                                | _ => raise Fail "impossible"
108                              (* end case *))                              (* end case *))
109                        val inp = Inputs.INP{                        val inp = InP.INP{
110                                ty = ty,                                ty = ty,
111                                name = Var.nameOf x,                                name = Var.nameOf x,
112                                desc = desc,                                desc = desc,
# Line 101  Line 116 
116                          inputs := (x, inp) :: !inputs                          inputs := (x, inp) :: !inputs
117                        end                        end
118                    | AST.D_Input(x, desc, SOME e) => let                    | AST.D_Input(x, desc, SOME e) => let
119                        val inp = Inputs.INP{                        val inp = InP.INP{
120                                ty = Var.monoTypeOf x,                                ty = Var.monoTypeOf x,
121                                name = Var.nameOf x,                                name = Var.nameOf x,
122                                desc = desc,                                desc = desc,

Legend:
Removed from v.2012  
changed lines
  Added in v.2014

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