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

SCM Repository

[diderot] Annotation of /branches/charisee/src/compiler/mid-to-low/lowSet.sml
ViewVC logotype

Annotation of /branches/charisee/src/compiler/mid-to-low/lowSet.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3259 - (view) (download)

1 : cchiw 3190 (* Expands probe ein
2 :     *
3 :     * COPYRIGHT (c) 2012 The Diderot Project (http://diderot-language.cs.uchicago.edu)
4 :     * All rights reserved.
5 :     *)
6 :    
7 :     structure lowSet = struct
8 :    
9 :     local
10 :    
11 :     structure DstIL =LowIL
12 :     structure DstOp = LowOps
13 :     structure DstV = DstIL.Var
14 :    
15 :     in
16 :    
17 :     fun hash (_,DstIL.OP(op1,_))=DstOp.hash op1
18 : cchiw 3259 | hash(_,DstIL.LIT m)=Literal.hash m
19 : cchiw 3190
20 :     fun cmp(e1,e2)=Word.compare(hash e1, hash e2)
21 :    
22 :     structure OprKey =
23 :     struct
24 :     type ord_key =DstIL.var*LowIL.rhs
25 :     val compare = cmp
26 :     end;
27 :     structure LowSet= RedBlackSetFn(OprKey);
28 :    
29 :     fun allEq([], []) = true
30 :     | allEq(x::xs, y::ys) = DstIL.Var.same(x,y) andalso allEq (xs,ys)
31 :     | allEq _ = false
32 :    
33 :     fun setFind (tbl,DstIL.OP(op0,arg0))= (
34 :     LowSet.find(
35 :     (fn (_,DstIL.OP(op1,arg1))=>(DstOp.same(op0,op1) andalso allEq(arg0,arg1)) | _ => false)
36 :     )) tbl
37 : cchiw 3259 | setFind (tbl,DstIL.LIT n)= (
38 : cchiw 3190 LowSet.find(
39 :     (fn (_,DstIL.LIT m)=> Literal.same(n,m)
40 :     | _ => false))) tbl
41 : cchiw 3259 | setFind (tbl, e)= NONE
42 : cchiw 3190
43 :     fun rtnVar (tbl,(lhs,rhs))=(case setFind(tbl,rhs)
44 :     of NONE => (LowSet.add(tbl,(lhs,rhs)), NONE)
45 :     | SOME(v1,e1) =>(tbl,SOME v1)
46 :     (*end case*))
47 :    
48 :     fun filter(tbl,(lhs,rhs))=(case rhs
49 :     of DstIL.OP _ => rtnVar(tbl,(lhs,rhs))
50 :     | DstIL.LIT _ => rtnVar(tbl,(lhs,rhs))
51 :     | _ => (tbl, NONE)
52 :     (*end case*))
53 :    
54 :    
55 :     end; (* local *)
56 :    
57 :     end (* local *)

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