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

SCM Repository

[diderot] Diff of /branches/vis12/src/compiler/high-il/normalize.sml
ViewVC logotype

Diff of /branches/vis12/src/compiler/high-il/normalize.sml

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

revision 2195, Sun Feb 24 12:39:30 2013 UTC revision 2196, Sun Feb 24 13:44:48 2013 UTC
# Line 33  Line 33 
33      val cntDiffScale            = ST.newCounter "high-opt:diff-scale"      val cntDiffScale            = ST.newCounter "high-opt:diff-scale"
34      val cntDiffOffset           = ST.newCounter "high-opt:diff-offset"      val cntDiffOffset           = ST.newCounter "high-opt:diff-offset"
35      val cntDiffNeg              = ST.newCounter "high-opt:diff-neg"      val cntDiffNeg              = ST.newCounter "high-opt:diff-neg"
36        val cntCurlScale            = ST.newCounter "high-opt:curl-scale"
37        val cntCurlNeg              = ST.newCounter "high-opt:curl-neg"
38      val cntUnused               = ST.newCounter "high-opt:unused"      val cntUnused               = ST.newCounter "high-opt:unused"
39      val firstCounter            = cntProbeAdd      val firstCounter            = cntInsideScale
40      val lastCounter             = cntUnused      val lastCounter             = cntUnused
41    
42      structure UnusedElim = UnusedElimFn (      structure UnusedElim = UnusedElimFn (
# Line 266  Line 268 
268                        in                        in
269                          ST.tick cntDiffScale;                          ST.tick cntDiffScale;
270                          decUse f;                          decUse f;
                         incUse lhs'; incUse f'; incUse s;  
271                          SOME[                          SOME[
272                              (lhs', IL.OP(Op.DiffField, [f'])),                              (lhs', IL.OP(Op.DiffField, [use f'])),
273                              (lhs, IL.OP(Op.ScaleField, [s, lhs']))                              (lhs, IL.OP(Op.ScaleField, [use s, use lhs']))
274                            ]                            ]
275                        end                        end
276                    | SOME(Op.OffsetField, [f', s]) => (                    | SOME(Op.OffsetField, [f', s]) => (
# Line 291  Line 292 
292                        end                        end
293                    | _ => NONE                    | _ => NONE
294                  (* end case *))                  (* end case *))
295              | (Op.CurlField _, [f]) => (case (getRHS f)              | (Op.CurlField dim, [f]) => (case (getRHS f)
296                     of SOME(Op.AddField, [f, g]) => raise Fail "curl(f+g)"
297                      | SOME(Op.SubField, [f, g]) => raise Fail "curl(f-g)"
298                      | SOME(Op.ScaleField, [s, f']) => let
299                        (* rewrite to s*curl(f) *)
300                        val f'' = IL.Var.copy f'
301                        in
302                          ST.tick cntCurlScale;
303                          decUse f;
304                          SOME[
305                              (f'', IL.OP(Op.CurlField dim, [use f'])),
306                              (lhs, IL.OP(Op.ScaleField, [use s, use f'']))
307                            ]
308                        end
309                      | SOME(Op.NegField, [f']) => let
310                        (* rewrite to -curl(f) *)
311                        val f'' = IL.Var.copy f'
312                        in
313                          ST.tick cntCurlNeg;
314                          decUse f;
315                          SOME[
316                              (f'', IL.OP(Op.CurlField dim, [use f'])),
317                              (lhs, IL.OP(Op.NegField, [use f'']))
318                            ]
319                        end
320                (* FIXME: the following is just the constant 0 field, but we don't have                (* FIXME: the following is just the constant 0 field, but we don't have
321                 * a representation of constant fields                 * a representation of constant fields
322                 *)                 *)
                  of SOME(Op.AddField, [f, g]) => raise Fail "curl(f+g)"  
                   | SOME(Op.SubField, [f, g]) => raise Fail "curl(f-g)"  
                   | SOME(Op.ScaleField, [s, f']) => raise Fail "curl(s*f)"  
                   | SOME(Op.NegField, [f']) => raise Fail "curl(-f)"  
323                    | SOME(Op.DiffField, _) => raise Fail "curl of del"                    | SOME(Op.DiffField, _) => raise Fail "curl of del"
324                    | _ => NONE                    | _ => NONE
325                  (* end case *))                  (* end case *))

Legend:
Removed from v.2195  
changed lines
  Added in v.2196

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