Revision tags: llvmorg-10.0.0-rc3 |
|
#
5618e9be |
| 03-Mar-2020 |
Sam Parker <sam.parker@arm.com> |
[RDA][ARM] collectKilledOperands across multiple blocks
Use MIOperand in collectLocalKilledOperands to make the search global, as we already have to search for global uses too. This allows us to del
[RDA][ARM] collectKilledOperands across multiple blocks
Use MIOperand in collectLocalKilledOperands to make the search global, as we already have to search for global uses too. This allows us to delete more dead code when tail predicating.
Differential Revision: https://reviews.llvm.org/D75167
show more ...
|
#
dfe8f5da |
| 27-Feb-2020 |
Sam Parker <sam.parker@arm.com> |
[ARM][RDA] Allow multiple killed users
In RDA, check against the already decided dead instructions when looking at users. This allows an instruction to be removed if it has multiple users, but they'
[ARM][RDA] Allow multiple killed users
In RDA, check against the already decided dead instructions when looking at users. This allows an instruction to be removed if it has multiple users, but they're all dead.
This means that IT instructions can be considered killed once all the itstate using instructions are dead.
Differential Revision: https://reviews.llvm.org/D75245
show more ...
|
#
bf61421a |
| 28-Feb-2020 |
Sam Parker <sam.parker@arm.com> |
[RDA] Track implicit-defs
Ensure that we're recording implicit defs, as well as visiting implicit uses and implicit defs when we're walking through operands.
Differential Revision: https://reviews.
[RDA] Track implicit-defs
Ensure that we're recording implicit defs, as well as visiting implicit uses and implicit defs when we're walking through operands.
Differential Revision: https://reviews.llvm.org/D75185
show more ...
|
#
1d06e75d |
| 26-Feb-2020 |
Sam Parker <sam.parker@arm.com> |
[ARM][RDA] add getUniqueReachingMIDef
Add getUniqueReachingMIDef to RDA which performs a global search for a machine instruction that produces a unique definition of a given register at a given poin
[ARM][RDA] add getUniqueReachingMIDef
Add getUniqueReachingMIDef to RDA which performs a global search for a machine instruction that produces a unique definition of a given register at a given point. Also add two helper functions (getMIOperand) that wrap around this functionality to get the incoming definition uses of a given instruction. These now replace the uses of getReachingMIDef in ARMLowOverheadLoops. getReachingMIDef has been renamed to getReachingLocalMIDef and has been made private along with getInstFromId.
Differential Revision: https://reviews.llvm.org/D74605
show more ...
|
#
a67eb221 |
| 24-Feb-2020 |
Sam Parker <sam.parker@arm.com> |
[RDA][ARM][LowOverheadLoops] Iteration count IT blocks
Change the way that we remove the redundant iteration count code in the presence of IT blocks. collectLocalKilledOperands has been introduced t
[RDA][ARM][LowOverheadLoops] Iteration count IT blocks
Change the way that we remove the redundant iteration count code in the presence of IT blocks. collectLocalKilledOperands has been introduced to scan an instructions operands, collecting the killed instructions and then visiting them too. This is used to delete the code in the preheader which calculates the iteration count. We also track any IT blocks within the preheader and, if we remove all the instructions from the IT block, we also remove the IT instruction. isSafeToRemove is used to remove any redundant uses of the iteration count within the loop body.
Differential Revision: https://reviews.llvm.org/D74975
show more ...
|
#
de3e65e6 |
| 18-Feb-2020 |
Sam Parker <sam.parker@arm.com> |
[ARM][LowOverheadLoops] Check loop liveouts
Check that no Q-regs are live out of the loop, unless the instruction within the loop is predicated on the vctp.
Differential Revision: https://reviews.l
[ARM][LowOverheadLoops] Check loop liveouts
Check that no Q-regs are live out of the loop, unless the instruction within the loop is predicated on the vctp.
Differential Revision: https://reviews.llvm.org/D72713
show more ...
|
#
fd01b2f4 |
| 14-Feb-2020 |
Sam Parker <sam.parker@arm.com> |
[NFC][ARM] Convert some pointers to references.
|
Revision tags: llvmorg-10.0.0-rc2 |
|
#
0a8cae10 |
| 06-Feb-2020 |
Sam Parker <sam.parker@arm.com> |
[ReachingDefs] Make isSafeToMove more strict.
Test that we're not moving the instruction through instructions with side-effects.
Differential Revision: https://reviews.llvm.org/D74058
|
#
01022af5 |
| 05-Feb-2020 |
Sjoerd Meijer <sjoerd.meijer@arm.com> |
[ARM][MVE] LowOverheadLoops: DCE on the iteration count setup expression
Once we have created a tail-predicated hardware-loop, and thus know the number of elements that are processed, we want to cle
[ARM][MVE] LowOverheadLoops: DCE on the iteration count setup expression
Once we have created a tail-predicated hardware-loop, and thus know the number of elements that are processed, we want to clean-up the iteration count expression of that loop. In D73682, we bailed the analysis on conditionally executed instructions. This adds support for IT-blocks, so that we can handle these cases again. The restriction is that we only support IT blocks containing 1 statement, but that seems to cover most cases and forms of the iteration count expression.
Differential Revision: https://reviews.llvm.org/D73947
show more ...
|
#
56427528 |
| 05-Feb-2020 |
Sam Parker <sam.parker@arm.com> |
[ARM][LowOverheadLoops] Fix loop count chain
Checking that the use-def chain that performs the loop count isSafeToRemove is not sufficient because it means that we can remove register copies that we
[ARM][LowOverheadLoops] Fix loop count chain
Checking that the use-def chain that performs the loop count isSafeToRemove is not sufficient because it means that we can remove register copies that we need to restore lr to its correct value. This change now prevents the transform from kicking in for the 'remove-elem-moves' test which needs to addressed later on.
Differential Revision: https://reviews.llvm.org/D74037
show more ...
|
#
4c7f8192 |
| 05-Feb-2020 |
Sam Parker <sam.parker@arm.com> |
[ARM][LowOverheadLoops] Ensure memory predication
While validating each MVE instruction, check that all instructions that touch memory are somehow predicated upon the VCTP.
Differential Revision: h
[ARM][LowOverheadLoops] Ensure memory predication
While validating each MVE instruction, check that all instructions that touch memory are somehow predicated upon the VCTP.
Differential Revision: https://reviews.llvm.org/D73616
show more ...
|
Revision tags: llvmorg-10.0.0-rc1 |
|
#
06e12893 |
| 30-Jan-2020 |
Sam Parker <sam.parker@arm.com> |
[ARM][LowOverheadLoops] Skip debug values
While iterating through the loop, don't inspect any dbg values.
Differential Revision: https://reviews.llvm.org/D73688
|
#
6726d67b |
| 30-Jan-2020 |
Sam Parker <sam.parker@arm.com> |
[ARM][LowOverheadLoops] Check scalar predicates
When trying to remove the loop iteration count, check that the instruction will always execute.
Differential Revision: https://reviews.llvm.org/D73682
|
#
ac30ea2f |
| 29-Jan-2020 |
Sam Parker <sam.parker@arm.com> |
[RDA][ARM] Move functionality into RDA
Add several new helpers to RDA: - hasLocalDefBefore - isRegDefinedAfter - isSafeToDefRegAt
And move two bits of logic from ARMLowOverheadLoops into RDA: - isS
[RDA][ARM] Move functionality into RDA
Add several new helpers to RDA: - hasLocalDefBefore - isRegDefinedAfter - isSafeToDefRegAt
And move two bits of logic from ARMLowOverheadLoops into RDA: - isSafeToMove - isSafeToRemove
Both of these have some wrappers too to make them more convienent to use.
Differential Revision: https://reviews.llvm.org/D73460
show more ...
|
#
6c2df5d1 |
| 27-Jan-2020 |
Sam Parker <sam.parker@arm.com> |
[ARM][LowOverheadLoops] Dont ignore VCTP
When expanding the LoopStart, we try to remove the iteration count calculation. However, if part of the calculation was also used to calculate the number of
[ARM][LowOverheadLoops] Dont ignore VCTP
When expanding the LoopStart, we try to remove the iteration count calculation. However, if part of the calculation was also used to calculate the number of elements we could end up deleting instructions that were required to feed DLSTP/WLSTP.
Differential Revision: https://reviews.llvm.org/D73275
show more ...
|
#
ddbc0778 |
| 24-Jan-2020 |
Sam Parker <sam.parker@arm.com> |
[NFC][ARM] Make some params members instead.
Add MachineLoopInfo and ReachingDefAnalysis as members of LowOverheadLoop instead of passing them several times to different methods.
|
#
42350cd8 |
| 17-Jan-2020 |
Sam Parker <sam.parker@arm.com> |
[ARM][MVE] Tail Predicate IsSafeToRemove
Introduce a method to walk through use-def chains to decide whether it's possible to remove a given instruction and its users. These instructions are then st
[ARM][MVE] Tail Predicate IsSafeToRemove
Introduce a method to walk through use-def chains to decide whether it's possible to remove a given instruction and its users. These instructions are then stored in a set until the end of the transform when they're erased. This is now used to perform checks on the iteration count (LoopDec chain), element count (VCTP chain) and the possibly redundant iteration count.
As well as being able to remove chains of instructions, we know also check that the sub feeding the vctp is producing the expected value.
Differential Revision: https://reviews.llvm.org/D71837
show more ...
|
#
760b1751 |
| 16-Jan-2020 |
Sam Parker <sam.parker@arm.com> |
[ARM][LowOverheadLoops] Update liveness info
Recommitting e93e0d413f3a after reverting due to test failures, which will hopefully now be fixed. Original commit message:
After expanding the pseudo i
[ARM][LowOverheadLoops] Update liveness info
Recommitting e93e0d413f3a after reverting due to test failures, which will hopefully now be fixed. Original commit message:
After expanding the pseudo instructions, update the liveness info. We do this in a post-order traversal of the loop, including its exit blocks and preheader(s).
Differential Revision: https://reviews.llvm.org/D72131
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 ...
|
#
bad6032b |
| 10-Jan-2020 |
Sam Parker <sam.parker@arm.com> |
[ARM][LowOverheadLoops] Change predicate inspection
Use the already provided helper function to get the operand type so that we can detect whether the vpr is being used as a predicate or not. Also u
[ARM][LowOverheadLoops] Change predicate inspection
Use the already provided helper function to get the operand type so that we can detect whether the vpr is being used as a predicate or not. Also use existing helpers to get the predicate indices when we converting the vpt blocks. This enables us to support both types of vpr predicate operand.
Differential Revision: https://reviews.llvm.org/D72504
show more ...
|
#
e73b20c5 |
| 14-Jan-2020 |
Sam Parker <sam.parker@arm.com> |
[ARM][MVE] Disallow VPSEL for tail predication
Due to the current way that we collect predicated instructions, we can't easily handle vpsel in tail predicated loops. There are a couple of issues: 1)
[ARM][MVE] Disallow VPSEL for tail predication
Due to the current way that we collect predicated instructions, we can't easily handle vpsel in tail predicated loops. There are a couple of issues: 1) It will use the VPR as a predicate operand, but doesn't have to be instead a VPT block, which means we can assert while building up the VPT block because we don't find another VPST to being a new one. 2) VPSEL still requires a VPR operand even after tail predicating, which means we can't remove it unless there is another instruction, such as vcmp, that can provide the VPR def.
The first issue should be a relatively simple fix in the logic of the LowOverheadLoops pass, whereas the second will require us to represent the 'implicit' tail predication with an explicit value.
Differential Revision: https://reviews.llvm.org/D72629
show more ...
|
#
add04b96 |
| 13-Jan-2020 |
Sjoerd Meijer <sjoerd.meijer@arm.com> |
ARMLowOverheadLoops: return earlier to avoid printing irrelevant dbg msg. NFC
|
#
4569f63a |
| 10-Jan-2020 |
Sjoerd Meijer <sjoerd.meijer@arm.com> |
ARMLowOverheadLoops: a few more dbg msgs to better trace rejected TP loops. NFC.
|
#
9c91d79d |
| 09-Jan-2020 |
Sam Parker <sam.parker@arm.com> |
[NFC][ARM] LowOverheadLoop comments
Add a comment describing the dependencies of the pass.
|
#
1cba2612 |
| 09-Jan-2020 |
Sam Parker <sam.parker@arm.com> |
Revert "[ARM][LowOverheadLoops] Update liveness info"
This reverts commit e93e0d413f3afa1df5c5f88df546bebcd1183155.
There's some ordering problems on some on the buildbots which needs investigating.
|