Chris Lattner [Tue, 18 Apr 2006 06:18:36 +0000 (06:18 +0000)]
add a bunch of stuff, pieces still missing
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27796
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 18 Apr 2006 05:31:20 +0000 (05:31 +0000)]
Add a warning.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27795
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 18 Apr 2006 05:26:10 +0000 (05:26 +0000)]
Add a warning
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27794
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 18 Apr 2006 04:28:57 +0000 (04:28 +0000)]
Use vmladduhm to do v8i16 multiplies which is faster and simpler than doing
even/odd halves. Thanks to Nate telling me what's what.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27793
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 18 Apr 2006 03:57:35 +0000 (03:57 +0000)]
Implement v16i8 multiply with this code:
vmuloub v5, v3, v2
vmuleub v2, v3, v2
vperm v2, v2, v5, v4
This implements CodeGen/PowerPC/vec_mul.ll. With this, v16i8 multiplies are
6.79x faster than before.
Overall, UnitTests/Vector/multiplies.c is now 2.45x faster with LLVM than with
GCC.
Remove the 'integer multiplies' todo from the README file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27792
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 18 Apr 2006 03:54:50 +0000 (03:54 +0000)]
Add tests for v8i16 and v16i8
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27791
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Tue, 18 Apr 2006 03:45:01 +0000 (03:45 +0000)]
Correct comments
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27790
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 18 Apr 2006 03:43:48 +0000 (03:43 +0000)]
Lower v8i16 multiply into this code:
li r5, lo16(LCPI1_0)
lis r6, ha16(LCPI1_0)
lvx v4, r6, r5
vmulouh v5, v3, v2
vmuleuh v2, v3, v2
vperm v2, v2, v5, v4
where v4 is:
LCPI1_0: ; <16 x ubyte>
.byte 2
.byte 3
.byte 18
.byte 19
.byte 6
.byte 7
.byte 22
.byte 23
.byte 10
.byte 11
.byte 26
.byte 27
.byte 14
.byte 15
.byte 30
.byte 31
This is 5.07x faster on the G5 (measured) than lowering to scalar code +
loads/stores.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27789
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 18 Apr 2006 03:24:30 +0000 (03:24 +0000)]
Custom lower v4i32 multiplies into a cute sequence, instead of having legalize
scalarize the sequence into 4 mullw's and a bunch of load/store traffic.
This speeds up v4i32 multiplies 4.1x (measured) on a G5. This implements
PowerPC/vec_mul.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27788
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 18 Apr 2006 03:22:16 +0000 (03:22 +0000)]
new testcase
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27787
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Tue, 18 Apr 2006 01:22:57 +0000 (01:22 +0000)]
Another entry
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27786
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Tue, 18 Apr 2006 00:21:25 +0000 (00:21 +0000)]
Fix a build failure on Vladimir's tester.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27785
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Tue, 18 Apr 2006 00:21:01 +0000 (00:21 +0000)]
Another entry.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27784
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Mon, 17 Apr 2006 22:45:49 +0000 (22:45 +0000)]
Use movss to insert_vector_elt(v, s, 0).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27782
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 22:26:56 +0000 (22:26 +0000)]
Turn x86 unaligned load/store intrinsics into aligned load/store instructions
if the pointer is known aligned.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27781
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 22:10:08 +0000 (22:10 +0000)]
Fix handling of calls in functions that use vectors. This fixes a crash on
the code in GCC PR26546.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27780
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Mon, 17 Apr 2006 22:04:06 +0000 (22:04 +0000)]
Use two pinsrw to insert an element into v4i32 / v4f32 vector.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27779
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 21:52:03 +0000 (21:52 +0000)]
remove done item
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27778
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 21:48:13 +0000 (21:48 +0000)]
Don't diddle VRSAVE if no registers need to be added/removed from it. This
allows us to codegen functions as:
_test_rol:
vspltisw v2, -12
vrlw v2, v2, v2
blr
instead of:
_test_rol:
mfvrsave r2, 256
mr r3, r2
mtvrsave r3
vspltisw v2, -12
vrlw v2, v2, v2
mtvrsave r2
blr
Testcase here: CodeGen/PowerPC/vec_vrsave.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27777
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 21:48:03 +0000 (21:48 +0000)]
New testcase, shouldn't touch vrsave
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27776
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 21:35:41 +0000 (21:35 +0000)]
Add a MachineInstr::eraseFromParent convenience method.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27775
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 21:35:08 +0000 (21:35 +0000)]
Add some convenience methods.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27774
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Mon, 17 Apr 2006 21:33:57 +0000 (21:33 +0000)]
Encoding bug
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27773
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 21:22:06 +0000 (21:22 +0000)]
Vectors that are known live-in and live-out are clearly already marked in
the vrsave register for the caller. This allows us to codegen a function as:
_test_rol:
mfspr r2, 256
mr r3, r2
mtspr 256, r3
vspltisw v2, -12
vrlw v2, v2, v2
mtspr 256, r2
blr
instead of:
_test_rol:
mfspr r2, 256
oris r3, r2, 40960
mtspr 256, r3
vspltisw v0, -12
vrlw v2, v0, v0
mtspr 256, r2
blr
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27772
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 21:19:12 +0000 (21:19 +0000)]
Prefer to allocate V2-V5 before V0,V1. This lets us generate code like this:
vspltisw v2, -12
vrlw v2, v2, v2
instead of:
vspltisw v0, -12
vrlw v2, v0, v0
when a function is returning a value.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27771
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 21:07:20 +0000 (21:07 +0000)]
Move some knowledge about registers out of the code emitter into the register info.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27770
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 20:59:25 +0000 (20:59 +0000)]
Use a small table instead of macros to do this conversion.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27769
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Mon, 17 Apr 2006 20:43:08 +0000 (20:43 +0000)]
Implement v8i16, v16i8 splat using unpckl + pshufd.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27768
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 20:32:50 +0000 (20:32 +0000)]
implement returns of a vector, testcase here: CodeGen/X86/vec_return.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27767
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 20:32:27 +0000 (20:32 +0000)]
New testcase
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27766
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 19:21:01 +0000 (19:21 +0000)]
Codegen insertelement with constant insertion points as scalar_to_vector
and a shuffle. For this:
void %test2(<4 x float>* %F, float %f) {
%tmp = load <4 x float>* %F ; <<4 x float>> [#uses=2]
%tmp3 = add <4 x float> %tmp, %tmp ; <<4 x float>> [#uses=1]
%tmp2 = insertelement <4 x float> %tmp3, float %f, uint 2 ; <<4 x float>> [#uses=2]
%tmp6 = add <4 x float> %tmp2, %tmp2 ; <<4 x float>> [#uses=1]
store <4 x float> %tmp6, <4 x float>* %F
ret void
}
we now get this on X86 (which will get better):
_test2:
movl 4(%esp), %eax
movaps (%eax), %xmm0
addps %xmm0, %xmm0
movaps %xmm0, %xmm1
shufps $3, %xmm1, %xmm1
movaps %xmm0, %xmm2
shufps $1, %xmm2, %xmm2
unpcklps %xmm1, %xmm2
movss 8(%esp), %xmm1
unpcklps %xmm1, %xmm0
unpcklps %xmm2, %xmm0
addps %xmm0, %xmm0
movaps %xmm0, (%eax)
ret
instead of:
_test2:
subl $28, %esp
movl 32(%esp), %eax
movaps (%eax), %xmm0
addps %xmm0, %xmm0
movaps %xmm0, (%esp)
movss 36(%esp), %xmm0
movss %xmm0, 8(%esp)
movaps (%esp), %xmm0
addps %xmm0, %xmm0
movaps %xmm0, (%eax)
addl $28, %esp
ret
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27765
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 18:09:22 +0000 (18:09 +0000)]
Make sure to check splats of every constant we can, handle splat(31) by
being a bit more clever, add support for odd splats from -31 to -17.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27764
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Mon, 17 Apr 2006 18:06:12 +0000 (18:06 +0000)]
Incorrect foldMemoryOperand entries
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27763
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Mon, 17 Apr 2006 18:05:01 +0000 (18:05 +0000)]
Errors in patterns preventing load folding
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27762
91177308-0d34-0410-b5e6-
96231b3b80d8
Jeff Cohen [Mon, 17 Apr 2006 17:55:41 +0000 (17:55 +0000)]
Add checks for __OpenBSD__.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27761
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 17:55:10 +0000 (17:55 +0000)]
Teach the ppc backend to use rol and vsldoi to generate splatted constants.
This implements vec_constants.ll:test_vsldoi and test_rol
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27760
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 17:54:18 +0000 (17:54 +0000)]
Some more cases that can be generated with two instructions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27759
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 17:29:41 +0000 (17:29 +0000)]
add a note
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27758
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Mon, 17 Apr 2006 07:24:10 +0000 (07:24 +0000)]
FP SETOLT, SETOLT, SETUGE, SETUGT conditions were implemented incorrectly
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27755
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 06:58:41 +0000 (06:58 +0000)]
Make some code more general, adding support for constant formation of several
new patterns.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27754
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 06:58:16 +0000 (06:58 +0000)]
New testcases
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27753
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 06:07:44 +0000 (06:07 +0000)]
Learn how to make odd splatted constants in range [17,29]. This implements
PowerPC/vec_constants.ll:test_29.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27752
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 06:06:50 +0000 (06:06 +0000)]
new testcase
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27751
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 06:00:21 +0000 (06:00 +0000)]
Pull some code out into a helper function.
Effeciently codegen even splats in the range [-32,30].
This allows us to codegen <30,30,30,30> as:
vspltisw v0, 15
vadduwm v2, v0, v0
instead of as a cp load.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27750
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 05:58:22 +0000 (05:58 +0000)]
New testcase
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27749
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 05:28:54 +0000 (05:28 +0000)]
Implement a TODO: for any shuffle that can be viewed as a v4[if]32 shuffle,
if it can be implemented in 3 or fewer discrete altivec instructions, codegen
it as such. This implements Regression/CodeGen/PowerPC/vec_perf_shuffle.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27748
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 05:27:31 +0000 (05:27 +0000)]
new testcase, these shuffles can be implemented with discrete instructions,
and shouldn't be lowered to vperm.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27747
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 05:26:20 +0000 (05:26 +0000)]
Regenerate with adjusted costs
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27746
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 05:25:16 +0000 (05:25 +0000)]
Encode a cost of zero as a cost of 1.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27745
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 05:08:46 +0000 (05:08 +0000)]
Regenerate with correct offset
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27744
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 05:05:52 +0000 (05:05 +0000)]
Really, I can count!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27743
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 00:47:48 +0000 (00:47 +0000)]
Increase the opcodes by one each to disambiguate COPY from VMRGHW.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27742
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 00:47:18 +0000 (00:47 +0000)]
assign stable opcodes to the various altivec ops.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27741
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 00:46:09 +0000 (00:46 +0000)]
PPCPerfectShuffle.h is autogenerated, don't include it in the LOC counts.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27740
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 00:37:02 +0000 (00:37 +0000)]
Check in a table, generated by llvm-PerfectShuffle, of optimal shuffles
of various 4-element vectors.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27739
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 00:35:34 +0000 (00:35 +0000)]
Rename BuildShuffleTable -> PerfectShuffle
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27738
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 00:33:35 +0000 (00:33 +0000)]
rename the table
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27737
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 17 Apr 2006 00:30:41 +0000 (00:30 +0000)]
Initial checking of a perfect shuffle generation program for 4-element
Altivec vectors.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27736
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Sun, 16 Apr 2006 18:16:43 +0000 (18:16 +0000)]
Better way to splat v2f64
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27735
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Sun, 16 Apr 2006 18:11:28 +0000 (18:11 +0000)]
movduprm, movshduprm bugs
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27734
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Sun, 16 Apr 2006 07:02:22 +0000 (07:02 +0000)]
Encoding bugs
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27733
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Sun, 16 Apr 2006 06:58:19 +0000 (06:58 +0000)]
Can't fold loads into alias vector SSE ops used for scalar operation. The load
address has to be 16-byte aligned but the values aren't spilled to 128-bit
locations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27732
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 16 Apr 2006 01:37:57 +0000 (01:37 +0000)]
Implement a TODO: have the legalizer canonicalize a bunch of operations to
one type (v4i32) so that we don't have to write patterns for each type, and
so that more CSE opportunities are exposed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27731
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 16 Apr 2006 01:36:45 +0000 (01:36 +0000)]
Add support for promoting stores from one legal type to another, allowing us
to write one pattern for vector stores instead of 4.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27730
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 16 Apr 2006 01:01:29 +0000 (01:01 +0000)]
Make the BUILD_VECTOR lowering code much more aggressive w.r.t constant vectors.
Remove some done items from the todo list.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27729
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 16 Apr 2006 00:51:47 +0000 (00:51 +0000)]
Fix a bug in the 'shuffle(undef,x,mask) -> shuffle(x, undef,mask')' xform
Make the insert/extract elt -> shuffle code more aggressive.
This fixes CodeGen/PowerPC/vec_shuffle.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27728
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 16 Apr 2006 00:03:56 +0000 (00:03 +0000)]
Canonicalize shuffle(undef,x,mask) -> shuffle(x, undef,mask').
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27727
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 15 Apr 2006 23:48:05 +0000 (23:48 +0000)]
Fix a crash when faced with a shuffle vector that has an undef in its mask.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27726
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 15 Apr 2006 23:45:24 +0000 (23:45 +0000)]
Add patterns for matching vnots with bit converted inputs. Most of these will
go away when I start using evan's binop type canonicalizer
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27725
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 15 Apr 2006 23:39:14 +0000 (23:39 +0000)]
Add a new vnot_conv predicate for matching vnot's where the allones vector is
bitconverted from some other type.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27724
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 15 Apr 2006 23:38:00 +0000 (23:38 +0000)]
Make these predicates return true for bit_convert(buildvector)'s as well as
buildvectors.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27723
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Sat, 15 Apr 2006 06:10:09 +0000 (06:10 +0000)]
More encoding bugs
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27722
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Sat, 15 Apr 2006 05:59:08 +0000 (05:59 +0000)]
pslldrm, psrawrm, etc. encoding bug
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27721
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Sat, 15 Apr 2006 05:52:42 +0000 (05:52 +0000)]
hsubp{s|d} encoding bug
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27720
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Sat, 15 Apr 2006 05:37:34 +0000 (05:37 +0000)]
Silly bug
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27719
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Sat, 15 Apr 2006 03:13:24 +0000 (03:13 +0000)]
Do not use movs{h|l}dup for a shuffle with a single non-undef node.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27718
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 15 Apr 2006 01:39:45 +0000 (01:39 +0000)]
significant cleanups to code that uses insert/extractelt heavily. This builds
maximal shuffles out of them where possible.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27717
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Fri, 14 Apr 2006 23:33:27 +0000 (23:33 +0000)]
Added SSE (and other) entries to foldMemoryOperand().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27716
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Fri, 14 Apr 2006 23:32:40 +0000 (23:32 +0000)]
Some clean up
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27715
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 14 Apr 2006 23:19:08 +0000 (23:19 +0000)]
Allow undef in a shuffle mask
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27714
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 14 Apr 2006 22:20:32 +0000 (22:20 +0000)]
Move these ctors out of line
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27713
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 14 Apr 2006 22:20:07 +0000 (22:20 +0000)]
These instructions always return a packed vector. Improve the class definitions to expose this fact.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27712
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Fri, 14 Apr 2006 21:59:03 +0000 (21:59 +0000)]
Last few SSE3 intrinsics.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27711
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 14 Apr 2006 21:42:41 +0000 (21:42 +0000)]
Teach scalarrepl to promote unions of vectors and floats, producing
insert/extractelement operations. This implements
Transforms/ScalarRepl/vector_promote.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27710
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 14 Apr 2006 21:41:54 +0000 (21:41 +0000)]
New testcase, checking to see we can turn this code:
void test(vector float *F, float f) {
vector float G = *F + *F;
*((float*)&G) = f;
*F = G + G;
}
void test2(vector float *F, float f) {
vector float G = *F + *F;
((float*)&G)[2] = f;
*F = G + G;
}
void test3(vector float *F, float *f) {
vector float G = *F + *F;
*f = ((float*)&G)[2];
}
void test4(vector float *F, float *f) {
vector float G = *F + *F;
*f = *((float*)&G);
}
into insert/extract element operations with no memory traffic.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27709
91177308-0d34-0410-b5e6-
96231b3b80d8
Tanya Lattner [Fri, 14 Apr 2006 19:24:33 +0000 (19:24 +0000)]
Adding back vector instructions to keep in mainline.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27704
91177308-0d34-0410-b5e6-
96231b3b80d8
Tanya Lattner [Fri, 14 Apr 2006 19:07:42 +0000 (19:07 +0000)]
Removing unimplemented vector instructions from language referrence.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27703
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Spencer [Fri, 14 Apr 2006 14:11:48 +0000 (14:11 +0000)]
Correct the Superclasses list for GlobalVariable and Function to indicate
that they are "Constant" as they derive from GlobalValue. Also, fix some of
the wording where it mentions this.
Patch inspired by Nai Xia.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27701
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Spencer [Fri, 14 Apr 2006 13:53:56 +0000 (13:53 +0000)]
Allow an option, -with-externals, to be specified that provides the location
of the external tests. This turns into --with-externals option to configure.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27700
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Fri, 14 Apr 2006 07:43:12 +0000 (07:43 +0000)]
Misc. SSE2 intrinsics: clflush, lfench, mfence
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27699
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Fri, 14 Apr 2006 07:26:43 +0000 (07:26 +0000)]
We were not adjusting the frame size to ensure proper alignment when alloca /
vla are present in the function. This causes a crash when a leaf function
allocates space on the stack used to store / load with 128-bit SSE
instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27698
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Fri, 14 Apr 2006 07:24:04 +0000 (07:24 +0000)]
New entry
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27697
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Spencer [Fri, 14 Apr 2006 06:32:31 +0000 (06:32 +0000)]
Don't print out the install command for Intrinsics.gen unless VERBOSE mode.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27696
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 14 Apr 2006 06:08:35 +0000 (06:08 +0000)]
Make this assertion better
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27695
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 14 Apr 2006 06:06:51 +0000 (06:06 +0000)]
Force a specific config, because this test fails in certain configs otherwise.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27694
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 14 Apr 2006 06:01:58 +0000 (06:01 +0000)]
Move the rest of the PPCTargetLowering::LowerOperation cases out into
separate functions, for simplicity and code clarity.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27693
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 14 Apr 2006 05:19:18 +0000 (05:19 +0000)]
Pull the VECTOR_SHUFFLE and BUILD_VECTOR lowering code out into separate
functions, which makes the code much cleaner :)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27692
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 14 Apr 2006 05:10:20 +0000 (05:10 +0000)]
Implement value #'ing for vector operations, implementing
Regression/Transforms/GCSE/vectorops.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27691
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 14 Apr 2006 05:09:53 +0000 (05:09 +0000)]
new testcase, vector operations should be CSE'd
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27690
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 14 Apr 2006 04:47:26 +0000 (04:47 +0000)]
Remove this test, there is no need to test GCC's bugs
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27689
91177308-0d34-0410-b5e6-
96231b3b80d8