Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
cmucl
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Carl Shapiro
cmucl
Commits
3a1b73b5
Commit
3a1b73b5
authored
34 years ago
by
ram
Browse files
Options
Downloads
Patches
Plain Diff
Initial revision
parent
92754bda
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
compiler/c.log
+2048
-0
2048 additions, 0 deletions
compiler/c.log
with
2048 additions
and
0 deletions
compiler/c.log
0 → 100644
+
2048
−
0
View file @
3a1b73b5
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/eval.lisp
05-Feb-90 20:45:20, Edit by Ram.
Fixed MAKE-INTERPRETED-FUNCTION to specify the LAMBDA slot when creating the
function so that it is avaliable to INTERPRETED-FUNCTION-LAMBDA-EXPRESSION.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/sset.lisp
05-Feb-90 12:07:12, Edit by Ram.
Fixed a problem in SSET-UNION-OF-DIFFERENCE. It was using (>= num2 num3) in
two places where it should have been using <=. Probably due to incorrect
modification of the original SSET-DIFFERENCE code into this function. The
original function had the inner loop over the second arg, rather than the
first. This effectively resulted in the difference aspect usually not
happening, so the KILL set in constraint propagation never took effect,
resulting in some over-zealous type propagation.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/srctran.lisp
04-Feb-90 10:11:51, Edit by Ram.
Oops... Fixed * transform so that multiplication by 8 doesn't really
multiply by 256, etc.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
04-Feb-90 09:48:09, Edit by Ram.
Wrote CLOSE-SOURCE-INFO, and made COMPILE-FILE, ADVANCE-SOURCE-FILE and
COMPILE-FROM-STREAM call it.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/fndb.lisp
04-Feb-90 08:09:06, Edit by Ram.
Added definition for %SP-STRING-COMPARE.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/seqtran.lisp
04-Feb-90 08:01:21, Edit by Ram.
Fixed STRING<>=-BODY a bit. In addition to some query replace lossage, there
was also a genuine ancestral bug in computation of the result in the = case
of = ops.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ctype.lisp
03-Feb-90 20:44:39, Edit by Ram.
Made VALID-FUNCTION-USE and VALID-APPROXIMATE-TYPE return NIL, NIL when
uncertainty is encountered, rather than T, NIL. Everybody was expecting this
to be a conservative test (and only looking at the first value.) This caused
spurious transforms to happen.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/srctran.lisp
02-Feb-90 14:08:09, Edit by Ram.
Added NTH, NTHCDR transforms for the constant index case. Added * transform
for the power-of-2 case.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/seqtran.lisp
02-Feb-90 13:00:15, Edit by Ram.
Added string transforms, derived from CLC sources.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/srctran.lisp
02-Feb-90 13:25:40, Edit by Ram.
Added FORMAT transform derived from CLC sources.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/type.lisp
02-Feb-90 11:23:26, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
02-Feb-90 11:23:15, Edit by Ram.
Defined TYPE/= and made the "anything changed" tests use it instead of TYPE=
so as to be conservative in the presence of hairy types.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
02-Feb-90 10:29:54, Edit by Ram.
Changed REOPTIMIZE-CONTINUATION to set BLOCK-TYPE-CHECK in the use blocks so
that new derived-type information will also cause type checking to be redone.
This mainly handles the case where new type information causes us to want to
negate a check that was previously simple.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
02-Feb-90 10:12:24, Edit by Ram.
Fixed CONTINUATION-%DERIVED-TYPE to call CONTINUATION-%TYPE-CHECK instead of
CONTINUATION-TYPE-CHECK so that it won't recurse indefinitely.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/globaldb.lisp
01-Feb-90 14:46:13, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
01-Feb-90 14:43:26, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/knownfun.lisp
01-Feb-90 14:40:22, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
01-Feb-90 14:42:19, Edit by Ram.
Flushed *FUNCTION-INFO* in favor of (INFO FUNCTION INFO ...). Added
FUNCTION-INFO-PREDICATE-TYPE slot.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
01-Feb-90 14:09:42, Edit by Ram.
Changed ASSERT-CONTINUATION-TYPE to set BLOCK-TYPE-ASSERTED in the use
blocks. Also, moved fixed the setting of BLOCK-TYPE-CHECK to be on the use
blocks rather than the CONTINUATION-BLOCK, since type check generation uses
DO-NODES, and thus ignores the BLOCK-START.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/node.lisp
01-Feb-90 13:37:14, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/checkgen.lisp
01-Feb-90 13:41:46, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
01-Feb-90 13:41:48, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
01-Feb-90 13:42:05, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1util.lisp
01-Feb-90 13:42:29, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ltn.lisp
01-Feb-90 13:43:07, Edit by Ram.
Renamed the CONTINUATION TYPE-CHECK slot to %TYPE-CHECK, which is filtered by
the new CONTINUATION-TYPE-CHECK function to make sure that it has been
computed recently. Changed setters of TYPE-CHECK to %TYPE-CHECK, and flushed
the now unnecessary calls to CONTINUATION-DERIVED-TYPE (which explicitly did
the recomputation.)
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
01-Feb-90 12:56:50, Edit by Ram.
Changed %CONTINUATION-DERIVED-TYPE to not set TYPE-CHECK when the assertion
is T or there is no DEST. In the first case, this just avoids waste motion.
In the second case, this prevents constraint analysis from being tricked into
believing such a check will be done, when in fact no checks are done on
unused values.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1util.lisp
01-Feb-90 12:51:41, Edit by Ram.
Made DELETE-CONTINUATION, FLUSH-DEST, NODE-ENDS-BLOCK and UNLINK-NODE set the
BLOCK-TYPE-ASSERTED and BLOCK-TEST-CHANGED flags. At least for the former,
this has to be done in more places than I thought, and also must be done for
correctness, rather than just to ensure new assertions are seen. This is
because if a block is split, or code needing an assertion is deleted, then we
must recompute the block's set of constraints or it will contain incorrect
constraints.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/sset.lisp
01-Feb-90 11:33:28, Edit by Ram.
Fixed SSET-INTERSECTION to blow away any extra elements in SET1 that are
larger than the greatest element in SET2.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/node.lisp
01-Feb-90 10:34:17, Edit by Ram.
Changed initial values for TYPE-ASSERTED and TEST-MODIFIED to be T rather
than NIL.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/vop.lisp
30-Jan-90 16:10:06, Edit by Ram.
Added IR2-ENVIRONMENT-KEEP-AROUND-TNS and IR2-COMPONENT-PRE-PACKED-SAVE-TNS
so that we won't have to recompile to add these features later on.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/eval.lisp
30-Jan-90 14:54:58, Edit by Ram.
Added the MAKE-INTERPRETED-FUNCTION interface which allows lazy conversion of
functions and features bounded IR1 memory usage through a LRU cache that is
partially flushed on GC. Added INTERPRETED-FUNCTION-NAME,
INTERPRETED-FUNCTION-ARGLIST and setf functions.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
30-Jan-90 10:08:19, Edit by Ram.
Now that %DEFMACRO is passed #'(lambda ... for benefit for the interpreter,
we don't want to unquote the definition using EVAL. Use SECOND instead.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1util.lisp
29-Jan-90 14:17:06, Edit by Ram.
Changed FIND-COMPONENT-NAME to bind *PRINT-LEVEL* and *PRINT-PRETTY* so as to
prevent huge component names.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/life.lisp
29-Jan-90 13:43:23, Edit by Ram.
Fixed CONFLICT-ANALYZE-BLOCK in the dead read case to do FROB-MORE-TNS on
NOTE-CONFLICTS as well as the addition to the live set. This was the fix to
the long-procrastinated-about :MORE TN bug (first noticed in fall 88.) Also,
changed FROB-MORE-TNS to return whether it did anything, rather than sleazily
hacking on the loop variable to get the loop to exit. I must have been
having a Pascal flashback when I wrote that code...
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/eval.lisp
29-Jan-90 13:24:23, Edit by Ram.
Fixed LEAF-VALUE to use FDEFINITION rather than SYMBOL-FUNCTION when the name
isn't a symbol.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
29-Jan-90 10:46:23, Edit by Ram.
Changed COMPILE-FIX-FUNCTION-NAME to substitute for old uses of the name so
that recursive calls get converted.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
29-Jan-90 10:13:18, Edit by Ram.
But for the want of a single character... So that's why no functions were
being inline expanded! In %DEFUN the ir1 translator, I was looking at the
INLINEP value for the NAME in the same LET that was eval'ing the name to
unquote it.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/debug-dump.lisp
27-Jan-90 18:05:15, Edit by Ram.
Made DEBUG-SOURCE-FOR-INFO handle the incremental compilation cases.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
27-Jan-90 17:46:09, Edit by Ram.
Wrote COMPILE and UNCOMPILE.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/eval.lisp
27-Jan-90 17:07:17, Edit by Ram.
Added the interfaces INTERPRETED-FUNCTION-LAMBDA-EXPRESSION and
INTERPRETED-FUNCTION-CLOSURE. These use the new FIND-IF-IN-CLOSURE operation
pick apart the closure that is an interpreted function.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
26-Jan-90 16:35:51, Edit by Ram.
Moved a bunch of stuff from COMPILE-FILE to SUB-COMPILE-FILE. Wrote
MAKE-LISP-SOURCE-INFO and MAKE-STREAM-SOURCE-INFO. Wrote
COMPILE-FROM-STREAM, and added appropriate uses of the in-core compilation
interface to various functions.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/globaldb.lisp
26-Jan-90 16:09:30, Edit by Ram.
Made the CACHE-NAME slot be duplicated in both kinds of environment rather
than inherited from INFO-ENV so that the inline type checks for the slot
access will win, allowing bootstrapping to work.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/eval-comp.lisp
26-Jan-90 13:12:09, Edit by Ram.
Changed COMPILE-FOR-EVAL to call the new MAKE-LISP-SOURCE-INFO, rather than
rolling its own.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/globaldb.lisp
26-Jan-90 11:59:58, Edit by Ram.
Added code to cache the last name looked up, since we commonly consecutively
look up several types of info for the same name. [Maybe even some types more
than once!]
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
26-Jan-90 09:30:59, Edit by Ram.
Fixed PROCESS-TYPE-PROCLAMATION to not try to call TYPES-INTERSECT on
function types so that we don't flame out. This was probably what I was
really trying to fix in the last change to PROCESS-TYPE-DECLARATION. Really
both were broken.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/srctran.lisp
25-Jan-90 10:58:43, Edit by Ram.
Added transform for ARRAY-DIMENSION that converts to LENGTH when possible.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/typetran.lisp
25-Jan-90 10:46:00, Edit by Ram.
Moved array typep code here from vm-type-tran, since it turned out not to be
VM dependent after all.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/typetran.lisp
23-Jan-90 15:31:32, Edit by Ram.
Transformed array type tests to %ARRAY-TYPEP so that clever
implementation-dependent things can be done.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
23-Jan-90 18:45:14, Edit by Ram.
Fixed up some messed up backquote stuff in DO-MACROLET-STUFF where it was
trying to coerce the lambda to a function.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/envanal.lisp
23-Jan-90 13:06:41, Edit by Ram.
Don't annotate as TAIL-P nodes whose DERIVED-TYPE is NIL, so that we don't
tail-call functions such as ERROR.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
23-Jan-90 12:44:28, Edit by Ram.
Fixed %DEFUN translator to record an inline expansion when the INLINEP value
is :MAYBE-INLINE as well as :INLINE.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1util.lisp
23-Jan-90 08:49:50, Edit by Ram.
Changed PUSH-IN and DELETEF-IN to only call FOO-GET-SETF-METHOD when
CLC::*IN-THE-COMPILER* is true, so that we can still use these macros in the
old compiler.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/seqtran.lisp
22-Jan-90 16:11:28, Edit by Ram.
Added a transform for MEMBER where the list is a constant argument (primarily
to help MEMBER type tests.)
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/eval.lisp
22-Jan-90 15:20:27, Edit by Ram.
Replaced all uses of COMBINATION- accessors with BASIC-COMBINATION- accessors
so that MV combinations will work.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/eval.lisp
22-Jan-90 15:08:07, Edit by Ram.
Put a couple of macros in EVAL-WHEN (COMPILE LOAD EVAL) so that they are
avaliable to SETF in the bootstrap environment. Also, changed %SP-[UN]BIND
to the appropriate %PRIMITIVE calls.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/fndb.lisp
20-Jan-90 20:21:34, Edit by Ram.
Fixed up FBOUNDP & stuff to correspond to the FUNCTION-NAME cleanup. Now
FBOUNDP can take a list as well as a symbol.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
20-Jan-90 09:56:43, Edit by Ram.
In #+NEW-COMPILER, made DO-MACROLET-STUFF coerce the lambda expression to a
function.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/eval-comp.lisp
20-Jan-90 09:52:20, Edit by Ram.
Added bind of *FENV* to () in COMPILE-FOR-EVAL.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
20-Jan-90 09:50:59, Edit by Ram.
And made IR1-TOP-LEVEL *not* bind *FENV* to () so that top-level MACROLETs
will be recognized...
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
20-Jan-90 09:47:19, Edit by Ram.
Added binding of *FENV* to () in SUB-COMPILE-FILE so that MACROLET processing
won't flame out.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/macros.lisp
19-Jan-90 22:25:15, Edit by Ram.
Made WITH-IR1-ENVIRONMENT bind a bunch more variables. *fenv*, etc. Wrote
WITH-IR1-NAMESPACE, which allocates the gloabal namespace hashtables.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/eval-comp.lisp
19-Jan-90 22:35:44, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
19-Jan-90 22:34:20, Edit by Ram.
Flushed IR1-TOP-LEVEL-FOR-EVAL and changed IR1-TOP-LEVEL to take a FOR-VALUE
flag so that it can do the same thing. Added use of WITH-IR1-NAMESPACE.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
19-Jan-90 21:43:20, Edit by Ram.
Made SUB-COMPILE-FILE bind *CURRENT-COOKIE* so that people can randomly call
(POLICY NIL ...) to get at the current policy, and will never see any
leftover local policy from a dynamically enclosing IR1 conversion.
### Maybe this should really be bound somewhere else, like COMPILE-COMPONENT.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1util.lisp
19-Jan-90 22:00:35, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/node.lisp
19-Jan-90 22:01:47, Edit by Ram.
Added a keyword constructor for CBLOCK, and changed all MAKE-BLOCK calls
outside of IR1 conversion to use this new constructor, specifying all the
values that would otherwise be defaulted from specials. This is necessary to
make stuff properly reentrant.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
19-Jan-90 17:26:17, Edit by Ram.
In FIND-FREE-VARIABLE, flushed the assertion that non-constant variables
never have constant values. This isn't really right, but it is better.
### Really, the implementation of "constant but value unknown" variables
should be either flushed or redone.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/eval-comp.lisp
19-Jan-90 15:31:33, Edit by Ram.
New file from Chiles.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/eval.lisp
19-Jan-90 15:30:03, Edit by Ram.
New file from chiles. Changed MY-EVAL to INTERNAL-EVAL and made it frob
*ALREADY-EVALED-THIS*.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
19-Jan-90 14:53:28, Edit by Ram.
Made IR1 conversion reentrant by having IR1-TOP-LEVEL bind all of the state
variables. Removed DEFVAR initial values for variables that should never be
referenced outside of IR1 conversion. Rather than always making four new
hashtables every time, I kept around the global values, allowing them to be
used on the outermost call.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
19-Jan-90 11:06:50, Edit by Ram.
Changed PROPAGATE-TO-REFS to do nothing when the variable type is a function
type so that we don't lose specific function type information, and also so
that TYPE-INTERSECTION doesn't gag.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
19-Jan-90 11:24:07, Edit by Ram.
Changed PROCESS-TYPE-DECLARATION to quietly set the var type when either the
old or new type is a function type, rather than losing trying to do
TYPE-INTERSECTION.
### Someday when we have a incompatible-redefinition detection capability, we
might want to hook it in here.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
18-Jan-90 16:45:20, Edit by Ram.
In %DEFMACRO IR1 convert, when #+NEW-COMPILER, coerce the expander to a
function before sticking it in the MACRO-FUNCTION.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
18-Jan-90 14:11:44, Edit by Ram.
Changed %DEFUN translator to dump an inline expanion when appropriate.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/fndb.lisp
18-Jan-90 12:33:17, Edit by Ram.
Added %STANDARD-CHAR-P and %STRING-CHAR-P to the imports list.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/globaldb.lisp
18-Jan-90 12:24:34, Edit by Ram.
In #+NEW-COMPILER, added info type defaults that get information from the
environment. This only affected functions and constant values, since
everything else is already stored in the global database.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
18-Jan-90 11:51:45, Edit by Ram.
In COMPILE-FILE, fixed FROB to always pathnamify the thing so that
OPEN-FASL-FILE won't choke. Also, this way any syntax error always happens
in COMPILE-FILE.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/life.lisp
18-Jan-90 10:44:11, Edit by Ram.
And also in NOTE-CONFLICTS, fixed the declaration for Live-List to be
(OR TN NULL) rather than TN.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/life.lisp
18-Jan-90 10:39:41, Edit by Ram.
In NOTE-CONFLICTS, fixed the type for Live-Bits to be LOCAL-TN-BIT-VECTOR,
not SC-BIT-VECTOR.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir2tran.lisp
17-Jan-90 20:47:37, Edit by Ram.
Fixed IR2-CONVERT-NORMAL-LOCAL-CALL to set up the argument pointer. It
seems this was only happening in tail calls, so stack arguments did not in
general work in local calls.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ltn.lisp
17-Jan-90 16:20:28, Edit by Ram.
Changed FIND-TEMPLATE to guard the unsafe policy "trusting" result test by a
check for any non-null value of TYPE-CHECK, rather than just T or :ERROR.
This since the value might have also been :NO-CHECK, this was usually
preventing us from believing the assertion.
This was resulting in the rather baffling efficiency note that output type
assertions can't be trusted in a safe policy, when the policy wasn't safe...
I added an assertion that the policy really is safe when we emit that note.
Although it should always be the case, lossage in either VALID-FUNCTION-USE
or template selection could cause us to end up in that branch.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/globaldb.lisp
16-Jan-90 21:25:42, Edit by Ram.
Renamed the types ENTRY-INFO and ENTRIES-INDEX to be COMPACT-INFO-ENTRY and
COMPACT-INFO-ENTRIES-INDEX. We already had a structure called ENTRY-INFO.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/proclaim.lisp
16-Jan-90 11:23:51, Edit by Ram.
Set the symbol-function of PROCLAIM to the definition of %PROCLAIM.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
16-Jan-90 11:15:56, Edit by Ram.
Fixed DEFMACRO ir1 convert to unquote the original arglist before setting the
FUNCTIONAL-ARG-DOCUMENTATION.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/codegen.lisp
15-Jan-90 13:04:59, Edit by Ram.
Oops... I seem to have broken codegen when I changed to it give each block a
label, sometimes emitting a label more than once.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1util.lisp
13-Jan-90 13:09:05, Edit by Ram.
Changed DELETEF-IN and PUSH-IN to use FOO-GET-SETF-METHOD rather than
GET-SETF-METHOD so that they will expand correctly in the bootstrapping
environment.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
13-Jan-90 12:27:12, Edit by Ram.
Fixed a CDR circularity detection in FIND-SOURCE-PATHS a bit.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/globaldb.lisp
13-Jan-90 11:49:48, Edit by Ram.
In addition to initializing *INFO-CLASSES* in GLOBALDB-INIT for benefit of
bootstrapping, we must also init *TYPE-COUNTER* and *TYPE-NUMBERS*.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/globaldb.lisp
12-Jan-90 16:15:25, Edit by Ram.
Changed to use a special FIND-TYPE-INFO function instead of FIND, since the
slot accessor TYPE-INFO-NAME isn't avaliable for use as a funarg before
top-level forms run.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/globaldb.lisp
11-Jan-90 11:14:44, Edit by Ram.
I'm sooo embarrassed... I got the rehashing algorithm wrong in compact
environments. The second hash could be 0, resulting in infinite looping.
[b.t.w., this is a new largely rewritten version of globaldb that uses
special hashtables instead of standard hashtables. There are two kinds of
environments: volatile and compact. Volatile environments can be modified,
but are not especially compact (comparable to the old hashtable
implementation, but faster.) Compact environments are not modifiable, but
reduce memory usage by at least half.]
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
10-Jan-90 12:04:33, Edit by Ram.
Rather than asserting that (INFO FUNCTION WHERE-FROM <name>) is :ASSUMED
whenever the LEAF-WHERE-FROM is assumed, we just quietly skip the unknown
function warning code when the name no longer names an assumed function.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
10-Jan-90 11:27:03, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
10-Jan-90 11:24:07, Edit by Ram.
Added special-case top-level form processing of EVAL-WHEN, PROGN and MACROLET
so that we don't get huge compilations when these forms enclose lots of code
at top-level. To do this, I split off the environment manipulation code in
EVAL-WHEN and MACROLET.
### Probably should expand macros to see if they turn into a magic form
### before just compiling the thing.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir2tran.lisp
09-Jan-90 13:23:41, Edit by Ram.
Wrote a version of PROGV. This IR1 translator is in IR2tran because it goes
directly from syntax to shallow-binding primitives.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
08-Jan-90 14:39:46, Edit by Ram.
Made FIND-SOURCE-PATHS hack circular source code. CAR circularities are
detected by noticing that the cons is already in the source paths hashtable.
CDR circularities are detected using the two-phase trailing pointer hack.
This support is necessary as long as circular constants are allowed (which is
strongly implied by the presence of the #=/## read syntax.) Of course if
there is circular evaluated code, bad things will still happen...
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
08-Jan-90 13:36:03, Edit by Ram.
Made PRINT-SUMMARY print information about compilation units that were
aborted, and inhibited printing of unknown function warnings when the warning
compilation unit is unwound.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
08-Jan-90 10:58:02, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
08-Jan-90 10:49:04, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/node.lisp
08-Jan-90 10:28:23, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1final.lisp
08-Jan-90 10:40:20, Edit by Ram.
Changed *UNKNOWN-FUNCTIONS* a bit. Now it is a list of UNKNOWN-FUNCTION
structures. This was done primarily to allow the number of warnings to be
limited in IR1-CONVERT-OK-COMBINATION-FER-SHER rather than in PRINT-SUMMARY.
It turns out that recording hundreds of error locations for tents of
functions can suck down a large amount of memory.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
05-Jan-90 16:24:40, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
05-Jan-90 15:58:34, Edit by Ram.
Changed *UNKNOWN-FUNCTIONS* to be an alist with one entry for each name, with
the value being a list of all the error contexts for the calls. Made
PRINT-SUMMARY print the undefined function warnings sorted by name, limiting
the number of warnings per function to *UNKNOWN-FUNCTION-WARNING-LIMIT*.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
05-Jan-90 15:51:31, Edit by Ram.
Changed PRINT-SUMMARY to print a warning for each unknown function.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
05-Jan-90 15:46:02, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1final.lisp
05-Jan-90 15:45:49, Edit by Ram.
Moved detection of unknown function calls to
IR1-CONVERT-OK-COMBINATION-FER-SHER so that we can conveniently note the
error context each time around. *UNKNOWN-FUNCTIONS* is now a list of conses
(Name . Compiler-Error-Context), with entries for each call to an unknown
function.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1util.lisp
05-Jan-90 15:22:04, Edit by Ram.
Split off error context determination from error printing by introducing the
COMPILER-ERROR-CONTEXT structure. The current error context can now be saved
for future use by calling FIND-ERROR-CONTEXT.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/debug-dump.lisp
04-Jan-90 10:56:42, Edit by Ram.
New file.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
04-Jan-90 10:39:31, Edit by Ram.
Put in hooks for dumping debug info.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/entry.lisp
03-Jan-90 15:04:07, Edit by Ram.
Added code to dump the arg documentation. For now, we do pretty much what
the old compiler did, i.e. printing it to a string.
### Eventually, we may want to put in code to flush package qualifiers on the
variable names and omit complex default forms.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/node.lisp
03-Jan-90 14:44:54, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
03-Jan-90 14:50:15, Edit by Ram.
Added FUNCTIONAL-ARG-DOCUMENTATION slot and made IR1 conversion set it.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/node.lisp
03-Jan-90 14:34:44, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
03-Jan-90 14:34:27, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/debug.lisp
03-Jan-90 14:40:06, Edit by Ram.
Added LAMBDA-OPTIONAL-DISPATCH and made IR1 conversion set it in :OPTIONAL
lambdas. Made consistency checker allow this.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1util.lisp
03-Jan-90 14:07:30, Edit by Ram.
In DELETE-OPTIONAL-DISPATCH, don't clear the ENTRY-FUNCTION in the :OPTIONAL
lambdas. This info is now kept in the LAMBDA-OPTIONAL-DISPATCH slot, and is
not cleared when the lambda stops being an entry point.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/dfo.lisp
03-Jan-90 10:35:50, Edit by Ram.
But we still want to compute the component name in such components...
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/dfo.lisp
03-Jan-90 09:27:51, Edit by Ram.
Changed FIND-INITIAL-DFO to move all components containing a top-level lambda
to the end of the compilation order, even if there are XEPs. This does a
better job of ensuring that environment analysis is done before we compile
the top-level component which does cross-component references.
### This probably still loses in some pathological case.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
02-Jan-90 17:01:46, Edit by Ram.
Fixed CLEAR-IR2-INFO to check whether there is a tail set before attempting
to clear its INFO.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir2tran.lisp
02-Jan-90 14:51:46, Edit by Ram.
Changed IR2-CONVERT-CLOSURE to not use the IR2-ENVIRONMENT-ENVIRONMENT, since
this is now blown away after the component is compiled. Instead we use the
ENVIRONMENT-CLOSURE, which is just as good. Actually, this should only
happen with references in XEPs, since that is the only kind of function that
can reference functions across component boundaries.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
17-Dec-89 15:30:10, Edit by Ram.
Wrote CLEAR-IR2-INFO and made COMPILE-TOP-LEVEL call it after it was done
with the IR2 for each component. This should allow the IR2 data structures
to be reclaimed after each component is compiled, even in a multi-component
compilation.
### Eventually it should be possible for the IR1 to be reclaimed after the
component is compiled, but there currently cross-component links that inhibit
this. It would also cause problems with IR1 consistency checking, since we
currently need to check all components together.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
15-Dec-89 13:33:44, Edit by Ram.
In IR1-CONVERT-VARIABLE, when we find a CT-A-VAL, we convert an ALIEN-VALUE
form rather than referencing the CT-A-VAL as a leaf.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1final.lisp
13-Dec-89 13:38:51, Edit by Ram.
In NOTE-FAILED-OPTIMIZATION, also inhibit any attempt to give a note if the
combination is no longer a known call.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/gtn.lisp
12-Dec-89 12:25:57, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir2tran.lisp
12-Dec-89 12:36:38, Edit by Ram.
To avoid having to fix this right right now, changed all passing locations to
be *ANY-PRIMITIVE-TYPE* and added code to do necessary coercions to/from the
actual variable representation.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/type.lisp
12-Dec-89 10:21:15, Edit by Ram.
Fixed a bunch of declarations that were calling things TYPEs instead of
CTYPEs.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
11-Dec-89 10:11:31, Edit by Ram.
Changed default fasl file extension from "fasl" to "nfasl", at least for now.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/fndb.lisp
11-Dec-89 08:15:47, Edit by Ram.
Changed most uses of the FUNCTION type to CALLABLE, now that FUNCTION doesn't
encompass SYMBOL but we can still call them. Also fixed some lossage where
someone believed that the SUBSTITUTE/NSUBSTITUTE family of functions had the
same arguments as the DELETE/REMOVE family.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/srctran.lisp
10-Dec-89 20:33:05, Edit by Ram.
Oops... (fifth x) /==> (nth 5 x), is really (nth 4 x). So that's why
PACKAGE-INIT was losing...
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/macros.lisp
10-Dec-89 09:23:47, Edit by Ram.
Fixed DO-NODES-BACKWARDS to work when the current node is deleted now that
UNLINK-NODE blasts the PREV. Also fixed two bugs in this macro that seem not
to have affected the sole use in FLUSH-DEAD-CODE. One was that it randomly
referenced the variable CONT in one place, rather than commaing in the
appropriate argument. The other was that it did an extra iteration binding
CONT to the block start and NODE to whatever its USE was (often NIL.)
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1util.lisp
09-Dec-89 13:31:24, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1final.lisp
09-Dec-89 13:30:52, Edit by Ram.
Wrote NODE-DELETED and made NOTE-FAILED-OPTIMIZATION call it so that we won't
gag trying to look at deleted code. This also prevents bogus efficiency
notes about code that was actually optimized away.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1util.lisp
09-Dec-89 13:22:39, Edit by Ram.
Made UNLINK-NODE set the NODE-PREV of the deleted node to NIL so that we can
recognize deleted nodes. Also, fixed the degenerate exit branch to add a use
by EXIT rather than NODE.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/checkgen.lisp
08-Dec-89 11:28:54, Edit by Ram.
Changed CONVERT-TYPE-CHECK to call LOCAL-CALL-ANALYZE now that this is not
being done in COMPILE-COMPONENT.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
08-Dec-89 11:24:13, Edit by Ram.
Fixed PROPAGATE-FUNCTION-CHANGE to call MAYBE-LET-CONVERT in addition to
COMVERT-CALL-IF-POSSIBLE so that IR1 optimize will let convert calls that it
discovers can be local.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/vop.lisp
08-Dec-89 10:58:23, Edit by Ram.
Looks like when I made OLD-CONT and RETURN-PC environment TNs (and requiring
the IR2-ENVIRONMENT-SLOTS to be initialized after the environment was
created), I modified the wrong slots to allow NIL. Only detected now because
I was running with safe defstruct accessors.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/debug.lisp
08-Dec-89 09:58:33, Edit by Ram.
IR1 invariants now a bit different: :DELETED continuations can only be
received by blocks with DELETE-P set, and blocks with DELETE-P set can have
no successors.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/locall.lisp
08-Dec-89 09:51:24, Edit by Ram.
Don't attempt to let-convert when the REF is in a block with DELETE-P set
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
08-Dec-89 09:50:13, Edit by Ram.
Don't attempt to do IR1 optimizations when the block has DELETE-P set, just
delete it instead.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1util.lisp
08-Dec-89 09:46:20, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/node.lisp
08-Dec-89 09:51:26, Edit by Ram.
Added BLOCK-DELETE-P and made DELETE-CONTINUATION set it in the DEST block
and its predecessors. Changed most uses of DELETE-CONTINUATION to assert
that there isn't a DEST.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
07-Dec-89 22:08:35, Edit by Ram.
In IR1-OPTIMIZE-IF, set COMPONENT-REANALYZE before UNLINK-NODE so that there
is still a component in the block.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
07-Dec-89 21:17:43, Edit by Ram.
In IR1-CONVERT-OK-COMBINATION-FER-SHER, set the CONTINUATION-%DERIVED-TYPE
and CONTINUATION-TYPE-CHECK of the fun cont in addition to setting
CONTINUATION-REOPTIMIZE.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/srctran.lisp
07-Dec-89 21:08:09, Edit by Ram.
Moved definitions of the arithmetic & logic functions %LDB et al. here from
eval.lisp, since we need them in the bootstrapping environment.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
07-Dec-89 19:17:48, Edit by Ram.
Changed USE-CONTINUATION not to set the CONTINUATION-%DERIVED-TYPE, as this
inhibits CONTINUATION-DERIVED-TYPE from seeing whether the assertion needs to
be intersected, etc.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
07-Dec-89 18:55:32, Edit by Ram.
Changed IR1-OPTIMIZE to more explicitly ignore a block when it is directly
deleted due to :DELETED kind or no predecessors. The old code should have
realized not to optimize a deleted block, but in a rather obscure way.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
07-Dec-89 13:25:38, Edit by Ram.
Changed IR1-OPTIMIZE-UNTIL-DONE to count the number of iterations that didn't
introduce any new code (set COMPONENT-REANALYZE) rather than just the total
number of iterations. Reduced MAX-OPTIMIZE-ITERATIONS to 3, since we now
don't have to worry so much about the results of transforms being adequately
optimized. Changed IR1-PHASES to call GENERATE-TYPE-CHECKS where it was
calling CHECK-TYPES. Flushed old call to GENERATE-TYPE-CHECKS in
COMPILE-COMPONENT.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
07-Dec-89 13:24:20, Edit by Ram.
Changed IR1-OPTIMIZE-IF to set COMPONENT-REANALYZE if it does anything.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/checkgen.lisp
07-Dec-89 12:56:18, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
07-Dec-89 12:28:19, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ltn.lisp
07-Dec-89 13:01:31, Edit by Ram.
Changed type checking around a bunch, fixing some bugs and inefficiencies.
The old CHECK-TYPES phase is gone. The determination of
CONTINUATION-TYPE-CHECK is now done on the fly by CONTINUATION-DERIVED-TYPE.
The compile-time type error detection has been moved into type check
generation. Type check generation is now driven by BLOCK-TYPE-CHECK, so it
doesn't have to look at everything on repeat iterations. Made
ASSERT-CONTINUATION-TYPE set BLOCK-TYPE-CHECK when there is a new assertion.
There are two new values of TYPE-CHECK: :ERROR and :NO-CHECK. These are used
by check generation to comminicate with itself and the back end. :ERROR
indicates a compile-time type error, which always causes a type check to be
emitted, regardless of policy. :NO-CHECK indicates that a check is needed,
but expected not to be generated due to policy or a safe implementation.
This inhibits LTN from choosing an unsafe implementation based on results of
new type information from the post-type-check optimization pass.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/type.lisp
07-Dec-89 10:01:23, Edit by Ram.
Yep, that combined with a bug in how I hooked CTYPEP into TYPES-INTERSECT.
That function should return (VALUES T NIL) in the uncertain case, not
(VALUES NIL NIL).
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/type.lisp
07-Dec-89 09:54:44, Edit by Ram.
Fixed CTYPEP to return the second value T when it calls TYPEP. Is this what
is causing all hell to break loose? It shouldn't, since it should just
result in increased type uncertainty.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/proclaim.lisp
06-Dec-89 21:24:00, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/macros.lisp
06-Dec-89 21:26:24, Edit by Ram.
Added support for the DEBUG-INFO optimization quality (DEBUG for short).
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/type.lisp
06-Dec-89 11:25:36, Edit by Ram.
Made CTYPEP return a second value indicating whether it was able to determine
the relationship. Made all callers look at the second value and propagate
the uncertainty.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/proclaim.lisp
06-Dec-89 11:11:06, Edit by Ram.
Moved the actual establishing of the type definition to %%COMPILER-DEFSTRUCT
from %DEFSTRUCT. Part of this was actually duplicated both places. Now it
is only here. Hopefully this won't cause any initialization problems. Also,
made structure redefinition preserve the INCLUDED-BY list so that existing
structures won't suddenly be broken when the supertype is compiled.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
06-Dec-89 10:43:21, Edit by Ram.
Changed PROCESS-TYPE-PROCLAMATION to call SINGLE-VALUE-TYPE so that we don't
try to call TYPE-INTERSECTION on a hairy function type (or make the type of a
variable, for all that matter.)
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
05-Dec-89 13:42:19, Edit by Ram.
Made NCOMPILE-FILE frob *DEFAULT-COOKIE* so as to make optimize proclamations
affect only the file that they appear in (and any compilations dynamically
enclosed in that file.)
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
04-Dec-89 09:38:18, Edit by Ram.
Flushed :SEMI-INLINE and :ALWAYS-INLINE values for INLINEP. Added
:MAYBE-INLINE, which is interpreted in a more advisory manner. Changed
IR1-CONVERT-GLOBAL-INLINE so that it does something like the old
:SEMI-INLINE case for all inline calls so that recursive functions can be
INLINE.
Fixed this code so that you really can have recursive inline functions. This
was supposedly supported for :SEMI-INLINE functions, but did not in fact
work. We do a hack similar to LABELS: we enter a dummy FUNCTIONAL in the
*FREE-FUNCTIONS* to prevent repeated attempts to convert the expansion.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/srctran.lisp
03-Dec-89 15:03:48, Edit by Ram.
Defined SAME-LEAF-REF-P and made transforms for EQ, EQL, < and > use it to
see if both args are references to the same variable or functional or
whatever. Also use the EQ transform for CHAR= and EQUAL.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
02-Dec-89 09:26:12, Edit by Ram.
Made MAX-OPTIMIZE-ITERATIONS be a ceiling on the number of times that
IR1-OPTIMIZE-UNTIL-DONE will iterate. If exceeded, we clear a bunch of
REOPTIMIZE flags and punt. This was made necessary by the addition of type
inference on set variables, which may take arbitrarily long to converge.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
01-Dec-89 14:05:10, Edit by Ram.
Added code to compute the type of set LET variables as the union of the types
of the initial value and the set values.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/checkgen.lisp
01-Dec-89 12:11:57, Edit by Ram.
Added code to check to see if it is cheaper to check against the difference
between the proven type and the assertion. If so, emit a check against the
negation of this difference.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/srctran.lisp
01-Dec-89 09:04:37, Edit by Ram.
Wrote IR1 transforms for < and > that attempt to statically determine the
relationship using type information.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/type.lisp
01-Dec-89 10:06:56, Edit by Ram.
Wrote TYPE-DIFFERENCE.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir2tran.lisp
30-Nov-89 12:04:24, Edit by Ram.
Marked the error signalling funny functions as not returning by using
TRULY-THE NIL. Formerly this was subverting type inference, since the
primitive was considered to return *.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1util.lisp
30-Nov-89 11:52:27, Edit by Ram.
Made SUBSTITUTE-CONTINUATION-USES do a REOPTIMIZE-CONTINUATION on the New
continuation so that we realize we need to recompute its type, etc. This was
seriously crippling type inference. It probably came unglued in let
conversion when we changed over to using the general substitute function.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
30-Nov-89 11:31:00, Edit by Ram.
Changed FIND-FREE-VARIABLE to find the type of constants having values with
CTYPE-OF, rather than using INFO VARIABLE TYPE. This way we find a good type
for all constants, without interacting with the vagaries of environment query.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
30-Nov-89 10:50:37, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/locall.lisp
29-Nov-89 13:14:40, Edit by Ram.
Moved merging of tail sets from CONVERT-CALL to IR1-OPTIMIZE-RETURN. The old
code wasn't working because IR1 optimizations (such as deleting local EXITs)
could cause a local call to be tail-recursive yet the function would never
get added to the tail set because it had already been converted.
Inaccurate computation of the tail sets resulted in bad code problems, since
functions were returning in ways not expected by their callers.
### This code still isn't quite right, since IR1 optimization is supposed to
be optional. One possible fix would be to do tail annotation in IR1
optimization, but then you would have to run IR1 optimize to get proper tail
recursion. This might not be much of an issue, since we will probably always
want to do at least some IR1 optimization.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/srctran.lisp
27-Nov-89 12:35:17, Edit by Ram.
Fixed a braino in mask computation in the %DPB, %MASK-FIELD and
%DEPOSIT-FIELD transforms.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/fndb.lisp
26-Nov-89 15:28:27, Edit by Ram.
Fixed MACRO-FUNCTION def to specify a result type of (OR FUNCTION NULL),
rather than just FUNCTION. This was disabling the use of this function as a
predicate to test whether a symbol names a macro. Also fixed the argument
order to REPLACE.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/srctran.lisp
25-Nov-89 22:44:32, Edit by Ram.
Fixed RPLACx transforms to return the right value.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/type.lisp
22-Nov-89 19:27:58, Edit by Ram.
Fixed the definition of STRING-CHAR so that it wouldn't seem to be a subtype
of STANDARD-CHAR.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/seqtran.lisp
22-Nov-89 14:31:40, Edit by Ram.
In MAPPER-TRANSFORM, I seem to have inverted the sense of the exit test when
converting from CONSP to ENDP.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
21-Nov-89 16:51:31, Edit by Ram.
Moved GTN before control analysis so that the IR2-Environment is allocated by
the time that control analysis runs.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/control.lisp
21-Nov-89 16:38:24, Edit by Ram.
Moved to ADD-TO-EMIT-ORDER the adding of IR2-Blocks to the
IR2-ENVIRONMENT-BLOCKS. This way, overflow blocks created by conflict
analysis will appear in this list. TNs only live in overflow blocks were
being considered not to conflict with :ENVIRONMENT TNs.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/stack.lisp
21-Nov-89 16:34:05, Edit by Ram.
Made DISCARD-UNUSED-VALUES make an IR2 block for the cleanup block and call
ADD-TO-EMIT-ORDER on it. I think that if this code ever ran, it would have
died. This code was tested at one point, so it was probably broken by the
move of control analysis to before all the other IR2 pre-passes.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/tn.lisp
21-Nov-89 14:43:29, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/gtn.lisp
21-Nov-89 14:51:36, Edit by Ram.
Wrote MAKE-WIRED-ENVIRONMENT-TN so that the save TNs for old-cont and
return-pc could be made environment-live. Made ASSIGN-IR2-ENVIRONMENT pass
the environment to MAKE-xxx-SAVE-TN so that they could make environment-live
TNs.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/assembler.lisp
20-Nov-89 08:58:31, Edit by Ram.
In NEW-LOGIOR-ARGUMENT, added code to check that the SB for :REGISTER
operands is really REGISTERS.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir2tran.lisp
20-Nov-89 08:29:42, Edit by Ram.
In EMIT-MOVE, added code to emit a type error when moving between
incompatible TNs. It seems that this can happen with functions (especially
funny functions) that don't return. This seems like a good fix until we can
figure out how to hack the flow graph when there is a non-returning function.
[Incompatible moves may also happen if there is a compile-time type error and
the check is deleted due to unsafe policy, etc.]
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/fndb.lisp
17-Nov-89 15:06:51, Edit by Ram.
Changed %PUT's IR1 attributes from (FLUSHABLE) to (UNSAFE).
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/srctran.lisp
17-Nov-89 10:12:48, Edit by Ram.
Fixed some missing commas in SOURCE-TRANSFORM-TRANSITIVE that only affected
LOGEQV. Good thing nobody uses it...
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/vmdef.lisp
16-Nov-89 09:42:37, Edit by Ram.
Fixed previous fix to work when there is a more result.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/vmdef.lisp
15-Nov-89 13:57:36, Edit by Ram.
In TEMPLATE-TYPE-SPECIFIER, if we use a values type for the result, make it
&REST T to represent the vagueness of values count matching.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/srctran.lisp
15-Nov-89 09:57:48, Edit by Ram.
Added missing source transform for LOGEQV, which was missed in the previous
pass. This required changing SOURCE-TRANSFORM-TRANSTIVE, since that was
already a source transform for LOGEQV. It's a good thing I left in *both*
checks for broken interpreter stubs.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/srctran.lisp
14-Nov-89 10:41:51, Edit by Ram.
Added source transforms for zillions of trivial logic operations that were
missing.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
14-Nov-89 10:43:24, Edit by Ram.
In %DEFUN, added the presence of an IR2-CONVERT methods to the list of things
that inhibits substitution of the actual definition for existing references.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/srctran.lisp
13-Nov-89 12:21:52, Edit by Ram.
Added source transforms for RPLACA, RPLACD.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
13-Nov-89 12:17:32, Edit by Ram.
Moved the test of NODE-REOPTIMIZE out of FIND-RESULT-TYPE and into
IR1-OPTIMIZE-RETURN. This fixes a bug that was introduced when the clearing
of NODE-REOPTIMIZE was moved to the start of the loop in IR1-OPTIMIZE-BLOCK.
We were never recomputing the RETURN-RESULT-TYPE, since REOPTIMIZE was never
set when we got to IR1-OPTIMIZE-RETURN. With this fix, the previous change
should detect broken interpreter stubs.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1final.lisp
12-Nov-89 13:05:49, Edit by Ram.
Made CHECK-FREE-FUNCTION give a note when it sees a function that doesn't
return (return type is NIL.) I thought that this would detect broken
interpreter stubs. It turns out not to, but still seems like a useful
feature.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ltn.lisp
13-Nov-89 11:47:30, Edit by Ram.
Made LTN-ANALYZE-KNOWN-CALL give a warning when we are unable to find a
template for a known call where there call is to the current function. This
should tell result in a warning when we compile an interpreter stub for a
function that the code sources assume is implemented primitively, but the
compiler doesn't recognize.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir2tran.lisp
12-Nov-89 10:54:25, Edit by Ram.
Oops... When doing unsafe global function references, use
FAST-SYMBOL-FUNCTION, not FAST-SYMBOL-VALUE.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/main.lisp
10-Nov-89 13:37:15, Edit by Ram.
Oops... Have to dump package frobbing forms specially for cold load. This
might want to be on a switch someday. Instead of actually compiling them, we
dump them as lists so that Genesis can eval them. The normal top-level form
compilation must be suppressed, since the package system isn't initialized at
the time that top-level forms run.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/dfo.lisp
05-Nov-89 13:45:11, Edit by Ram.
Changed FIND-INITIAL-DFO to return top-level components at the end of the
list so that in a block compilation all the functions will be compiled before
we compile any of the top-level references to them.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/envanal.lisp
01-Nov-89 11:57:58, Edit by Ram.
Changed Find-Non-Local-Exits back to a loop over all the blocks in the
component, rather than trying to find the exits from the Lambda-Entries.
Unfortunately, the latter is not possible, since the exit continuation may
become deleted if it isn't used. A possible way to avoid this search would
be to make the Entry node have a list of all the Exit nodes, rather than the
continuations.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/vop.lisp
31-Oct-89 12:45:20, Edit by Ram.
Allow (SETF xxx) for the Entry-Info-Name, in addition to strings and symbols.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1util.lisp
31-Oct-89 12:53:37, Edit by Ram.
In Find-Source-Context, only take the car of list first args to DEFxxx forms
when the form name is in a special list. This list initially only contains
DEFSTRUCT.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
31-Oct-89 12:23:57, Edit by Ram.
In Convert-More-Entry, made the temporaries for the keyword and value
ignorable so that we don't get "defined but never read" warnings when there
aren't any keywords specified.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
31-Oct-89 12:11:24, Edit by Ram.
Fixed Process-Declarations to correctly deal with pervasive special
declarations. Previously, a warning would be given if the varible was only
locally declared, and not globally known. Also an assertion failure would
have resulted (rather than a Compiler-Error) when a constant was declared
pervasively special.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
31-Oct-89 11:39:54, Edit by Ram.
Changed Reference-Constant so that it doesn't call Reference-Leaf anymore,
and made the source be an explicit argument. Changed Reference-Leaf to just
use the Leaf-Name as source, rather than (sometime incorrectly) inferring the
source for constants.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir2tran.lisp
20-Oct-89 15:56:56, Edit by Ram.
In the :UNKNOWN and :UNUSED cases of CONTINUATION-RESULT-TNS, always return
TNs of the specified result types, rather than sometimes returing T TNs.
This is some sort of compensation for our new belief that VOPS returining
non-T results need not be prepared to accept T TNs. How many other places
does this need to be fixed?
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/stack.lisp
17-Oct-89 12:36:38, Edit by Ram.
In FIND-PUSHED-CONTINUATIONS, fix the check for pushes coming before pops.
You can compare nodes and continuations all day without finding any that are
EQ.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/macros.lisp
17-Oct-89 11:44:40, Edit by Ram.
Flushed the code in DEFTRANSFORM that was creating a THE out of the CONT's
asserted type. This should be unnecessary, and was made incorrect by the
continuation representation change. If the node was the last in a block and
the value wasn't used, then the value would be asserted to be of the NIL
type, resulting in a warning.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1util.lisp
17-Oct-89 10:51:27, Edit by Ram.
Changed Compiler-Mumble to tell whether an error message precedes from
*last-format-string*, rather than *last-source-context*, since the last
message might not have had a source context. Made *compiler-error-output* be
globally bound to a synonym stream for *error-output* so that calls to
Compiler-Error outside of the compiler will more or less work.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/checkgen.lisp
16-Oct-89 15:23:13, Edit by Ram.
In Convert-Type-Check, set the start & end cleanups of the new block to the
*start* cleanup of the Dest's block, and not the end cleanup. Not sure this
is really more correct, but it fixes one case.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/pack.lisp
12-Oct-89 14:05:43, Edit by Ram.
Added a before-GC hook that flushes the per-SB conflict data structure
whenever they aren't being used. This should prevent megabyte-plus conflicts
information from persisting after it is needed, and also reduce the cost of
Init-SB-Vectors, since the vectors will stay smaller.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
11-Oct-89 11:37:16, Edit by Ram.
Made Propagate-Function-Change ignore references that are :Notinline.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1util.lisp
10-Oct-89 23:28:33, Edit by Ram.
In Print-Error-Message, use the *Current-Form* as the source form whenever if
is non-NIL, even if there is a node in *Compiler-Error-Context*. This way,
messages during IR1 conversion of a transform will be more useful.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1util.lisp
10-Oct-89 22:47:56, Edit by Ram.
Now Delete-Optional-Dispatch must be prepared for the main entry to be a let
rather than just being deleted or a normal function, since let conversion is
being triggered here.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/locall.lisp
09-Oct-89 17:56:35, Edit by Ram.
Fixed Convert-Call to change the combination kind before changing the ref
leaf so that the call will appear local at that time. This allows let
conversion to happen when we replace a optional dispatch with one of its EPs.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1util.lisp
09-Oct-89 17:34:42, Edit by Ram.
Fixed Delete-Optional-Dispatch to call Maybe-Let-Convert if we notice that a
former EP lambda has exactly one reference.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
04-Oct-89 19:05:16, Edit by Ram.
In IR1-Optimize-Combination, we must be prepared for the derive-type method
to return NIL. This will happen if the arglist is incompatible with the
call (and if the optimizer explicitly returns NIL.)
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/macros.lisp
04-Oct-89 19:22:17, Edit by Ram.
Check-Transform-Keys and Check-Keywords-Constant were checking the second
(value) part of the key/value pair, so optimizers would never run if any
keywords were supplied.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
04-Oct-89 15:39:27, Edit by Ram.
When I changed Propagate-Local-Call-Args to clear the Continuation-Reoptimize
flags, I forgot that a local call continuation can be NIL (for an unused
argument.)
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
04-Oct-89 11:05:48, Edit by Ram.
Oops... In Propagate-Function-Change, we have to use
Continuation-Derived-Type rather than Continuation-Type now that the latter
changes function types to FUNCTION.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/globaldb.lisp
27-Sep-89 14:24:04, Edit by Ram.
Exported basic interface (but not environment vars, pending some abstract
interface to environment manipulation.) Changed class and type names to be
represented as strings at run time to avoid package lossage. Changed names
to be arbitrary equal objects (to allow setf functions).
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir2tran.lisp
21-Sep-89 10:12:38, Edit by Ram.
Changed OK-Result-TN to indicate need for a coercion if the result is unboxed
and the TN is boxed. This prevents load-TN packing from getting confused due
to there being no intersection between the SC restriction and the types
allowed by the SC. This would happen when the result was restricted to a
non-descriptor SC.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ltn.lisp
21-Sep-89 10:39:04, Edit by Ram.
Changed Restrict-Descriptor-Args to restrict the argument only when a
coercion was required. This allows immediate objects to be passed to
templates in unboxed registers.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1util.lisp
30-Aug-89 14:37:36, Edit by Ram.
Changed Change-Leaf-Ref (and hence Substitute-Leaf) to use Derive-Node-Type
on the Ref with the Leaf-Type so that substituting a variable causes the new
type to be noticed.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
30-Aug-89 14:30:44, Edit by Ram.
Changed IR1-Optimize-Block and all the combination optimization code to clear
optimize flags *before* optimizing rather than after, so that a node will be
reoptimized if necessary.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/vmdef.lisp
29-Aug-89 09:20:18, Edit by Ram.
Made Template-Type-Specifier hack *'s in operand type restrictions.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ltn.lisp
24-Aug-89 13:55:04, Edit by Ram.
In LTN-Analyze-MV-Call, have to annotate the continuations in reverse order,
now that the IR2-Block-Popped isn't built in reverse order.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ltn.lisp
24-Aug-89 13:25:14, Edit by Ram.
In LTN-Analyze, eliminated assertion that the block containing the use of a
unknown-values continuation is not already in the
IR2-Component-Values-Generators. It is possible for a single block to
contain uses of several MV continuations that have their DEST in a different
block.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/dfo.lisp
22-Aug-89 12:12:49, Edit by Ram.
Made Find-Initial-DFO-Aux call Walk-Home-Call-Graph on each block before
walking the successors. Walk-Home-Call-Graph is a new function that looks at
the current block's home lambda's bind block to see if it is in a different
component. We need to do this to ensure that all code in a given environment
ends up in the same component, since any successor might be a non-local exit
(into a different environment.)
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
18-Aug-89 15:46:51, Edit by Ram.
Flushed the (locally (declare (optimize (safety 0))) ...) around the body of
Unwind-Protect's expansion. I think that this was trying to suppress some
type checking of the MV-Bind, but it was also causing unsafe compilation of
the protected form. If we really need this, it must be but back some other
way.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir2tran.lisp
18-Aug-89 15:11:13, Edit by Ram.
Oops... We can't use Label-Offset in the generators for Make-Catch-Block,
&c. Instead, we use a :Label load-time constant. The target argument to the
VOPs is now a normal integer argument, rather than a label in the
codegen-info.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ltn.lisp
18-Aug-89 14:13:51, Edit by Ram.
In LTN-Analyze-Return, don't annotate NLX continuations as :Unused so that
the NLX entry code doesn't have to worry about this case.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
18-Aug-89 13:45:19, Edit by Ram.
In Reoptimize-Continuation, don't do anything if the continuation is deleted.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1util.lisp
17-Aug-89 11:17:13, Edit by Ram.
Oops... In Node-Ends-Block, have to set the Block-Start-Uses, now that it is
always supposed to hold the uses of block starts.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ltn.lisp
10-Aug-89 10:49:01, Edit by Ram.
Changed Find-Template to intersect the Node-Derived-Type with the
Continuation-Asserted-Type rather than using the Continuation-Derived-Type in
the case where we are allowed to use the result type assertion. This works
better when the continuation has multiple uses.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/typetran.lisp
24-Jul-89 14:25:09, Edit by Ram.
Fixed Source-Transform-Union-Typep to check that there really is a MEMBER
type in the union, instead of assuming there is whenever LIST is a subtype.
This was losing on (OR SYMBOL CONS).
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/assembler.lisp
19-Jul-89 14:36:10, Edit by Ram.
Made Init-Assembler nil out the Info slots in all the fixups so that the
fixup freelist doesn't hold onto the entire IR. More storage allocation
lossage has been caused by the explicit freelists in the assembler than
anything else.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/macros.lisp
12-Jul-89 15:34:09, Edit by Ram.
Changed defining macros to stick the actual function object into the
Function-Info &c to be compatible with the new definition of the Function
type.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir2tran.lisp
12-Jul-89 12:57:24, Edit by Ram.
Fixed goof in IR2-Convert-Local-Unknown call, where it was converting the
result TN list to TN-refs twice. For some reason, this was dying with a
highly mysterious error in Reference-TN-List. Perhaps this file was last
compiled with an unsafe policy?
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/life.lisp
11-Jul-89 19:29:05, Edit by Ram.
In Propagate-Live-TNs, when we convert a :Read-Only conflict to :Live, we
null the entry in the local TNs to represent the elimination of local
conflict information.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
11-Jul-89 18:46:17, Edit by Ram.
Changed %Defun to only substitute the functional when it isn't notinline and
isn't known to have any templates or transforms. The latter constraint fixes
big problems with interpreter stubs.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1tran.lisp
05-Jul-89 22:11:10, Edit by Ram.
In Return-From, put back code that made Cont start a block so that Cont will
have a block assigned before IR1-Convert. So that's why that was there.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ltn.lisp
05-Jul-89 18:07:48, Edit by Ram.
In Annotate-Unknown-Values-Continuation, make a safety note when we delete a
check and the policy is safe.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir1opt.lisp
05-Jul-89 17:43:18, Edit by Ram.
In IR1-Optimize-Exit, don't propagate Cont's type to the Value, since this
moves checking of the assertion to the Exit, which is a bad place.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir2tran.lisp
05-Jul-89 15:10:34, Edit by Ram.
In Emit-Return-For-Locs, changed the test for when to use known return
convention from External-Entry-Point-P to *not* External-Entry-Point-P.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ir2tran.lisp
05-Jul-89 14:41:55, Edit by Ram.
Oops... We need a UWP-Entry VOP for Unwind-Protect entries to force random
live TNs onto the stack. It doesn't actually do anything, but specifies the
passing locations as results so that they aren't forced to the stack.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/ltn.lisp
03-Jul-89 16:46:09, Edit by Ram.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/stack.lisp
03-Jul-89 16:39:53, Edit by Ram.
Changed unknown values hackery to ignore non-local exits. We don't record
NLX uses of unknown-values continuations as generators, and we stop
our graph walk when we hit the component root. These changes were
necessitated by the decision to make %NLX-Entry no longer use the values
continuation.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/pack.lisp
03-Jul-89 11:31:36, Edit by Ram.
Fixed one-off error in Pack-Wired-TN's determination of when we have to grow
the SB, and fixed it to handle SC-Element-Size /= 1 while I was at it.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/locall.lisp
29-Jun-89 12:02:16, Edit by Ram.
In Local-Call-Analyze-1, moved the test for the reference being by the
Basic-Combination-Fun to around the entire branch that attempts to convert,
rather than immediately around the call to Convert-Call-If-Possible. Before,
a closure arg to a local function wouldn't get an XEP.
Also, changed Reference-Entry-Point to ignore references to :Cleanup and
:Escape functions.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/envanal.lisp
28-Jun-89 16:57:12, Edit by Ram.
In Emit-Cleanups, if we find there is no cleanup code, then do nothing,
instead of inserting a cleanup block holding NIL. This was causing blocks
with no non-local uses to inhibit tail-recursion.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/checkgen.lisp
28-Jun-89 14:03:45, Edit by Ram.
It finally happened. A paren error that resulted in mysterious lossage. In
this case, the body of the loop in Make-Type-Check-Form was moved out of the
loop, and always executed once. The meant that only one value would ever be
checked or propagated on to the original receiver.
/afs/cs.cmu.edu/project/clisp/new-compiler/compiler/pack.lisp
28-Jun-89 13:20:59, Edit by Ram.
Oops... I introduced a bug in the previously correct argument case of
Load-TN-Conflicts-In-SB. We terminate the loop when we reach the first
reference, not the first argument. This caused conflicts with temporaries
with lives beginning at :Load to be ignored.
/usr1/lisp/compiler/pack.lisp, 23-Jun-89 15:54:32, Edit by Ram.
Fixed logic in Load-TN-Conflicts-In-SB. We weren't recognizing conflicts
with other argument/result TNs that had already been packed. This bug would
only show up with multiple result load TNs. The argument case was actually
correct, but was asymmetrical with the result case, and only worked becase
argument load TNs were packed in evaluation order.
/usr1/lisp/compiler/locall.lisp, 20-Jun-89 14:53:51, Edit by Ram.
In Merge-Tail-Sets, quietly do nothing if the called function has no tail set
(doesn't return), rather than dying.
/usr1/lisp/compiler/globaldb.lisp, 14-Jun-89 10:14:04, Edit by Ram.
Flushed Top-Level-P attribute.
/usr1/lisp/compiler/macros.lisp, 14-Jun-89 10:14:03, Edit by Ram.
Allow a doc string in Def-IR1-Translator (made the FUNCTION documentation).
Removed support for Top-Level-P attribute.
/usr1/lisp/compiler/ir1opt.lisp, 22-May-89 15:30:59, Edit by Ram.
/usr1/lisp/compiler/ir1util.lisp, 22-May-89 15:22:17, Edit by Ram.
Undid last change to Node-Ends-Block and Join-Blocks. This was fucking up
big time, since it messed with the continuation even when it was a block
start.
/usr1/lisp/compiler/locall.lisp, 22-May-89 13:24:48, Edit by Ram.
Changed Local-Call-Analyze to maintain the Component-New-Functions exactly up
to date, only popping a function off exactly as it analyzes it. This way, a
lambda is always referenced either in the Lambdas or New-Functions (except
during a brief window), so we can do consistency checking during local call
analysis.
/usr1/lisp/compiler/ir1util.lisp, 19-May-89 10:05:28, Edit by Ram.
/usr1/lisp/compiler/ir1opt.lisp, 19-May-89 10:05:27, Edit by Ram.
In Flush-Dest and Reoptimize-Continuation, take care not to assume that the
Continuation-Block is an undeleted block. Instead, we pick up the component
to reoptimize from the uses or Dest.
/usr1/lisp/compiler/ir2tran.lisp, 17-May-89 12:48:35, Edit by Ram.
In Move-Results-Coerced and Move-Results-Checked, subtract Nsrc from Ndest,
rather than the other way around.
/usr1/lisp/compiler/control.lisp, 15-May-89 11:53:36, Edit by Ram.
Made Control-Analyze walk XEPs first to eliminate the idiocy of never getting
the drop-through in components with only one EP.
/usr1/lisp/compiler/ir1util.lisp, 13-May-89 15:23:28, Edit by Ram.
And similarly, in Node-Ends-Block, move the last continuation to the new
block when its block is the old block.
/usr1/lisp/compiler/ir1opt.lisp, 13-May-89 15:02:31, Edit by Ram.
In Join-Blocks, move the Cont of the Last to Block1 when it's block is
currently Block2. This way, the continuation isn't left pointing at some
random deleted block.
/usr1/lisp/compiler/ir1util.lisp, 14-Mar-89 10:12:04, Edit by Ram.
Also, in Delete-Block, when we delete a bind, call Delete-Lambda, rather
than trying to roll our own.
/usr1/lisp/compiler/ir1util.lisp, 14-Mar-89 10:07:01, Edit by Ram.
In Delete-Lambda, we must remove a let from its home's lets.
/usr1/lisp/compiler/ir1util.lisp, 14-Mar-89 09:34:54, Edit by Ram.
In Unlink-Node, the assertion that the start and end cleanups are the same
must use Find-Enclosing-Cleanup, rather than just comparing the values
directly.
/usr1/lisp/compiler/ir2tran.lisp, 14-Mar-89 08:26:04, Edit by Ram.
Wrote Flush-Tail-Transfer and made people who do TR stuff use it. This
function deletes the link between the blocks for a TR node and the block
containing the return node. We have to do this so that lifetime analysis
doesn't get confused when there are TNs live at the return node, but some
predecessors of the return don't write the TNs because the return some other
way.
/usr1/lisp/compiler/srctran.lisp, 10-Mar-89 19:11:51, Edit by Ram.
Made the transforms into %typep always pass until we do type predicates for
real.
/usr1/lisp/compiler/assembler.lisp, 10-Mar-89 18:56:45, Edit by Ram.
Fixed Macrolet of Emit-Label in Def-Branch to have a paren in the right
place. As written, it expanded into its argument, and didn't enclose any
code anyway. But I think this would only affect instructions that both were
a branch and had a load-time fixup.
/usr1/lisp/compiler/assembler.lisp, 10-Mar-89 18:47:50, Edit by Ram.
Added code to Def-Branch in the choose function that calls
Undefined-Label-Error when the the label isn't defined. This function uses
the *assembler-nodes* source info and the branch instruction location to
print the source node responsible for generating the bogus branch.
/usr1/lisp/compiler/assembler.lisp, 10-Mar-89 17:59:51, Edit by Ram.
Made Gen-Label initalize the Elsewhere-P slot to :Undecided. Also made
Merge-Code-Vectors ignore labels whose Elsewhere-P is undecided. The theory
is that it should be o.k. to make labels that aren't emitted as long as you
don't reference them. Of course, I will probably find that the losing labels
are referenced. Renamed the Location slot in Label to %Location, and defined
Label-Location to filter out undefined labels.
/usr1/lisp/compiler/ltn.lisp, 10-Mar-89 17:43:39, Edit by Ram.
In LTN-Analyze-Return, we must check for the Return-Info-Count being :Unknown
rather than null when we want to know if a fixed number of values are
returned.
/usr1/lisp/compiler/ir2tran.lisp, 07-Mar-89 18:13:12, Edit by Ram.
In the Values-List IR2 convert method, we must also handle :Unused
continuations, only punting when the continuation is :Fixed. When called
with a TR result continuation, we have to emit the unknown-values return
ourself. Otherwise, there isn't any way to write the Values-List function.
/usr1/lisp/compiler/ir2tran.lisp, 06-Mar-89 21:25:12, Edit by Ram.
Make-Closure takes the number of closure vars and the function-entry, rather
than the other way around.
/usr1/lisp/compiler/ir2tran.lisp, 06-Mar-89 20:48:29, Edit by Ram.
And always pass 1 as the number of symbols to Unbind, rather than 0.
/usr1/lisp/compiler/ir2tran.lisp, 06-Mar-89 20:43:47, Edit by Ram.
Args to the Bind miscop are (Value, Symbol), and not the other way around.
/usr1/lisp/compiler/ir2tran.lisp, 06-Mar-89 19:09:16, Edit by Ram.
In IR2-Convert-IF, we have to negate the sense of the test when using an EQ
NIL check. Made IR2-Convert-Conditional take an additional not-p argument.
/usr1/lisp/compiler/ctype.lisp, 06-Mar-89 17:22:40, Edit by Ram.
In Definition-Type, when we make the Function-Type, include the list of
keyword info that we have built.
/usr1/lisp/compiler/ir2tran.lisp, 02-Mar-89 18:16:40, Edit by Ram.
In Init-XEP-Environment, when we are checking for whether there is a more
arg, look at the entry-function rather than the XEP.
/usr1/lisp/compiler/main.lisp, 01-Mar-89 15:58:32, Edit by Ram.
Made Clear-Stuff clear the Finite-SB-Live-TNs in all SBs. Maybe this will
nuke some garbage.
/usr1/lisp/compiler/pack.lisp, 01-Mar-89 15:50:41, Edit by Ram.
In Grow-SC, fill the Finite-SB-Live-TNs vector with NILs before we lose it so
that if it is statically allocated, it won't hold onto garbage. But this
shouldn't make any difference, since we never use the Live-TNs in unbounded
SBs.
/usr1/lisp/compiler/locall.lisp, 01-Mar-89 01:15:22, Edit by Ram.
In Make-XEP-Lambda, in the lambda case, we now include an ignore declaration
for the nargs var when policy suppresses the argument count check.
/usr1/lisp/compiler/ir1util.lisp, 28-Feb-89 19:39:56, Edit by Ram.
Also clear :Optional kind for the Main-Entry in Delete-Optional-Dispatch.
/usr1/lisp/compiler/locall.lisp, 28-Feb-89 19:31:07, Edit by Ram.
Changed Local-Call-Analyze so that it pushes new lambdas on the
Component-Lambdas before it does any call analysis or let conversion. This
gets the normal consistency maintenance code to handle removal of deleted
and let lambdas. Before, there was a local list of new lambdas that could
become inconsistent.
/usr1/lisp/compiler/ir1tran.lisp, 28-Feb-89 18:12:15, Edit by Ram.
Instead of trying to set the :Optional kind everywhere that hairy lambda
conversion creates a lambda, we wait until we are done and set the kind only
the lambdas that are actually e-ps. This was causing internal lambdas that
weren't e-ps to be marked as optional. The fix is also clearer, and causes
less complication in the already-hairy code.
/usr1/lisp/compiler/ir1tran.lisp, 24-Feb-89 15:26:29, Edit by Ram.
Changed Optional-Dispatch stuff to set the Functional-Entry-Function of the
:Optional lambdas to the result Optional-Dispatch structure.
/usr1/lisp/compiler/ir1opt.lisp, 24-Feb-89 14:46:57, Edit by Ram.
In IR1-Optimize, changed test for being in a deleted lambda to just look at
the block-lambda, rather than at it's home. The result should be the same.
/usr1/lisp/compiler/entry.lisp, 24-Feb-89 14:30:37, Edit by Ram.
Changed Compute-Entry-Info to use the XEP's environment to determine whether
the function is a closure. The result should be the same, but is more easily
obtained.
/usr1/lisp/compiler/ir1util.lisp, 24-Feb-89 14:26:58, Edit by Ram.
Deleted definition of Find-XEP-Call, since this doesn't make sense anymore.
/usr1/lisp/compiler/debug.lisp, 24-Feb-89 14:21:09, Edit by Ram.
Flushed permission of random wired live TNs at the start of an XEP.
/usr1/lisp/compiler/debug.lisp, 24-Feb-89 14:18:01, Edit by Ram.
In Check-Block-Successors, flushed permission of random successor count in
XEPs.
/usr1/lisp/compiler/ir2tran.lisp, 24-Feb-89 14:14:12, Edit by Ram.
Flushed check for being the bind block for an XEP that inhibited emission of
a block-finishing branch in Finish-IR2-Block. Control flow is now normal in
XEPs, so we don't want to randomly flush branches.
/usr1/lisp/compiler/ir1opt.lisp, 24-Feb-89 14:07:52, Edit by Ram.
Flushed check for being in an XEP in Join-Successor-If-Possible. Now that
argument count dispatching is done explicitly, there is no need to force the
call to a block boundry (for easy location). Also, we are getting more
complex code in the XEP, making block merging a desirable optimization.
/usr1/lisp/compiler/ir1util.lisp, 24-Feb-89 14:03:35, Edit by Ram.
Fixed code in Delete-Lambda that was trying to notice when we are deleting
the the XEP for an optional dispatch. The test was right, but the action was
wrong: it was setting the Functional-Entry-Function for all the e-p's to NIL,
yet they were already NIL. Instead, we call Delete-Optional-Dispatch, which
deletes the unreferenced e-p's.
/usr1/lisp/compiler/ir1tran.lisp, 23-Feb-89 20:17:21, Edit by Ram.
Wrapped a (locally (declare (optimize (safety 0))) ...) around the body of
the loop created in Convert-More-Entry so that no type checking is done on
the fixnum arithmetic.
/usr1/lisp/compiler/ir2tran.lisp, 23-Feb-89 14:34:49, Edit by Ram.
Flushed most of the hair associated with the %Function-Entry funny function.
What remains is now in Init-XEP-Environment, which is called by
IR2-Convert-Bind when the lambda is an XEP.
/usr1/lisp/compiler/gtn.lisp, 23-Feb-89 14:24:20, Edit by Ram.
Flushed some special-casing of XEPs that is no longer needed now that XEP's
have args. Also, allocation of argument passing locations in XEPs is now
more similar to the non-XEP case: we don't allocate passing locations for
unused arguments.
/usr1/lisp/compiler/locall.lisp, 22-Feb-89 15:26:50, Edit by Ram.
Change handling of XEPs. Most of the action in XEPs is now represented by
explicit IR1 in the XEP: argument dispatching is done by a COND, etc.
Instead of using funny functions such as %XEP-ARG to access the passed
arguments, NARGS and all the positional arguments are passed as arguments to
the XEP (with garbage defaults for unsupplied args). The code in the XEP
just references these variables.
This simplifies creation of the XEP, since we can just cons up a lambda form
and convert it, instead of creating each XEP call by hand. It also moves
complexity out of IR2 conversion, since argument dispatching has already been
implemented.
/usr1/lisp/compiler/ir2tran.lisp, 16-Feb-89 15:12:17, Edit by Ram.
Fixed %XEP-Arg to use Move-Argument rather than just Move.
/usr1/lisp/compiler/node.lisp, 15-Feb-89 00:36:30, Edit by Ram.
Made Functional specify :Defined and Function as the defaults for the
Where-From and Type slots so that we know defined functions are in fact
functions.
/usr1/lisp/compiler/ir1tran.lisp, 14-Feb-89 23:48:37, Edit by Ram.
In %Defun translator, fixed the test for being at top level (and thus o.k. to
substitute). The sense was negated, but it was also broken so that it was
always false, so the normal top-level thing happened anyway.
/usr1/lisp/compiler/ir1tran.lisp, 14-Feb-89 15:02:14, Edit by Ram.
Wrote Leaf-Inlinep and changed uses to (cdr (assoc leaf *inlines*)) with the
new function. This means that global declarations will now affect function
references.
/usr1/lisp/compiler/main.lisp, 13-Feb-89 12:19:39, Edit by Ram.
Call Init-Assembler *before* Entry-Analyze so that we don't emit labels when
the assembler isn't initialized.
/usr1/lisp/compiler/ltn.lisp, 02-Feb-89 15:41:40, Edit by Ram.
Changed Annotate-Function-Continuation not to clear Type-Check unless the
policy is unsafe. Changed LTN-Default-Call to take a policy argument and
pass it through.
/usr1/lisp/compiler/ir1tran.lisp, 02-Feb-89 15:16:32, Edit by Ram.
Changed IR1-Convert-Combination-Args and the translator for
Multiple-Value-Call to assert that the function continuation yeilds a value
of type Function.
/usr1/lisp/compiler/assembler.lisp, 31-Jan-89 14:13:54, Edit by Ram.
/usr1/lisp/compiler/codegen.lisp, 31-Jan-89 14:13:53, Edit by Ram.
Added a function version of Emit-Label that can be called outside of
Assemble. Used this in Generate-Code so that we don't have to worry about
faking the current node for Assemble, when we aren't emitting any code
anyway.
/usr1/lisp/compiler/assembler.lisp, 31-Jan-89 13:56:08, Edit by Ram.
In Init-Assembler, Null out the Assembler-Node-Names in *Assembler-Nodes* so
that we don't hold onto old garbage. Also zero the code vectors so that
unitialized bytes always come up zero.
/usr1/lisp/compiler/ir2tran.lisp, 31-Jan-89 12:37:21, Edit by Ram.
Fixed IR2-Convert-Local-Unknown-Call to use Standard-Value-TNs to get the
result TNs, rather than calling incorrectly calling Make-Standard-Value-TNs
on a continuation.
/usr1/lisp/compiler/ir1opt.lisp, 30-Jan-89 23:28:08, Edit by Ram.
Changed Check-Types to not set Type-Check when the asserted type is T and the
derived type is *.
/usr1/lisp/compiler/ir1util.lisp, 30-Jan-89 19:36:09, Edit by Ram.
Changed Delete-Ref not to call Delete-Lambda or Delete-Optional-Dispatch when
the functional is already deleted.
/usr1/lisp/compiler/locall.lisp, 30-Jan-89 19:23:26, Edit by Ram.
Convert-MV-Call must add the ep to the Lambda-Calls for the home lambda (as
in Convert-Call) so that DFO can detect the control transfer implicit in
local call.
/usr1/lisp/compiler/ir1util.lisp, 30-Jan-89 18:30:27, Edit by Ram.
Changed Delete-Optional-Dispatch to call Delete-Lambda on all entry points
with no references.
/usr1/lisp/compiler/ir1util.lisp, 30-Jan-89 17:04:33, Edit by Ram.
Changed Delete-Lambda to mark the Lambda's lets as :Deleted as well,
guaranteeing that all code in the environment of a deleted lambda is deleted
(without having to do flow analysis).
/usr1/lisp/compiler/locall.lisp, 30-Jan-89 16:37:31, Edit by Ram.
Changed Convert-MV-Call not to call Let-Convert, since the last entry may
have spurious references due to optional defaulting code that hasn't been
deleted yet. Changed Maybe-Let-Convert to set the Functional-Kind of the
lambda to :Let or :MV-Let, depending on the combination type.
/usr1/lisp/compiler/locall.lisp, 30-Jan-89 15:35:52, Edit by Ram.
Changed Merge-Cleanups-And-Lets to use Find-Enclosing-Cleanup to determine
whether there is any cleanup in effect at the call site, rather than directly
using the Block-End-Cleanup.
/usr1/lisp/compiler/ir1util.lisp, 30-Jan-89 15:12:51, Edit by Ram.
Changed Node-Ends-Block to set the start and end cleanups of the *new* block
(not the old) to the ending cleanup of the old block. This is clearly more
right, but may not be totally right.
/usr1/lisp/compiler/life.lisp, 27-Jan-89 17:09:01, Edit by Ram.
Make Clear-Lifetime-Info always set the TN-Local slot for local TNs, using
some other referencing block when there there are global conflicts.
/usr1/lisp/compiler/pack.lisp, 10-Jan-89 15:27:21, Edit by Ram.
Fixed Select-Location not to infinite loop when Finite-Sb-Last-Offset is 0.
/usr0/ram/compiler/ir2tran.lisp, 30-Jun-88 13:57:12, Edit by Ram.
Fixed IR2-Convert-Bind to ignore vars with no Refs.
/usr0/ram/compiler/gtn.lisp, 30-Jun-88 13:54:51, Edit by Ram.
Fixed Assign-Lambda-Var-TNs and Assign-IR2-Environment to ignore vars with no
Refs.
/usr0/ram/compiler/life.lisp, 02-Mar-88 17:06:18, Edit by Ram.
Aaaargh! When clearing the Packed-TN-Local in Clear-Lifetime-Info, iterate
up to Local-TN-Limit, not SC-Number-Limit.
/usr0/ram/compiler/ir1util.lisp, 20-Feb-88 22:00:37, Edit by Ram.
Made Substitute-Leaf and Change-Ref-Leaf do an Up-Tick-Node on the changed
Refs.
/usr0/ram/compiler/ltn.lisp, 20-Feb-88 16:25:11, Edit by Ram.
Changed Find-Template to deal with output assertions correctly once again.
Instead of assuming that the Node-Derived-Type is true, we look at the
Type-Check flag in the continuation. If the continuation type is being
checked, then we only use a template when it doesn't have an output
restriction.
In Find-Template-For-Policy, use safe templates as a last resort, even when
policy is :Small or :Fast. A safe template is surely faster and smaller than
a full call.
In Ltn-Analyze, clear the Type-Check flags on all continuations when our
policy is unsafe.
/usr0/ram/compiler/debug.lisp, 18-Feb-88 17:17:19, Edit by Ram.
And fixed Check-VOP-Refs to ensure that the temporary write comes before
(which is after in the reversed VOP-Refs) the read, rather than vice-versa...
/usr0/ram/compiler/vmdef.lisp, 18-Feb-88 17:10:35, Edit by Ram.
Fixed Compute-Reference-Order to begin temporary lifetimes with the write
rather than the read.
/usr0/ram/compiler/gtn.lisp, 18-Feb-88 16:06:41, Edit by Ram.
Have to fetch the Equated-Returns inside the loop in Find-Equivalence
classes, since Equate-Return-Info will change the returns for the current
environment. This used to work, since Equate-Return-Info used to be
destructive.
/usr0/ram/compiler/ir1opt.lisp, 14-Feb-88 14:30:47, Edit by Ram.
Oops. Fixed the test in Propagate-From-Calls for being a call to the
function concerned. Now that this optimization can actually happen, who
knows?
/usr0/ram/compiler/ltn.lisp, 11-Feb-88 18:01:38, Edit by Ram.
Made Annotate-1-Value-Continuation delay global function references to
functions that aren't notinline. Made LTN-Default-Call,
LTN-Analyze-Full-Call and LTN-Analyze-MV-Call annotate their function
continuation.
/usr0/ram/compiler/flowsimp.lisp, 11-Feb-88 16:44:48, Edit by Ram.
Now that returns aren't being picked off in flow-graph-simplify, we have to
fix join-block-if-possible not to attempt to join the XEP return to the
component tail...
/usr0/ram/compiler/ir1util.lisp, 11-Feb-88 16:14:52, Edit by Ram.
Made Delete-Ref call Maybe-Let-Convert when deleting the second-to-last
reference to a lambda.
/usr0/ram/compiler/flowsimp.lisp, 10-Feb-88 16:46:56, Edit by Ram.
/usr0/ram/compiler/locall.lisp, 11-Feb-88 13:24:04, Edit by Ram.
Moved let-conversion to locall from flowsimp, and made it be triggered by
Maybe-Let-Convert. This is called on each new lambda after local call
analysis, and can also be called whenever there is some reason to believe
that a lambda might be eligible for let-conversion. We clear any :Optional
function kinds since the entry functions can be treated as normal functions
after local call analysis.
This change was made to solve problems with lambdas not being let-converted
when the return node was deleted due to being unreachable. This is important
now that being a let has major environment significance. Originally let
conversion was regarded as a way to delete a return, and thus made some kind
of sense to have it be a flow graph optimization. Now that a let can have
only one reference, we can trigger let conversion by noticing when references
are deleted.
/usr0/ram/compiler/node.lisp, 11-Feb-88 13:12:38, Edit by Ram.
/usr0/ram/compiler/ir1tran.lisp, 11-Feb-88 13:12:47, Edit by Ram.
Added :Optional Functional-Kind that is initially specified for the
entry-point lambdas in optional-dispatches so that we know there may be
references to the function through the optional dispatch.
/usr0/ram/compiler/ir1util.lisp, 11-Feb-88 12:23:11, Edit by Ram.
Changed assertion in Control-Equate to allow an existing value-equate to the
same continuation.
/usr0/ram/compiler/ir1tran.lisp, 25-Jan-88 19:27:57, Edit by Ram.
Changed the default policy to be all 1's, and modified calls to Policy in all
files so that they do "the right thing" when compared qualities are equal.
The default action should be chosen so as to minimize mystification and
annoyance to non-wizards. In general, the default should be chosen according
to the ordering: safety > brevity > speed > space > cspeed. Checks for 0 and
3 meaning "totally unimportant" and "ultimately important" are also o.k.
/usr0/ram/compiler/gtn.lisp, 24-Jan-88 11:20:37, Edit by Ram.
Changed Equate-Return-Info so that it effectively ignores the Count and Types
in :Unused continuations, yet still combines the Entry-P and Tail-P values.
/usr0/ram/compiler/locall.lisp, 23-Jan-88 21:41:28, Edit by Ram.
Make Convert-XEP-Call set the Return-Point too...
/usr0/ram/compiler/ir1util.lisp, 22-Jan-88 16:17:38, Edit by Ram.
Made Immediately-Used-P special-case local calls by using
Basic-Combination-Return-Point.
/usr0/ram/compiler/locall.lisp, 22-Jan-88 16:13:32, Edit by Ram.
/usr0/ram/compiler/node.lisp, 22-Jan-88 16:12:03, Edit by Ram.
Added a Basic-Combination-Return-Point slot so that local calls can rebember
where they are supposed to return to.
/usr0/ram/compiler/gtn.lisp, 22-Jan-88 10:03:37, Edit by Ram.
Fixed Assign-Lambda-Vars to set the TN-Leaf.
/usr0/ram/compiler/flowsimp.lisp, 22-Jan-88 10:22:53, Edit by Ram.
Made Convert-To-Let do an Intersect-Continuation-Asserted-Type on the actual
continuation with the dummy's assertion when the let call is the only use of
the actual continuation.
/usr0/ram/compiler/ir1tran.lisp, 22-Jan-88 09:42:49, Edit by Ram.
Tack NIL on the end of the forms that we convert so that no top-level form is
in a for-value context.
/usr0/ram/compiler/ir1opt.lisp, 21-Jan-88 17:50:52, Edit by Ram.
Made Check-Types intersect the new type with the Node-Derived-Type for all
the continuation uses so that IR1Opt doesn't go and change the type right
back.
/usr0/ram/compiler/main.lisp, 21-Jan-88 17:31:57, Edit by Ram.
/usr0/ram/compiler/ir1opt.lisp, 21-Jan-88 17:30:31, Edit by Ram.
Type checking was being done wrong. We need to check types even if IR1Opt
doesn't do anything, and we need to give IR1Opt a second chance if type check
does anything. Made Check-Types return whether it did anything.
/usr0/ram/compiler/ir1tran.lisp, 21-Jan-88 17:14:13, Edit by Ram.
Fixed IR1 translator for THE to use Find-Uses to find whether the
continuation is used, rather than incorrectly doing it itself (using an old
interpretation of Continuation-Use).
/usr0/ram/compiler/ir1tran.lisp, 16-Nov-87 15:58:39, Edit by Ram.
Made %proclaim (and hence proclaim) return (undefined-value) rather than
arbitrary randomness.
/usr1/ram/compiler/flowsimp.lisp, 23-Aug-87 22:00:39, Edit by Ram
Changed Flow-Graph-Simplify not to merge blocks unless the cleanups for the
two blocks are identical. The is a sub-optimal (but conservative) way to
ensure that cleanups are only done on block boundaries.
/usr1/ram/compiler/ir1opt.lisp, 23-Aug-87 21:26:53, Edit by Ram
Just look for the :Let functional kind in Top-Down-Optimize, instead of
figuring out from first principles.
/usr1/ram/compiler/ir1util.lisp, 20-Aug-87 22:12:45, Edit by Ram
The only worthwhile use for the functional nesting was in Delete-Ref, where
it would walk all the inferiors, marking them as deleted as well. But I
think that just marking the outer function as deleted will eventually cause
all the inner functions to be deleted. As it stands, Delete-Ref is a lot
simpler. If there are problems with deleted-but-somehow-undeletable
references holding onto functions, we may want to look at all references in
Delete-Ref and see if some enclosing function is deleted.
/usr1/ram/compiler/ir1tran.lisp, 22-Aug-87 15:38:50, Edit by Ram
Changed stuff to use the new Functional and Cleanup structures. Mostly
involves flushing stuff.
/usr1/ram/compiler/locall.lisp, 21-Aug-87 14:24:32, Edit by Ram
/usr1/ram/compiler/ir1opt.lisp, 20-Aug-87 22:05:33, Edit by Ram
Changed Local-Call-Analyze to just take a component and analyze the
New-Functions. This simplifies (and optimizes) the late uses in IR1
optimize. Also changed convert-call-if-possible to know to try to convert
the call to the real function rather than the XEP.
/usr1/ram/compiler/node.lisp, 23-Aug-87 20:12:58, Edit by Ram
Flushed bogus hierarchical information in the Functional, Environment and
Cleanup structures. Now that I've taken a stab at implementing the IR2
conversion passes, it is obvious that this information is useless and
difficult to maintain.
We do need a way to iterate over all the functions in a component, but doing
a tree walk is bogus. Instead, we have a list of all the lambdas in each
component. When functions are initially converted, they are placed on the
component New-Functions list. Local call analysis moves analyzed lambdas
into the Lambdas list. We don't bother to remove lambdas from this list when
they are deleted.
A change needed in the cleanup stuff to make it work is to have continuations
with no immediately enclosing cleanup point have their lambda as the cleanup.
Then when we convert the lambda to a let, we set the Cleanup slot in the
lambda to any cleanup enclosing the call so that we realize stuff needs to be
cleaned up.
/usr1/ram/compiler/flowsimp.lisp, 23-Aug-87 20:49:36, Edit by Ram
Changed Find-Initial-DFO to build the Lambdas lists for the components. At
the same time, we also use XEP references to (correctly) merge components
with potential environment inter-dependencies, rather than attempting to use
the lambda nesting. Changed Join-Components to combine the Lambdas and
New-Functions lists.
Changed Delete-Return to convert to a let only when there is a single call,
and also to mark the lambda with the :Let functional kind. This makes
let-calls exactly correspond to the functions that IR1 optimize can
substitute for. This also solves problems with cleanups, since it is
trivially true that all calls are in the same dynamic environment.
/usr1/ram/compiler/ir1tran.lisp, 18-Aug-87 15:25:18, Edit by Ram
In IR1-Convert, if the function is not a symbol, but doesn't look even
vaguely like a lambda, then complain about an illegal function call,
rather than having IR1-Convert-Lambda say it is an illegal lambda.
/usr1/ram/compiler/numacs.lisp, 16-Aug-87 13:48:11, Edit by Ram
Added a Defvar that doesn't use OR (and create a LET and freak out IR1
conversion.)
/usr1/ram/compiler/ir1util.lisp, 16-Aug-87 18:14:10, Edit by Ram
/usr1/ram/compiler/debug.lisp, 16-Aug-87 15:19:47, Edit by Ram
/usr1/ram/compiler/flowsimp.lisp, 16-Aug-87 15:19:13, Edit by Ram
/usr1/ram/compiler/ir1opt.lisp, 16-Aug-87 15:18:47, Edit by Ram
/usr1/ram/compiler/node.lisp, 16-Aug-87 19:58:30, Edit by Ram
/usr1/ram/compiler/ir1tran.lisp, 16-Aug-87 20:29:36, Edit by Ram
/usr1/ram/compiler/locall.lisp, 16-Aug-87 20:22:28, Edit by Ram
Changed stuff for new explicit external entry point concept. The external
entry point is now a real function containing local calls to the entry
points. This represents reality better, making lots of things previously
special-cased automatically happen in our favor. We really needed this for
environment analysis and IR2 conversion to work.
Functional-Entry-Kind is replaced by Functional-Kind and
Functional-Entry-Function. The Kind is kind of like the old Entry-Kind. The
Entry-Function is the XEP (or a back-pointer in an XEP). Uses of Entry-Kind
were replaced with Kind or Entry-Function or flushed, as appropriate.
Note-Entry-Point has been flushed. %Defun doesn't need to do anything to
cause the function to be an entry point. The top-level lambda is no longer
a real entry-point: instead we just directly link it to the component head
and tail.
The more-arg XEP creates a more-arg cleanup. The local-call case still needs
to be fixed.
/usr1/ram/compiler/fndb.lisp, 16-Aug-87 20:37:28, Edit by Ram
Added some definitions for %mumble magic compiler functions.
/usr1/ram/compiler/ir1tran.lisp, 16-Aug-87 20:29:36, Edit by Ram
Changed uses of the two-arg Arg for more-arg hackery into %More-Arg, since
this isn't the user-level functionality we will ultimately want for
more-args.
/usr1/ram/compiler/main.lisp, 16-Aug-87 18:35:29, Edit by Ram
Changed Compile-Component not to do any IR1 passes on the top-level component
except for Type-Check. These optimizations are unlikely to have any useful
effect on top-level code, and they might want to inject illegal stuff into
the top-level component.
/usr1/ram/compiler/macros.lisp, 16-Aug-87 18:26:19, Edit by Ram
Changed With-IR1-Environment to bind *Converting-Top-Level*. Currently you'd
better not use this on top-level code unless you are sure you won't emit
anything that can't go in top-level, since IR1-Convert-Lambda will bogue out
because there is no *Initial-Component* to switch to.
/usr1/ram/compiler/macros.lisp, 13-Aug-87 20:16:47, Edit by Ram
/usr1/ram/compiler/node.lisp, 13-Aug-87 22:24:30, Edit by Ram
/usr1/ram/compiler/main.lisp, 13-Aug-87 22:35:11, Edit by Ram
/usr1/ram/compiler/globaldb.lisp, 13-Aug-87 20:21:12, Edit by Ram
/usr1/ram/compiler/locall.lisp, 13-Aug-87 22:57:54, Edit by Ram
/usr1/ram/compiler/flowsimp.lisp, 13-Aug-87 22:52:01, Edit by Ram
/usr1/ram/compiler/ir1opt.lisp, 13-Aug-87 22:59:11, Edit by Ram
/usr1/ram/compiler/ir1tran.lisp, 13-Aug-87 23:06:03, Edit by Ram
Changed stuff to support having separate top-level and initial components.
Whenver we see a lambda or anything hairy, we switch over to the initial
component. Hairyness of special-forms is determined by the :Top-Level-P
keyword to Def-IR1-Translator.
We make appropriate special forms hairy to guarantee that the top-level
component doesn't contain any stuff that would make life hard for IR2
conversion. In particular, it contains no variables, no functions other than
the top-level lambda and no non-local exit targets.
Local call analysis refuses to convert calls appearing in the top-level
component. In other files, stuff related to Functional-Top-Level-P was
ripped out.
/usr1/ram/compiler/ir1opt.lisp, 13-Aug-87 17:58:37, Edit by Ram
Changed propagate-from-calls to punt if any use is a mv-combination. Changed
Top-Down-Optimize not to Substitute-Let-Vars unless the only use is not a
MV-Combination. Un-commented-out the substituion of functionals for non-set
let vars.
/usr1/ram/compiler/locall.lisp, 13-Aug-87 18:31:24, Edit by Ram
Frobbed Find-Top-Level-Code to recognize DEFUNs with no calls as
non-top-level. The entire concept is probably wrong, though.
/usr1/ram/compiler/ir1tran.lisp, 13-Aug-87 19:07:22, Edit by Ram
Changed IR1-Convert-OK-Combination to look at the leaf-type of the leaf
rather than the derived type for the function continuation. This allows
known calls to be recognized again (I'm sure that worked at one point.
Perhaps before they were becoming known later on somehow?). This is all not
really right anyway, given the broken interpretation of function types
currently used in IR1.
/usr/ram/compiler/ir1tran.slisp, 12-Jan-87 11:48:32, Edit by Ram
Fixed Find-Source-Paths to use a DO with ATOM test rather than a dolist, so
that it won't blow up on dotted lists.
/usr/ram/compiler/ir1util.slisp, 12-Jan-87 10:28:07, Edit by Ram
Fixed Delete-Block to null out the DEST for the continuations belonging to
each node as we delete the node, so we don't try to deliver a result to a
node that doesn't exist anymore.
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment