[ARM] Fix a bug in constant island pass that was triggering an assertion.
authorAkira Hatanaka <ahatanaka@apple.com>
Thu, 8 Jan 2015 20:44:50 +0000 (20:44 +0000)
committerAkira Hatanaka <ahatanaka@apple.com>
Thu, 8 Jan 2015 20:44:50 +0000 (20:44 +0000)
commit40cd57eb5c8ad1909b16209ba8a9102b446d23d2
tree0debb89d087a0afd9b2d7f0a057fe27972b2cb5f
parent8826cb95266483df4e3723de1587df3f4df96145
[ARM] Fix a bug in constant island pass that was triggering an assertion.

The assert was being triggered when the distance between a constant pool entry
and its user exceeded the maximally allowed distance after thumb2 branch
shortening. A padding was inserted after a thumb2 branch instruction was shrunk,
which caused the user to be out of range. This is wrong as the padding should
have been inserted by the layout algorithm so that the distance between two
instructions doesn't grow later during thumb2 instruction optimization.

This commit fixes the code in ARMConstantIslands::createNewWater to call
computeBlockSize and set BasicBlock::Unalign when a branch instruction is
inserted to create new water after a basic block. A non-zero Unalign causes
the worst-case padding to be inserted when adjustBBOffsetsAfter is called to
recompute the basic block offsets.

rdar://problem/19130476

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225467 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/ARM/ARMConstantIslandPass.cpp
test/CodeGen/Thumb2/constant-islands-new-island-padding.ll [new file with mode: 0644]