History log of /llvm-project/llvm/lib/Target/ARM/ARMLowOverheadLoops.cpp (Results 101 – 125 of 148)
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
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.


123456