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 3349 - (view) (download)

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

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