LLVM backend for 6502
Go to file
Chandler Carruth c49e7e6aee [PM] Add the preservation system to the new pass manager.
This adds a new set-like type which represents a set of preserved
analysis passes. The set is managed via the opaque PassT::ID() void*s.
The expected convenience templates for interacting with specific passes
are provided. It also supports a symbolic "all" state which is
represented by an invalid pointer in the set. This state is nicely
saturating as it comes up often. Finally, it supports intersection which
is used when finding the set of preserved passes after N different
transforms.

The pass API is then changed to return the preserved set rather than
a bool. This is much more self-documenting than the previous system.
Returning "none" is a conservatively correct solution just like
returning "true" from todays passes and not marking any passes as
preserved. Passes can also be dynamically preserved or not throughout
the run of the pass, and whatever gets returned is the binding state.
Finally, preserving "all" the passes is allowed for no-op transforms
that simply can't harm such things.

Finally, the analysis managers are changed to instead of blindly
invalidating all of the analyses, invalidate those which were not
preserved. This should rig up all of the basic preservation
functionality. This also correctly combines the preservation moving up
from one IR-layer to the another and the preservation aggregation across
N pass runs. Still to go is incrementally correct invalidation and
preservation across IR layers incrementally during N pass runs. That
will wait until we have a device for even exposing analyses across IR
layers.

While the core of this change is obvious, I'm not happy with the current
testing, so will improve it to cover at least some of the invalidation
that I can test easily in a subsequent commit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@195241 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-20 11:31:50 +00:00
autoconf Update to reflect the next release. 2013-11-20 10:10:50 +00:00
bindings python: Fix check for disasm creation failure 2013-11-17 15:40:57 +00:00
cmake Revert my CMake patches concerning building with /MT (r194589, r194596) 2013-11-13 20:29:10 +00:00
docs Update to reflect the next release. 2013-11-20 10:10:50 +00:00
examples [weak vtables] Place class definitions into anonymous namespaces to prevent weak vtables. 2013-11-19 03:08:35 +00:00
include [PM] Add the preservation system to the new pass manager. 2013-11-20 11:31:50 +00:00
lib [PM] Add the preservation system to the new pass manager. 2013-11-20 11:31:50 +00:00
projects Revert "Revert "Windows: Add support for unicode command lines"" 2013-10-07 01:00:07 +00:00
test AVX-512: Concat 4 128-bit vectors in one 512-bit vector. 2013-11-20 09:10:40 +00:00
tools [weak vtables] Place class definitions into anonymous namespaces to prevent weak vtables. 2013-11-19 03:08:35 +00:00
unittests [PM] Add the preservation system to the new pass manager. 2013-11-20 11:31:50 +00:00
utils Add -triple option. 2013-11-20 04:55:20 +00:00
.arcconfig
.clang-format
.gitignore
CMakeLists.txt Revert my CMake patches concerning building with /MT (r194589, r194596) 2013-11-13 20:29:10 +00:00
CODE_OWNERS.TXT Update contact information. 2013-11-15 17:35:29 +00:00
configure Update to reflect the next release. 2013-11-20 10:10:50 +00:00
CREDITS.TXT Update CREDITS 2013-11-17 11:44:36 +00:00
LICENSE.TXT
llvm.spec.in
LLVMBuild.txt Remove the very substantial, largely unmaintained legacy PGO 2013-10-02 15:42:23 +00:00
Makefile Remove the very substantial, largely unmaintained legacy PGO 2013-10-02 15:42:23 +00:00
Makefile.common
Makefile.config.in
Makefile.rules Teach the Makefile build system how to handle SOURCES which include 2013-11-14 23:51:29 +00:00
README.txt Revert "Test commit to check e-mail address. Please discard this." 2013-10-04 10:59:13 +00:00

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.