LLVM backend for 6502
Go to file
Chris Lattner d7648c8934 Turn a series of extract_element's feeding a build_vector into a
vector_shuffle node.  For this:

void test(__m128 *res, __m128 *A, __m128 *B) {
  *res = _mm_unpacklo_ps(*A, *B);
}

we now produce this code:

_test:
        movl 8(%esp), %eax
        movaps (%eax), %xmm0
        movl 12(%esp), %eax
        unpcklps (%eax), %xmm0
        movl 4(%esp), %eax
        movaps %xmm0, (%eax)
        ret

instead of this:

_test:
        subl $76, %esp
        movl 88(%esp), %eax
        movaps (%eax), %xmm0
        movaps %xmm0, (%esp)
        movaps %xmm0, 32(%esp)
        movss 4(%esp), %xmm0
        movss 32(%esp), %xmm1
        unpcklps %xmm0, %xmm1
        movl 84(%esp), %eax
        movaps (%eax), %xmm0
        movaps %xmm0, 16(%esp)
        movaps %xmm0, 48(%esp)
        movss 20(%esp), %xmm0
        movss 48(%esp), %xmm2
        unpcklps %xmm0, %xmm2
        unpcklps %xmm1, %xmm2
        movl 80(%esp), %eax
        movaps %xmm2, (%eax)
        addl $76, %esp
        ret

GCC produces this (with -fomit-frame-pointer):

_test:
        subl    $12, %esp
        movl    20(%esp), %eax
        movaps  (%eax), %xmm0
        movl    24(%esp), %eax
        unpcklps        (%eax), %xmm0
        movl    16(%esp), %eax
        movaps  %xmm0, (%eax)
        addl    $12, %esp
        ret


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27233 91177308-0d34-0410-b5e6-96231b3b80d8
2006-03-28 20:28:38 +00:00
autoconf Update to llvm-config tool, by Erik Kidd: 2006-03-23 23:21:29 +00:00
docs Misunderstanding. 2006-03-27 19:46:38 +00:00
examples Minor corrections. 2006-03-24 03:11:31 +00:00
include/llvm Add a new node 2006-03-28 19:54:11 +00:00
lib Turn a series of extract_element's feeding a build_vector into a 2006-03-28 20:28:38 +00:00
projects Ignored generated files. 2006-03-23 23:53:13 +00:00
runtime Optimizing to calloc() to malloc() + memset() can be bad on some platforms. 2006-03-13 21:22:43 +00:00
test Use movhpd is even better than movlhps. 2006-03-28 06:40:57 +00:00
tools Get JIT/Interpreter working on Windows again. 2006-03-24 02:53:49 +00:00
utils Tblgen doesn't like multiple SDNode<> definitions that map to the sameenum value. Split them into separate enums. 2006-03-28 00:41:33 +00:00
win32 Keep Visual Studio informed. 2006-03-28 04:01:27 +00:00
Xcode Catch up on some of the file addition/deletions. 2006-01-27 13:24:20 +00:00
.cvsignore Ignore the configure.out file generated by "make reconfigure" 2005-06-18 23:01:25 +00:00
configure Update to llvm-config tool, by Erik Kidd: 2006-03-23 23:21:29 +00:00
CREDITS.TXT Update to llvm-config tool, by Erik Kidd: 2006-03-23 23:21:29 +00:00
LICENSE.TXT Happy New Year, LLVM. 2006-01-03 14:42:06 +00:00
llvm.spec Onward to LLVM-1.6 and beyond! 2005-05-18 20:23:20 +00:00
llvm.spec.in Onward to LLVM-1.6 and beyond! 2005-05-18 20:23:20 +00:00
Makefile For PR614: 2005-08-25 04:59:49 +00:00
Makefile.common Update comments to reflect new variable names. Patch contributed by 2005-02-14 16:02:19 +00:00
Makefile.config.in Update to llvm-config tool, by Erik Kidd: 2006-03-23 23:21:29 +00:00
Makefile.rules Add a facility for invoking the llvm-config tool when linking a program. 2006-03-24 07:36:57 +00:00
README.txt Make the text of this file a little more useful. 2004-09-02 22:49:27 +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.