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

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/high-to-mid/translate-cfexp.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/high-to-mid/translate-cfexp.sml

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

revision 5573, Thu May 31 17:56:38 2018 UTC revision 5574, Thu May 31 22:28:40 2018 UTC
# Line 33  Line 33 
33        | paramToString (i, E.KRN) = "H" ^ i2s i        | paramToString (i, E.KRN) = "H" ^ i2s i
34        | paramToString (i, E.IMG(d, shp)) = concat["V", i2s i, "(", i2s d, ")[", shp2s shp, "]"]        | paramToString (i, E.IMG(d, shp)) = concat["V", i2s i, "(", i2s d, ")[", shp2s shp, "]"]
35    
     fun iterP es = let  
           fun iterPP ([], [r]) = r  
             | iterPP ([], rest) = E.Opn(E.Prod, rest)  
             | iterPP (E.Const 0::es, rest) = E.Const(0)  
             | iterPP (E.Const 1::es, rest) = iterPP(es, rest)  
             | iterPP (E.Delta(E.C c1, E.V v1)::E.Delta(E.C c2, E.V v2)::es, rest) =  
               (* variable can't be 0 and 1 '*)  
                 if (c1 = c2 orelse (not (v1 = v2)))  
                   then iterPP (es, E.Delta(E.C c1, E.V v1)::E.Delta(E.C c2, E.V v2)::rest)  
                   else  E.Const(0)  
             | iterPP (E.Opn(E.Prod, ys)::es, rest) = iterPP(ys@es, rest)  
             | iterPP (e1::es, rest) = iterPP(es, e1::rest)  
           in  
             iterPP(es, [])  
           end  
   
     fun iterA es =  let  
           fun iterAA ([], []) = E.Const 0  
             | iterAA ([], [r]) = r  
             | iterAA ([], rest) = E.Opn(E.Add, rest)  
             | iterAA (E.Const 0::es, rest) = iterAA(es, rest)  
             | iterAA (E.Opn(E.Add, ys)::es, rest) = iterAA(ys@es, rest)  
             | iterAA (e1::es, rest) = iterAA(es, e1::rest)  
           in  
             iterAA(es, [])  
           end  
   
36   (* The terms with a param_id in the mapp are replaced   (* The terms with a param_id in the mapp are replaced
37    * body - ein expression    * body - ein expression
38    * args - variable arguments    * args - variable arguments
# Line 98  Line 71 
71                    | E.Op1(E.PowInt n, e1) => let                    | E.Op1(E.PowInt n, e1) => let
72                        val tmp = rewrite e1                        val tmp = rewrite e1
73                        in                        in
74                          iterP (List.tabulate(n, fn _ => tmp))                          EinUtil.iterPP (List.tabulate(n, fn _ => tmp))
75                        end                        end
76                    | E.Op1(op1, e1) => E.Op1(op1, rewrite e1)                    | E.Op1(op1, e1) => E.Op1(op1, rewrite e1)
77                    | E.Op2(op2, e1, e2) => E.Op2(op2, rewrite e1, rewrite e2)                    | E.Op2(op2, e1, e2) => E.Op2(op2, rewrite e1, rewrite e2)
78                    | E.Opn(E.Prod, E.Opn(E.Add, ps)::es) => let                    | E.Opn(E.Prod, E.Opn(E.Add, ps)::es) => let
79                        val ps = List.map (fn e1 => iterP(e1::es)) ps                        val ps = List.map (fn e1 => EinUtil.iterPP(e1::es)) ps
80                        val body = E.Opn(E.Add, ps)                        val body = E.Opn(E.Add, ps)
81                        in                        in
82                          rewrite body                          rewrite body
83                        end                        end
84                    | E.Opn(E.Prod, ps) => iterP(List.map rewrite ps)                    | E.Opn(E.Prod, ps) => EinUtil.iterPP(List.map rewrite ps)
85                    | E.Opn(E.Add , ps) => iterA(List.map rewrite ps)                    | E.Opn(E.Add , ps) => EinUtil.iterAA(List.map rewrite ps)
86                    | _ => body                    | _ => body
87                  (* end case*))                  (* end case*))
88            in            in

Legend:
Removed from v.5573  
changed lines
  Added in v.5574

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