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

SCM Repository

[diderot] Diff of /branches/pure-cfg/src/compiler/high-il/high-opt.sml
ViewVC logotype

Diff of /branches/pure-cfg/src/compiler/high-il/high-opt.sml

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

revision 703, Tue Mar 29 17:41:24 2011 UTC revision 714, Thu Mar 31 13:33:50 2011 UTC
# Line 47  Line 47 
47             of (Op.Probe(domTy, rngTy), [f, pos]) => (case getRHS f             of (Op.Probe(domTy, rngTy), [f, pos]) => (case getRHS f
48                   of SOME(Op.Field _, _) => NONE (* direct probe does not need rewrite *)                   of SOME(Op.Field _, _) => NONE (* direct probe does not need rewrite *)
49                    | SOME(Op.AddField, [f, g]) => raise Fail "Probe(f+g)"                    | SOME(Op.AddField, [f, g]) => raise Fail "Probe(f+g)"
50                    | SOME(Op.ScaleField, [s, f]) => raise Fail "Probe(s*f)"                    | SOME(Op.ScaleField, [s, f']) => let
51                        (* rewrite to s*(f'@pos) *)
52                          val lhs' = IL.Var.copy lhs
53                          in
54                            ST.tick cntProbeScale;
55                            decUse f;
56                            incUse lhs'; incUse f'; incUse s;
57                            SOME[
58                                (lhs', IL.OP(Op.Probe(domTy, rngTy), [f', pos])),
59                                (lhs, IL.OP(Op.Scale rngTy, [s, lhs']))
60                              ]
61                          end
62                    | SOME(Op.NegField, [f']) => let                    | SOME(Op.NegField, [f']) => let
63                      (* rewrite to -(f'@pos) *)                      (* rewrite to -(f'@pos) *)
64                        val lhs' = IL.Var.copy lhs                        val lhs' = IL.Var.copy lhs
# Line 82  Line 93 
93                              ])                              ])
94                        (* end case *))                        (* end case *))
95                    | SOME(Op.AddField, [f, g]) => raise Fail "Diff(f+g)"                    | SOME(Op.AddField, [f, g]) => raise Fail "Diff(f+g)"
96                    | SOME(Op.ScaleField, [s, f]) => raise Fail "Diff(s*f)"                    | SOME(Op.ScaleField, [s, f]) => let
97                    | SOME(Op.NegField, [f]) => raise Fail "Diff(-f)"                      (* rewrite to s*(D f) *)
98                          val lhs' = IL.Var.copy lhs
99                          in
100                            ST.tick cntDiffScale;
101                            decUse f;
102                            incUse lhs'; incUse f'; incUse s;
103                            SOME[
104                                (lhs', IL.OP(Op.DiffField, [f'])),
105                                (lhs, IL.OP(Op.ScaleField, [s, lhs']))
106                              ]
107                          end
108                      | SOME(Op.NegField, [f']) => let
109                        (* rewrite to -(D f') *)
110                          val lhs' = IL.Var.copy lhs
111                          in
112                            ST.tick cntDiffNeg;
113                            decUse f;
114                            incUse lhs'; incUse f';
115                            SOME[
116                                (lhs', IL.OP(Op.DiffField, [f'])),
117                                (lhs, IL.OP(Op.NegField, [lhs']))
118                              ]
119                          end
120                    | _ => NONE                    | _ => NONE
121                  (* end case *))                  (* end case *))
122              | _ => NONE              | _ => NONE

Legend:
Removed from v.703  
changed lines
  Added in v.714

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