Fork of llvm with experimental commits and workarounds for RPCS3
Go to file
Chris Lattner e087b8e321 Add a new way to match vector constants, which make it easier to bang bits of
different types.

Codegen spltw(0x7FFFFFFF) and spltw(0x80000000) without a constant pool load,
implementing PowerPC/vec_constants.ll:test1.  This compiles:

typedef float vf __attribute__ ((vector_size (16)));
typedef int vi __attribute__ ((vector_size (16)));
void test(vi *P1, vi *P2, vf *P3) {
  *P1 &= (vi){0x80000000,0x80000000,0x80000000,0x80000000};
  *P2 &= (vi){0x7FFFFFFF,0x7FFFFFFF,0x7FFFFFFF,0x7FFFFFFF};
  *P3 = vec_abs((vector float)*P3);
}

to:

_test:
        mfspr r2, 256
        oris r6, r2, 49152
        mtspr 256, r6
        vspltisw v0, -1
        vslw v0, v0, v0
        lvx v1, 0, r3
        vand v1, v1, v0
        stvx v1, 0, r3
        lvx v1, 0, r4
        vandc v1, v1, v0
        stvx v1, 0, r4
        lvx v1, 0, r5
        vandc v0, v1, v0
        stvx v0, 0, r5
        mtspr 256, r2
        blr

instead of (with two constant pool entries):

_test:
        mfspr r2, 256
        oris r6, r2, 49152
        mtspr 256, r6
        li r6, lo16(LCPI1_0)
        lis r7, ha16(LCPI1_0)
        li r8, lo16(LCPI1_1)
        lis r9, ha16(LCPI1_1)
        lvx v0, r7, r6
        lvx v1, 0, r3
        vand v0, v1, v0
        stvx v0, 0, r3
        lvx v0, r9, r8
        lvx v1, 0, r4
        vand v1, v1, v0
        stvx v1, 0, r4
        lvx v1, 0, r5
        vand v0, v1, v0
        stvx v0, 0, r5
        mtspr 256, r2
        blr

GCC produces (with 2 cp entries):

_test:
        mfspr r0,256
        stw r0,-4(r1)
        oris r0,r0,0xc00c
        mtspr 256,r0
        lis r2,ha16(LC0)
        lis r9,ha16(LC1)
        la r2,lo16(LC0)(r2)
        lvx v0,0,r3
        lvx v1,0,r5
        la r9,lo16(LC1)(r9)
        lwz r12,-4(r1)
        lvx v12,0,r2
        lvx v13,0,r9
        vand v0,v0,v12
        stvx v0,0,r3
        vspltisw v0,-1
        vslw v12,v0,v0
        vandc v1,v1,v12
        stvx v1,0,r5
        lvx v0,0,r4
        vand v0,v0,v13
        stvx v0,0,r4
        mtspr 256,r12
        blr

llvm-svn: 27624
2006-04-12 19:07:14 +00:00
autoconf Change the assertions defaults: 2006-04-09 20:42:14 +00:00
docs Update adding an intrinsic to describe that you can now just plop it into the 2006-04-12 17:42:39 +00:00
examples Minor corrections. 2006-03-24 03:11:31 +00:00
include/llvm Make sure both member variables are initialized in the default constructor 2006-04-12 16:44:15 +00:00
lib Add a new way to match vector constants, which make it easier to bang bits of 2006-04-12 19:07:14 +00:00
projects Ignored generated files. 2006-03-23 23:53:13 +00:00
runtime Invert the tests on LLVMGCC_MAJVERS to check for value 4 instead of value 2006-04-07 21:45:23 +00:00
test new testcase 2006-04-12 19:04:27 +00:00
tools Get JIT/Interpreter working on Windows again. 2006-03-24 02:53:49 +00:00
utils Add the llvm-config directory to the EXTRA_DIST line so it gets distributed 2006-04-12 19:06:14 +00:00
win32 Keep Visual Studio happy. 2006-04-11 02:01:22 +00:00
Xcode Misc. project changes. html + build config changes supplied by Devang. 2006-04-08 06:04:56 +00:00
.cvsignore Ignore stuff built by "make dist". 2006-04-07 15:55:18 +00:00
configure Change the assertions defaults: 2006-04-09 20:42:14 +00:00
CREDITS.TXT Update credibility. 2006-04-11 08:16:45 +00:00
LICENSE.TXT Happy New Year, LLVM. 2006-01-03 14:42:06 +00:00
llvm.spec For PR723: 2006-04-07 16:07:37 +00:00
Makefile Fix recursion: 2006-04-08 02:14:37 +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 Fix a comment. 2006-04-09 23:39:43 +00:00
Makefile.rules Make sure that the C Frontend's runtime library directory is included as 2006-04-12 18:21:35 +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.