Apply fix for LLVM PR51957 (Miscompilation in Botan's SHA3)
authorDimitry Andric <dim@FreeBSD.org>
Wed, 10 Nov 2021 18:38:23 +0000 (19:38 +0100)
committerDimitry Andric <dim@FreeBSD.org>
Sat, 13 Nov 2021 20:52:25 +0000 (21:52 +0100)
commit397a8ba05313cc3815d219c9d1b2de1372fcb561
treecef813e519419f076183647a24fbcb8a0f2c52f8
parenta18c6161efc903f636c41b8e521e917a5b315ce8
Apply fix for LLVM PR51957 (Miscompilation in Botan's SHA3)

Merge commit e27a6db5298f from llvm git (by Jameson Nash):

  Bad SLPVectorization shufflevector replacement, resulting in write to wrong memory location

  We see that it might otherwise do:

    %10 = getelementptr {}**, <2 x {}***> %9, <2 x i32> <i32 10, i32 4>
    %11 = bitcast <2 x {}***> %10 to <2 x i64*>
  ...
    %27 = extractelement <2 x i64*> %11, i32 0
    %28 = bitcast i64* %27 to <2 x i64>*
    store <2 x i64> %22, <2 x i64>* %28, align 4, !tbaa !2

  Which is an out-of-bounds store (the extractelement got offset 10
  instead of offset 4 as intended). With the fix, we correctly generate
  extractelement for i32 1 and generate correct code.

  Differential Revision: https://reviews.llvm.org/D106613
contrib/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp