hanchenye-llvm-project/llvm
Richard Sandiford 8a757bba10 [SystemZ] Move compare-and-branch generation even later
r187116 moved compare-and-branch generation from the instruction-selection
pass to the peephole optimizer (via optimizeCompare).  It turns out that even
this is a bit too early.  Fused compare-and-branch instructions don't
interact well with predication, where a CC result is needed.  They also
make it harder to reuse the CC side-effects of earlier instructions
(not yet implemented, but the subject of a later patch).

Another problem was that the AnalyzeBranch family of routines weren't
handling compares and branches, so we weren't able to reverse the fused
form in cases where we would reverse a separate branch.  This could have
been fixed by extending AnalyzeBranch, but given the other problems,
I've instead moved the fusing to the long-branch pass, which is also
responsible for the opposite transformation: splitting out-of-range
compares and branches into separate compares and long branches.

I've added a test for the AnalyzeBranch problem.  A test for the
predication problem is included in the next patch, which fixes a bug
in the choice of CC mask.

llvm-svn: 187494
2013-07-31 12:11:07 +00:00
..
autoconf Remove dead or useless header checks from cmake and autoconf 2013-07-26 16:54:23 +00:00
bindings
cmake Make sure that -gsplit-dwarf isn't passed to the linker. 2013-07-30 22:34:30 +00:00
docs Fix underscore to be the proper length. 2013-07-30 08:26:24 +00:00
examples ExceptionDemo.cpp: Tweak a @param. [-Wdocumentation] 2013-07-29 11:03:50 +00:00
include Make these just inline, not static inline. 2013-07-30 22:35:06 +00:00
lib [SystemZ] Move compare-and-branch generation even later 2013-07-31 12:11:07 +00:00
projects [PowerPC] Support powerpc64le as a syntax-checking target. 2013-07-26 01:35:43 +00:00
runtime Remove dead code from the makefile build system. 2013-07-25 20:25:31 +00:00
test [SystemZ] Move compare-and-branch generation even later 2013-07-31 12:11:07 +00:00
tools Add support for the 's' operation to llvm-ar. 2013-07-29 12:40:31 +00:00
unittests Fix ptr vector inconsistency in CreatePointerCast 2013-07-31 00:17:33 +00:00
utils Fix register pressure tables on ARM. 2013-07-31 03:24:31 +00:00
.arcconfig
.gitignore
CMakeLists.txt Add capability for building with -gsplit-dwarf to the cmake build. 2013-07-30 21:44:10 +00:00
CODE_OWNERS.TXT
CREDITS.TXT
LICENSE.TXT
LLVMBuild.txt
Makefile Fix regular expression used by 'make update' to only look for 'I' and '?' at the start of svn info results and to check for spaces after 'I' instead of just after '?'. 2013-07-03 14:48:37 +00:00
Makefile.common
Makefile.config.in
Makefile.rules Remove dead code from the makefile build system. 2013-07-25 20:25:31 +00:00
README.txt
configure Regenerate. 2013-07-26 17:13:47 +00:00
llvm.spec.in

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.