[PATCH] D93967: [SLP]Need shrink the load vector after reordering.
Alexey Bataev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 8 05:18:24 PST 2021
ABataev added a comment.
In D93967#2486129 <https://reviews.llvm.org/D93967#2486129>, @mstorsjo wrote:
> This caused misoptimizations for armv7, where code that previously worked correctly now produce different results. (The code is clean under ubsan, so it shouldn't be relying on anything undefined.)
>
> The issue appears with https://martin.st/temp/interplayvideo-preproc.c, compiled with `clang -target armv7-linux-gnueabihf -O2`.
>
> The diff in generated code, before/after, looks like this:
>
> vmov.32 d16[0], lr
> vmov.32 d16[1], r2
> .LBB27_3: @ %if.end
> @ in Loop: Header=BB27_4 Depth=1
> vmov.32 r2, d16[1]
> add r3, r3, #1
> vmov.32 r5, d16[0]
> cmp r3, #8
> + vdup.32 d16, d16[0]
> vmov.16 d17[1], r2
> vmov.16 d18[0], r5
> vdup.16 d21, d17[1]
> vdup.16 d20, d18[0]
> vst1.16 {d20, d21}, [r1], r12
> beq .LBB27_9
> .LBB27_4: @ %for.body
> @ =>This Inner Loop Header: Depth=1
> tst r3, #3
> bne .LBB27_3
>
> If it loops back to `.LBB27_3`, the vector element `d16[1]` no longer has the value it was expected to have.
Hi, thanks for the report, the patch is correct, the bug is in the existing code. Will fix it soon.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D93967/new/
https://reviews.llvm.org/D93967
More information about the llvm-commits
mailing list