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

SCM Repository

[diderot] Diff of /branches/charisee/src/compiler/mid-il/mid-contract.sml
ViewVC logotype

Diff of /branches/charisee/src/compiler/mid-il/mid-contract.sml

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

revision 2495, Wed Oct 23 21:28:25 2013 UTC revision 2496, Tue Oct 29 05:29:46 2013 UTC
# Line 42  Line 42 
42      fun getRHS x = (case V.binding x      fun getRHS x = (case V.binding x
43             of IL.VB_RHS(IL.OP arg) => SOME arg             of IL.VB_RHS(IL.OP arg) => SOME arg
44              | IL.VB_RHS(IL.VAR x') => getRHS x'              | IL.VB_RHS(IL.VAR x') => getRHS x'
45              | IL.VB_RHS(IL.EINAPP arg) => SOME arg             (* | IL.VB_RHS(IL.EINAPP arg) => SOME arg*)
46              | _ => NONE              | _ => NONE
47            (* end case *))            (* end case *))
48    
49  (*replaces operators to Ioperator *)  (*replaces operators to Ioperator *)
50    
51      fun doAssign (lhs, IL.OP rhs) = (case rhs      fun doAssign (lhs, IL.OP rhs) = (case rhs
52             of (Op.IAdd ty, [a, b]) => (case getRHS b             of (Op.IAdd , [a, b]) => (case getRHS b
53                   of SOME(Op.INeg _, [c]) => (                   of SOME(Op.INeg , [c]) => (
54                      (* rewrite to "a-c" *)                      (* rewrite to "a-c" *)
55                        ST.tick cntAddNeg;                        ST.tick cntAddNeg;
56                        decUse b;                        decUse b;
57                        SOME[(lhs, IL.OP(Op.ISub ty, [a, use c]))])                        SOME[(lhs, IL.OP(Op.ISub, [a, use c]))])
58                    | _ => NONE                    | _ => NONE
59                   (* end case *))                   (* end case *))
60              | (Op.ISub ty, [a, b]) => if IL.Var.same(a, b)              | (Op.ISub , [a, b]) => if IL.Var.same(a, b)
61                  then ( (* rewrite to 0 *)                  then ( (* rewrite to 0 *)
62                    ST.tick cntSubSame;                    ST.tick cntSubSame;
63                    decUse a; decUse b;                    decUse a; decUse b;
64                    case ty                    SOME[(lhs, IL.LIT(Literal.Int 0))]
                    of Ty.IntTy => SOME[(lhs, IL.LIT(Literal.Int 0))]  
                     | Ty.TensorTy[] => SOME[(lhs, IL.LIT(Literal.Float(FloatLit.zero false)))]  
                     | _ => (incUse a; incUse b; NONE) (* FIXME: should handle arbitrary tensors *)  
65                    (* end case *))                    (* end case *))
66                  else (case getRHS b                  else (case getRHS b
67                     of SOME(Op.INeg _, [c]) => (                     of SOME(Op.INeg , [c]) => (
68                        (* rewrite to "a+c" *)                        (* rewrite to "a+c" *)
69                          ST.tick cntSubNeg;                          ST.tick cntSubNeg;
70                          decUse b;                          decUse b;
71                          SOME[(lhs, IL.OP(Op.IAdd ty, [a, use c]))])                          SOME[(lhs, IL.OP(Op.IAdd, [a, use c]))])
72                      | _ => NONE                      | _ => NONE
73                     (* end case *))                     (* end case *))
74              | (Op.INeg ty, [a]) => (case getRHS a              | (Op.INeg , [a]) => (case getRHS a
75                   of SOME(Op.INeg _, [b]) => (                   of SOME(Op.INeg , [b]) => (
76                      (* rewrite to "b" *)                      (* rewrite to "b" *)
77                        ST.tick cntNegNeg;                        ST.tick cntNegNeg;
78                        decUse a;                        decUse a;

Legend:
Removed from v.2495  
changed lines
  Added in v.2496

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