LLVM backend for 6502
Go to file
Lang Hames fc93ae629e Rewrite the PBQP graph data structure.
The new graph structure replaces the node and edge linked lists with vectors.
Free lists (well, free vectors) are used for fast insertion/deletion.

The ultimate aim is to make PBQP graphs cheap to clone. The motivation is that
the PBQP solver destructively consumes input graphs while computing a solution,
forcing the graph to be fully reconstructed for each round of PBQP. This
imposes a high cost on large functions, which often require several rounds of
solving/spilling to find a final register allocation. If we can cheaply clone
the PBQP graph and incrementally update it between rounds then hopefully we can
reduce this cost. Further, once we begin pooling matrix/vector values (future
work), we can cache some PBQP solver metadata and share it between cloned
graphs, allowing the PBQP solver to re-use some of the computation done in
earlier rounds.

For now this is just a data structure update. The allocator and solver still
use the graph the same way as before, fully reconstructing it between each
round. I expect no material change from this update, although it may change
the iteration order of the nodes, causing ties in the solver to break in
different directions, and this could perturb the generated allocations
(hopefully in a completely benign way).

Thanks very much to Arnaud Allard de Grandmaison for encouraging me to get back
to work on this, and for a lot of discussion and many useful PBQP test cases.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194300 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-09 00:14:07 +00:00
autoconf Update so that it uses the `-V' command line option and supports Python 3.x. 2013-10-12 08:42:59 +00:00
bindings [OCaml] Impement Llvm_irreader, bindings to LLVM assembly parser 2013-11-06 09:21:25 +00:00
cmake Remove NDBEUG from all release types compile flags. 2013-10-19 07:30:37 +00:00
docs Add the fact that we anticipate switching to use (some subset of) C++11 2013-11-07 00:23:08 +00:00
examples
include Rewrite the PBQP graph data structure. 2013-11-09 00:14:07 +00:00
lib Rewrite the PBQP graph data structure. 2013-11-09 00:14:07 +00:00
projects
test [Stackmap] Add AnyReg calling convention support for patchpoint intrinsic. 2013-11-08 23:28:16 +00:00
tools llvm-ar: Let opening a directory failed in llvm-ar. 2013-11-08 12:35:56 +00:00
unittests Run clang-format on file. 2013-11-07 20:18:21 +00:00
utils AVX-512: added VPCONFLICT instruction and intrinsics, 2013-11-03 13:46:31 +00:00
.arcconfig
.clang-format
.gitignore
CMakeLists.txt Modify CMakeLists.txt to work around pr17763 and bring some bots back. 2013-10-31 22:13:41 +00:00
CODE_OWNERS.TXT
configure Update so that it uses the `-V' command line option and supports Python 3.x. 2013-10-12 08:42:59 +00:00
CREDITS.TXT
LICENSE.TXT
llvm.spec.in
LLVMBuild.txt
Makefile
Makefile.common
Makefile.config.in
Makefile.rules Rules adjustments in order to build on DragonFly BSD. 2013-10-31 14:35:00 +00:00
README.txt

Low Level Virtual Machine (LLVM)
================================

This directory and its subdirectories contain source code for the Low Level
Virtual Machine, a toolkit for the construction of highly optimized compilers,
optimizers, and runtime environments.

LLVM is open source software. You may freely distribute it under the terms of
the license agreement found in LICENSE.txt.

Please see the documentation provided in docs/ for further
assistance with LLVM, and in particular docs/GettingStarted.rst for getting
started with LLVM and docs/README.txt for an overview of LLVM's
documentation setup.

If you're writing a package for LLVM, see docs/Packaging.rst for our
suggestions.