summaryrefslogtreecommitdiffstats
path: root/llvm/lib
Commit message (Collapse)AuthorAgeFilesLines
* This should be a win of every archAndrew Lenharth2006-04-021-1/+26
| | | | llvm-svn: 27364
* This makes McCat/12-IOtest go 8x faster or soAndrew Lenharth2006-04-021-2/+14
| | | | llvm-svn: 27363
* This will be needed soonAndrew Lenharth2006-04-021-1/+146
| | | | llvm-svn: 27362
* add a noteChris Lattner2006-04-021-0/+9
| | | | llvm-svn: 27360
* Inform the dag combiner that the predicate compares only return a low bit.Chris Lattner2006-04-022-1/+39
| | | | llvm-svn: 27359
* relax assertionChris Lattner2006-04-021-1/+4
| | | | llvm-svn: 27358
* Allow targets to compute masked bits for intrinsics.Chris Lattner2006-04-021-4/+9
| | | | llvm-svn: 27357
* Add a little dag combine to compile this:Chris Lattner2006-04-021-0/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | int %AreSecondAndThirdElementsBothNegative(<4 x float>* %in) { entry: %tmp1 = load <4 x float>* %in ; <<4 x float>> [#uses=1] %tmp = tail call int %llvm.ppc.altivec.vcmpgefp.p( int 1, <4 x float> < float 0x7FF8000000000000, float 0.000000e+00, float 0.000000e+00, float 0x7FF8000000000000 >, <4 x float> %tmp1 ) ; <int> [#uses=1] %tmp = seteq int %tmp, 0 ; <bool> [#uses=1] %tmp3 = cast bool %tmp to int ; <int> [#uses=1] ret int %tmp3 } into this: _AreSecondAndThirdElementsBothNegative: mfspr r2, 256 oris r4, r2, 49152 mtspr 256, r4 li r4, lo16(LCPI1_0) lis r5, ha16(LCPI1_0) lvx v0, 0, r3 lvx v1, r5, r4 vcmpgefp. v0, v1, v0 mfcr r3, 2 rlwinm r3, r3, 27, 31, 31 mtspr 256, r2 blr instead of this: _AreSecondAndThirdElementsBothNegative: mfspr r2, 256 oris r4, r2, 49152 mtspr 256, r4 li r4, lo16(LCPI1_0) lis r5, ha16(LCPI1_0) lvx v0, 0, r3 lvx v1, r5, r4 vcmpgefp. v0, v1, v0 mfcr r3, 2 rlwinm r3, r3, 27, 31, 31 xori r3, r3, 1 cntlzw r3, r3 srwi r3, r3, 5 mtspr 256, r2 blr llvm-svn: 27356
* vector casts of casts are eliminable. Transform this:Chris Lattner2006-04-021-0/+4
| | | | | | | | | | | %tmp = cast <4 x uint> %tmp to <4 x int> ; <<4 x int>> [#uses=1] %tmp = cast <4 x int> %tmp to <4 x float> ; <<4 x float>> [#uses=1] into: %tmp = cast <4 x uint> %tmp to <4 x float> ; <<4 x float>> [#uses=1] llvm-svn: 27355
* vector casts never reinterpret bitsChris Lattner2006-04-021-0/+5
| | | | llvm-svn: 27354
* Allow transforming this:Chris Lattner2006-04-021-2/+4
| | | | | | | | | | | | %tmp = cast <4 x uint>* %testData to <4 x int>* ; <<4 x int>*> [#uses=1] %tmp = load <4 x int>* %tmp ; <<4 x int>> [#uses=1] to this: %tmp = load <4 x uint>* %testData ; <<4 x uint>> [#uses=1] %tmp = cast <4 x uint> %tmp to <4 x int> ; <<4 x int>> [#uses=1] llvm-svn: 27353
* Turn altivec lvx/stvx intrinsics into loads and stores. This allows theChris Lattner2006-04-021-0/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | elimination of one load from this: int AreSecondAndThirdElementsBothNegative( vector float *in ) { #define QNaN 0x7FC00000 const vector unsigned int testData = (vector unsigned int)( QNaN, 0, 0, QNaN ); vector float test = vec_ld( 0, (float*) &testData ); return ! vec_any_ge( test, *in ); } Now generating: _AreSecondAndThirdElementsBothNegative: mfspr r2, 256 oris r4, r2, 49152 mtspr 256, r4 li r4, lo16(LCPI1_0) lis r5, ha16(LCPI1_0) addi r6, r1, -16 lvx v0, r5, r4 stvx v0, 0, r6 lvx v1, 0, r3 vcmpgefp. v0, v0, v1 mfcr r3, 2 rlwinm r3, r3, 27, 31, 31 xori r3, r3, 1 cntlzw r3, r3 srwi r3, r3, 5 mtspr 256, r2 blr llvm-svn: 27352
* Remove done itemChris Lattner2006-04-021-5/+0
| | | | llvm-svn: 27351
* Implement promotion for EXTRACT_VECTOR_ELT, allowing v16i8 multiplies to ↵Chris Lattner2006-04-021-16/+27
| | | | | | work with PowerPC. llvm-svn: 27349
* add a noteChris Lattner2006-04-021-0/+11
| | | | llvm-svn: 27348
* Implement the Expand action for binary vector operations to break the binopChris Lattner2006-04-021-1/+18
| | | | | | | into elements and operate on each piece. This allows generic vector integer multiplies to work on PPC, though the generated code is horrible. llvm-svn: 27347
* Intrinsics that just load from memory can be treated like loads: they don'tChris Lattner2006-04-021-4/+25
| | | | | | | have to serialize against each other. This allows us to schedule lvx's across each other, for example. llvm-svn: 27346
* Adjust to change in Intrinsics.gen interface.Chris Lattner2006-04-021-0/+1
| | | | llvm-svn: 27344
* Constant fold all of the vector binops. This allows us to compile this:Chris Lattner2006-04-021-0/+49
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | "vector unsigned char mergeLowHigh = (vector unsigned char) ( 8, 9, 10, 11, 16, 17, 18, 19, 12, 13, 14, 15, 20, 21, 22, 23 ); vector unsigned char mergeHighLow = vec_xor( mergeLowHigh, vec_splat_u8(8));" aka: void %test2(<16 x sbyte>* %P) { store <16 x sbyte> cast (<4 x int> xor (<4 x int> cast (<16 x ubyte> < ubyte 8, ubyte 9, ubyte 10, ubyte 11, ubyte 16, ubyte 17, ubyte 18, ubyte 19, ubyte 12, ubyte 13, ubyte 14, ubyte 15, ubyte 20, ubyte 21, ubyte 22, ubyte 23 > to <4 x int>), <4 x int> cast (<16 x sbyte> < sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8, sbyte 8 > to <4 x int>)) to <16 x sbyte>), <16 x sbyte> * %P ret void } into this: _test2: mfspr r2, 256 oris r4, r2, 32768 mtspr 256, r4 li r4, lo16(LCPI2_0) lis r5, ha16(LCPI2_0) lvx v0, r5, r4 stvx v0, 0, r3 mtspr 256, r2 blr instead of this: _test2: mfspr r2, 256 oris r4, r2, 49152 mtspr 256, r4 li r4, lo16(LCPI2_0) lis r5, ha16(LCPI2_0) vspltisb v0, 8 lvx v1, r5, r4 vxor v0, v1, v0 stvx v0, 0, r3 mtspr 256, r2 blr ... which occurs here: http://developer.apple.com/hardware/ve/calcspeed.html llvm-svn: 27343
* Add a new -view-legalize-dags command line optionChris Lattner2006-04-022-3/+13
| | | | llvm-svn: 27342
* Implement constant folding of bit_convert of arbitrary constant ↵Chris Lattner2006-04-021-2/+139
| | | | | | vbuild_vector nodes. llvm-svn: 27341
* These entries already existChris Lattner2006-04-021-4/+0
| | | | llvm-svn: 27340
* Add some missing node namesChris Lattner2006-04-021-0/+9
| | | | llvm-svn: 27339
* New noteChris Lattner2006-04-021-0/+6
| | | | llvm-svn: 27337
* Constant fold casts from things like <4 x int> -> <4 x uint>, likewise int<->fp.Chris Lattner2006-04-021-0/+108
| | | | llvm-svn: 27336
* Custom lower all BUILD_VECTOR's so that we can compile vec_splat_u8(8) intoChris Lattner2006-04-021-0/+2
| | | | | | "vspltisb v0, 8" instead of a constant pool load. llvm-svn: 27335
* Prefer larger register classes over smaller ones when a register occurs inChris Lattner2006-04-021-7/+21
| | | | | | multiple register classes. This fixes PowerPC/2006-04-01-FloatDoubleExtend.ll llvm-svn: 27334
* add valuemapper support for inline asmChris Lattner2006-04-011-1/+1
| | | | llvm-svn: 27332
* Implement vnot using VNOR instead of using 'vspltisb v0, -1' and vxorChris Lattner2006-04-011-0/+4
| | | | llvm-svn: 27331
* Fix InstCombine/2006-04-01-InfLoop.llChris Lattner2006-04-011-1/+2
| | | | llvm-svn: 27330
* Fold A^(B&A) -> (B&A)^AChris Lattner2006-04-011-7/+46
| | | | | | | | Fold (B&A)^A == ~B & A This implements InstCombine/xor.ll:test2[56] llvm-svn: 27328
* Fix Transforms/IndVarsSimplify/2006-03-31-NegativeStride.ll andChris Lattner2006-04-011-27/+27
| | | | | | | PR726 by performing consistent signed division, not consistent unsigned division when evaluating scev's. Do not touch udivs. llvm-svn: 27326
* ADd a noteChris Lattner2006-04-011-0/+12
| | | | llvm-svn: 27324
* If we can look through vector operations to find the scalar version of anChris Lattner2006-03-311-0/+40
| | | | | | extract_element'd value, do so. llvm-svn: 27323
* Shrinkify some more intrinsic definitions.Chris Lattner2006-03-311-52/+17
| | | | llvm-svn: 27322
* An entry about packed type alignments.Evan Cheng2006-03-311-0/+4
| | | | llvm-svn: 27321
* Pull operand asm string into base class, shrinkifying intrinsic definitions.Chris Lattner2006-03-311-77/+58
| | | | | | No functionality change. llvm-svn: 27320
* TargetData.cpp::getTypeInfo() was returning alignment of element type as theEvan Cheng2006-03-311-0/+3
| | | | | | | | | alignment of a packed type. This is obviously wrong. Added a workaround that returns the size of the packed type as its alignment. The correct fix would be to return a target dependent alignment value provided via TargetLowering (or some other interface). llvm-svn: 27319
* Delete identity shuffles, implementing ↵Chris Lattner2006-03-311-2/+56
| | | | | | CodeGen/Generic/vector-identity-shuffle.ll llvm-svn: 27317
* Fix 80 column violations :)Chris Lattner2006-03-311-14/+13
| | | | llvm-svn: 27315
* Use a X86 target specific node X86ISD::PINSRW instead of a mal-formedEvan Cheng2006-03-313-6/+12
| | | | | | INSERT_VECTOR_ELT to insert a 16-bit value in a 128-bit vector. llvm-svn: 27314
* Added support for SSE3 horizontal ops: haddp{s|d} and hsub{s|d}.Evan Cheng2006-03-311-0/+43
| | | | llvm-svn: 27310
* fix a pastoChris Lattner2006-03-311-1/+1
| | | | llvm-svn: 27308
* Add vperm support for all datatypesChris Lattner2006-03-311-19/+13
| | | | llvm-svn: 27307
* Rearrange code a bitChris Lattner2006-03-311-21/+25
| | | | llvm-svn: 27306
* Add, sub and shuffle are legal for all vector typesChris Lattner2006-03-311-8/+9
| | | | llvm-svn: 27305
* Add support to use pextrw and pinsrw to extract and insert a word elementEvan Cheng2006-03-313-4/+69
| | | | | | from a 128-bit vector. llvm-svn: 27304
* Add vector_extract and vector_insert nodes.Evan Cheng2006-03-311-0/+4
| | | | llvm-svn: 27303
* add a noteChris Lattner2006-03-311-0/+2
| | | | llvm-svn: 27302
* constant fold extractelement with undef operands.Chris Lattner2006-03-311-1/+7
| | | | llvm-svn: 27301
OpenPOWER on IntegriCloud