LLVM backend for 6502
Go to file
Matt Arsenault 2b0002b579 Workaround MSVC 32-bit miscompile of getCondCodeAction.
Use 32-bit types for the array instead of 64. This should
generally be better anyway.

In optimized + assert builds, I saw a failure when a
cond code / type combination that is never set was loading
a non-zero value and hitting the != Promote assert.

It turns out when loading the 64-bit value to do the shift,
the assembly loads the 2 32-bit halves from non-consecutive
addresses. The address the second half of the loaded uint64_t
doesn't include the offset of the array in the struct. Instead
of being offset + 4, it's just + 4.

I'm not entirely sure why this wasn't observed before.
setCondCodeAction isn't heavily used by the in-tree targets,
and not with the higher valued vector SimpleValueTypes. Only
PPC is using one of the > 32 valued types, and that is probably
never used by anyone on a 32-bit MSVC compiled host.

I ran into this when upgrading LLVM versions, so I guess the
value loaded from the nonsense address happened to work out
before.

No test since I'm not really sure if / how it can be reproduced
with the current in tree targets, and it's not supposed to change
anything.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193650 91177308-0d34-0410-b5e6-96231b3b80d8
2013-10-29 20:59:29 +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 [python-bindings] Added support for getting/setting operands of values and getting the number of operands of a value. 2013-09-11 01:38:12 +00:00
cmake Remove NDBEUG from all release types compile flags. 2013-10-19 07:30:37 +00:00
docs Fix common typos in the docs. 2013-10-29 17:53:27 +00:00
examples Add missing #include's to cctype when using isdigit/alpha/etc. 2013-10-12 00:55:57 +00:00
include Workaround MSVC 32-bit miscompile of getCondCodeAction. 2013-10-29 20:59:29 +00:00
lib Removing a switch statement that contains only a default label. This resolves an MSVC warning. No functional change intended. 2013-10-29 20:40:52 +00:00
projects Revert "Revert "Windows: Add support for unicode command lines"" 2013-10-07 01:00:07 +00:00
test [mips] Align the stack to 16-bytes for mfp64. 2013-10-29 19:29:03 +00:00
tools Support names like llvm-ar-3.4 and llvm-ranlib-3.4. 2013-10-29 14:25:43 +00:00
unittests DWARF parser: propery handle DW_FORM_ref_sig8 and fix Windows build. 2013-10-29 16:32:19 +00:00
utils TableGen: remove unused variable. 2013-10-28 18:19:04 +00:00
.arcconfig
.clang-format Add a clang-format file so that the tool can automatically detect the 2013-09-02 07:19:04 +00:00
.gitignore
CMakeLists.txt Remove 2.4 from the list of supported Python versions. 2013-10-28 21:22:23 +00:00
CODE_OWNERS.TXT Add more owners to CODE_OWNERS.TXT (Kostya Serebryany: AddressSanitizer and ThreadSanitizer; Evgeniy Stepanov: MemorySanitizer) 2013-06-27 08:47:12 +00:00
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 Update. 2013-09-27 20:40:40 +00:00
LICENSE.TXT Be more specific and capitalize filenames. 2013-05-21 21:22:34 +00:00
llvm.spec.in Tidy up. s/Low Level Virtual Machine/LLVM/. 2012-01-25 22:00:23 +00:00
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.common: Update a description, s/Source/SOURCES/ , according to MakefileGuide.html#control-variables . 2012-12-07 01:43:23 +00:00
Makefile.config.in Add an autoconf option for turning on -gsplit-dwarf by default 2013-06-25 01:12:25 +00:00
Makefile.rules Makefile.rules: Avoid -fomit-frame-pointer also on cygwin due to PR14646. 2013-08-18 03:38:40 +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.