mirror of
git://git.code.sf.net/p/sbcl/sbcl
synced 2026-09-10 07:26:40 -04:00
Teach environment analysis how to detect when functions which have references in other functions (potentially itself) are automatically stack allocatable. This is done by marrying the closure environment analysis with some of the existing escape analysis utilities, and by combining those analysis with a step to annotate the correct derived dynamic extent lifetime, which further required some IR1 flow-graph hacking utilities to revoke tail call semantics when necessary. Additionally, the escape analysis performed for functions is also now somewhat unified with how values are handled, so such functions are now also stack allocated when all their references deliver values to e.g. dx-safe functions. In fact, dx-safe as an ir1-info annotation should probably just be removed in favor of user-defined dx declarations. We have thus deleted the arbitrary restriction on auto-dxification of functions that made us just give up the moment a reference to a potentially dxable function was in a different environment. This fixes the existing expected test failures we had regarding being able to auto stack allocate self-referential functions. We also add a bunch of new tests to exercise stack-allocatability and correctness of mutually referential functions which close over each other as well. We can now remove some explicit dynamic extent declarations in the system that are now automatically inferred by the compiler, since it is safer that way in case the functions are changed. It may work to remove more declarations but these are clearly the instances that the compiler now handles. Some test cases provided by Gemini. Everything else written by me. |
||
|---|---|---|
| .github/workflows | ||
| benchmarks | ||
| contrib | ||
| crossbuild-runner | ||
| doc | ||
| src | ||
| tests | ||
| tlsf-bsd | ||
| tools-for-build | ||
| .cirrus.yml | ||
| .dir-locals.el | ||
| .git-archive-version | ||
| .gitattributes | ||
| .gitignore | ||
| .mailmap | ||
| binary-distribution.sh | ||
| BUGS | ||
| build-all-cores.sh | ||
| build-comparison.sh | ||
| clean.sh | ||
| cload-xc.lisp | ||
| COPYING | ||
| cover-script.lisp | ||
| CREDITS | ||
| cross-make.sh | ||
| distclean.sh | ||
| DOCUMENTATION | ||
| find-gnumake.sh | ||
| freeze.sh | ||
| generate-version.sh | ||
| HACKING | ||
| html-distribution.sh | ||
| INSTALL | ||
| install.sh | ||
| load-xc.lisp | ||
| loader.lisp | ||
| make-android.sh | ||
| make-c-runtime.sh | ||
| make-config.sh | ||
| make-genesis-2.lisp | ||
| make-genesis-2.sh | ||
| make-host-1.lisp | ||
| make-host-1.sh | ||
| make-host-2.lisp | ||
| make-host-2.sh | ||
| make-shared-library.sh | ||
| make-target-1.sh | ||
| make-target-2-load.lisp | ||
| make-target-2.sh | ||
| make-target-contrib-android.sh | ||
| make-target-contrib.sh | ||
| make-windows-installer.sh | ||
| make.sh | ||
| maketarg2loop.lisp | ||
| NEWS | ||
| OPTIMIZATIONS | ||
| PRINCIPLES | ||
| pubring.pgp | ||
| README | ||
| release.sh | ||
| run-sbcl.sh | ||
| sbcl-pwd.sh | ||
| slam.sh | ||
| source-distribution.sh | ||
| tagify.sh | ||
| TLA | ||
| TODO | ||
| validate-float.lisp | ||
| verify-header-parsing.sh | ||
| wc.sh | ||
| xperfecthash30.lisp-expr | ||
| xperfecthash61.lisp-expr | ||
| xperfecthash63.lisp-expr | ||
GENERAL INFORMATION Welcome to SBCL. If you'd like to install or build the system, see the "INSTALL" file. To find out more about who created the system, see the "CREDITS" file. If you'd like information about the legalities of copying the system, see the "COPYING" file. The "DOCUMENTATION" file describes the various formats and ways to access the documentation. The system is a work in progress. See the "TODO" file in the source distribution for some highlights. See the "BUGS" file for how to view or report bugs. If you'd like to make suggestions or help to improve the system, please send mail to one of the mailing lists: sbcl-help@lists.sourceforge.net sbcl-devel@lists.sourceforge.net Note that as a spam reduction measure you must subscribe to the lists before you can post: https://sourceforge.net/p/sbcl/mailman/ The "HACKING" file has more details regarding hacking on and contributing to SBCL. SYSTEM-SPECIFIC HINTS for OpenBSD 6.0 and newer: SBCL must be built and run from a filesystem with the "wxallowed" mount option, such as /usr/local in the default install.