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

SCM Repository

[diderot] Diff of /branches/pure-cfg/src/compiler/IL/value-numbering-fn.sml
ViewVC logotype

Diff of /branches/pure-cfg/src/compiler/IL/value-numbering-fn.sml

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

revision 1555, Sun Oct 23 15:43:11 2011 UTC revision 1556, Sun Oct 23 15:43:41 2011 UTC
# Line 107  Line 107 
107                        (* rewrite node to rename variables *)                        (* rewrite node to rename variables *)
108                          then IL.CFG.replaceNode(nd, IL.Node.mkASSIGN(y, IL.RHS.map rename rhs))                          then IL.CFG.replaceNode(nd, IL.Node.mkASSIGN(y, IL.RHS.map rename rhs))
109                          else ()                          else ()
110                      | IL.MASSIGN{stm=(ys, rator, xs), succ, ...} =>
111                          if List.all changed ys
112                            then IL.CFG.deleteNode nd (* deleting redundant assignment *)
113                          else if (List.exists changed xs)
114                          (* rewrite node to rename variables *)
115                            then IL.CFG.replaceNode(nd, IL.Node.mkMASSIGN(ys, rator, List.map rename xs))
116                            else ()
117                    | IL.NEW{strand, args, ...} =>                    | IL.NEW{strand, args, ...} =>
118                        if List.exists changed args                        if List.exists changed args
119                          then IL.CFG.replaceNode(nd, IL.Node.mkNEW{                          then IL.CFG.replaceNode(nd, IL.Node.mkNEW{
# Line 143  Line 150 
150            val mkVAR = E.mkVAR tbl            val mkVAR = E.mkVAR tbl
151            val mkLIT = E.mkLIT tbl            val mkLIT = E.mkLIT tbl
152            val mkOP = E.mkOP tbl            val mkOP = E.mkOP tbl
153              val mkMULTIOP = E.mkMULTIOP tbl
154            val mkAPPLY = E.mkAPPLY tbl            val mkAPPLY = E.mkAPPLY tbl
155            val mkCONS = E.mkCONS tbl            val mkCONS = E.mkCONS tbl
156            val mkPHI = E.mkPHI tbl            val mkPHI = E.mkPHI tbl
# Line 199  Line 207 
207                              in                              in
208                                case expToVN(env, exp)                                case expToVN(env, exp)
209                                 of SOME vn => ((* y is redundant, so map it to vn *)                                 of SOME vn => ((* y is redundant, so map it to vn *)
210  (* DEBUG ** Log.msg(concat["** redundant assignment: ", IL.assignToString (y, rhs),*)  (* DEBUG ** Log.msg(concat["** redundant multi-assignment: ", IL.assignToString (y, rhs),*)
211  (* DEBUG **"; VN[", IL.Var.toString y, "] = ", IL.Var.toString vn, "\n"]);*)  (* DEBUG **"; VN[", IL.Var.toString y, "] = ", IL.Var.toString vn, "\n"]);*)
212                                      ST.tick cntRedundantAssign;                                      ST.tick cntRedundantAssign;
213                                      setVN(y, vn);                                      setVN(y, vn);
214                                      env)                                      env)
215                                  | NONE => (                                  | NONE => bindVarToExp(env, y, exp)
                                     bindVarToExp(env, y, exp))  
216                                (* end case *)                                (* end case *)
217                              end                              end
218                            | IL.MASSIGN{stm=(ys, rator, xs), succ, ...} => let
219                                val xs = varsToExp(env, xs)
220                                fun mkExps (env, _, []) = env
221                                  | mkExps (env, i, y::ys) = let
222                                      val exp = mkMULTIOP(i, rator, xs)
223                                      in
224                                        case expToVN(env, exp)
225                                         of SOME vn => ((* y is redundant, so map it to vn *)
226                                              ST.tick cntRedundantAssign;
227                                              setVN(y, vn);
228                                              mkExps (env, i+1, ys))
229                                          | NONE => mkExps (bindVarToExp(env, y, exp), i+1, ys)
230                                        (* end case *)
231                                      end
232                                in
233                                  mkExps (env, 0, ys)
234                                end
235                          | _ => env                          | _ => env
236                        (* end case *))                        (* end case *))
237                  in                  in

Legend:
Removed from v.1555  
changed lines
  Added in v.1556

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