diff options
author | Ahmed Bougacha <ahmed.bougacha@gmail.com> | 2014-12-23 06:07:31 +0000 |
---|---|---|
committer | Ahmed Bougacha <ahmed.bougacha@gmail.com> | 2014-12-23 06:07:31 +0000 |
commit | 4553bff4126068ce5b9f451b75f71d367320cec7 (patch) | |
tree | d591daa8e5565f9550132450c5966ff1b49f31c6 /llvm/lib/Transforms/Utils/CloneModule.cpp | |
parent | 279663c1b4bfcec7f849dd2becf207841c45c0cf (diff) | |
download | llvm-4553bff4126068ce5b9f451b75f71d367320cec7.zip llvm-4553bff4126068ce5b9f451b75f71d367320cec7.tar.gz llvm-4553bff4126068ce5b9f451b75f71d367320cec7.tar.bz2 |
[ARM] Don't break alignment when combining base updates into load/stores.
r223862/r224203 tried to also combine base-updating load/stores.
There was a mistake there: the alignment was added as is as an operand to
the ARMISD::VLD/VST node. However, the VLD/VST selection logic doesn't care
about less-than-standard alignment attributes.
For example, no matter the alignment of a v2i64 load (say 1), SelectVLD picks
VLD1q64 (because of the memory type). But VLD1q64 ("vld1.64 {dXX, dYY}") is
8-aligned, per ARMARMv7a 3.2.1.
For the 1-aligned load, what we really want is VLD1q8.
This commit introduces bitcasts if necessary, and changes the vld/vst type to
one whose standard alignment matches the original load/store alignment.
Differential Revision: http://reviews.llvm.org/D6759
llvm-svn: 224754
Diffstat (limited to 'llvm/lib/Transforms/Utils/CloneModule.cpp')
0 files changed, 0 insertions, 0 deletions