Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/compiler/TODO
ViewVC logotype

Annotation of /sml/trunk/src/compiler/TODO

Parent Directory Parent Directory | Revision Log Revision Log


Revision 46 - (view) (download)

1 : monnier 45 TODO:
2 :     a. lcontract should do the following:
3 :     o reduce the code to normal form in one pass (no surprising redices)
4 :     o should contract type applications (i.e., polymorphic functions
5 :     that only applied once)
6 :     o how lcontract interacts with specialize ? how many rounds of
7 :     lcontract should be applied, before or after specialize ?
8 :     we should borrow the "accounting" heuristics in cpsopt.
9 : monnier 16
10 : monnier 45 b. ppflint --- probably should be less verbose on some canonical case,
11 :     e.g., FIX((_,f,_,_), RET[VAR f])
12 :     also if the body is very small, we don't have make a new line.
13 :     see pplexp.sml
14 :    
15 :     printing primops can be made less verbose, instead PRIMOP blah blah
16 :     just simply "x + 1" would do.
17 :    
18 :     c. flintutil.sml:
19 :     how to represent the wrap, unwrap and etag primops ? should they
20 :     be monomorphic or polymorphic
21 :    
22 :     d. flintnm.sml: recursions vs. true recursions. I hope that something
23 :     can be done on splitting pseudo recursions into separate FIX decs.
24 :    
25 :     e. lcontract + specialize: how to adjust the lty and tyc when we have
26 :     to inline or specialize functions from one depth to another is a
27 :     major headache of using the de-Bruijn-index-based representations.
28 :     I have tried different ways in lcontract and specialize, but it
29 :     is pretty adhoc, it will be nice if we can show a more general way
30 :     of how this should be done.
31 :    
32 :     f. Type specialization will lead to many new redices for the lcontract;
33 :     I currently will run one round of lcontract after specialize (see the
34 :     end of lcontract.sml). Is this an overkill ?
35 :    
36 :     g. For a simple int list constant such as "[3]", the compiler
37 :     generates the following after the representation analysis:
38 :     this is way too much work; several issues have to be dealt
39 :     with: first the "ltc_unit" and the "unit" constant; second
40 :     is how to avoid trivial wrappers such as those generated
41 :     from wrapping a RECORD; third is how to avoid useless LET
42 :     redices from the coerce procedure.
43 :    
44 :     v3 : (FK_FCT) =
45 :     FN([v2 : S{}],
46 :     v6 = RECORD []
47 :     [v8] =
48 :     [v12] = v13 = WRAP(TT<>, v6)
49 :     RETURN [v13]
50 :     RETURN [v12]
51 :     v5 = CON(nil, [I], v8)
52 :     v4 = RECORD [(I)3,v5]
53 :     [v9] =
54 :     [v10] = v11 = WRAP(TT<I,LST[I]>, v4)
55 :     RETURN [v11]
56 :     RETURN [v10]
57 :     v1 = CON(::, [I], v9)
58 :     v7 = STRUCT [v1]
59 :     RETURN [v7])
60 :    
61 :     h. Files that needs further clean-up ---
62 :     ltykernel.sml and wrappingNEW.sml
63 :     ---------------------------------------------------------------------------
64 :     TODO:
65 :    
66 :     a. push lcontract into FLINT (* easy *)
67 :     b. push specialize into FLINT (* some work *)
68 :     c. push reps into FLINT (* rework *)
69 : monnier 16 d. push narrow into FLINT (* easy *)
70 : monnier 45 e. push convert into FLINT (* register pressure ? *)
71 :    
72 : monnier 16 f. turn on the FLINT typechecker (* CHRIS & VALERY *)
73 :     g. turn on the FLINT pretty printer (* CHRIS & VALERY *)
74 :    
75 :     ---------------------------------------------------------------------------
76 :     OTHER:
77 :    
78 : monnier 45 B eliminate pointers to the middle of closures ...
79 :     C clean up the copyright/etc in all the source files
80 :     C parametrize the cross-module linkage conventions
81 :     1. add code splitting
82 :     2. get rid of LT_PST through advanced linkage interface
83 :     3. new array splitting (code splitting, phase 1)
84 :     4. all require runtime support in LoadBinFile in new-boot.c
85 :     C. delay inlining of array primops to the backend
86 : monnier 16
87 :     ---------------------------------------------------------------------------
88 :     DONE:
89 :    
90 : monnier 45 X merge EXNC and EXNF into ETAG; (fixing exn flag typing)
91 :     X treat non-value carrying datatypes as unit-carrying ...
92 :     X merge EXNCONS and EXNFUN ?
93 :     X propagating datatypes into the middle-end
94 :     X clean up the primitives such as PACK and WRAP ...
95 :     X move the execution semantics from CM back into compile or evalloop
96 :     X change lambda from Lambda.lexp to FLINT.prog
97 :     1. eliminate the PLambda to Lambda normalize module
98 :     2. plambda is now part of the "trans-mcomp" phase
99 :     X push FLINT into inl_info (?) and cleanup the CM interface

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