LLVM backend for 6502
Go to file
Richard Sandiford 6824f127f9 [SystemZ] Be more careful about inverting CC masks
System z branches have a mask to select which of the 4 CC values should
cause the branch to be taken.  We can invert a branch by inverting the mask.
However, not all instructions can produce all 4 CC values, so inverting
the branch like this can lead to some oddities.  For example, integer
comparisons only produce a CC of 0 (equal), 1 (less) or 2 (greater).
If an integer EQ is reversed to NE before instruction selection,
the branch will test for 1 or 2.  If instead the branch is reversed
after instruction selection (by inverting the mask), it will test for
1, 2 or 3.  Both are correct, but the second isn't really canonical.
This patch therefore keeps track of which CC values are possible
and uses this when inverting a mask.

Although this is mostly cosmestic, it fixes undefined behavior
for the CIJNLH in branch-08.ll.  Another fix would have been
to mask out bit 0 when generating the fused compare and branch,
but the point of this patch is that we shouldn't need to do that
in the first place.

The patch also makes it easier to reuse CC results from other instructions.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187495 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-31 12:30:20 +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] Be more careful about inverting CC masks 2013-07-31 12:30:20 +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] Be more careful about inverting CC masks 2013-07-31 12:30:20 +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
configure Regenerate. 2013-07-26 17:13:47 +00:00
CREDITS.TXT
LICENSE.TXT
llvm.spec.in
LLVMBuild.txt
Makefile
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

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.