LLVM backend for 6502
Go to file
Sebastian Pop cb4953089b Codegen failure for vmull with small vectors
Codegen was failing with an assertion because of unexpected vector
operands when legalizing the selection DAG for a MUL instruction.

The asserting code was legalizing multiplies for vectors of size 128
bits. It uses a custom lowering to try and detect cases where it can
use a VMULL instruction instead of a VMOVL + VMUL.  The code was
looking for input operands to the MUL that had been sign or zero
extended. If it found the extended operands it would drop the
sign/zero extension and use the original vector size as input to a
VMULL instruction.

The code assumed that the original input vector was 64 bits so that
after dropping the extension it would fit directly into a D register
and could be used as an operand of a VMULL instruction. The input
code that trigger the failure used a vector of <4 x i8> that was
sign extended to <4 x i32>. It was not safe to drop the sign
extension in this case because the original vector is only 32 bits
wide. The fix is to insert a sign extension for the vector to reach
the required 64 bit size. In this particular example, the vector would
need to be sign extented to a <4 x i16>.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169024 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-30 19:08:04 +00:00
autoconf Fix a pasto. 2012-11-19 19:31:02 +00:00
bindings [python] fix get_library() 2012-11-20 22:27:55 +00:00
cmake Removing SUPPORTS_COVERED_SWITCH_DEFAULT_FLAG 2012-11-26 02:02:08 +00:00
docs Documentation for FileCheck: use 'option' and 'program' directives. 2012-11-29 19:21:02 +00:00
examples Fix gcc's -Wunused-but-set-variable warnings. 2012-11-26 00:56:44 +00:00
include Switch LLVM_USE_RVALUE_REFERENCES to LLVM_HAS_RVALUE_REFERENCES. 2012-11-30 11:45:22 +00:00
lib Codegen failure for vmull with small vectors 2012-11-30 19:08:04 +00:00
projects Add ENABLE_CXX11 and ENABLE_WERROR to Makefile.llvm.rules for sample project. They were previously added to Makefile.llvm.config.in but the consumption was missing 2012-11-27 08:12:24 +00:00
runtime libprofile/CommonProfiling.c: Fix according to C89. 2012-11-02 01:32:02 +00:00
test Codegen failure for vmull with small vectors 2012-11-30 19:08:04 +00:00
tools Move the InstVisitor utility into VMCore where it belongs. It heavily 2012-11-30 03:08:41 +00:00
unittests Switch LLVM_USE_RVALUE_REFERENCES to LLVM_HAS_RVALUE_REFERENCES. 2012-11-30 11:45:22 +00:00
utils Clean up whitespace and add comments 2012-11-30 14:22:14 +00:00
.gitignore Add extra vim swap file pattern 2012-10-09 23:48:34 +00:00
CMakeLists.txt Kick off 3.3 cycle for LLVM trunk. 2012-11-17 22:01:08 +00:00
CODE_OWNERS.TXT Remove some Clang-specific ownership roles. 2012-11-27 00:48:36 +00:00
configure Fix a pasto. 2012-11-19 19:31:02 +00:00
CREDITS.TXT Update my email address. 2012-11-29 21:17:26 +00:00
LICENSE.TXT Few more small CellSPU removals. 2012-11-14 22:13: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 [c-index-test] When building with BUILD_CLANG_ONLY=YES, include c-index-test. 2012-11-06 19:54:46 +00:00
Makefile.common [docs] Remove unsupported references to ExtraSource variable. 2012-05-15 21:32:27 +00:00
Makefile.config.in Re-enable support for --program-prefix. 2012-10-01 18:40:32 +00:00
Makefile.rules Use MACOSX_DEPLOYMENT_TARGET when it is set. <rdar://problem/12433905> 2012-10-12 21:48:14 +00:00
README.txt Test commit. 2012-11-29 16:19:11 +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.