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 1031, Sun May 1 17:39:05 2011 UTC revision 1032, Sun May 1 17:39:37 2011 UTC
# Line 21  Line 21 
21    
22    (********** Counters for statistics **********)    (********** Counters for statistics **********)
23      val cntProbeAdd             = ST.newCounter "high-opt:probe-add"      val cntProbeAdd             = ST.newCounter "high-opt:probe-add"
24        val cntProbeSub             = ST.newCounter "high-opt:probe-sub"
25      val cntProbeScale           = ST.newCounter "high-opt:probe-scale"      val cntProbeScale           = ST.newCounter "high-opt:probe-scale"
26      val cntProbeNeg             = ST.newCounter "high-opt:probe-neg"      val cntProbeNeg             = ST.newCounter "high-opt:probe-neg"
27      val cntDiffField            = ST.newCounter "high-opt:diff-field"      val cntDiffField            = ST.newCounter "high-opt:diff-field"
# Line 47  Line 48 
48      fun doRHS (lhs, IL.OP rhs) = (case rhs      fun doRHS (lhs, IL.OP rhs) = (case rhs
49             of (Op.Probe(domTy, rngTy), [f, pos]) => (case getRHS f             of (Op.Probe(domTy, rngTy), [f, pos]) => (case getRHS f
50                   of SOME(Op.Field _, _) => NONE (* direct probe does not need rewrite *)                   of SOME(Op.Field _, _) => NONE (* direct probe does not need rewrite *)
51                    | SOME(Op.AddField, [f, g]) => raise Fail "Probe(f+g)"                    | SOME(Op.AddField, [f', g']) => let
52                        (* rewrite to (f@pos) + (g@pos) *)
53                          val lhs1 = IL.Var.copy lhs
54                          val lhs2 = IL.Var.copy lhs
55                          in
56                            ST.tick cntProbeAdd;
57                            decUse f;
58                            incUse lhs1; incUse f'; incUse lhs2; incUse g'; incUse pos;
59                            SOME[
60                                (lhs1, IL.OP(Op.Probe(domTy, rngTy), [f', pos])),
61                                (lhs2, IL.OP(Op.Probe(domTy, rngTy), [g', pos])),
62                                (lhs, IL.OP(Op.Add rngTy, [lhs1, lhs2]))
63                              ]
64                          end
65                      | SOME(Op.SubField, [f', g']) => let
66                        (* rewrite to (f@pos) - (g@pos) *)
67                          val lhs1 = IL.Var.copy lhs
68                          val lhs2 = IL.Var.copy lhs
69                          in
70                            ST.tick cntProbeSub;
71                            decUse f;
72                            incUse lhs1; incUse f'; incUse lhs2; incUse g'; incUse pos;
73                            SOME[
74                                (lhs1, IL.OP(Op.Probe(domTy, rngTy), [f', pos])),
75                                (lhs2, IL.OP(Op.Probe(domTy, rngTy), [g', pos])),
76                                (lhs, IL.OP(Op.Sub rngTy, [lhs1, lhs2]))
77                              ]
78                          end
79                    | SOME(Op.ScaleField, [s, f']) => let                    | SOME(Op.ScaleField, [s, f']) => let
80                      (* rewrite to s*(f'@pos) *)                      (* rewrite to s*(f'@pos) *)
81                        val lhs' = IL.Var.copy lhs                        val lhs' = IL.Var.copy lhs
# Line 94  Line 122 
122                              ])                              ])
123                        (* end case *))                        (* end case *))
124                    | SOME(Op.AddField, [f, g]) => raise Fail "Diff(f+g)"                    | SOME(Op.AddField, [f, g]) => raise Fail "Diff(f+g)"
125                      | SOME(Op.SubField, [f, g]) => raise Fail "Diff(f-g)"
126                    | SOME(Op.ScaleField, [s, f']) => let                    | SOME(Op.ScaleField, [s, f']) => let
127                      (* rewrite to s*(D f) *)                      (* rewrite to s*(D f) *)
128                        val lhs' = IL.Var.copy lhs                        val lhs' = IL.Var.copy lhs

Legend:
Removed from v.1031  
changed lines
  Added in v.1032

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