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

SCM Repository

[diderot] Annotation of /branches/charisee/src/compiler/ein/phase-ein.sml
ViewVC logotype

Annotation of /branches/charisee/src/compiler/ein/phase-ein.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2498 - (view) (download)

1 : cchiw 2498 (*checks to make sure ein_exp in correct phase*)
2 :     structure PhaseEin = struct
3 :    
4 :     local
5 :    
6 :     structure E = Ein
7 :     structure P = Printer
8 :     in
9 :    
10 :     val errTy=1
11 :     val correct=0
12 :    
13 :    
14 :     fun err(msg)= (print "";errTy)
15 :    
16 :    
17 :     fun checkPhase (Ein.EIN{params, index, body},phase) = let
18 :    
19 :     fun checkTenParam id=
20 :     if(id>length(params))then errTy
21 :     else (case List.nth(params,id)
22 :     of E.TEN => 0
23 :     | _ =>errTy
24 :     (*end case*))
25 :    
26 :    
27 :     fun checkFldParam id=(
28 :     (*print(Int.toString(length(params)));print(Int.toString(id));*)
29 :    
30 :     if(id>length(params))then (print "in here";errTy)
31 :     else(case List.nth(params,id)
32 :     of E.FLD _ =>0
33 :     |_=> errTy
34 :     (*end case*)))
35 :    
36 :    
37 :     fun sort([])=0
38 :     | sort(0::es)=sort(es)
39 :     | sort _=1
40 :    
41 :     (*make sure the finished expression is the shape it is suppose to be *)
42 :     fun checkbody term = (case term
43 :     of E.Const r => 0
44 :     | E.Tensor(id, _) =>checkTenParam id
45 :     | E.Delta(ix)=>0
46 :     | E.Value(ix) =>0
47 :     | E.Epsilon _ => 0
48 :     | E.Sum (_,e1)=>checkbody e1
49 :     | E.Neg e1=> checkbody e1
50 :     | E.Partial a => 0
51 :     | E.Add es => sort(List.map checkbody es)
52 :     | E.Sub(e1, e2) =>(case (checkbody e1 ,checkbody e2)
53 :     of (0, 0)=> 0
54 :     |_=>errTy
55 :     (*end case*))
56 :     | E.Prod el => sort(List.map checkbody el)
57 :     | E.Div(e1,e2)=>(case (checkbody e1,checkbody e2)
58 :     of(0 ,0)=>0
59 :     | _=>errTy
60 :     (*end case*))
61 :    
62 :     (*Phase dependent operators*)
63 :     (*Phase 1 High-IL *)
64 :     | E.Apply(e1, e2)=>
65 :     if (2>phase) then
66 :     (case (checkbody e1,checkbody e2)
67 :     of (0,0)=>0
68 :     |_ =>errTy
69 :     (*end case*))
70 :     else err "wrong phase for apply"
71 :     | E.Probe (e1,e2)=>(
72 :     if (2>phase) then
73 :     (case (checkbody e1, checkbody e2)
74 :     of (0,0)=>0
75 :     | (0, _)=> err "wrong pos for field probe"
76 :     | _=>err "Not a fieldTy in probe"
77 :     (*end case*))
78 :     else err "wrong phase for Probe op")
79 :     | E.Field(id, _)=>
80 :     if (2>phase) then checkFldParam id
81 :     else err "wrong phase for Field"
82 :     | E.Conv (fid,_, tid, beta)=>(
83 :     if (2>phase) then (checkFldParam(fid)+checkTenParam(tid))
84 :     else err "wrong phase for convolution"
85 :     )
86 :     (*Phase 2 Mid-IL*)
87 :     | E.Krn (_,dels,_) =>
88 :     if (3>phase) then err "wrong phrase for kernel"
89 :     else 0
90 :     | E.Img(id,ix,pos)=>
91 :     if(3 >phase) then errTy
92 :     else 0
93 :     (* end case *))
94 :    
95 :     val checked=checkbody body
96 :     in (if (checked=0) then true
97 :     else false)
98 :     end
99 :    
100 :    
101 :     end; (* local *)
102 :    
103 :     end (* local *)

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