aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineScheduler.cpp
diff options
context:
space:
mode:
authorVyacheslav Klochkov <vyacheslav.n.klochkov@intel.com>2024-12-11 21:01:35 -0600
committerGitHub <noreply@github.com>2024-12-11 19:01:35 -0800
commitfd2f8d485df7742320317b14d49b9d808f70625c (patch)
tree831ad4fa1c2dd80358fec6a0f9a3910a75de680f /llvm/lib/CodeGen/MachineScheduler.cpp
parent22f0ebb19cd216a1748263c4dbabcd832206f3ea (diff)
downloadllvm-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