diff options
author | David Green <david.green@arm.com> | 2024-07-27 11:18:56 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-27 11:18:56 +0100 |
commit | f2d2ae3f5a8e45c1386bf71e403d78cfee52cb7b (patch) | |
tree | c111590df77df72636c68ce20d4685de08a1ddbb /clang/lib/CodeGen/CodeGenFunction.cpp | |
parent | fe07d9aa410518c5b631a065ddc5782a623af030 (diff) | |
download | llvm-f2d2ae3f5a8e45c1386bf71e403d78cfee52cb7b.zip llvm-f2d2ae3f5a8e45c1386bf71e403d78cfee52cb7b.tar.gz llvm-f2d2ae3f5a8e45c1386bf71e403d78cfee52cb7b.tar.bz2 |
[SLP] Order clustered load base pointers by ascending offsets (#100653)
This attempts to fix a regression from #98025, where the new order of
reduction nodes causes later passes to not be able to produce as nice
shuffles. The issue boils down to picking an order of [0 1 3 2] for
loaded v4i8 values, which meant later parts could not find a simpler
ordering for the shuffles given the legal nodes available in AArch64. If
instead we make sure they are ordered [0 1 2 3] then everything can fall
into place.
In order to produce a better order that is more likely to work in more
cases, this patch takes the existing clustered loads and sort the base
pointers if there is an order between them. i.e if `V2 == gep (V1, X)`
then V1 is sorted before V2.
Diffstat (limited to 'clang/lib/CodeGen/CodeGenFunction.cpp')
0 files changed, 0 insertions, 0 deletions