|
Revision tags: llvmorg-20.1.0, llvmorg-20.1.0-rc3, llvmorg-20.1.0-rc2, llvmorg-20.1.0-rc1, llvmorg-21-init, llvmorg-19.1.7, llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4, llvmorg-19.1.3, llvmorg-19.1.2, llvmorg-19.1.1, llvmorg-19.1.0, llvmorg-19.1.0-rc4, llvmorg-19.1.0-rc3, llvmorg-19.1.0-rc2, llvmorg-19.1.0-rc1, llvmorg-20-init, llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4, llvmorg-16.0.3, llvmorg-16.0.2, llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4, llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1, llvmorg-17-init, llvmorg-15.0.7, llvmorg-15.0.6, llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, llvmorg-15.0.2, llvmorg-15.0.1, llvmorg-15.0.0, llvmorg-15.0.0-rc3, llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1, llvmorg-16-init |
|
| #
9e6d1f4b |
| 17-Jul-2022 |
Kazu Hirata <[email protected]> |
[CodeGen] Qualify auto variables in for loops (NFC)
|
|
Revision tags: llvmorg-14.0.6, llvmorg-14.0.5, llvmorg-14.0.4, llvmorg-14.0.3, llvmorg-14.0.2, llvmorg-14.0.1, llvmorg-14.0.0, llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3, llvmorg-14.0.0-rc2 |
|
| #
1de11fe3 |
| 26-Feb-2022 |
Benjamin Kramer <[email protected]> |
Use RegisterInfo::regsOverlaps instead of checking aliases
This is both less code and faster since it doesn't have to expand all the sub & superreg sets. NFCI.
|
|
Revision tags: llvmorg-14.0.0-rc1, llvmorg-15-init, llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2, llvmorg-13.0.1-rc1, llvmorg-13.0.0, llvmorg-13.0.0-rc4 |
|
| #
84b07c9b |
| 19-Sep-2021 |
Kazu Hirata <[email protected]> |
[llvm] Use pop_back_val (NFC)
|
|
Revision tags: llvmorg-13.0.0-rc3, llvmorg-13.0.0-rc2 |
|
| #
eeddcba5 |
| 04-Aug-2021 |
David Green <[email protected]> |
[RDA] Attempt to make RDA subreg aware
This attempts to make more of RDA aware of potentially overlapping subregisters. Some of this was already in place, with it iterating through MCRegUnitIterator
[RDA] Attempt to make RDA subreg aware
This attempts to make more of RDA aware of potentially overlapping subregisters. Some of this was already in place, with it iterating through MCRegUnitIterators. This also replaces calls to LiveRegs.contains(..) with !LiveRegs.available(..), and updates the isValidRegUseOf and isValidRegDefOf to search subregs.
Differential Revision: https://reviews.llvm.org/D107351
show more ...
|
|
Revision tags: llvmorg-13.0.0-rc1, llvmorg-14-init, llvmorg-12.0.1, llvmorg-12.0.1-rc4, llvmorg-12.0.1-rc3, llvmorg-12.0.1-rc2, llvmorg-12.0.1-rc1 |
|
| #
b3d38327 |
| 18-May-2021 |
David Green <[email protected]> |
[RDA] Fix printing of regs / reg units. NFC
It was printing RegUnits as Regs, leading to much confusion in the debug logs.
|
|
Revision tags: llvmorg-12.0.0, llvmorg-12.0.0-rc5, llvmorg-12.0.0-rc4, llvmorg-12.0.0-rc3 |
|
| #
d6391209 |
| 28-Feb-2021 |
Kazu Hirata <[email protected]> |
[llvm] Use set_is_subset (NFC)
|
|
Revision tags: llvmorg-12.0.0-rc2, llvmorg-11.1.0, llvmorg-11.1.0-rc3, llvmorg-12.0.0-rc1, llvmorg-13-init, llvmorg-11.1.0-rc2, llvmorg-11.1.0-rc1 |
|
| #
7bc76fd0 |
| 31-Dec-2020 |
Kazu Hirata <[email protected]> |
[CodeGen] Construct SmallVector with iterator ranges (NFC)
|
| #
1e3ed091 |
| 29-Dec-2020 |
Kazu Hirata <[email protected]> |
[CodeGen] Use llvm::append_range (NFC)
|
|
Revision tags: llvmorg-11.0.1, llvmorg-11.0.1-rc2, llvmorg-11.0.1-rc1 |
|
| #
e24537d4 |
| 21-Oct-2020 |
Mircea Trofin <[email protected]> |
[NFC][MC] Use MCRegister for ReachingDefAnalysis APIs
Also updated the users of the APIs; and a drive-by small change to RDFRegister.cpp
Differential Revision: https://reviews.llvm.org/D89912
|
| #
cb27006a |
| 10-Oct-2020 |
David Green <[email protected]> |
[ARM] Attempt to make Tail predication / RDA more resilient to empty blocks
There are a number of places in RDA where we assume the block will not be empty. This isn't necessarily true for tail pred
[ARM] Attempt to make Tail predication / RDA more resilient to empty blocks
There are a number of places in RDA where we assume the block will not be empty. This isn't necessarily true for tail predicated loops where we have removed instructions. This attempt to make the pass more resilient to empty blocks, not casting pointers to machine instructions where they would be invalid.
The test contains a case that was previously failing, but recently been hidden on trunk. It contains an empty block to begin with to show a similar error.
Differential Revision: https://reviews.llvm.org/D88926
show more ...
|
|
Revision tags: llvmorg-11.0.0, llvmorg-11.0.0-rc6, llvmorg-11.0.0-rc5 |
|
| #
3f88c10a |
| 30-Sep-2020 |
Sam Parker <[email protected]> |
[RDA] isSafeToDefRegAt: Look at global uses
We weren't looking at global uses of a value, so we could happily overwrite the register incorrectly.
Differential Revision: https://reviews.llvm.org/D88
[RDA] isSafeToDefRegAt: Look at global uses
We weren't looking at global uses of a value, so we could happily overwrite the register incorrectly.
Differential Revision: https://reviews.llvm.org/D88554
show more ...
|
| #
779a8a02 |
| 30-Sep-2020 |
Sam Parker <[email protected]> |
[ARM][LowOverheadLoops] TryRemove helper.
Make a helper function that wraps around RDA::isSafeToRemove and utilises the existing DCE IT block checks.
|
| #
700f93e9 |
| 28-Sep-2020 |
Sam Parker <[email protected]> |
[RDA] Switch isSafeToMove iterators
So forwards is forwards and backwards is reverse. Also add a check so that we know the instructions are in the expected order.
Differential Revision: https://rev
[RDA] Switch isSafeToMove iterators
So forwards is forwards and backwards is reverse. Also add a check so that we know the instructions are in the expected order.
Differential Revision: https://reviews.llvm.org/D88419
show more ...
|
|
Revision tags: llvmorg-11.0.0-rc4, llvmorg-11.0.0-rc3 |
|
| #
a399d188 |
| 22-Sep-2020 |
Sam Parker <[email protected]> |
[ARM] Find VPT implicitly predicated by VCTP
On failing to find a VCTP in the list of instructions that explicitly predicate the entry of a VPT block, inspect whether the block is controlled via VPT
[ARM] Find VPT implicitly predicated by VCTP
On failing to find a VCTP in the list of instructions that explicitly predicate the entry of a VPT block, inspect whether the block is controlled via VPT which is implicitly predicated due to it's predicated operand(s).
Differential Revision: https://reviews.llvm.org/D87819
show more ...
|
| #
1c421046 |
| 16-Sep-2020 |
Sam Parker <[email protected]> |
[RDA] Fix getUniqueReachingDef for self loops
We've fixed the case where this could return an instruction after the given instruction, but also means that we can falsely return a 'unique' def when t
[RDA] Fix getUniqueReachingDef for self loops
We've fixed the case where this could return an instruction after the given instruction, but also means that we can falsely return a 'unique' def when they could be one coming from the backedge of a loop.
Differential Revision: https://reviews.llvm.org/D87751
show more ...
|
| #
b30adfb5 |
| 28-Aug-2020 |
Sam Parker <[email protected]> |
[ARM][LowOverheadLoops] Liveouts and reductions
Remove the code that tried to look for reduction patterns, since the vectorizer and isel can now produce predicated arithmetic instructios within the
[ARM][LowOverheadLoops] Liveouts and reductions
Remove the code that tried to look for reduction patterns, since the vectorizer and isel can now produce predicated arithmetic instructios within the loop body. This has required some reorganisation and fixes around live-out and predication checks, as well as looking for cases where an input/output is initialised to zero.
Differential Revision: https://reviews.llvm.org/D86613
show more ...
|
| #
85dd852a |
| 26-Aug-2020 |
Sam Tebbs <[email protected]> |
[RDA] Don't visit the BB of the instruction in getReachingUniqueMIDef
If the basic block of the instruction passed to getUniqueReachingMIDef is a transitive predecessor of itself and has a definitio
[RDA] Don't visit the BB of the instruction in getReachingUniqueMIDef
If the basic block of the instruction passed to getUniqueReachingMIDef is a transitive predecessor of itself and has a definition of the register, the function will return that definition even if it is after the instruction given to the function. This patch stops the function from scanning the instruction's basic block to prevent this.
Differential Revision: https://reviews.llvm.org/D86607
show more ...
|
| #
85a5c65f |
| 25-Aug-2020 |
Sam Parker <[email protected]> |
[NFC][RDA] Add explicit def check
Explicitly check that there is a local def prior to the given instruction in getReachingLocalMIDef instead of just relying on a nullptr return from getInstFromId.
|
|
Revision tags: llvmorg-11.0.0-rc2 |
|
| #
8f92f3c2 |
| 07-Aug-2020 |
Sam Parker <[email protected]> |
[RDA] Fix DBG_VALUE issues
We skip debug instructions in RDA so we cannot attempt to look them up in our instruction map without causing a crash. But some of the methods select the last instruction
[RDA] Fix DBG_VALUE issues
We skip debug instructions in RDA so we cannot attempt to look them up in our instruction map without causing a crash. But some of the methods select the last instruction in the block and this instruction may be a debug instruction... So, use getLastNonDebugInstr instead of calling back on a MachineBasicBlock.
MachineBasicBlock iterators have also been updated to use instructionsWithoutDebug so we can avoid the manual checks for debug instructions.
Differential Revision: https://reviews.llvm.org/D85658
show more ...
|
|
Revision tags: llvmorg-11.0.0-rc1, llvmorg-12-init, llvmorg-10.0.1, llvmorg-10.0.1-rc4, llvmorg-10.0.1-rc3 |
|
| #
3ee580d0 |
| 01-Jul-2020 |
Sam Parker <[email protected]> |
[ARM][LowOverheadLoops] Handle reductions
While validating live-out values, record instructions that look like a reduction. This will comprise of a vector op (for now only vadd), a vorr (vmov) which
[ARM][LowOverheadLoops] Handle reductions
While validating live-out values, record instructions that look like a reduction. This will comprise of a vector op (for now only vadd), a vorr (vmov) which store the previous value of vadd and then a vpsel in the exit block which is predicated upon a vctp. This vctp will combine the last two iterations using the vmov and vadd into a vector which can then be consumed by a vaddv.
Once we have determined that it's safe to perform tail-predication, we need to change this sequence of instructions so that the predication doesn't produce incorrect code. This involves changing the register allocation of the vadd so it updates itself and the predication on the final iteration will not update the falsely predicated lanes. This mimics what the vmov, vctp and vpsel do and so we then don't need any of those instructions.
Differential Revision: https://reviews.llvm.org/D75533
show more ...
|
|
Revision tags: llvmorg-10.0.1-rc2, llvmorg-10.0.1-rc1 |
|
| #
68b30bc0 |
| 28-Apr-2020 |
Casey Carter <[email protected]> |
[NFC] Correct spelling of "ambiguous"
|
| #
259649a5 |
| 04-Apr-2020 |
Nikita Popov <[email protected]> |
[RDA] Avoid full reprocessing of blocks in loops (NFCI)
RDA sometimes needs to visit blocks twice, to take into account reaching defs coming in along loop back edges. Currently it handles repeated v
[RDA] Avoid full reprocessing of blocks in loops (NFCI)
RDA sometimes needs to visit blocks twice, to take into account reaching defs coming in along loop back edges. Currently it handles repeated visitation the same way as usual, which means that it will scan through all instructions and their reg unit defs again. Not only is this very inefficient, it also means that all reaching defs in loops are going to be inserted twice.
We can do much better than this. The only thing we need to handle is a new reaching def from a predecessor, which either needs to be prepended to the reaching definitions (if there was no reaching def from a predecessor), or needs to replace an existing predecessor reaching def, if it is more recent. Since D77508 we only store the most recent predecessor reaching def, so that's the only one that may need updating.
This also has the nice side-effect that reaching definitions are now automatically sorted and unique, so drop the llvm::sort() call in favor of an assertion.
Differential Revision: https://reviews.llvm.org/D77511
show more ...
|
| #
76e987b3 |
| 05-Apr-2020 |
Nikita Popov <[email protected]> |
[RDA] Don't pass down TraversedMBB (NFC)
Only pass the MachineBasicBlock itself down to helper methods, they don't need to know about traversal. Move the debug print into the main method.
|
| #
361c29d7 |
| 05-Apr-2020 |
Nikita Popov <[email protected]> |
[RDA] Avoid inserting duplicate reaching defs (NFCI)
An instruction may define the same reg unit multiple times, avoid inserting the same reaching def multiple times in that case.
Also print the re
[RDA] Avoid inserting duplicate reaching defs (NFCI)
An instruction may define the same reg unit multiple times, avoid inserting the same reaching def multiple times in that case.
Also print the reg unit, rather than the super-register, in the debug code.
show more ...
|
| #
e8b83f7d |
| 04-Apr-2020 |
Nikita Popov <[email protected]> |
[RDA] Only store most recent reaching def from predecessors (NFCI)
When entering a basic block, RDA inserts reaching definitions coming from predecessor blocks (which will be negative numbers) in a
[RDA] Only store most recent reaching def from predecessors (NFCI)
When entering a basic block, RDA inserts reaching definitions coming from predecessor blocks (which will be negative numbers) in a rather peculiar way. If you have incoming reaching definitions -4, -3, -2, -1, it will insert those. If you have incoming reaching definitions -1, -2, -3, -4, it will insert -1, -1, -1, -1, as the max is taken at each step. That's probably not what was intended...
However, RDA only actually cares about the most recent reaching definition from a predecessor (to calculate clearance), so this ends up working fine as far as behavior is concerned. It does waste memory on unnecessary reaching definitions though.
This patch changes the implementation to first compute the most recent reaching definition in one loop, and then insert only that one in a separate loop.
Differential Revision: https://reviews.llvm.org/D77508
show more ...
|