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

SCM Repository

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

Diff of /sml/trunk/src/compiler/TODO

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

revision 24, Thu Mar 12 00:49:58 1998 UTC revision 45, Sun Mar 22 20:11:09 1998 UTC
# Line 1  Line 1 
1  Changes to be done:  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    
10     a. push FLINT into inl_info (?) (* easy *)     b. ppflint --- probably should be less verbose on some canonical case,
11     b. push opt into FLINT          (* easy *)           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 *)     c. push reps into FLINT       (* rework *)
69     d. push narrow into FLINT       (* easy *)     d. push narrow into FLINT       (* easy *)
70     e. push convert into FLINT      (* easy *)     e. push convert into FLINT      (* register pressure ? *)
71    
72     f. turn on the FLINT typechecker           (* CHRIS & VALERY *)     f. turn on the FLINT typechecker           (* CHRIS & VALERY *)
73     g. turn on the FLINT pretty printer        (* CHRIS & VALERY *)     g. turn on the FLINT pretty printer        (* CHRIS & VALERY *)
74    
75  ---------------------------------------------------------------------------  ---------------------------------------------------------------------------
76  OTHER:  OTHER:
77    
78     h. eliminate pointers to the middle of closures ...  B  eliminate pointers to the middle of closures ...
79     i. reppy new array splitting (code splitting)  C  clean up the copyright/etc in all the source files
80     j. get rid of LT_PST through advanced linkage interface  C  parametrize the cross-module linkage conventions
81     k. delay inlining of array primops to the backend       1. add code splitting
82     l. clean up the primitives such as PACK and WRAP ...       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    
87  ---------------------------------------------------------------------------  ---------------------------------------------------------------------------
88  DONE:  DONE:
89    
90  X  m. merge EXNC and EXNF into ETAG;  (fixing exn flag typing)  X  merge EXNC and EXNF into ETAG;  (fixing exn flag typing)
91  X  n. treat non-value carrying datatypes as unit-carrying ...  X  treat non-value carrying datatypes as unit-carrying ...
92  X  o. merge EXNCONS and EXNFUN ?  X  merge EXNCONS and EXNFUN ?
93  X  p. propagating datatypes into the middle-end  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

Legend:
Removed from v.24  
changed lines
  Added in v.45

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