[PATCH] D135174: [SLP]Redesign vectorization of the gather nodes.

Alexey Bataev via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 15 13:43:54 PST 2022


ABataev added a comment.

In D135174#3928081 <https://reviews.llvm.org/D135174#3928081>, @aeubanks wrote:

> this change is causing a crash on the following IR
>
>   target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
>   target triple = "x86_64-pc-windows-msvc19.16.0"
>   
>   %"class.(anonymous namespace)::ESMatrix" = type { [4 x [4 x float]] }
>   
>   define void @"?Multiply at ESMatrix@?A0x78950DC3@@QEAAXPEAV1?A0x78950DC3@@0 at Z"(ptr %a, ptr %b) {
>   entry:
>     %result = alloca %"class.(anonymous namespace)::ESMatrix", i32 0, align 4
>     %arrayidx11 = getelementptr [4 x [4 x float]], ptr %b, i64 0, i64 1
>     %0 = load float, ptr %arrayidx11, align 4
>     %1 = load float, ptr null, align 4
>     %arrayidx120 = getelementptr [4 x float], ptr %b, i64 0, i64 3
>     %2 = load float, ptr %arrayidx120, align 4
>     br label %for.body
>   
>   for.body:                                         ; preds = %for.body, %entry
>     %3 = load float, ptr %a, align 4
>     %mul = fmul float %3, 0.000000e+00
>     %arrayidx9 = getelementptr [4 x [4 x float]], ptr %a, i64 0, i64 0, i64 1
>     %4 = load float, ptr %arrayidx9, align 4
>     %mul13 = fmul float %4, %0
>     %add = fadd float %mul, %mul13
>     %add22 = fadd float %add, 0.000000e+00
>     store float %add22, ptr %result, align 4
>     %5 = load float, ptr null, align 4
>     %mul43 = fmul float %3, %5
>     %mul51 = fmul float %4, 0.000000e+00
>     %add52 = fadd float %mul43, %mul51
>     %add61 = fadd float %add52, 0.000000e+00
>     %arrayidx74 = getelementptr [4 x [4 x float]], ptr %result, i64 0, i64 0, i64 1
>     store float %add61, ptr %arrayidx74, align 4
>     %mul82 = fmul float %3, 0.000000e+00
>     %mul90 = fmul float %4, %1
>     %add91 = fadd float %mul82, %mul90
>     %add100 = fadd float %add91, 0.000000e+00
>     %arrayidx113 = getelementptr [4 x [4 x float]], ptr %result, i64 0, i64 0, i64 2
>     store float %add100, ptr %arrayidx113, align 4
>     %mul121 = fmul float %3, %2
>     %mul129 = fmul float %4, 0.000000e+00
>     %add130 = fadd float %mul121, %mul129
>     %add139 = fadd float %add130, 0.000000e+00
>     %arrayidx152 = getelementptr [4 x [4 x float]], ptr %result, i64 0, i64 0, i64 3
>     store float %add139, ptr %arrayidx152, align 4
>     br label %for.body
>   }
>
>   $ opt -p slp-vectorizer /tmp/a.ll -disable-output
>   opt: ../../llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:8150: Value *llvm::slpvectorizer::BoUpSLP::vectorizeOperand(TreeEntry *, unsigned int): Assertion `(any_of(VE->UserTreeIndices, [E, Node
>   Idx](const EdgeInfo &EI) { return EI.EdgeIdx == NodeIdx && EI.UserTE == E; }) || any_of(VectorizableTree, [E, NodeIdx, VE](const std::unique_ptr<TreeEntry> &TE) { return TE->isOperandGatherNode({
>   E, NodeIdx}) && VE->isSame(TE->Scalars); })) && "Expected same vectorizable node."' failed.                                                                                                        

Must be fixed in 0a33ceee0105c94060c8a6089a2e489a8a7a5cb7 <https://reviews.llvm.org/rG0a33ceee0105c94060c8a6089a2e489a8a7a5cb7>


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D135174/new/

https://reviews.llvm.org/D135174



More information about the llvm-commits mailing list