Krzysztof Parzyszek
23bcf06a15
[Hexagon] Add/fix patterns for 32/64-bit vector compares and logical ops
...
llvm-svn: 330330
2018-04-19 14:24:31 +00:00
Krzysztof Parzyszek
9915291ab8
[Hexagon] Fix zero-extending non-HVX bool vectors
...
llvm-svn: 327712
2018-03-16 15:03:37 +00:00
Krzysztof Parzyszek
2c3edf0567
[Hexagon] Rewrite non-HVX unaligned loads as pairs of aligned ones
...
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
2018-03-07 17:27:18 +00:00
Krzysztof Parzyszek
d70f5a0eb4
[Hexagon] Add patterns for compares of i1 values
...
llvm-svn: 326220
2018-02-27 18:31:46 +00:00
Amaury Sechet
893a6b89ff
[DAGCOmbine] Ensure that (brcond (setcc ...)) is handled in a canonical manner.
...
Summary:
There are transformation that change setcc into other constructs, and transform that try to reconstruct a setcc from the brcond condition. Depending on what order these transform are done, the end result differs.
Most of the time, it is preferable to get a setcc as a brcond argument (and this is why brcond try to recreate the setcc in the first place) so we ensure this is done every time by also doing it at the setcc level when the only user is a brcond.
Reviewers: spatel, hfinkel, niravd, craig.topper
Subscribers: nhaehnle, llvm-commits
Differential Revision: https://reviews.llvm.org/D41235
llvm-svn: 325892
2018-02-23 11:50:42 +00:00
Krzysztof Parzyszek
ad83ce4cb4
[Hexagon] Split HVX vector pair loads/stores, expand unaligned loads
...
llvm-svn: 325169
2018-02-14 20:46:06 +00:00
Krzysztof Parzyszek
8abaf8954a
[Hexagon] Extract HVX lowering and selection into HVX-specific files, NFC
...
llvm-svn: 324392
2018-02-06 20:22:20 +00:00
Krzysztof Parzyszek
88f11003a0
[Hexagon] Split HVX operations on vector pairs
...
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
2018-02-06 14:24:57 +00:00
Krzysztof Parzyszek
69f1d7e370
[Hexagon] Handle lowering of SETCC via setCondCodeAction
...
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
2018-02-06 14:16:52 +00:00
Krzysztof Parzyszek
1108ee2496
[Hexagon] Implement HVX codegen for vector shifts
...
llvm-svn: 323914
2018-01-31 20:49:24 +00:00
Krzysztof Parzyszek
90ca4e8b0c
[Hexagon] Generate constant splats instead of loads from constant pool
...
llvm-svn: 323568
2018-01-26 21:54:56 +00:00
Krzysztof Parzyszek
5aef4b5997
[Hexagon] Remove unused HexagonISD opcodes, NFC
...
llvm-svn: 323324
2018-01-24 14:07:37 +00:00
Krzysztof Parzyszek
d5e8a260bb
[Hexagon] Add patterns for sext_inreg of HVX vector types
...
llvm-svn: 323250
2018-01-23 19:56:16 +00:00
Krzysztof Parzyszek
3780a0e1fa
[Hexagon] Implement basic vector operations on vectors vNi1
...
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
2018-01-23 17:53:59 +00:00
Krzysztof Parzyszek
7fb738ab71
[Hexagon] Implement signed and unsigned multiply-high for vectors
...
llvm-svn: 322499
2018-01-15 18:43:55 +00:00
Krzysztof Parzyszek
b0b52618c0
[Hexagon] Even simpler patterns for sign- and zero-extending HVX vectors
...
Recommit r321897 with updated testcases.
llvm-svn: 321908
2018-01-05 22:31:11 +00:00
Krzysztof Parzyszek
4ed8ef6f8e
Revert r321894: it requires a part of another commit that is not ready yet
...
Commit message:
[Hexagon] Add patterns for sext_inreg of HVX vector types
llvm-svn: 321904
2018-01-05 21:57:43 +00:00
Krzysztof Parzyszek
9920dab75e
Revert r321897: affected testcases were not updated
...
Commit message:
[Hexagon] Even simpler patterns for sign- and zero-extending HVX vectors
llvm-svn: 321902
2018-01-05 21:50:15 +00:00
Krzysztof Parzyszek
577d2f2fbd
[Hexagon] Even simpler patterns for sign- and zero-extending HVX vectors
...
llvm-svn: 321897
2018-01-05 20:49:26 +00:00
Krzysztof Parzyszek
f9d01a12d1
[Hexagon] Add patterns for truncating HVX vector types
...
Only non-bool vectors.
llvm-svn: 321895
2018-01-05 20:48:03 +00:00
Krzysztof Parzyszek
9d0c6355a0
[Hexagon] Add patterns for sext_inreg of HVX vector types
...
llvm-svn: 321894
2018-01-05 20:46:41 +00:00
Krzysztof Parzyszek
66ee123d61
[Hexagon] Add pattern for vsplat to v8i8
...
llvm-svn: 321892
2018-01-05 20:43:56 +00:00
Krzysztof Parzyszek
b1b2960336
[Hexagon] Replace INSERTRP/EXTRACTRP with INSERT/EXTRACT in HexagonISD
...
llvm-svn: 321798
2018-01-04 13:56:04 +00:00
Krzysztof Parzyszek
cfe4a3616f
[Hexagon] Fix generation of vector sign extensions
...
llvm-svn: 321650
2018-01-02 15:28:49 +00:00
Krzysztof Parzyszek
e4ce92cabf
[Hexagon] Allow construction of HVX vector predicates
...
Handle BUILD_VECTOR of boolean values.
llvm-svn: 321220
2017-12-20 20:49:43 +00:00
Krzysztof Parzyszek
6b589e593d
[Hexagon] Generate HVX code for vector sign-, zero- and any-extends
...
Implement any-extend as zero-extend.
llvm-svn: 321004
2017-12-18 18:32:27 +00:00
Krzysztof Parzyszek
266d6f03a1
[Hexagon] Handle concat_vectors of all allowed HVX types
...
llvm-svn: 320865
2017-12-15 21:23:12 +00:00
Krzysztof Parzyszek
29832a6c8b
[Hexagon] Fix operand-swapping PatFrag for atomic stores
...
PatFrag now has the atomicity information stored as bit fields. They
need to be copied to the new PatFrag.
llvm-svn: 320855
2017-12-15 20:13:57 +00:00
Krzysztof Parzyszek
470760533a
[Hexagon] Generate HVX code for comparisons and selects
...
llvm-svn: 320744
2017-12-14 21:28:48 +00:00
Krzysztof Parzyszek
708c9f5947
[Hexagon] Remove vectors of i64 from valid HVX types
...
HVX does not support operations on 64-bit integers.
llvm-svn: 320722
2017-12-14 18:35:24 +00:00
Krzysztof Parzyszek
039d4d9286
[Hexagon] Generate HVX code for basic arithmetic operations
...
Handle and, or, xor, add, sub, mul for vectors of i8, i16, and i32.
llvm-svn: 320063
2017-12-07 17:37:28 +00:00
Krzysztof Parzyszek
7d37dd8902
[Hexagon] Generate HVX code for vector construction and access
...
Support for:
- build vector,
- extract vector element, subvector,
- insert vector element, subvector,
- shuffle.
llvm-svn: 319901
2017-12-06 16:40:37 +00:00
Krzysztof Parzyszek
f4dcc42e7b
[Hexagon] Remove HexagonISD::PACKHL
...
llvm-svn: 319352
2017-11-29 19:59:29 +00:00
Krzysztof Parzyszek
b9f33b32ee
[Hexagon] Add patterns to select A2_combine_ll and its variants
...
llvm-svn: 318876
2017-11-22 20:55:41 +00:00
Krzysztof Parzyszek
058014fca5
[Hexagon] Prefer L2_loadrub_io over L4_loadrub_rr
...
If the offset is an immediate, avoid putting it in a register
to get Rs+Rt<<#0.
llvm-svn: 317275
2017-11-02 21:56:59 +00:00
Krzysztof Parzyszek
4dc04e6a70
[Hexagon] Adjust patterns to reflect instruction selection preferences
...
llvm-svn: 316804
2017-10-27 22:24:49 +00:00
Krzysztof Parzyszek
273678823b
[Hexagon] Add extra pattern for S4_addaddi
...
One combination was missing: add(add(x,y),c).
llvm-svn: 316363
2017-10-23 19:07:50 +00:00
Krzysztof Parzyszek
64e5d7d3ae
[Hexagon] Reorganize and update instruction patterns
...
llvm-svn: 316228
2017-10-20 19:33:12 +00:00
Krzysztof Parzyszek
a0f2f7c413
[Hexagon] Add patterns for cmpb/cmph with immediate arguments
...
Patch by Sumanth Gundapaneni.
llvm-svn: 315692
2017-10-13 15:43:12 +00:00
Krzysztof Parzyszek
557729761c
[Hexagon] Switch to parameterized register classes for HVX
...
This removes the duplicate HVX instruction set for the 128-byte mode.
Single instruction set now works for both modes (64- and 128-byte).
llvm-svn: 313362
2017-09-15 15:46:05 +00:00
Krzysztof Parzyszek
5eef92eb7f
[Hexagon] Remove custom lowering of loads of v4i16
...
The target-independent lowering works fine, except concatenating 32-bit
words. Add a pattern to generate A2_combinew instead of 64-bit asl/or.
llvm-svn: 308186
2017-07-17 15:45:45 +00:00
Krzysztof Parzyszek
302a9d41c6
[Hexagon] Replace ISD opcode VPACK with VPACKE/VPACKO, NFC
...
This breaks up pack-even and pack-odd into two separate operations.
llvm-svn: 308049
2017-07-14 19:02:32 +00:00
Krzysztof Parzyszek
89b2d7c938
[Hexagon] Use VSPLAT instead of COMBINE for vectors of type v2i32, NFC
...
This cleans up the vector shift patterns.
llvm-svn: 307935
2017-07-13 18:17:58 +00:00
Krzysztof Parzyszek
c86e2ef3f5
[Hexagon] Add support for nontemporal loads and stores on HVX
...
Patch by Michael Wu.
Differential Revision: https://reviews.llvm.org/D35104
llvm-svn: 307671
2017-07-11 16:39:33 +00:00
Krzysztof Parzyszek
f85dd9f4e5
[Hexagon] Convert typed ISD opcodes to generic ones, NFC
...
llvm-svn: 307582
2017-07-10 20:16:44 +00:00
Krzysztof Parzyszek
40df124eda
[Hexagon] Remove unused ISD opcodes, NFC
...
llvm-svn: 307580
2017-07-10 20:13:44 +00:00
Krzysztof Parzyszek
b3a8d20e27
[Hexagon] Generate store-immediate instructions for stack objects
...
Store-immediate instructions have a non-extendable offset. Since the
actual offset for a stack object is not known until much later, only
generate these stores when the stack size (at the time of instruction
selection) is small.
llvm-svn: 305305
2017-06-13 17:10:16 +00:00
Krzysztof Parzyszek
c83c267b84
[Hexagon] Generate multiply-high instruction in isel
...
llvm-svn: 305302
2017-06-13 16:21:57 +00:00
Krzysztof Parzyszek
7aca2fd830
[Hexagon] Fixes and updates to the selection patterns
...
- Add some missing patterns.
- Use C4_cmplte in branch patterns.
- Fix signedness of immediate operand in M2_accii.
llvm-svn: 305085
2017-06-09 15:26:21 +00:00
Krzysztof Parzyszek
7881415510
[Hexagon] Add LLVM header to HexagonPatterns.td
...
llvm-svn: 305074
2017-06-09 13:30:58 +00:00