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

SCM Repository

[diderot] Annotation of /branches/charisee/src/compiler/tree-il/getTypes.sml
ViewVC logotype

Annotation of /branches/charisee/src/compiler/tree-il/getTypes.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2664 - (view) (download)

1 : cchiw 2628 (* Get Types of Expressions *)
2 :    
3 :     structure getTypes= struct
4 :    
5 :     structure Op = TreeOps
6 :     structure Ty = TreeILTypes
7 :     structure IL=TreeIL
8 : cchiw 2646 structure ILF=TreeFunc
9 :     structure TySet=ILF.TySet
10 :     structure OprSet=ILF.OprSet
11 : cchiw 2628
12 :    
13 : cchiw 2646 fun vecTy n= SOME(Ty.TensorTy[n])
14 : cchiw 2637 val testing=0
15 :    
16 : cchiw 2628
17 :     (* GetTypes TreeIL operator. *)
18 : cchiw 2646 val default=(NONE,[])
19 :    
20 : cchiw 2628 fun TypeofOp rator = (case rator
21 : cchiw 2646 of Op.IndexTensor(a,RTy,b,c)=>(SOME RTy,[])
22 :     (* Op.IndexTensor(a,RTy,b,c)=> (SOME RTy, [ILF.OP(Op.IndexTensor(a,RTy,b,c)))]*)
23 :     | Op.addVec d => (vecTy d,[ILF.OP(Op.addVec d)])
24 :     | Op.subVec d => (vecTy d,[ILF.OP(Op.subVec d)])
25 :     | Op.prodVec d => (vecTy d,[ILF.OP(Op.prodVec d)])
26 : cchiw 2664 | Op.prodScaV d => (vecTy d,[ILF.CONS(Ty.TensorTy[d]),ILF.OP(Op.prodScaV d)])
27 :     | Op.sumVec d => (NONE, [ILF.OP(Op.sumVec d)])
28 : cchiw 2637 | _ => default
29 :     (* end case *))
30 : cchiw 2628
31 :    
32 :    
33 : cchiw 2663 (*fun peel(IL.E_Lit( offset))=offset*)
34 :    
35 : cchiw 2662 fun mkFnC(IL.E_LoadVec(fTy, oTy,_, offset))=[ILF.LD(fTy,oTy)]
36 :     | mkFnC(IL.E_mkVec(_,oTy,pieces,_))= [ILF.MKVEC(oTy,pieces)]
37 : cchiw 2646 | mkFnC(IL.E_Cons (ty , exps))= [ILF.CONS ty]
38 : cchiw 2663 | mkFnC(IL.E_LoadVecAligned (fTy, oTy,_, offset))=[ILF.LDAligned (fTy,oTy)]
39 :     | mkFnC(IL.E_mkVecAligned (_,oTy,pieces,_))= [ILF.MKVECAligned (oTy,pieces)]
40 : cchiw 2628
41 :    
42 : cchiw 2637 (*Get types of Exp*)
43 :     fun typeOfExp(t,exp)=let
44 : cchiw 2663 val (ty1,opr1)=t
45 : cchiw 2664 fun add((NONE,cfn),rest)=let
46 :     val opr2=List.foldr (fn(e1,e2) =>OprSet.add(e2,e1)) opr1 cfn
47 :     val t2=(ty1,opr2)
48 : cchiw 2637 in
49 :     List.foldr (fn(e1,e2) => typeOfExp(e2,e1)) t2 rest
50 :     end
51 : cchiw 2664
52 : cchiw 2646 | add((SOME typ,cfn),rest)= let
53 :     val ty2=TySet.add(ty1,typ)
54 :     val opr2=List.foldr (fn(e1,e2) =>OprSet.add(e2,e1)) opr1 cfn
55 :     val t2=(ty2,opr2)
56 : cchiw 2637
57 :     in
58 :     List.foldr (fn(e1,e2) => typeOfExp(e2,e1)) t2 rest
59 :     end
60 :     in (case exp
61 :     of (IL.E_State(state_var))=>t
62 :     | IL.E_Var(var) => t
63 :     | IL.E_Lit _ => t
64 :     | IL.E_Apply (_, exps) => add(default,exps)
65 : cchiw 2646 | IL.E_Cons (ty , exps) => add((SOME ty,mkFnC exp),exps)
66 :     | IL.E_LoadVec(ty,_,exps,_) => add((vecTy ty,mkFnC exp),[exps])
67 :     | IL.E_mkVec(_,ty,_,exps) => add((vecTy ty,mkFnC exp), exps)
68 : cchiw 2663
69 : cchiw 2637 | IL.E_Op(Op, exps) => add(TypeofOp Op, exps)
70 :     (*end case*))
71 :     end
72 : cchiw 2628
73 :    
74 : cchiw 2637 (*print Types*)
75 :     fun prnTy((t1,t2),prefix)=let
76 :    
77 :     val typs=TySet.listItems(t1);
78 :     val ops=OprSet.listItems(t2);
79 :     val str1= List.map Ty.toString typs
80 : cchiw 2646 val str2=List.map ILF.toString ops
81 : cchiw 2637 val pnstr= String.concat["\n",prefix,"\n \t Types: ",String.concatWith "," str1,
82 :     "\n \t cFn: ",String.concatWith "\n\t" str2]
83 :    
84 :     in pnstr end
85 : cchiw 2628
86 : cchiw 2637 fun prnTyFinal(typs,ops,prefix)=let
87 :     val str1= List.map Ty.toString typs
88 : cchiw 2646 val str2=List.map ILF.toString ops
89 : cchiw 2637 val pnstr= String.concat["\n",prefix,"\n \t Types: ",String.concatWith "," str1,
90 :     "\n \t cFn: ",String.concatWith "\n\t" str2]
91 :     in pnstr end
92 : cchiw 2628
93 :    
94 :    
95 : cchiw 2637 fun getTypesFiltered(t,IL.S_Assign (_,exp))= let
96 :     val t2=typeOfExp(t,exp)
97 :     val _=(case testing
98 :     of 1=> (print(String.concat["\n ---",IL.toString exp,prnTy(t2,"Current")]);1)
99 :     | _=>1
100 :     (*end case*))
101 : cchiw 2628
102 : cchiw 2637 in t2
103 :     end
104 :     | getTypesFiltered(t, _)= t
105 : cchiw 2628
106 :    
107 :    
108 :     end

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