[PATCH] D98714: [SLP] Add insertelement instructions to vectorizable tree

Anton Afanasyev via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 16 08:21:02 PDT 2021


anton-afanasyev created this revision.
anton-afanasyev added reviewers: ABataev, RKSimon, spatel, dtemirbulatov.
Herald added subscribers: kerbowa, hiraditya, nhaehnle, jvesely.
anton-afanasyev requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Add new type of tree node with `EntryState` equal to `MayBeRemoved`,
for `InsertElementInst` chain forming vector. These instructions are
removed during vectorization and we can add this node to cost model,
so naturally estimating their cost and getting rid of `CompensateCost` tricks.
This fixes PR40522 and PR35732 in a natural way. Also this patch is
the first step towards revectorization of partially vectorization
(to fix PR42022 completely). After adding inserts to tree the next step is
to add vector instructions there (for instance, to merge `store <2 x float>`
and `store <2 x float>` to `store <4 x float>`).

Fixes PR40522 and PR35732.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D98714

Files:
  llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
  llvm/test/Transforms/SLPVectorizer/AArch64/accelerate-vector-functions-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/AArch64/accelerate-vector-functions.ll
  llvm/test/Transforms/SLPVectorizer/AArch64/gather-root.ll
  llvm/test/Transforms/SLPVectorizer/AArch64/insertelement-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/AArch64/insertelement.ll
  llvm/test/Transforms/SLPVectorizer/AArch64/transpose-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/AArch64/transpose.ll
  llvm/test/Transforms/SLPVectorizer/AMDGPU/add_sub_sat-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/AMDGPU/add_sub_sat.ll
  llvm/test/Transforms/SLPVectorizer/AMDGPU/bswap-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/AMDGPU/bswap.ll
  llvm/test/Transforms/SLPVectorizer/AMDGPU/round-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/AMDGPU/round.ll
  llvm/test/Transforms/SLPVectorizer/ARM/extract-insert-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/ARM/extract-insert.ll
  llvm/test/Transforms/SLPVectorizer/X86/PR35865-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/X86/PR35865.ll
  llvm/test/Transforms/SLPVectorizer/X86/PR39774.ll
  llvm/test/Transforms/SLPVectorizer/X86/alternate-cast-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/X86/alternate-cast.ll
  llvm/test/Transforms/SLPVectorizer/X86/alternate-fp-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/X86/alternate-fp.ll
  llvm/test/Transforms/SLPVectorizer/X86/alternate-int-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/X86/alternate-int.ll
  llvm/test/Transforms/SLPVectorizer/X86/arith-fp-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/X86/arith-fp.ll
  llvm/test/Transforms/SLPVectorizer/X86/external_user_jumbled_load-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/X86/external_user_jumbled_load.ll
  llvm/test/Transforms/SLPVectorizer/X86/fptosi-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/X86/fptosi.ll
  llvm/test/Transforms/SLPVectorizer/X86/hadd-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/X86/hadd.ll
  llvm/test/Transforms/SLPVectorizer/X86/hsub-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/X86/hsub.ll
  llvm/test/Transforms/SLPVectorizer/X86/insert-element-build-vector-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/X86/insert-element-build-vector.ll
  llvm/test/Transforms/SLPVectorizer/X86/load-merge-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/X86/load-merge.ll
  llvm/test/Transforms/SLPVectorizer/X86/long_chains.ll
  llvm/test/Transforms/SLPVectorizer/X86/operandorder.ll
  llvm/test/Transforms/SLPVectorizer/X86/pr31599-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/X86/pr31599.ll
  llvm/test/Transforms/SLPVectorizer/X86/pr40522.ll
  llvm/test/Transforms/SLPVectorizer/X86/pr44067-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/X86/pr44067.ll
  llvm/test/Transforms/SLPVectorizer/X86/resched.ll
  llvm/test/Transforms/SLPVectorizer/X86/sext-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/X86/sext.ll
  llvm/test/Transforms/SLPVectorizer/X86/sign-extend-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/X86/sign-extend.ll
  llvm/test/Transforms/SLPVectorizer/X86/sitofp-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/X86/sitofp.ll
  llvm/test/Transforms/SLPVectorizer/X86/value-bug-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/X86/value-bug.ll
  llvm/test/Transforms/SLPVectorizer/X86/zext-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/X86/zext.ll
  llvm/test/Transforms/SLPVectorizer/vectorizable-functions-inseltpoison.ll
  llvm/test/Transforms/SLPVectorizer/vectorizable-functions.ll



More information about the llvm-commits mailing list