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

SCM Repository

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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2847 - (view) (download)

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 :     | iterProdList(e1::list)=(case (isZero e1)
44 :     of 1=>1
45 :     | _ => iterList list
46 :     (*end case*))
47 :     val z=(case e
48 :     of E.Add e => iterList e
49 :     | E.Sub(e1,e2) => iterList [e1,e2]
50 :     | E.Div(e1,e2) => isZero e1
51 :     | E.Sum(_ ,e) => isZero e
52 :     | E.Prod e => iterProdList e
53 :     | E.Neg e => isZero e
54 :     | E.Probe(E.Conv _,_) => 0
55 :     | E.Const 0 => 1
56 :     | E.Field _ => 1
57 :     | E.Partial _ => 1
58 :     | E.Apply _ => 1
59 :     | E.Lift _ => 1
60 :     | E.Conv _ => 1
61 :     | _ => 0
62 :     (*end case*))
63 : cchiw 2847 val _=testp["\n Is it Zero",P.printbody e,"--", iTos z]
64 : cchiw 2845 in
65 :     z
66 :     end
67 :    
68 :     (*isZero: var* einapp params*index list*mid-il vars
69 :     When the operation is zero then we return a real.
70 :     *)
71 :     fun zeroSweep(y,einapp as DstIL.EINAPP(ein,_))=let
72 :     val _ =testp["\n Starting is zero for var-",DstV.name y]
73 :     in (case (isZero(E.body ein))
74 :     of 1=> setEinZero y
75 :     | _ =>(y,einapp)
76 :     (*end case*))
77 :     end
78 :    
79 :    
80 :     end; (* local *)
81 :    
82 :     end (* local *)

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