[all-commits] [llvm/llvm-project] da33d4: [SLP] Don't try to vectorize pair with insertelement

yonghong-song via All-commits all-commits at lists.llvm.org
Tue Mar 1 14:31:23 PST 2022


  Branch: refs/heads/release/14.x
  Home:   https://github.com/llvm/llvm-project
  Commit: da33d400682a8cf93062fe61a9f0b6ec1d60c8ad
      https://github.com/llvm/llvm-project/commit/da33d400682a8cf93062fe61a9f0b6ec1d60c8ad
  Author: Anton Afanasyev <anton.a.afanasyev at gmail.com>
  Date:   2022-03-01 (Tue, 01 Mar 2022)

  Changed paths:
    M llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
    M llvm/test/Transforms/SLPVectorizer/X86/pr52275.ll

  Log Message:
  -----------
  [SLP] Don't try to vectorize pair with insertelement

Particularly this breaks vectorization of insertelements where some of
intermediate (i.e. not last) insertelements are used externally.

Fixes PR52275
Fixes #51617

Reviewed by: ABataev

Differential Revision: https://reviews.llvm.org/D119679

(cherry picked from commit b7574b0)


  Commit: 19149538e9a9fce91bcdf70b69dc6defc9e8a533
      https://github.com/llvm/llvm-project/commit/19149538e9a9fce91bcdf70b69dc6defc9e8a533
  Author: Yonghong Song <yhs at fb.com>
  Date:   2022-03-01 (Tue, 01 Mar 2022)

  Changed paths:
    M llvm/lib/Target/BPF/BTFDebug.cpp
    A llvm/test/CodeGen/BPF/BTF/pruning-multi-derived-type.ll

  Log Message:
  -----------
  [BPF] Fix a BTF type pruning bug

In BPF backend, BTF type generation may skip
some debuginfo types if they are the pointee
type of a struct member. For example,
  struct task_struct {
    ...
    struct mm_struct                *mm;
    ...
  };
BPF backend may generate a forward decl for
'struct mm_struct' instead of full type if
there are no other usage of 'struct mm_struct'.
The reason is to avoid bringing too much unneeded types
in BTF.

Alexei found a pruning bug where we may miss
some full type generation. The following is an illustrating
example:
   struct t1 { ... }
   struct t2 { struct t1 *p; };
   struct t2 g;
   void foo(struct t1 *arg) { ... }
In the above case, we will have partial debuginfo chain like below:
   struct t2 -> member p
                        \ -> ptr -> struct t1
                        /
     foo -> argument arg
During traversing
   struct t2 -> member p -> ptr -> struct t1
The corresponding BTF types are generated except 'struct t1' which
will be in FixUp stage. Later, when traversing
   foo -> argument arg -> ptr -> struct t1
The 'ptr' BTF type has been generated and currently implementation
ignores 'pointer' type hence 'struct t1' is not generated.

This patch fixed the issue not just for the above case, but for
general case with multiple derived types, e.g.,
   struct t2 -> member p
                        \ -> const -> ptr -> volatile -> struct t1
                        /
     foo -> argument arg

Differential Revision: https://reviews.llvm.org/D119986


Compare: https://github.com/llvm/llvm-project/compare/3001b0d51963...19149538e9a9


More information about the All-commits mailing list