| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
Only non-bool vectors.
llvm-svn: 321895
|
|
|
|
| |
llvm-svn: 321894
|
|
|
|
| |
llvm-svn: 321892
|
|
|
|
| |
llvm-svn: 321798
|
|
|
|
| |
llvm-svn: 321650
|
|
|
|
|
|
| |
Handle BUILD_VECTOR of boolean values.
llvm-svn: 321220
|
|
|
|
|
|
| |
Implement any-extend as zero-extend.
llvm-svn: 321004
|
|
|
|
| |
llvm-svn: 320865
|
|
|
|
|
|
|
| |
PatFrag now has the atomicity information stored as bit fields. They
need to be copied to the new PatFrag.
llvm-svn: 320855
|
|
|
|
| |
llvm-svn: 320744
|
|
|
|
|
|
| |
HVX does not support operations on 64-bit integers.
llvm-svn: 320722
|
|
|
|
|
|
| |
Handle and, or, xor, add, sub, mul for vectors of i8, i16, and i32.
llvm-svn: 320063
|
|
|
|
|
|
|
|
|
|
| |
Support for:
- build vector,
- extract vector element, subvector,
- insert vector element, subvector,
- shuffle.
llvm-svn: 319901
|
|
|
|
| |
llvm-svn: 319352
|
|
|
|
| |
llvm-svn: 318876
|
|
|
|
|
|
|
| |
If the offset is an immediate, avoid putting it in a register
to get Rs+Rt<<#0.
llvm-svn: 317275
|
|
|
|
| |
llvm-svn: 316804
|
|
|
|
|
|
| |
One combination was missing: add(add(x,y),c).
llvm-svn: 316363
|
|
|
|
| |
llvm-svn: 316228
|
|
|
|
|
|
| |
Patch by Sumanth Gundapaneni.
llvm-svn: 315692
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
This breaks up pack-even and pack-odd into two separate operations.
llvm-svn: 308049
|
|
|
|
|
|
| |
This cleans up the vector shift patterns.
llvm-svn: 307935
|
|
|
|
|
|
|
|
| |
Patch by Michael Wu.
Differential Revision: https://reviews.llvm.org/D35104
llvm-svn: 307671
|
|
|
|
| |
llvm-svn: 307582
|
|
|
|
| |
llvm-svn: 307580
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 305302
|
|
|
|
|
|
|
|
| |
- Add some missing patterns.
- Use C4_cmplte in branch patterns.
- Fix signedness of immediate operand in M2_accii.
llvm-svn: 305085
|
|
|
|
| |
llvm-svn: 305074
|
|
|
|
|
|
|
|
|
| |
For multiplications of 64-bit values (giving 64-bit result), detect
cases where the arguments are sign-extended 32-bit values, on a per-
operand basis. This will allow few patterns to match a wider variety
of combinations in which extensions can occur.
llvm-svn: 304223
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Using arguments with attribute inalloca creates problems for verification
of machine representation. This attribute instructs the backend that the
argument is prepared in stack prior to CALLSEQ_START..CALLSEQ_END
sequence (see http://llvm.org/docs/InAlloca.htm for details). Frame size
stored in CALLSEQ_START in this case does not count the size of this
argument. However CALLSEQ_END still keeps total frame size, as caller can
be responsible for cleanup of entire frame. So CALLSEQ_START and
CALLSEQ_END keep different frame size and the difference is treated by
MachineVerifier as stack error. Currently there is no way to distinguish
this case from actual errors.
This patch adds additional argument to CALLSEQ_START and its
target-specific counterparts to keep size of stack that is set up prior to
the call frame sequence. This argument allows MachineVerifier to calculate
actual frame size associated with frame setup instruction and correctly
process the case of inalloca arguments.
The changes made by the patch are:
- Frame setup instructions get the second mandatory argument. It
affects all targets that use frame pseudo instructions and touched many
files although the changes are uniform.
- Access to frame properties are implemented using special instructions
rather than calls getOperand(N).getImm(). For X86 and ARM such
replacement was made previously.
- Changes that reflect appearance of additional argument of frame setup
instruction. These involve proper instruction initialization and
methods that access instruction arguments.
- MachineVerifier retrieves frame size using method, which reports sum of
frame parts initialized inside frame instruction pair and outside it.
The patch implements approach proposed by Quentin Colombet in
https://bugs.llvm.org/show_bug.cgi?id=27481#c1.
It fixes 9 tests failed with machine verifier enabled and listed
in PR27481.
Differential Revision: https://reviews.llvm.org/D32394
llvm-svn: 302527
|
|
|
|
|
|
| |
Patch by Jyotsna Verma.
llvm-svn: 302073
|
|
|
|
|
|
|
| |
Keep full offset value on MI-level instructions, but have it scaled down
in the MC-level instructions.
llvm-svn: 299664
|
|
|
|
| |
llvm-svn: 296532
|
|
|
|
| |
llvm-svn: 295981
|
|
|
|
| |
llvm-svn: 295892
|
|
|
|
| |
llvm-svn: 294753
|
|
|
|
|
|
|
| |
Change "orisadd" to "IsOrAdd" to follow the naming conventions, and
change "isOrAdd" in the C++ code to "isOrEquivalentToAdd".
llvm-svn: 286886
|
|
|
|
|
|
|
|
|
|
|
| |
For pairs of 32-bit registers: isub_lo, isub_hi.
For pairs of vector registers: vsub_lo, vsub_hi.
Add generic subreg indices: ps_sub_lo, ps_sub_hi, and a function
HexagonRegisterInfo::getHexagonSubRegIndex(RegClass, GenericSubreg)
that returns the appropriate subreg index for RegClass.
llvm-svn: 286377
|
|
|
|
| |
llvm-svn: 286368
|
|
|
|
|
|
|
|
| |
Cmake has not recognized that Hexagon.td has a new dependency in
HexagonPatterns.td. All changes to that file were not visible to
the build bots.
llvm-svn: 286084
|
|
|
|
| |
llvm-svn: 286081
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The clr/set/toggle-bit instructions (with the bit index given as an
immediate operand) had both, custom selection code that generated them,
and selection patterns at the same time. The selection patterns were
not used, because the custom selection code was executed first.
This patch removes the custom code in favor of the selection patterns.
The custom code handled 64-bit registers as well with an immediate bit
index, and so new patterns were added to implement that.
It was also the same case for the instruction "Rd += asr(Rs, Rt)",
except that the custom code did not offer any additional functionality,
and was simply removed.
llvm-svn: 286080
|
|
|
|
|
|
| |
Remove unnecessary type casts in patterns.
llvm-svn: 286079
|
|
|
|
|
|
| |
Give simpler or more meaningful names to pat frags and xforms.
llvm-svn: 286078
|
|
|
|
|
|
|
| |
Remove unnecessary C++ functions for SDNode transforms. Move more
pat frags to files where they are used.
llvm-svn: 286077
|
|
|
|
|
|
| |
Add pat frags for any-, sign-, and zero-extensions.
llvm-svn: 286076
|
|
|
|
| |
llvm-svn: 286049
|