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

SCM Repository

[diderot] Annotation of /branches/charisee_dev/src/compiler/high-to-mid/handleEin.sml
ViewVC logotype

Annotation of /branches/charisee_dev/src/compiler/high-to-mid/handleEin.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2870 - (view) (download)
Original Path: branches/charisee/src/compiler/high-to-mid/handleEin.sml

1 : cchiw 2845 (* Expands probe ein
2 :     *
3 :     * COPYRIGHT (c) 2012 The Diderot Project (http://diderot-language.cs.uchicago.edu)
4 :     * All rights reserved.
5 :     *)
6 :    
7 :     structure handleEin = struct
8 :    
9 :     local
10 :    
11 :     structure E = Ein
12 :     structure DstIL = MidIL
13 :     structure DstOp = MidOps
14 :     structure P=Printer
15 :     structure T=TransformEin
16 :     structure MidToS=MidToString
17 :     structure DstV = DstIL.Var
18 :     in
19 :    
20 : cchiw 2847 val testing=0
21 : cchiw 2845 fun setEin(params,index,body)=Ein.EIN{params=params, index=index, body=body}
22 :     fun assignEinApp(y,params,index,body,args)= (y,DstIL.EINAPP(setEin(params,index,body),args))
23 :     fun assignEinApp(y,params,index,body,args)= (y,DstIL.EINAPP(setEin(params,index,body),args))
24 :     fun iTos i =Int.toString i
25 :     fun testp n=(case testing
26 :     of 0=> 1
27 :     | _ =>(print(String.concat n);1)
28 :     (*end case*))
29 :     val einappzero=DstIL.EINAPP(setEin([],[],E.Const 0),[])
30 :     fun setEinZero y= (y,einappzero)
31 :    
32 :     (* isZero:ein_exp->int
33 :     * Checks to see if the entire body is 0. If so returns 1.
34 :     *)
35 :     fun isZero e=let
36 : cchiw 2847 val _=testp["\n Started Zero",P.printbody e]
37 : cchiw 2845 fun iterList []= 1
38 :     | iterList(e1::list)=(case (isZero e1)
39 :     of 0=>0
40 :     | _ => iterList list
41 :     (*end case*))
42 :     fun iterProdList []= 0
43 : cchiw 2867 | iterProdList [e1]=isZero e1
44 : cchiw 2845 | iterProdList(e1::list)=(case (isZero e1)
45 :     of 1=>1
46 :     | _ => iterList list
47 :     (*end case*))
48 :     val z=(case e
49 : cchiw 2867 of E.Tensor _ => 0
50 :     | E.Add e => iterList e
51 : cchiw 2845 | E.Sub(e1,e2) => iterList [e1,e2]
52 : cchiw 2870 | E.Div(e1,e2) => iterProdList [e1,e2]
53 : cchiw 2845 | E.Sum(_ ,e) => isZero e
54 :     | E.Prod e => iterProdList e
55 :     | E.Neg e => isZero e
56 : cchiw 2867 | E.Probe(E.Conv _,_) => 0
57 :     | E.Sqrt e => isZero e
58 : cchiw 2845 | E.Const 0 => 1
59 :     | E.Field _ => 1
60 :     | E.Partial _ => 1
61 :     | E.Apply _ => 1
62 :     | E.Lift _ => 1
63 :     | E.Conv _ => 1
64 : cchiw 2870 | E.PowInt(e ,_) => isZero e
65 :     | E.PowReal(e,_) => isZero e
66 : cchiw 2845 | _ => 0
67 :     (*end case*))
68 : cchiw 2847 val _=testp["\n Is it Zero",P.printbody e,"--", iTos z]
69 : cchiw 2845 in
70 :     z
71 :     end
72 :    
73 :    
74 : cchiw 2870 fun sweep e= (case e
75 :     of E.Tensor _ => e
76 :     | E.Add es => E.Add(List.map sweep es)
77 :     | E.Sub(e1,e2) => E.Sub(sweep e1,sweep e2)
78 :     | E.Div(e1,e2) => E.Div(sweep e1,sweep e2)
79 :     | E.Sum(c ,e) => E.Sum(c, sweep e)
80 :     | E.Prod es => E.Prod(List.map sweep es)
81 :     | E.Neg e => E.Neg(sweep e)
82 :     | E.Probe(E.Conv _,_) => e
83 :     | E.Sqrt e => E.Sqrt(sweep e)
84 :     | E.Const _ => e
85 :     | E.ConstR _ => e
86 :     | E.Delta _ => e
87 :     | E.Epsilon _ => e
88 :     | E.Eps2 _ => e
89 :     | E.Field _ => E.Const 0
90 :     | E.Partial _ => E.Const 0
91 :     | E.Apply _ => E.Const 0
92 :     | E.Lift _ => E.Const 0
93 :     | E.Conv _ => E.Const 0
94 :     | E.PowInt(e ,n) => E.PowInt(sweep e ,n)
95 :     | E.PowReal(e,n) => E.PowReal(sweep e ,n)
96 :     | E.Probe _ =>
97 :     raise Fail (String.concat["\n Incorrect probe, substition was not made. Is the Field in an if statement? :",P.printbody e])
98 :     (*end case*))
99 : cchiw 2845 end; (* local *)
100 :    
101 :     end (* local *)

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