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

SCM Repository

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

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

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

revision 3189, Thu Apr 2 18:49:21 2015 UTC revision 3193, Mon Apr 27 21:19:16 2015 UTC
# Line 36  Line 36 
36      fun printEINAPP e=MidToString.printEINAPP e      fun printEINAPP e=MidToString.printEINAPP e
37    
38      fun z e=String.concat["\n\n Found: ",P.printbody e,"=> 0\n"]      fun z e=String.concat["\n\n Found: ",P.printbody e,"=> 0\n"]
39    
40        (*Turn High-IL ein expressions to 0
41        * Also, sweep for 0's
42        *)
43    
44        fun sortadd []=[]
45          | sortadd(E.Const 0::es)= sortadd es
46          | sortadd(e1::es) =[e1]@(sortadd es)
47    
48        fun sortprod( [],rest)=E.Prod rest
49         | sortprod(E.Const 0::_,_)= E.Const 0
50         | sortprod(e1::es,rest) =sortprod(es,rest@[e1])
51    
52    
53      fun sweep e= (case e      fun sweep e= (case e
54          of E.Tensor _          => e          of E.Tensor _          => e
55          | E.Add es             => E.Add(List.map sweep es)          | E.Add es             => (case sortadd(List.map sweep es)
56                of []  => E.Const 0
57                | es   => E.Add es)
58          | E.Sub(e1,e2)         => E.Sub(sweep e1,sweep e2)          | E.Sub(e1,e2)         => E.Sub(sweep e1,sweep e2)
59          | E.Div(e1,e2)         => E.Div(sweep e1,sweep e2)          | E.Div(e1,e2)         => (case (sweep e1,sweep e2)
60                of (E.Const 0,e2)=> E.Const 0
61                | (e1,e2)=> E.Div(e1,e2))
62          | E.Sum(c ,e)          => E.Sum(c, sweep e)          | E.Sum(c ,e)          => E.Sum(c, sweep e)
63          | E.Prod es            => E.Prod(List.map sweep es)          | E.Prod es            => sortprod(List.map sweep es,[])
64          | E.Neg e              => E.Neg(sweep e)          | E.Neg e              => E.Neg(sweep e)
65          | E.Probe(E.Conv _,_)  => e          | E.Probe(E.Conv _,_)  => e
66          | E.Sqrt e             => E.Sqrt(sweep e)          | E.Sqrt e             => E.Sqrt(sweep e)
# Line 79  Line 97 
97              (changed:=true;(E.Add(List.map (fn e=> E.Sum(sx,e)) a)))              (changed:=true;(E.Add(List.map (fn e=> E.Sum(sx,e)) a)))
98              | E.Sum(sx,E.Sub (e1,e2))       =>              | E.Sum(sx,E.Sub (e1,e2))       =>
99                  (changed:=true;(E.Sub(E.Sum(sx,e1),E.Sum(sx,e2))))                  (changed:=true;(E.Sub(E.Sum(sx,e1),E.Sum(sx,e2))))
100    
101              | E.Sum(sx,E.Div(E.Const c,e2)) =>              | E.Sum(sx,E.Div(E.Const c,e2)) =>
102                  (changed:=true;(E.Div(E.Const c, E.Sum(sx,e2))))                  (changed:=true;(E.Div(E.Const c, E.Sum(sx,e2))))
103              | E.Sum(sx,E.Div(e1,e2))        => (changed:=true;              | E.Sum(sx,E.Div(e1,e2))        => (changed:=true;

Legend:
Removed from v.3189  
changed lines
  Added in v.3193

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