LoopVectorize: Scalarize padded types
authorArnold Schwaighofer <aschwaighofer@apple.com>
Wed, 24 Apr 2013 16:16:01 +0000 (16:16 +0000)
committerArnold Schwaighofer <aschwaighofer@apple.com>
Wed, 24 Apr 2013 16:16:01 +0000 (16:16 +0000)
commita4b8b4ccc9ecd6863606c7cdde6ec1b38734708a
treeb0acc2542bf99031437884cde0e81dd4047ae07d
parentb03ad17536097a0f172428c939e80ce7657e201b
LoopVectorize: Scalarize padded types

This patch disables memory-instruction vectorization for types that need padding
bytes, e.g., x86_fp80 has 10 bytes store size with 6 bytes padding in darwin on
x86_64. Because the load/store vectorization is performed by the bit casting to
a packed vector, which has incompatible memory layout due to the lack of padding
bytes, the present vectorizer produces inconsistent result for memory
instructions of those types.
This patch checks an equality of the AllocSize of a scalar type and allocated
size for each vector element, to ensure that there is no padding bytes and the
array can be read/written using vector operations.

Patch by Daisuke Takahashi!

Fixes PR15758.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@180196 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Vectorize/LoopVectorize.cpp
test/Transforms/LoopVectorize/X86/x86_fp80-vector-store.ll [new file with mode: 0644]