Revision tags: llvmorg-21-init, llvmorg-19.1.7 |
|
#
1b294353 |
| 09-Jan-2025 |
Nicholas Guy <nicholas.guy@arm.com> |
[llvm] Fix crash caused by reprocessing complex reductions (#122077)
If a complex pattern had the shape of both a complex->complex reduction and a complex->single reduction, the matching would recog
[llvm] Fix crash caused by reprocessing complex reductions (#122077)
If a complex pattern had the shape of both a complex->complex reduction and a complex->single reduction, the matching would recognise both and deem the graph a valid transformation. Preventing this reprocessing results in only one of these matching, meaning that in the case of an invalid graph, we don't try to transform it anyway.
show more ...
|
#
8e1b49c3 |
| 06-Jan-2025 |
Nicholas Guy <nicholas.guy@arm.com> |
Complex deinterleaving/single reductions build fix Reapply "Add support for single reductions in ComplexDeinterleavingPass (#112875)" (#120441)
This reverts commit 76714be5fd4ace66dd9e19ce706c2e214
Complex deinterleaving/single reductions build fix Reapply "Add support for single reductions in ComplexDeinterleavingPass (#112875)" (#120441)
This reverts commit 76714be5fd4ace66dd9e19ce706c2e2149dd5716, fixing the
build failure that caused the revert.
The failure stemmed from the complex deinterleaving pass identifying a
series of add operations as a "complex to single reduction", so when it
tried to transform this erroneously identified pattern, it faulted. The
fix applied is to ensure that complex numbers (or patterns that match
them) are used throughout, by checking if there is a deinterleave node
amidst the graph.
show more ...
|
#
76714be5 |
| 18-Dec-2024 |
Florian Hahn <flo@fhahn.com> |
Revert "Add support for single reductions in ComplexDeinterleavingPass (#112875)"
This reverts commit b3eede5e1fa7ab742b86e9be22db7bccd2505b8a.
This has been breaking most AArch64 stage2 builds for
Revert "Add support for single reductions in ComplexDeinterleavingPass (#112875)"
This reverts commit b3eede5e1fa7ab742b86e9be22db7bccd2505b8a.
This has been breaking most AArch64 stage2 builds for 4+ hours, reverting to get the bots back to green.
https://lab.llvm.org/buildbot/#/builders/41/builds/4172 https://lab.llvm.org/buildbot/#/builders/4/builds/4281 https://lab.llvm.org/buildbot/#/builders/199/builds/263 https://lab.llvm.org/buildbot/#/builders/198/builds/334 https://lab.llvm.org/buildbot/#/builders/143/builds/4276 https://lab.llvm.org/buildbot/#/builders/17/builds/4725
show more ...
|
#
b3eede5e |
| 18-Dec-2024 |
Nicholas Guy <nicholas.guy@arm.com> |
Add support for single reductions in ComplexDeinterleavingPass (#112875)
The Complex Deinterleaving pass assumes that all values emitted will
result in complex numbers, this patch aims to remove th
Add support for single reductions in ComplexDeinterleavingPass (#112875)
The Complex Deinterleaving pass assumes that all values emitted will
result in complex numbers, this patch aims to remove that assumption and
adds support for emitting just the real or imaginary components, not
both.
show more ...
|
Revision tags: llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4 |
|
#
735ab61a |
| 13-Nov-2024 |
Kazu Hirata <kazu@google.com> |
[CodeGen] Remove unused includes (NFC) (#115996)
Identified with misc-include-cleaner.
|
Revision tags: 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 |
|
#
bfc03171 |
| 29-Apr-2024 |
Maciej Gabka <maciej.gabka@arm.com> |
Move several vector intrinsics out of experimental namespace (#88748)
This patch is moving out following intrinsics:
* vector.interleave2/deinterleave2
* vector.reverse
* vector.splice
from th
Move several vector intrinsics out of experimental namespace (#88748)
This patch is moving out following intrinsics:
* vector.interleave2/deinterleave2
* vector.reverse
* vector.splice
from the experimental namespace.
All these intrinsics exist in LLVM for more than a year now, and are
widely used, so should not be considered as experimental.
show more ...
|
Revision tags: llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1 |
|
#
f33f66be |
| 05-Mar-2024 |
Jeremy Morse <jeremy.morse@sony.com> |
[NFC][RemoveDIs] Always use iterators for inserting PHIs
It's becoming potentially unsafe to insert a PHI instruction using a plain Instruction pointer. Switch all the remaining sites that create an
[NFC][RemoveDIs] Always use iterators for inserting PHIs
It's becoming potentially unsafe to insert a PHI instruction using a plain Instruction pointer. Switch all the remaining sites that create and insert PHIs to use iterators instead. For example, the code in ComplexDeinterleavingPass.cpp is definitely at-risk of mixing PHIs and debug-info.
show more ...
|
Revision tags: 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 |
|
#
4c9223c7 |
| 06-Sep-2023 |
Florian Hahn <flo@fhahn.com> |
[ComplexDeinterleaving] Use MapVector to fix codegen non-determinism.
|
Revision tags: llvmorg-17.0.0-rc4 |
|
#
e2cb07c3 |
| 30-Aug-2023 |
Igor Kirillov <igor.kirillov@arm.com> |
[CodeGen] Fix incorrect insertion point selection for reduction nodes in ComplexDeinterleavingPass
When replacing ComplexDeinterleavingPass::ReductionOperation, we can do it either from the Real or
[CodeGen] Fix incorrect insertion point selection for reduction nodes in ComplexDeinterleavingPass
When replacing ComplexDeinterleavingPass::ReductionOperation, we can do it either from the Real or Imaginary part. The correct way is to take whichever is later in the BasicBlock, but before the patch, we just always took the Real part.
Fixes https://github.com/llvm/llvm-project/issues/65044
Differential Revision: https://reviews.llvm.org/D159209
show more ...
|
Revision tags: llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2 |
|
#
46b2ad02 |
| 02-Aug-2023 |
Igor Kirillov <igor.kirillov@arm.com> |
[CodeGen] Improve speed of ComplexDeinterleaving pass
Cache all results of running `identifyNode`, even those that do not identify potential complex operations. This patch prevents ComplexDeinterlea
[CodeGen] Improve speed of ComplexDeinterleaving pass
Cache all results of running `identifyNode`, even those that do not identify potential complex operations. This patch prevents ComplexDeinterleaving pass from repeatedly trying to identify Nodes for the same pair of instructions.
Fixes https://github.com/llvm/llvm-project/issues/64379
Differential Revision: https://reviews.llvm.org/D156916
show more ...
|
Revision tags: llvmorg-17.0.0-rc1, llvmorg-18-init |
|
#
c15557d6 |
| 26-Jun-2023 |
Igor Kirillov <igor.kirillov@arm.com> |
[CodeGen] Extend ComplexDeinterleaving pass to recognise patterns using integer types
AArch64 introduced CMLA and CADD instructions as part of SVE2. This change allows to generate such instructions
[CodeGen] Extend ComplexDeinterleaving pass to recognise patterns using integer types
AArch64 introduced CMLA and CADD instructions as part of SVE2. This change allows to generate such instructions when this architecture feature is available.
Differential Revision: https://reviews.llvm.org/D153808
show more ...
|
#
0aecf7ff |
| 06-Jul-2023 |
Igor Kirillov <igor.kirillov@arm.com> |
[CodeGen] Fix incorrectly detected reduction bug in ComplexDeinterleaving pass
Using ACLE intrinsics, it is possible to create a loop that the deinterleaving pass incorrectly classified as a reducti
[CodeGen] Fix incorrectly detected reduction bug in ComplexDeinterleaving pass
Using ACLE intrinsics, it is possible to create a loop that the deinterleaving pass incorrectly classified as a reduction loop. For example, for fixed-width vectors the loop was like below:
vector.body: %a = phi <4 x float> [ %init.a, %entry ], [ %updated.a, %vector.body ] %b = phi <4 x float> [ %init.b, %entry ], [ %updated.b, %vector.body ] ... ; Does not depend on %a or %b: %updated.a = ... %updated.b = ...
Differential Revision: https://reviews.llvm.org/D154598
show more ...
|
#
7f20407c |
| 14-Jun-2023 |
Igor Kirillov <igor.kirillov@arm.com> |
[CodeGen] Add support for Splats in ComplexDeinterleaving pass
This commit allows generating of complex number intrinsics for expressions with constants or loops invariants, which are represented as
[CodeGen] Add support for Splats in ComplexDeinterleaving pass
This commit allows generating of complex number intrinsics for expressions with constants or loops invariants, which are represented as splats. For instance, after vectorizing loops in the following code snippets, the ComplexDeinterleaving pass will be able to generate complex number intrinsics:
``` complex<> x = ...; for (int i = 0; i < N; ++i) c[i] = a[i] * b[i] * x; ```
or
``` for (int i = 0; i < N; ++i) c[i] = a[i] * b[i] * (11.0 + 3.0i); ```
Differential Revision: https://reviews.llvm.org/D153355
show more ...
|
#
b4f9c3a9 |
| 21-Jun-2023 |
Igor Kirillov <igor.kirillov@arm.com> |
[CodeGen] Refactor ComplexDeinterleaving to run identification on Values instead of Instructions
This change will make it easier to add identification of complex constants in future patches.
Differ
[CodeGen] Refactor ComplexDeinterleaving to run identification on Values instead of Instructions
This change will make it easier to add identification of complex constants in future patches.
Differential Revision: https://reviews.llvm.org/D153446
show more ...
|
#
c78acc92 |
| 29-Jun-2023 |
Wang, Xin10 <xin10.wang@intel.com> |
[NFC]Fix possibly derefer nullptr in ComplexDeinterleavingPass.cpp
Fix static analyzer reports issue, add assert to avoid analyzer report.
Reviewed By: igor.kirillov
Differential Revision: https:/
[NFC]Fix possibly derefer nullptr in ComplexDeinterleavingPass.cpp
Fix static analyzer reports issue, add assert to avoid analyzer report.
Reviewed By: igor.kirillov
Differential Revision: https://reviews.llvm.org/D153942
show more ...
|
#
1fce8df5 |
| 27-Jun-2023 |
Igor Kirillov <igor.kirillov@arm.com> |
Fix the ComplexDeinterleaving bug when handling mixed reductions.
Add a missing check that ensures that ComplexDeinterleaving for reduction is only analyzed for Real and Imaginary Instructions of th
Fix the ComplexDeinterleaving bug when handling mixed reductions.
Add a missing check that ensures that ComplexDeinterleaving for reduction is only analyzed for Real and Imaginary Instructions of the same type.
Differential Revision: https://reviews.llvm.org/D153862
show more ...
|
#
04a8070b |
| 23-Jun-2023 |
Igor Kirillov <igor.kirillov@arm.com> |
Revert "Revert "[CodeGen] Extend reduction support in ComplexDeinterleaving pass to support predication""
Adds the capability to recognize SelectInst that appear in the IR. These instructions are ge
Revert "Revert "[CodeGen] Extend reduction support in ComplexDeinterleaving pass to support predication""
Adds the capability to recognize SelectInst that appear in the IR. These instructions are generated during scalable vectorization for reduction and when the code contains conditions inside the loop body or when "-prefer-predicate-over-epilogue=predicate-dont-vectorize" is set.
Differential Revision: https://reviews.llvm.org/D152558
This reverts commit ab09654832dba5cef8baa6400fdfd3e4d1495624.
Reason: Reapplying after removing unnecessary default case in switch expression.
show more ...
|
#
ab096548 |
| 22-Jun-2023 |
Vitaly Buka <vitalybuka@google.com> |
Revert "[CodeGen] Extend reduction support in ComplexDeinterleaving pass to support predication"
ComplexDeinterleavingPass.cpp:1849:3: error: default label in switch which covers all enumeration val
Revert "[CodeGen] Extend reduction support in ComplexDeinterleaving pass to support predication"
ComplexDeinterleavingPass.cpp:1849:3: error: default label in switch which covers all enumeration values
This reverts commit 116953b82130df1ebd817b3587b16154f659c013.
show more ...
|
Revision tags: llvmorg-16.0.6 |
|
#
116953b8 |
| 09-Jun-2023 |
Igor Kirillov <igor.kirillov@arm.com> |
[CodeGen] Extend reduction support in ComplexDeinterleaving pass to support predication
Adds the capability to recognize SelectInst that appear in the IR. These instructions are generated during sca
[CodeGen] Extend reduction support in ComplexDeinterleaving pass to support predication
Adds the capability to recognize SelectInst that appear in the IR. These instructions are generated during scalable vectorization for reduction and when the code contains conditions inside the loop body or when "-prefer-predicate-over-epilogue=predicate-dont-vectorize" is set.
Differential Revision: https://reviews.llvm.org/D152558
show more ...
|
#
c97ab93d |
| 14-Jun-2023 |
Kazu Hirata <kazu@google.com> |
[CodeGen] Fix a warning
This patch fixes:
llvm/lib/CodeGen/ComplexDeinterleavingPass.cpp:1790:3: error: default label in switch which covers all enumeration values [-Werror,-Wcovered-switch-d
[CodeGen] Fix a warning
This patch fixes:
llvm/lib/CodeGen/ComplexDeinterleavingPass.cpp:1790:3: error: default label in switch which covers all enumeration values [-Werror,-Wcovered-switch-default]
show more ...
|
#
2cbc265c |
| 02-Jun-2023 |
Igor Kirillov <igor.kirillov@arm.com> |
[CodeGen] Add support for reductions in ComplexDeinterleaving pass
This commit enhances the ComplexDeinterleaving pass to handle unordered reductions in simple one-block vectorized loops, supporting
[CodeGen] Add support for reductions in ComplexDeinterleaving pass
This commit enhances the ComplexDeinterleaving pass to handle unordered reductions in simple one-block vectorized loops, supporting both SVE and Neon architectures.
Differential Revision: https://reviews.llvm.org/D152022
show more ...
|
Revision tags: llvmorg-16.0.5, llvmorg-16.0.4, llvmorg-16.0.3, llvmorg-16.0.2 |
|
#
1a1e7610 |
| 17-Apr-2023 |
Igor Kirillov <igor.kirillov@arm.com> |
[CodeGen] Improve handling -Ofast generated code by ComplexDeinterleaving pass
Code generated with -Ofast and -O3 -ffp-contract=fast (add -ffinite-math-only to enable vectorization) can differ signi
[CodeGen] Improve handling -Ofast generated code by ComplexDeinterleaving pass
Code generated with -Ofast and -O3 -ffp-contract=fast (add -ffinite-math-only to enable vectorization) can differ significantly. Code compiled with -O3 can be deinterleaved using patterns as the instruction order is preserved. However, with the -Ofast flag, there can be multiple changes in the computation sequence, and even the real and imaginary parts may not be calculated in parallel. For more details, refer to llvm/test/CodeGen/AArch64/complex-deinterleaving-*-fast.ll and llvm/test/CodeGen/AArch64/complex-deinterleaving-*-contract.ll tests. This patch implements a more general approach and enables handling most -Ofast cases.
Differential Revision: https://reviews.llvm.org/D148558
show more ...
|
#
40a81d31 |
| 19-Apr-2023 |
Igor Kirillov <igor.kirillov@arm.com> |
[CodeGen] Refactor IR generation functions to use IRBuilder in ComplexDeinterleaving pass
This patch updates several functions in LLVM's IR generation code to accept an IRBuilder object as an argume
[CodeGen] Refactor IR generation functions to use IRBuilder in ComplexDeinterleaving pass
This patch updates several functions in LLVM's IR generation code to accept an IRBuilder object as an argument, rather than an Instruction that indicates the insertion point for new instructions. This change is necessary to handle sophisticated -Ofast optimization cases from D148558 where it's unclear which instructions should be used as the insertion point for new operations.
Differential Revision: https://reviews.llvm.org/D148703
show more ...
|
#
ac73c48e |
| 20-May-2023 |
Elliot Goodrich <elliotgoodrich@gmail.com> |
[llvm] Reduce ComplexDeinterleavingPass.h includes
Remove the unnecessary `"llvm/IR/PatternMatch.h"` include directive from `ComplexDeinterleavingPass.h` and move it to the corresponding source file
[llvm] Reduce ComplexDeinterleavingPass.h includes
Remove the unnecessary `"llvm/IR/PatternMatch.h"` include directive from `ComplexDeinterleavingPass.h` and move it to the corresponding source file.
Add missing includes that were transitively included by this header to 3 other source files.
This reduces the total number of preprocessing tokens across the LLVM source files in `lib` from (roughly) 1,964,876,961 to 1,935,091,611 - a reduction of ~1.52%. This should result in a small improvement in compilation time.
show more ...
|
#
b7fb2a3f |
| 20-May-2023 |
Elliot Goodrich <elliotgoodrich@gmail.com> |
Revert "[llvm] Reduce ComplexDeinterleavingPass.h includes"
This reverts commit 058ca5c07106d38ad66e3ec4972a613a64e88151.
|