aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/CloneModule.cpp
diff options
context:
space:
mode:
authorAhmed Bougacha <ahmed.bougacha@gmail.com>2014-12-23 06:07:31 +0000
committerAhmed Bougacha <ahmed.bougacha@gmail.com>2014-12-23 06:07:31 +0000
commit4553bff4126068ce5b9f451b75f71d367320cec7 (patch)
treed591daa8e5565f9550132450c5966ff1b49f31c6 /llvm/lib/Transforms/Utils/CloneModule.cpp
parent279663c1b4bfcec7f849dd2becf207841c45c0cf (diff)
downloadllvm-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