LLVM backend for 6502
Go to file
Chris Lattner e5a1426174 optimize bitcast(trunc(bitcast(x))) where the result is a float and 'x'
is a vector to be a vector element extraction.  This allows clang to
compile:

struct S { float A, B, C, D; };
float foo(struct S A) { return A.A + A.B+A.C+A.D; }

into:

_foo:                                   ## @foo
## BB#0:                                ## %entry
	movd	%xmm0, %rax
	shrq	$32, %rax
	movd	%eax, %xmm2
	addss	%xmm0, %xmm2
	movapd	%xmm1, %xmm3
	addss	%xmm2, %xmm3
	movd	%xmm1, %rax
	shrq	$32, %rax
	movd	%eax, %xmm0
	addss	%xmm3, %xmm0
	ret

instead of:

_foo:                                   ## @foo
## BB#0:                                ## %entry
	movd	%xmm0, %rax
	movd	%eax, %xmm0
	shrq	$32, %rax
	movd	%eax, %xmm2
	addss	%xmm0, %xmm2
	movd	%xmm1, %rax
	movd	%eax, %xmm1
	addss	%xmm2, %xmm1
	shrq	$32, %rax
	movd	%eax, %xmm0
	addss	%xmm1, %xmm0
	ret

... eliminating half of the horribleness.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112227 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-26 21:55:42 +00:00
autoconf Remove getsect checks, the result is unused and is broken anyhow. 2010-08-25 08:44:54 +00:00
bindings - Add the LinkerPrivateWeakDefAutoLinkage to the Ada bindings. 2010-08-24 20:00:52 +00:00
cmake Updated CMake library dependencies. Removed unnecessary component name 2010-08-26 02:29:53 +00:00
docs Create the new linker type "linker_private_weak_def_auto". 2010-08-20 22:05:50 +00:00
examples Trailing whitespace. 2010-08-19 20:03:53 +00:00
include add m_BitCast for matching a bitcast. 2010-08-26 21:35:52 +00:00
lib optimize bitcast(trunc(bitcast(x))) where the result is a float and 'x' 2010-08-26 21:55:42 +00:00
projects
runtime
test optimize bitcast(trunc(bitcast(x))) where the result is a float and 'x' 2010-08-26 21:55:42 +00:00
tools Fix prototypes. 2010-08-26 17:47:45 +00:00
unittests StringRef::compare_numeric also differed from StringRef::compare for characters > 127. 2010-08-26 15:25:35 +00:00
utils Experimental clang-based code-completion support for vim. This currently 2010-08-26 18:12:22 +00:00
website
build-for-llvm-top.sh
CMakeLists.txt CMake: system for providing llvm-config-like features to the user. 2010-08-09 03:26:43 +00:00
configure Regenerate. 2010-08-25 08:45:06 +00:00
CREDITS.TXT
LICENSE.TXT
llvm.spec.in
Makefile llvmc: remove dynamic plugins. 2010-08-15 07:07:12 +00:00
Makefile.common
Makefile.config.in
Makefile.rules Fix the "Finished Creating" messages for aliases to print the 2010-08-18 01:35:53 +00:00
ModuleInfo.txt
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 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.