Parent Directory | Revision Log
|Links to HEAD:||(view) (annotate)|
Merge intl-branch 2010-03-18 to HEAD. To build, you need to use boot-2010-02-1 as the bootstrap file. You should probably also use the new -P option for build.sh to generate and update the po files while building.
Restart internalization work. This new branch starts with code from the intl-branch on date 2010-02-12 18:00:00+0500. This version works and LANG=en@piglatin bin/lisp works (once the piglatin translation is added).
Add (intl:textdomain "cmucl") to the files to set the textdomain.
o Trust dynamic extent declarations by default. o Do not generate dynamic-extent closures. This should enable dynamic-extent &rest lists and dynamic-extent lists, but dynamic-extent closures are disabled.
(eval '(block b3 (max (return-from b3 1) (if (unwind-protect (unwind-protect 2)) 3 4)))) => nil is not of type c::ref * src/compiler/envanal.lisp (emit-cleanups): Don't generate a %funcall If second arg of :unwind-protect cleanup is unused. Found by Paul Dietz.
(compile nil '(lambda (c) (flet ((%f16 () (setq c 1))) (+ (%f16) (%f16))))) => assertion failure, c not found in environment Found by Paul Dietz (similar cases). * src/compiler/envanal.lisp (compute-closure): Don't close over unused variables from sets. Not really a port from SBCL because I needed to debug this to the point where the cause was clear; SBCL does the same though.
Disable dynamic-extent. Fred Gilham has been observing a problem that is likely caused by it, and which needs to be tracked down first before enabling dynamic-extent again. * src/compiler/envanal.lisp (*suppress-dynamic-extent-safe-closures*): Set to true. * src/compiler/ir1tran.lisp (*trust-dynamic-extent-declarations*): Set to nil.
Dynamic-extent support for x86. Use boot16.lisp for bootstrapping. * src/bootfiles/18e/boot16.lisp: New file. * src/docs/cmu-user/extensions.tex (Dynamic-Extent Declarations): New section. * src/compiler/x86/macros.lisp (dynamic-extent-allocation): Rename from stack-allocation, save an instruction. (allocation): Don't call trust-dynamic-extent-declaration-p. * src/compiler/x86/alloc.lisp (%dynamic-extent-start) (%dynamic-extent-end): New vops. (list-or-list*): Add constant arg dynamic-extent. (fixed-alloc): Likewise. * src/compiler/generic/vm-ir2tran.lisp (do-fixed-alloc): Call fixed-alloc with dynamic-extent arg. * src/compiler/hppa/alloc.lisp (%dynamic-extent-start) (%dynamic-extent-end): Add dummy vops. * src/compiler/mips/alloc.lisp: * src/compiler/ppc/alloc.lisp: * src/compiler/alpha/alloc.lisp: * src/compiler/rt/alloc.lisp: Likewise. * src/compiler/seqtran.lisp (mapper-transform): Add dynamic-extent declarations. * src/compiler/node.lisp (continuation): Add slot dynamic-extent. (cleanup): Add :dynamic-extent to type of slot kind. * src/compiler/knownfun.lisp (dynamic-extent-closure-safe): New attribute. * src/compiler/ir2tran.lisp (ir2-stack-allocate): New function. (ir2-convert-closure): Handle dynamic-extent case differently. (%dynamic-extent, %dynamic-extent-start, %dynamic-extent-end) <ir2-convert>: New optimizers. (list, list*): Handle dynamic-extent. * src/compiler/ir1tran.lisp (*trust-dynamic-extent-declarations*) (*dynamic-extent-trace*): New variables. (trust-dynamic-extent-declaration-p): New function. (process-dynamic-extent-declaration) (dynamic-extent-allocation-p, dynamic-extent-closure-args) (gen-%dynamic-extent, with-dynamic-extent): New functions/macros. (ir1-convert-combination): Handle dynamic-extent closure args. (ir1-convert-combination-args): Add arg dynamic-extent-args. Set continuation-dynamic-extent for these args. (process-dynamic-extent-declaration): Rewritten. (ir1-convert-dynamic-extent-bindings): New function. (ir1-convert-special-bindings): Call it. (ir1-convert-lambda-body): Handle dynamic-extent rest lists. (let): Handle dynamic-extent vars. (let*): Call ir1-convert-dynamic-extent-bindings. * src/compiler/globaldb.lisp (*trust-dynamic-extent-declarations*) (trust-dynamic-extent-declaration-p): Remove. * src/compiler/fndb.lisp: Add dynamic-extent-closure-safe attribute to assorted functions. * src/compiler/envanal.lisp (environment-analyze): Call find-dynamic-extent-safe-closures. (emit-cleanups): Handle :dynamic-extent cleanups. (*suppress-dynamic-extent-closure-safe*): New variable. (mark-dynamic-extent-safe-closures) (find-dynamic-extent-safe-closures): New functions. * src/compiler/byte-comp.lisp (compute-produces-and-consumes): Treat :dynamic-extent like :tagbody cleanups. * src/code/exports.lisp ("C"): Export ir2-stack-allocate, %dynamic-extent, %dynamic-extent-start, %dynamic-extent-end. * src/code/byte-interp.lisp (%dynamic-extent): (%dynamic-extent-start, %dynamic-extent-end): New functions. (toplevel): Enable block compilation.
* src-dx/compiler/envanal.lisp (mark-dynamic-extent-safe-closures): Renamed from mark-dynamic-extent-closures. Return combinations. (find-dynamic-extent-safe-closures): Rewritten.
* src-dx/compiler/ir1tran.lisp: (*suppress-dynamic-extent-closure-safe*): Remove. (dynamic-extent-closure-args): Remove arg fun. Don't handle dynamic-extent-closure-safe functions. * src-dx/compiler/envanal.lisp: New variable. (mark-dynamic-extent-closures) (find-dynamic-extent-safe-closures): New functions. (environment-analyze): Call find-dynamic-extent-safe-closures.
* src/compiler/seqtran.lisp (mapper-transform): Add dynamic-extent declarations for better testing. * src/compiler/ir2tran.lisp (%dynamic-extent): (%dynamic-extent-start, %dynamic-extent-end): Optimizers rewritten/added. * src/compiler/ir1tran.lisp (process-dynamic-extent-declaration): Add check for not byte-compiling. (dynamic-extent-allocation): Removed. (dynamic-extent-allocation-p): Added. (dynamic-extent-closure-args): Return indices only. (gen-%dynamic-extent): Rewritten. (with-dynamic-extent): Remove last arg. (ir1-convert-dynamic-extent-bindings): Use dynamic-extent-allocation-p. (let): Likewise. * src/compiler/fndb.lisp (%dynamic-extent) (%dynamic-extent-start): Change/add defknowns. * src/compiler/eval-comp.lisp (%dynamic-extent) (%dynamic-extent-start, %dynamic-extent-end): Change/add. * src/compiler/envanal.lisp (compute-closure-lengths): Remove function. (emit-cleanups): Handle %dynamic-extent differently. * src/compiler/byte-comp.lisp (%dynamic-extent-start): Add. (%dynamic-extent, %dynamic-extent-end): Change according to new arg list. * src/code/exports.lisp ("C"): Export allocation-size, %dynamic-extent, %dynamic-extent-start, %dynamic-extent-end. * src/compiler/x86/macros.lisp (dynamic-extent-allocation): Simplify again. * src/compiler/x86/alloc.lisp (%dynamic-extent-start) (%dynamic-extent-end): New vops. (pop-stack): Remove vop. * src/compiler/ir1tran.lisp (process-dynamic-extent-declaration): Don't if (byte-compiling). (dynamic-extent-closure-args): Use global-var-p.
* src-dx/compiler/ir2tran.lisp (*closure-allocation*) (*closure-allocation-stack*): Removed. (ir2-convert-closure): Don't use *closure-allocation*. (%dynamic-extent, %dynamic-extent-end): New args. (ir2-convert): Don't clear *closure-allocation-stack*. * src-dx/compiler/ir1tran.lisp (dynamic-extent-closure-args): Add fun arg. Take only local functions into account. (gen-%dynamic-extent): New function. (with-dynamic-extent): Change arguments. (ir1-convert-combination): Pass function names in %dynamic-extent. * src-dx/compiler/fndb.lisp (%dynamic-extent) (%dynamic-extent-end): Changes args. * src-dx/compiler/envanal.lisp (compute-closure-lengths): New function. (emit-cleanups): Use it to compute closure lengths.
* src/docs/cmu-user/extensions.tex (Dynamic-Extent Declarations): New section. * src/compiler/sparc/macros.lisp (allocation): Don't call trust-dynamic-extent-declaration-p. * src/compiler/generic/vm-ir2tran.lisp (do-fixed-alloc): Call vop fixed-alloc with dynamic-extent arg. * src/compiler/alpha/alloc.lisp (list-or-list*, fixed-alloc): Add arg dynamic-extent. (pop-stack): New vop. * src/compiler/hppa/alloc.lisp: Likewise. * src/compiler/mips/alloc.lisp: Likewise. * src/compiler/ppc/alloc.lisp: Likewise. * src/compiler/sparc/alloc.lisp: Likewise. * src/compiler/x86/alloc.lisp: Likewise. * src/compiler/node.lisp (continuation): Add dynamic-extent slot. (cleanup): Add :dynamic-extent to type of slot named kind. * src/compiler/ir2tran.lisp (*closure-allocation*) (*closure-allocation-stack*): New variables. (ir2-stack-allocate): New function. (ir2-convert-closure): Use ir2-stack-allocate, add to (%dynamic-extent, %dynamic-extent-end): New optimizers. (list, list*): Use ir2-stack-allocate, call vop with dynamic-extent arg. (ir2-convert): Clear *closure-allocation-stack*. * src/compiler/ir1tran.lisp (allocation-size) (dynamic-extent-allocation, dynamic-extent-closure-args): New functions. (with-dynamic-extent): New macro. (ir1-convert-combination): Use dynamic-extent-closure-args and with-dynamic-extent. (ir1-convert-combination-args): Add optional arg dynamic-extent-args. Set continuation-dynamic-extent for argument continuations if appropriate. (*suppress-values-declaration*): Rewritten. (ir1-convert-dynamic-extent-bindings): New function. (ir1-convert-special-bindings): Use it. (function): Factor out some code. (let): Use dynamic-extent-allocation and with-dynamic-extent. (let*): Call ir1-convert-dynamic-extent-bindings. (trust-dynamic-extent-declaration-p): Take lexenv arg. * src/compiler/globaldb.lisp (trust-dynamic-extent-declaration-p): Move to ir1tran.lisp. * src/compiler/fndb.lisp (%dynamic-extent) (%dynamic-extent-end): Add defknowns. * src/compiler/envanal.lisp (emit-cleanups): Produce %dynamic-extent-end for :dynamic-extent cleanups. * src/compiler/byte-comp.lisp (compute-produces-and-consumes): Ignore :dynamic-extent cleanups. * src/code/exports.lisp ("C"): Export pop-stack, ir2-stack-allocate, allocation-size.
* src/compiler/envanal.lisp (find-non-local-exits): Deal with exits from deleted lambdas when *converting-for-interpreter*.
Mega commit to bring RELENG_18 branch in sync with HEAD in preparation for release tagging 18d.
Allow users to disable tail-call optimization by setting a debug optimization quality is higher than 2. While we claim that debugging is not degraded by TCO, some people evidently believe otherwise, so this change tries to accomodate them, hopefully without disturbing the status-quo too much.
This set of revisions brings the RELENG_18 branch up to HEAD in preparation for an 18c release.
When compiling for the interpreter, only generate one %lexical-exit-breakup for each associated entry, as expected by the interpreter. The generation of multiple breakups had been causing invalid results from interpreted code with multiple non-local exits - as noted for the series extension.
Fix headed boilerplate.
Fix compiler warnings.
Changed PRE-ENVIRONMENT-ANALYZE-TOP-LEVEL to return true if it discovered any closure vars so that we make sure to make the same byte-compile/native decision for the top-level form and closure.
Weaken (not (component-new-functions component)) assertion to allow deleted functions.
delete-lambda => delete-functional, since only the latter is an interface function.
Conditionalize deletion of unreferenced :optional entry points for the byte compiler.
Delete all unreferenced functions after cleanup generation (including :OPTIONAL entries, etc.) Changed to set NODE-TAIL-P to T instead of a tail set.
Clear out NODE-DERIVED-TYPE in references to escape functions before substution to prevent type inference anomalies.
Link NLX points to the component tail, instead of leaving them with no successors.
Added code to clear LAMBDA-VAR-INDIRECT (to handle the case where sets to a closure variable have been deleted after pre-analysis.) Moved variable deletion out of GET-LAMBDA-ENVIRONMENT into a new function REINIT-LAMBDA-ENVIRONMENT, which is called by ENVIRONMENT-ANALYZE. This function cleans up environment analysis assumptions that were invalidated by optimization.
When deleting unreferenced closure vars in GET-LAMBDA-ENVIRONMENT, watch out for NLX-INFO.
In GET-LAMBDA-ENVIRONMENT, clean out any deleted variables that where optimized away after environment pre-analysis.
Moved tail annotation back here from ir1final, since it must be done after cleanup generation.
Moved some stuff out of here and into ir1final.
New file header with RCS stuff.
Changed stuff to use NODE-HOME-LAMBDA, since now that lets can be deleted, it is not totally simple to find the home lambda. Moved unreferenced variable noting into NOTE-UNREFERENCED-VARS, since this code is now shared with function deleting code in ir1util.
Changed "does not return" note to only be done when brevity is 0.
Changed PRE-ENVIRONMENT-ANALYZE-TOP-LEVEL to not gag on non :TOP-LEVEL components.
Changed the does-not-return tail recursion inhibition to only apply to full calls.
Changed ENVIRONMENT-ANALYZE so that it doesn't always give multiple "does not return" notes.
Misc changes for lexenv stuff. Moved function-does-not-return test here from ir1final. Numerous changes due to NLX changes associated with new lexenv cleanup stuff. Also, ENTRY-EXITS is now a list of EXITs, so we don't have to worry about continuations are deleted, and can find NLX points without iterating over all blocks.
*** empty log message ***
*** empty log message ***
*** empty log message ***
*** empty log message ***
*** empty log message ***
Added support for pre-analyzing top-level lambdas so that we don't have to merge them into the same component when there are closure references.
Added code to set the LEAF-TYPE of functionals to the DEFINITION-TYPE so that this information is easily avalible for later use (and isn't trashed by TR return deletion.
Changed NOTE-NON-LOCAL-EXIT to add a use of the NLX continuation to the %NLX-ENTRY function when we delete the escape function. Formerly there was no use to represent the type uncertainty of the thrown value, which could cause LTN to get confused, perhaps choosing a specialized representation when the value could in fact be of any type.
In the UNWIND-PROTECT case of EMIT-CLEANUPS, fixed to use %FUNCALL instead of FUNCALL so that the cleanup function reference will be recognized as a local call. (Which is must be, since there is no XEP for cleanup functions.)
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, select a symbolic revision name using the selection box, or choose 'Use Text Field' and enter a numeric revision.
|Powered by ViewVC 1.1.5|