Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | [Hexagon] Make floating point operations expensive for vectorization | Krzysztof Parzyszek | 2018-06-12 | 1 | -0/+91 |
| | | | | llvm-svn: 334508 | ||||
* | [Hexagon] Implement vector-pair zero as V6_vsubw_dv | Krzysztof Parzyszek | 2018-06-06 | 1 | -0/+41 |
| | | | | llvm-svn: 334123 | ||||
* | [Hexagon] Split CTPOP of vector pairs | Krzysztof Parzyszek | 2018-06-06 | 1 | -0/+26 |
| | | | | llvm-svn: 334109 | ||||
* | [Hexagon] Select HVX code for vector CTPOP, CTLZ, and CTTZ | Krzysztof Parzyszek | 2018-06-01 | 2 | -0/+249 |
| | | | | llvm-svn: 333760 | ||||
* | [Hexagon] Use vector align-left when shift amount fits in 3 bits | Krzysztof Parzyszek | 2018-05-30 | 4 | -56/+28 |
| | | | | | | | This saves an instruction because for align-right the shift amount would need to be put in a register first. llvm-svn: 333543 | ||||
* | [Hexagon] Fix packing source vectors in shufflevector selection | Krzysztof Parzyszek | 2018-05-25 | 1 | -0/+12 |
| | | | | | | | | When the shuffle mask selected a subvector of the second input vector, and aligning of the source was performed, the shuffle mask was updated incorrectly, resulting in an ICE further in the selection process. llvm-svn: 333279 | ||||
* | [Hexagon] Add patterns for accumulating HVX compares | Krzysztof Parzyszek | 2018-05-22 | 4 | -72/+651 |
| | | | | llvm-svn: 333009 | ||||
* | [Hexagon] Mark HVX vector predicate bitwise ops as legal, add patterns | Krzysztof Parzyszek | 2018-05-16 | 2 | -0/+204 |
| | | | | llvm-svn: 332525 | ||||
* | [Hexagon] Add patterns for vector shift-and-accumulate | Krzysztof Parzyszek | 2018-05-09 | 2 | -432/+65 |
| | | | | llvm-svn: 331918 | ||||
* | [Hexagon] Improve HVX instruction selection (bitcast, vsplat) | Krzysztof Parzyszek | 2018-04-20 | 2 | -0/+76 |
| | | | | | | | | | | There was some unfortunate interaction between VSPLAT and BITCAST related to the selection of constant vectors (coming from selecting shuffles). Introduce VSPLATW that always splats a 32-bit word, and can have arbitrary result type (to avoid BITCASTs of VSPLAT). Clean up the previous selection of BITCAST/VSPLAT. llvm-svn: 330471 | ||||
* | [Hexagon] Use legal types when lowering CONCAT_VECTORS via BUILD_VECTOR | Krzysztof Parzyszek | 2018-04-19 | 1 | -0/+34 |
| | | | | llvm-svn: 330344 | ||||
* | [Hexagon] Generate code for vector bswap intrinsics | Krzysztof Parzyszek | 2018-04-19 | 1 | -0/+45 |
| | | | | llvm-svn: 330333 | ||||
* | [Hexagon] Implement TTI::shouldMaximizeVectorBandwidth | Krzysztof Parzyszek | 2018-03-27 | 1 | -0/+47 |
| | | | | llvm-svn: 328648 | ||||
* | [Hexagon] Add heuristic to exclude critical path cost for scheduling | Krzysztof Parzyszek | 2018-03-20 | 1 | -2/+1 |
| | | | | | | Patch by Brendon Cahoon. llvm-svn: 328022 | ||||
* | [Hexagon] Improve scheduling based on register pressure | Krzysztof Parzyszek | 2018-03-20 | 1 | -1/+2 |
| | | | | | | Patch by Brendon Cahoon. llvm-svn: 327975 | ||||
* | [Hexagon] Ignore indexed loads when handling unaligned loads | Krzysztof Parzyszek | 2018-03-08 | 1 | -0/+67 |
| | | | | llvm-svn: 327037 | ||||
* | [Hexagon] Rewrite non-HVX unaligned loads as pairs of aligned ones | Krzysztof Parzyszek | 2018-03-07 | 1 | -1/+1 |
| | | | | | | | | | This is a follow-up to r325169, this time for all types, not just HVX vector types. Disable this by default, since it's not always safe. llvm-svn: 326915 | ||||
* | [Hexagon] Generate valignb for shifting shuffles (instead of vdelta) | Krzysztof Parzyszek | 2018-03-02 | 2 | -0/+2548 |
| | | | | llvm-svn: 326627 | ||||
* | [Hexagon] Return true in enableMultipleCopyHints(). | Jonas Paulsson | 2018-02-21 | 1 | -2/+2 |
| | | | | | | | | | | Enable multiple COPY hints to eliminate more COPYs during register allocation. Note that this is something all targets should do, see https://reviews.llvm.org/D38128. Review: Krzysztof Parzyszek llvm-svn: 325697 | ||||
* | [Hexagon] Split HVX vector pair loads/stores, expand unaligned loads | Krzysztof Parzyszek | 2018-02-14 | 1 | -0/+26 |
| | | | | llvm-svn: 325169 | ||||
* | [Hexagon] Add code to select QTRUE and QFALSE | Krzysztof Parzyszek | 2018-02-09 | 1 | -0/+29 |
| | | | | | | Fixes http://llvm.org/PR36320. llvm-svn: 324763 | ||||
* | [Hexagon] Lower concat of more than 2 vectors into build_vector | Krzysztof Parzyszek | 2018-02-06 | 1 | -0/+35 |
| | | | | llvm-svn: 324391 | ||||
* | [Hexagon] Split HVX operations on vector pairs | Krzysztof Parzyszek | 2018-02-06 | 3 | -0/+77 |
| | | | | | | | | Vector pairs are legal types, but not every operation can work on pairs. For those operations that are legal for single vectors, generate a concat of their results on pair halves. llvm-svn: 324350 | ||||
* | [Hexagon] Handle lowering of SETCC via setCondCodeAction | Krzysztof Parzyszek | 2018-02-06 | 2 | -60/+30 |
| | | | | | | | | | | It was expanded directly into instructions earlier. That was to avoid loads from a constant pool for a vector negation: "xor x, splat(i1 -1)". Implement ISD opcodes QTRUE and QFALSE to denote logical vectors of all true and all false values, and handle setcc with negations through selection patterns. llvm-svn: 324348 | ||||
* | [Hexagon] Use V6_vmpyih for halfword multiplication | Krzysztof Parzyszek | 2018-02-05 | 1 | -4/+2 |
| | | | | | | | Unlike V6_vmpyhv, it produces the result in the exact form that is expected without the need for a shuffle. llvm-svn: 324241 | ||||
* | [Hexagon] Implement HVX codegen for vector shifts | Krzysztof Parzyszek | 2018-01-31 | 3 | -1/+609 |
| | | | | llvm-svn: 323914 | ||||
* | [Hexagon] Handle ANY_EXTEND_VECTOR_INREG in lowering | Krzysztof Parzyszek | 2018-01-31 | 1 | -0/+20 |
| | | | | llvm-svn: 323912 | ||||
* | [Hexagon] Handle SETCC on vector pairs in lowering | Krzysztof Parzyszek | 2018-01-31 | 1 | -0/+29 |
| | | | | llvm-svn: 323911 | ||||
* | [Hexagon] Handle BUILD_VECTOR from undef values in buildHvxVectorReg | Krzysztof Parzyszek | 2018-01-31 | 1 | -0/+39 |
| | | | | llvm-svn: 323889 | ||||
* | [Hexagon] Only process bitcasts of vsplats when selecting const vectors | Krzysztof Parzyszek | 2018-01-31 | 1 | -0/+37 |
| | | | | | | | | Selecting of constant HVX vectors involves some "manual processing", which mishandled an unrelated BITCAST operation causing a selection error. llvm-svn: 323887 | ||||
* | [Hexagon] Generate constant splats instead of loads from constant pool | Krzysztof Parzyszek | 2018-01-26 | 1 | -0/+12 |
| | | | | llvm-svn: 323568 | ||||
* | [Hexagon] Run late copy propagation and dead code elimination passes | Krzysztof Parzyszek | 2018-01-24 | 4 | -16/+20 |
| | | | | llvm-svn: 323346 | ||||
* | [Hexagon] Add patterns for sext_inreg of HVX vector types | Krzysztof Parzyszek | 2018-01-23 | 1 | -0/+54 |
| | | | | llvm-svn: 323250 | ||||
* | [Hexagon] Implement basic vector operations on vectors vNi1 | Krzysztof Parzyszek | 2018-01-23 | 1 | -0/+20 |
| | | | | | | | | | | | In addition to that, make sure that there are no boolean vector types that are associated with multiple register classes. Specifically, remove v32i1 and v64i1 from integer register classes. These types will correspond to results of vector comparisons, and as such should belong to the vector predicate class. Having them in scalar registers as well makes legalization ambiguous. llvm-svn: 323229 | ||||
* | [Hexagon] Cast elements to correct type when creating constant vector | Krzysztof Parzyszek | 2018-01-11 | 1 | -0/+12 |
| | | | | llvm-svn: 322301 | ||||
* | [Hexagon] Even simpler patterns for sign- and zero-extending HVX vectors | Krzysztof Parzyszek | 2018-01-05 | 3 | -50/+18 |
| | | | | | | Recommit r321897 with updated testcases. llvm-svn: 321908 | ||||
* | Revert r321894: it requires a part of another commit that is not ready yet | Krzysztof Parzyszek | 2018-01-05 | 1 | -54/+0 |
| | | | | | | | Commit message: [Hexagon] Add patterns for sext_inreg of HVX vector types llvm-svn: 321904 | ||||
* | [Hexagon] Add patterns for truncating HVX vector types | Krzysztof Parzyszek | 2018-01-05 | 1 | -0/+18 |
| | | | | | | Only non-bool vectors. llvm-svn: 321895 | ||||
* | [Hexagon] Add patterns for sext_inreg of HVX vector types | Krzysztof Parzyszek | 2018-01-05 | 1 | -0/+54 |
| | | | | llvm-svn: 321894 | ||||
* | [Hexagon] Fix generation of vector sign extensions | Krzysztof Parzyszek | 2018-01-02 | 2 | -16/+48 |
| | | | | llvm-svn: 321650 | ||||
* | [Hexagon] Allow construction of HVX vector predicates | Krzysztof Parzyszek | 2017-12-20 | 2 | -0/+37 |
| | | | | | | Handle BUILD_VECTOR of boolean values. llvm-svn: 321220 | ||||
* | [Hexagon] Cache loads to select to avoid traversing mutating DAG | Krzysztof Parzyszek | 2017-12-18 | 1 | -0/+32 |
| | | | | llvm-svn: 321034 | ||||
* | [Hexagon] Generate HVX code for vector sign-, zero- and any-extends | Krzysztof Parzyszek | 2017-12-18 | 3 | -0/+130 |
| | | | | | | Implement any-extend as zero-extend. llvm-svn: 321004 | ||||
* | [Hexagon] Handle concat_vectors of all allowed HVX types | Krzysztof Parzyszek | 2017-12-15 | 3 | -0/+82 |
| | | | | llvm-svn: 320865 | ||||
* | [Hexagon] Generate HVX code for comparisons and selects | Krzysztof Parzyszek | 2017-12-14 | 2 | -0/+588 |
| | | | | llvm-svn: 320744 | ||||
* | [Hexagon] Relax some checks in testcases, NFC | Krzysztof Parzyszek | 2017-12-12 | 2 | -95/+95 |
| | | | | llvm-svn: 320529 | ||||
* | [Hexagon] Better detection of identity and undef masks in shuffles | Krzysztof Parzyszek | 2017-12-12 | 1 | -6/+4 |
| | | | | llvm-svn: 320523 | ||||
* | [Hexagon] Fix wrong order of operands for vmux | Krzysztof Parzyszek | 2017-12-12 | 1 | -0/+15 |
| | | | | | | | | | | | | Shuffle generation uses vmux to collapse vectors resulting from two individual shuffles into one. The indexes of the elements selected from the first operand were indicated by 0xFF in the constant vector used in the compare instruction, but the compare (veqb) set the bits corresponding to the 0x00 elements, thus inverting the selection. Reverse the order of operands to vmux to get the correct output. llvm-svn: 320516 | ||||
* | [Hexagon] Crash in instruction selection for insert_vector_elt for HVX | Krzysztof Parzyszek | 2017-12-11 | 1 | -0/+23 |
| | | | | | | | | A wrong type was passed to insertVector, causing an out-of-bounds value to be added an an operand to HexagonISD::INSERT. This later failed in instruction selection. llvm-svn: 320369 | ||||
* | [Hexagon] Generate HVX code for basic arithmetic operations | Krzysztof Parzyszek | 2017-12-07 | 1 | -0/+278 |
| | | | | | | Handle and, or, xor, add, sub, mul for vectors of i8, i16, and i32. llvm-svn: 320063 |