#
6f86e6bf |
| 24-Mar-2020 |
Sam Parker <sam.parker@arm.com> |
[ARM][MVE] Add target flag for narrowing insts
Add a flag, 'RetainsPreviousHalfElement', for operations that operate on top/bottom halves of their input and only write to half of their destination,
[ARM][MVE] Add target flag for narrowing insts
Add a flag, 'RetainsPreviousHalfElement', for operations that operate on top/bottom halves of their input and only write to half of their destination, leaving the other half to retain its previous value.
Differential Revision: https://reviews.llvm.org/D76608
show more ...
|
Revision tags: llvmorg-10.0.0, llvmorg-10.0.0-rc6, llvmorg-10.0.0-rc5, llvmorg-10.0.0-rc4 |
|
#
a3140500 |
| 10-Mar-2020 |
Sam Parker <sam.parker@arm.com> |
[ARM][MVE] VFMA and VFMS validForTailPredication
Add four instructions to the whitelist.
Differential Revision: https://reviews.llvm.org/D75902
|
#
4cf0dddc |
| 05-Mar-2020 |
Sam Parker <sam.parker@arm.com> |
[ARM][MVE] Enable VMOVN for tail predication
These instructions also don't exchange lanes, so make them legal.
Differential Revision: https://reviews.llvm.org/D75669
|
#
77e30758 |
| 05-Mar-2020 |
Sam Parker <sam.parker@arm.com> |
[ARM][MVE] Enable *SHRN* for tail predication
These instructions don't swap lanes so make them valid.
Differential Revision: https://reviews.llvm.org/D75667
|
Revision tags: llvmorg-10.0.0-rc3, llvmorg-10.0.0-rc2, llvmorg-10.0.0-rc1 |
|
#
adcd0268 |
| 28-Jan-2020 |
Benjamin Kramer <benny.kra@googlemail.com> |
Make llvm::StringRef to std::string conversions explicit.
This is how it should've been and brings it more in line with std::string_view. There should be no functional change here.
This is mostly m
Make llvm::StringRef to std::string conversions explicit.
This is how it should've been and brings it more in line with std::string_view. There should be no functional change here.
This is mostly mechanical from a custom clang-tidy check, with a lot of manual fixups. It uncovers a lot of minor inefficiencies.
This doesn't actually modify StringRef yet, I'll do that in a follow-up.
show more ...
|
#
772e4931 |
| 23-Jan-2020 |
Simon Tatham <simon.tatham@arm.com> |
[ARM,MVE] Revise immediate VBIC/VORR to look more like NEON.
Summary: In NEON, the immediate forms of VBIC and VORR are each represented as a single MC instruction, which takes its immediate operand
[ARM,MVE] Revise immediate VBIC/VORR to look more like NEON.
Summary: In NEON, the immediate forms of VBIC and VORR are each represented as a single MC instruction, which takes its immediate operand already encoded in a NEON-friendly format: 8 data bits, plus some control bits indicating how to expand them into a full vector.
In MVE, we represented immediate VBIC and VORR as four separate MC instructions each, for an 8-bit immediate shifted left by 0, 8, 16 or 24 bits. For each one, the value of the immediate operand is in the 'natural' form, i.e. the numerical value that would actually be BICed or ORRed into each vector lane (and also the same value shown in assembly). For example, MVE_VBICIZ16v4i32 takes an operand such as 0xab0000, which NEON would represent as 0xab | (control bits << 8).
The MVE approach is superficially nice (it makes assembly input and output easy, and it's also nice if you're manually constructing immediate VBICs). But it turns out that it's better for isel if we make the NEON and MVE instructions work the same, because the ARMISD::VBICIMM and VORRIMM node types already encode their immediate into the NEON format, so it's easier if we can just use it.
Also, this commit reduces the total amount of code rather than increasing it, which is surely an indication that it really is simpler to do it this way!
Reviewers: dmgreen, ostannard, miyuki, MarkMurrayARM
Reviewed By: dmgreen
Subscribers: kristof.beyls, hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D73205
show more ...
|
#
58991ba7 |
| 22-Jan-2020 |
David Green <david.green@arm.com> |
[ARM] Mark MVE loads/store as not having side effects
The hasSideEffect parameter is usually automatically inferred from instruction patterns. For some of our MVE instructions, we do not have patter
[ARM] Mark MVE loads/store as not having side effects
The hasSideEffect parameter is usually automatically inferred from instruction patterns. For some of our MVE instructions, we do not have patterns though, such as for the pre/post inc loads and stores. This instead specifies the flag manually on the base MVE_VLDRSTR_base tablegen class, making sure we get this correct.
This can help with scheduling multiple loads more optimally. Here I've added a unittest as a more direct form of testing.
Differential Revision: https://reviews.llvm.org/D73117
show more ...
|
Revision tags: llvmorg-11-init |
|
#
e27632c3 |
| 14-Jan-2020 |
Sam Parker <sam.parker@arm.com> |
[ARM][LowOverheadLoops] Allow all MVE instrs.
We have a whitelist of instructions that we allow when tail predicating, since these are trivial ones that we've deemed need no special handling. Now ch
[ARM][LowOverheadLoops] Allow all MVE instrs.
We have a whitelist of instructions that we allow when tail predicating, since these are trivial ones that we've deemed need no special handling. Now change ARMLowOverheadLoops to allow the non-trivial instructions if they're contained within a valid VPT block. Since a valid block is one that is predicated upon the VCTP so we know that these non-trivial instructions will still behave as expected once the implicit predication is used instead.
This also fixes a previous test failure.
Differential Revision: https://reviews.llvm.org/D72509
show more ...
|
#
3772ea9d |
| 10-Jan-2020 |
Sam Parker <sam.parker@arm.com> |
[ARM][MVE] Tail predicate VMAX,VMAXA,VMIN,VMINA
Add the MVE min and max instructions to our tail predication whitelist.
Differential Revision: https://reviews.llvm.org/D72502
|
#
4f0fe6b9 |
| 13-Dec-2019 |
Sam Parker <sam.parker@arm.com> |
[ARM][MVE] Tail predicate bottom/top muls.
Add VMULL and VQDMULL variants to our tail predication white list.
Differential Revision: https://reviews.llvm.org/D71465
|
Revision tags: llvmorg-9.0.1, llvmorg-9.0.1-rc3 |
|
#
84593f05 |
| 11-Dec-2019 |
Sam Parker <sam.parker@arm.com> |
[ARM][MVE] Make VPT invalid for tail predication
We've been marking VPT incompatible instructions as invalid for tail predication too, though this may not strictly be true. VPT are incompatible and,
[ARM][MVE] Make VPT invalid for tail predication
We've been marking VPT incompatible instructions as invalid for tail predication too, though this may not strictly be true. VPT are incompatible and, unless its the first predicate def in a loop, they shouldn't be compatible for tail predication either.
Differential Revision: https://reviews.llvm.org/D71410
show more ...
|
#
3fab4276 |
| 06-Dec-2019 |
Simon Tatham <simon.tatham@arm.com> |
[ARM][MVE] Fix copy-paste error in VQSHL instruction ids.
Summary: The immediate forms of the MVE VQSHL instruction have MC names like `MVE_VSLIimms8` and `MVE_VSLIimmu32`. Those names are confusing
[ARM][MVE] Fix copy-paste error in VQSHL instruction ids.
Summary: The immediate forms of the MVE VQSHL instruction have MC names like `MVE_VSLIimms8` and `MVE_VSLIimmu32`. Those names are confusing, because VSLI is a completely different shift instruction with no semantic relation to VQSHL. But it just happens to be defined immediately before VQSHL in `ARMInstrMVE.td`, so this looks like a copy-paste error. Renamed the ids to match the instruction name.
Reviewers: ostannard, dmgreen, MarkMurrayARM, miyuki
Reviewed By: miyuki
Subscribers: kristof.beyls, hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D71114
show more ...
|
Revision tags: llvmorg-9.0.1-rc2 |
|
#
e8a8dbe9 |
| 25-Nov-2019 |
Mark Murray <mark.murray@arm.com> |
[ARM][MVE][Intrinsics] Add MVE VMUL intrinsics. Remove annoying "t1" from VMUL* instructions. Add unit tests.
Summary: Add MVE VMUL intrinsics. Remove annoying "t1" from VMUL* instructions. Add unit
[ARM][MVE][Intrinsics] Add MVE VMUL intrinsics. Remove annoying "t1" from VMUL* instructions. Add unit tests.
Summary: Add MVE VMUL intrinsics. Remove annoying "t1" from VMUL* instructions. Add unit tests.
Reviewers: simon_tatham, ostannard, dmgreen
Subscribers: kristof.beyls, hiraditya, cfe-commits, llvm-commits
Tags: #clang, #llvm
Differential Revision: https://reviews.llvm.org/D70546
show more ...
|
Revision tags: llvmorg-9.0.1-rc1 |
|
#
8978c12b |
| 18-Nov-2019 |
Sam Parker <sam.parker@arm.com> |
[ARM][MVE] Tail predication conversion
This patch modifies ARMLowOverheadLoops to convert a predicated vector low-overhead loop into a tail-predicatd one. This is currently a very basic conversion,
[ARM][MVE] Tail predication conversion
This patch modifies ARMLowOverheadLoops to convert a predicated vector low-overhead loop into a tail-predicatd one. This is currently a very basic conversion, with the following restrictions: - Operates only on single block loops. - The loop can only contain a single vctp instruction. - No other instructions can write to the vpr. - We only allow a subset of the mve instructions in the loop.
TODO: Pass the number of elements, not the number of iterations to dlstp/wlstp.
Differential Revision: https://reviews.llvm.org/D69945
show more ...
|
#
ce39278f |
| 15-Oct-2019 |
Sam Parker <sam.parker@arm.com> |
[ARM][MVE] validForTailPredication insts
Reverse the logic for valid tail predication instructions and create a whitelist instead. Added other instruction groups that aren't obviously safe: - instru
[ARM][MVE] validForTailPredication insts
Reverse the logic for valid tail predication instructions and create a whitelist instead. Added other instruction groups that aren't obviously safe: - instructions that 'narrow' their result. - lane moves. - byte swapping instructions. - interleaving loads and stores. - cross-beat carries. - top/bottom instructions. - complex operations.
Hopefully we should be able to add more of these instructions to the whitelist, once we have a more concrete idea of the transform.
Differential Revision: https://reviews.llvm.org/D67904
llvm-svn: 374887
show more ...
|
Revision tags: llvmorg-9.0.0, llvmorg-9.0.0-rc6 |
|
#
26a475af |
| 17-Sep-2019 |
Sam Parker <sam.parker@arm.com> |
[ARM][MVE] Add invalidForTailPredication to TSFlags
Set this bit for the MVE reduction instructions to prevent a loop from becoming tail predicated in their presence.
Differential Revision: https:/
[ARM][MVE] Add invalidForTailPredication to TSFlags
Set this bit for the MVE reduction instructions to prevent a loop from becoming tail predicated in their presence.
Differential Revision: https://reviews.llvm.org/D67444
llvm-svn: 372076
show more ...
|