LLVM backend for 6502
Go to file
Akira Hatanaka 1cdebe50c1 ARM: Fix a bug which was causing convergence failure in constant-island pass.
The bug is in ARMConstantIslands::createNewWater where the upper bound of the
new water split point is computed:

// This could point off the end of the block if we've already got constant
// pool entries following this block; only the last one is in the water list.
// Back past any possible branches (allow for a conditional and a maximally
// long unconditional).
if (BaseInsertOffset + 8 >= UserBBI.postOffset()) {
  BaseInsertOffset = UserBBI.postOffset() - UPad - 8;
  DEBUG(dbgs() << format("Move inside block: %#x\n", BaseInsertOffset));
}

The split point is supposed to be somewhere between the machine instruction that
loads from the constant pool entry and the end of the basic block, before branch
instructions. The code above is fine if the basic block is large enough and
there are a sufficient number of instructions following the machine instruction.
However, if the machine instruction is near the end of the basic block,
BaseInsertOffset can point to the machine instruction or another instruction
that precedes it, and this can lead to convergence failure.

This commit fixes this bug by ensuring BaseInsertOffset is larger than the
offset of the instruction following the constant-loading instruction.

rdar://problem/18581150


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220015 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-17 01:31:47 +00:00
autoconf Initial version of Go bindings. 2014-10-16 22:48:02 +00:00
bindings [OCaml] Add Llvm.instr_clone. 2014-10-17 01:02:40 +00:00
cmake Initial version of Go bindings. 2014-10-16 22:48:02 +00:00
docs [llvm-symbolizer] Introduce the -dsym-hint option. 2014-10-17 00:50:19 +00:00
examples Add doInitialization/doFinalization to DataLayoutPass. 2014-09-10 21:27:43 +00:00
include Revert commit r219835 and r219829. 2014-10-17 01:06:02 +00:00
lib ARM: Fix a bug which was causing convergence failure in constant-island pass. 2014-10-17 01:31:47 +00:00
projects
test ARM: Fix a bug which was causing convergence failure in constant-island pass. 2014-10-17 01:31:47 +00:00
tools Revert commit r219835 and r219829. 2014-10-17 01:06:02 +00:00
unittests [ADT] Add an (ADL-friendly) abs free function for APFloat that returns 2014-10-10 08:27:22 +00:00
utils Initial version of Go bindings. 2014-10-16 22:48:02 +00:00
.arcconfig
.clang-format
.clang-tidy
.gitignore Initial version of Go bindings. 2014-10-16 22:48:02 +00:00
CMakeLists.txt Add LLVM_ENABLE_MODULES flag to CMake to enable building with C++ modules. 2014-09-26 22:40:15 +00:00
CODE_OWNERS.TXT Add Tom Stellard's role as 3.5 release manager. 2014-09-12 08:07:31 +00:00
configure Initial version of Go bindings. 2014-10-16 22:48:02 +00:00
CREDITS.TXT
LICENSE.TXT
llvm.spec.in
LLVMBuild.txt
Makefile
Makefile.common
Makefile.config.in Initial version of Go bindings. 2014-10-16 22:48:02 +00:00
Makefile.rules Revert my earlier change to add "all" as a dependency to check. In 2014-09-19 18:44:27 +00:00
README.txt

Low Level Virtual Machine (LLVM)
================================

This directory and its subdirectories contain source code for the Low Level
Virtual Machine, a toolkit for the construction of highly optimized compilers,
optimizers, and runtime environments.

LLVM is open source software. You may freely distribute it under the terms of
the license agreement found in LICENSE.txt.

Please see the documentation provided in docs/ for further
assistance with LLVM, and in particular docs/GettingStarted.rst for getting
started with LLVM and docs/README.txt for an overview of LLVM's
documentation setup.

If you're writing a package for LLVM, see docs/Packaging.rst for our
suggestions.