LLVM backend for 6502
Go to file
Jakob Stoklund Olesen 976647d95d Make calls scheduling boundaries post-ra.
Before register allocation, instructions can be moved across calls in
order to reduce register pressure.  After register allocation, we don't
gain a lot by moving callee-saved defs across calls.  In fact, since the
scheduler doesn't have a good idea how registers are used in the callee,
it can't really make good scheduling decisions.

This changes the schedule in two ways: 1. Latencies to call uses and
defs are no longer accounted for, causing some random shuffling around
calls.  This isn't really a problem since those uses and defs are
inaccurate proxies for what happens inside the callee.  They don't
represent registers used by the call instruction itself.

2. Instructions are no longer moved across calls.  This didn't happen
very often, and the scheduling decision was made on dubious information
anyway.

As with any scheduling change, benchmark numbers shift around a bit,
but there is no positive or negative trend from this change.

This makes the post-ra scheduler 5% faster for ARM targets.

The secret motivation for this patch is the introduction of register
mask operands representing call clobbers.  The most efficient way of
handling regmasks in ScheduleDAGInstrs is to model them as barriers for
physreg live ranges, but not for virtreg live ranges.  That's fine
pre-ra, but post-ra it would have the same effect as this patch.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151265 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-23 17:54:21 +00:00
autoconf autoconf/m4/visibility_inlines_hidden.m4: Tweak for cygwin-g++-4.5.3. It folded conftest regardress of attributge((noinline)) with >=O1 . 2012-02-19 12:05:12 +00:00
bindings ocaml bindings: landing pad is now the last opcode. 2012-02-07 18:58:19 +00:00
cmake add LLVM_VERSION_MAJOR and _MINOR defines 2012-02-13 18:48:10 +00:00
docs libclc is now dual licensed, Tobias and Peter own their respective subprojects. 2012-02-22 19:17:20 +00:00
examples Switch to a more idiomatic way of silencing unused variable warnings in 2012-02-20 00:02:49 +00:00
include Strip a layer of boilerplate from the VLIWPacketizer by storing the scheduler as an opaque pointer. 2012-02-23 13:39:13 +00:00
lib Make calls scheduling boundaries post-ra. 2012-02-23 17:54:21 +00:00
projects Replace the old --with-cxx-* configure options with a single --with-gcc-toolchain 2012-02-03 00:59:30 +00:00
runtime Fixing a warning in MSVC (this is also a test commit) 2012-02-05 19:43:39 +00:00
test Make tests less sensitive to scheduling changes. 2012-02-23 17:19:34 +00:00
tools An easy case where GCC should really be able to work out that the value is only 2012-02-23 08:25:25 +00:00
unittests Fix typos. 2012-02-22 16:01:54 +00:00
utils Remove 'if' from getSuperRegisters, getSubRegisters, and getOverlaps that were added in r151038. 2012-02-23 08:42:06 +00:00
.gitignore git: Add tools/lldb to the ignore list. 2011-11-10 22:55:50 +00:00
CMakeLists.txt add LLVM_VERSION_MAJOR and _MINOR defines 2012-02-13 18:48:10 +00:00
configure autoconf/m4/visibility_inlines_hidden.m4: Tweak for cygwin-g++-4.5.3. It folded conftest regardress of attributge((noinline)) with >=O1 . 2012-02-19 12:05:12 +00:00
CREDITS.TXT Update credits. 2012-02-16 18:54:41 +00:00
LICENSE.TXT Happy new year 2012! 2012-01-01 08:16:56 +00:00
llvm.spec.in Tidy up. s/Low Level Virtual Machine/LLVM/. 2012-01-25 22:00:23 +00:00
LLVMBuild.txt LLVMBuild: Introduce a common section which currently has a list of the 2011-12-12 22:45:54 +00:00
Makefile Makefile: add missing files to FilesToConfig 2012-01-17 02:56:49 +00:00
Makefile.common Removed trailing whitespace from Makefiles. 2009-01-09 16:44:42 +00:00
Makefile.config.in capitalize project name, reference bugzilla 2011-12-18 18:50:16 +00:00
Makefile.rules On Cygwin/MingW, add SharedLibDir and LLVMToolDir to the library search path, since shared libraries are placed in 'bin'. (static libraries are still in 'lib'). 2012-02-18 10:03:19 +00:00
README.txt test commit 2012-02-07 08:18:05 +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 HTML documentation provided in docs/index.html for further
assistance with LLVM.

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