aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp
diff options
context:
space:
mode:
authorLemonBoy <thatlemon@gmail.com>2021-03-17 16:59:55 +0100
committerLemonBoy <thatlemon@gmail.com>2021-03-17 17:03:47 +0100
commit4f024938e4c932feba4d28573ec4522106f8d879 (patch)
treec20f365415410dfe878ab532257d44c0f7fcd921 /llvm/lib/Transforms/Utils/BasicBlockUtils.cpp
parent6b025da443a4ad40b7c05317db05d50af9f3d49a (diff)
downloadllvm-4f024938e4c932feba4d28573ec4522106f8d879.zip
llvm-4f024938e4c932feba4d28573ec4522106f8d879.tar.gz
llvm-4f024938e4c932feba4d28573ec4522106f8d879.tar.bz2
[LoopVectorize] Refine hasIrregularType predicate
The `hasIrregularType` predicate checks whether an array of N values of type Ty is "bitcast-compatible" with a <N x Ty> vector. The previous check returned invalid results in some cases where there's some padding between the array elements: eg. a 4-element array of u7 values is considered as compatible with <4 x u7>, even though the vector is only loading/storing 28 bits instead of 32. The problem causes LLVM to generate incorrect code for some targets: for AArch64 the vector loads/stores are lowered in terms of ubfx/bfi, effectively losing the top (N * padding bits). Reviewed By: lebedev.ri Differential Revision: https://reviews.llvm.org/D97465
Diffstat (limited to 'llvm/lib/Transforms/Utils/BasicBlockUtils.cpp')
0 files changed, 0 insertions, 0 deletions