diff options
author | Vyacheslav Klochkov <vyacheslav.n.klochkov@intel.com> | 2024-12-11 21:01:35 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-12-11 19:01:35 -0800 |
commit | fd2f8d485df7742320317b14d49b9d808f70625c (patch) | |
tree | 831ad4fa1c2dd80358fec6a0f9a3910a75de680f /llvm/lib/CodeGen/MachineScheduler.cpp | |
parent | 22f0ebb19cd216a1748263c4dbabcd832206f3ea (diff) | |
download | llvm-fd2f8d485df7742320317b14d49b9d808f70625c.zip llvm-fd2f8d485df7742320317b14d49b9d808f70625c.tar.gz llvm-fd2f8d485df7742320317b14d49b9d808f70625c.tar.bz2 |
[LoadStoreVectorizer] Postprocess and merge equivalence classes (#114501)
This patch introduces a new method:
void Vectorizer::mergeEquivalenceClasses(EquivalenceClassMap &EQClasses)
const
The method is called at the end of
Vectorizer::collectEquivalenceClasses() and is needed to merge
equivalence classes that differ only by their underlying objects (UO1
and UO2), where UO1 is 1-level-indirection underlying base for UO2. This
situation arises due to the limited lookup depth used during the search
of underlying bases with llvm::getUnderlyingObject(ptr).
Using any fixed lookup depth can result into creation of multiple
equivalence classes that only differ by 1-level indirection bases.
The new approach merges equivalence classes if they have adjacent bases
(1-level indirection). If a series of equivalence classes form ladder
formed of 1-step/level indirections, they are all merged into a single
equivalence class. This provides more opportunities for the load-store
vectorizer to generate better vectors.
---------
Signed-off-by: Klochkov, Vyacheslav N <vyacheslav.n.klochkov@intel.com>
Diffstat (limited to 'llvm/lib/CodeGen/MachineScheduler.cpp')
0 files changed, 0 insertions, 0 deletions