diff options
author | Richard Sandiford <rsandifo@linux.vnet.ibm.com> | 2013-05-22 09:57:57 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@linux.vnet.ibm.com> | 2013-05-22 09:57:57 +0000 |
commit | 487399a60f9e4e8263317038d779caa6b68ea61a (patch) | |
tree | d06f1118d2709580144fa0799bdf9166423462bc /utils/llvmdo | |
parent | 3b4b5367da29a1598dc333acf37652ef286e9225 (diff) | |
download | external_llvm-487399a60f9e4e8263317038d779caa6b68ea61a.zip external_llvm-487399a60f9e4e8263317038d779caa6b68ea61a.tar.gz external_llvm-487399a60f9e4e8263317038d779caa6b68ea61a.tar.bz2 |
[SystemZ] Fix thinko in long branch pass
The original version of the pass could underestimate the length of a backward
branch in cases like:
alignment to N bytes or more
...
relaxable branch A
...
foo: (aligned to M<N bytes)
...
bar: (aligned to N bytes)
...
relaxable branch B to foo
We don't add any misalignment gap for "bar" because N bytes of alignment
had already been reached earlier in the function. In this case, assuming
that A is relaxed can push "foo" closer to "bar", and make B appear to be
in range. Similar problems can occur for forward branches.
I don't think it's possible to create blocks with mixed alignments as
things stand, not least because we haven't yet defined getPrefLoopAlignment()
for SystemZ (that would need benchmarking). So I don't think we can test
this yet.
Thanks to Rafael EspĂndola for spotting the bug.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@182460 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/llvmdo')
0 files changed, 0 insertions, 0 deletions