home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / mitsch75.zip / scheme-7_5_17-src.zip / scheme-7.5.17 / src / compiler / documentation / todo.txt < prev   
Text File  |  1993-10-29  |  7KB  |  159 lines

  1.  
  2.  
  3.        Things left to do before releasing the compiler
  4.  
  5. * Type checking for inline coded primitives.
  6.  
  7. * Implement debugging features.  Solve absolute pathname problems.
  8.  
  9.  
  10.  
  11.             Items that have been processed
  12.  
  13.  
  14. * Bug in definitions in IC code: if there is a GC during the
  15. definition, the ENV register in the compiler's register block is not
  16. copied, so the next time it is referenced it is in oldspace.  One
  17. possible fix is to rewrite definitions as calls to the primitive.  The
  18. other non-caching environment operations may have the same problem,
  19. this should be looked into.
  20.  
  21. Ordinary primitives should NOT have this problem since they supposedly
  22. push the environment into the continuation and then restore it on
  23. invocation of the continuation.
  24.  
  25. FIXED: The compiler no longer uses the "short" definition hook by
  26. default.  It actually calls the primitives.  -- Jinx
  27.  
  28.  
  29. * Should notify users that the framing of IC blocks will be changed by
  30. the rewrite rules for such things as disjunctions and internal
  31. definition for value.
  32.  
  33. FIXED: I don't think this is true by default any more.  The rewriting
  34. of first class environment code in the front end preserves framing
  35. while allowing better code generation. -- Jinx
  36.  
  37.  
  38. * Update "rtlgen/rgproc".
  39.  
  40. * Write method for `unassigned-test' in "rtlgen/rgrval".
  41.  
  42. * Write `make-rtl-continuation', `make-rtl-expr', and
  43. `make-rtl-procedure'.
  44.  
  45. * `Temporary' objects are used in rgcomb, rgrval, and rgstmt.
  46. Change this code to use pseudo-registers.
  47.  
  48. * "rgretn" refers to `pop-all-stack-frames', which is not
  49. written.
  50.  
  51. * "rgraph" collects continuations in the current rgraph object.  Is
  52. this still what we want to do?  If so, somebody must do the
  53. accumulation.
  54.  
  55. * Subproblem redesign: Attempt to change fggen so that there
  56. are two kinds of subproblems -- those that explicitly invoke
  57. continuations, and those that do not.  These correspond to "canonical"
  58. and "rvalue" subproblems, respectively.  Delay the consing of the
  59. continuation objects associated with the subproblem until it is known
  60. that it must be canonical.  This introduces a problem: the
  61. "subproblem-register" and "subproblem-type" will now be undefined on
  62. "rvalue" subproblems, and these concepts must be generalized to work
  63. in this new context.  Also, the operation "set-continuation/rtl!" is
  64. used on subproblems, and must be changed in this case.  All of these
  65. problems have to do solely with the RTL generator.
  66.  
  67. * Separate applications from their subproblems.  Create a new
  68. node type "parallel" which contains the subproblems.  Doubly link the
  69. parallel node to the application node so we get the same relationship
  70. as at present.  Then, during subproblem ordering, edit the CFG to
  71. place the application node in the correct place, which normally will
  72. be in one of the continuations of one of the subproblems.
  73.  
  74. Note that this implies a somewhat complicated CFG edit.
  75.  
  76. * Note that after a continuation's CFG has been edited (e.g.
  77. using continuation/next-hooks), the value of continuation/scfg is no
  78. longer correct.  This is because it is not updated.  It's not obvious
  79. what should be done here.
  80.  
  81. There is no good reason to keep the scfg of a continuation around.  A
  82. properly formed continuation (or procedure, either) has no
  83. "next-hooks" in its body since all of the exit points are
  84. applications.  Also, the only kinds of continuations that we want to
  85. glue anything to are those whose bodies are fg-noop nodes whose "next"
  86. is not yet connected.  If we try to glue to anything else, it is an
  87. error.
  88.  
  89. * Rewrite rule for LAMBDA body screws up mutual recursion if
  90. the body contains any non-constant-valued definitions.  The LET which
  91. is created should be rewritten so that it goes around the LETREC
  92. bindings rather than inside them.
  93.  
  94. * Change RTL generator to pass "offset" value around explicitly.
  95.  
  96. * Flush JOIN blocks as these will no longer be used.
  97.  
  98. * Be more careful about the code generation for applications whose
  99. operators are "simple".  If a program is known to be a loop, then both
  100. the call and return for that loop will generate links in the RTL
  101. graph, causing a real loop to appear in the graph.  Later passes of
  102. the compiler are assuming that there are no loops!
  103.  
  104. Right now only "simple" return statements are turned into links, but
  105. it is desirable to convert "simple" call statements as well, provided
  106. that they aren't loops.  A simple heuristic that wins is to only
  107. convert calls who are both "simple" and whose operator is not called
  108. from elsewhere.  This will optimize LET, the most important case,
  109. without introducing loops.
  110.  
  111. Unfortunately this is not easy to do in RTL because of the invocation
  112. prefixes: prefixes other than NULL require some extra work at the call
  113. point.  Unfortunately the prefixes are needed to make particular
  114. invocations work right, e.g. `rtl:make-invocation:lookup'.  Probably
  115. should eliminate the "prefix" concept for all except those invocations
  116. that need it, replacing prefixes by some explicit code to perform the
  117. action required.
  118.  
  119. For now: implement fall-through in the LAP generator, by noticing it
  120. at linearization time.
  121.  
  122. * Try to rewrite `invocation-prefix/erase-to' in "rtlgen/rgcomb" to
  123. use the `block-stack-link'.
  124.  
  125. * I'm not convinced that the operator class analysis is useful any
  126. more.  This should be checked out and flushed if desirable.
  127.  
  128. * Update the references to `make-vector-tag' in $zfront/rcseht and
  129. $zfront/rcserq to have the extra argument.
  130.  
  131. * Write `combination/inline?' and the primitive inlining code.
  132.  
  133. * The environment register is not being saved in the continuation of
  134. a subproblem call from an IC procedure.
  135.  
  136. * Some memoization is desirable for the entry nodes on SIMPLE
  137. continuations, because they are being generated explicitly.
  138.  
  139. * Probably the computations involving `lvalue/source-set' want to be
  140. made more efficient.  It's also possible that they will be computed
  141. more than once.
  142.  
  143. * CSE will have to be changed back to do modelling of the stack again.
  144.  
  145. * Change handling of dynamic links so that the link register is saved
  146. when calling an unknown place, and is assumed to contain nothing at
  147. external entries.  The simplest implementation of this is to assume
  148. that nothing is in the link register at external entries, and to save
  149. it on calls to external procedures.  Later we can optimize it better.
  150. This strategy allows us to coexist with the current compiled code.
  151.  
  152. * Implement the data-structure discarding code.
  153.  
  154. * The call and return code is not taking into account the cases where
  155. continuations are closed in IC blocks.  This may complicate things
  156. somewhat.  I'd prefer to leave this until I can see some output.
  157.  
  158. * Implement open-coding for `vector'.
  159.