OSDN Git Service

Don't include alignment padding in BBInfo.Size.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Thu, 8 Dec 2011 00:55:02 +0000 (00:55 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Thu, 8 Dec 2011 00:55:02 +0000 (00:55 +0000)
commit540c6d9d2651310d88eb9a147177ccd52eec7cd5
treed1d1337dae943d7ff5ef2e3358f10cbc01e8a92b
parent8254f02231faeb15b0abaad96a99ac9e40feb908
Don't include alignment padding in BBInfo.Size.

Compute alignment padding before and after basic blocks dynamically.

Heed basic block alignment.

This simplifies bookkeeping because we don't have to constantly add and
remove padding from BBInfo.Size.  It also makes it possible to track the
extra known alignment bits we get after a tBR_JTr terminator and when
entering an aligned basic block.

This makes the ARMConstantIslandPass aware of aligned basic blocks.

It is tricky to model block alignment correctly when dealing with inline
assembly and tBR_JTr instructions that have variable size.  If inline
assembly turns out to be smaller than expected, that may cause following
alignment padding to be larger than expected.  This could cause constant
pool entries to move out of range.

To avoid that problem, we use the worst case alignment padding following
inline assembly. This may cause slightly suboptimal constant island
placement in aligned basic blocks following inline assembly.  Normal
functions should be unaffected.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146118 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/ARM/ARMConstantIslandPass.cpp