LLVM backend for 6502
Go to file
Bob Wilson f50e952b0d Fix PR7372: Conditional branches (at least on ARM) are treated as predicated,
so when IfConverter::CopyAndPredicateBlock checks to see if it should ignore
an instruction because it is a branch, it should not check if the branch is
predicated.

This case (when IgnoreBr is true) is only relevant from IfConvertTriangle,
where new branches are inserted after the block has been copied and predicated.
If the original branch is not removed, we end up with multiple conditional
branches (possibly conflicting) at the end of the block.  Aside from any
immediate errors resulting from that, this confuses the AnalyzeBranch functions
so that the branches are not analyzable.  That in turn causes the IfConverter to
think that the "Simple" pattern can be applied, and things go downhill fast
because the "Simple" pattern does _not_ apply if the block can fall through.

This is pretty fragile.  If there are other degenerate cases where AnalyzeBranch
fails, but where the block may still fall through, the IfConverter should not
perform its "Simple" if-conversion.  But, I don't know how to do that with the
current AnalyzeBranch interface, so for now, the best thing seems to be to
avoid creating branches that AnalyzeBranch cannot handle.

Evan, please review!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106291 91177308-0d34-0410-b5e6-96231b3b80d8
2010-06-18 17:07:23 +00:00
autoconf Fix a spello affecting platforms where the configure check fails. 2010-06-01 16:22:27 +00:00
bindings
cmake Allow absolute paths in LLVM_TARGET_DEFINITIONS for CMake's TableGen rule 2010-06-17 15:17:07 +00:00
docs Minor clarification. 2010-06-17 19:23:50 +00:00
examples Remove stray semi-colon. 2010-06-15 17:47:24 +00:00
include Don't bother calling releaseMemory before destroying the DominatorTreeBase. 2010-06-18 16:09:11 +00:00
lib Fix PR7372: Conditional branches (at least on ARM) are treated as predicated, 2010-06-18 17:07:23 +00:00
projects
runtime Delete a blank line. 2010-04-16 13:32:55 +00:00
test Treat the ARM inline asm {cc} constraint as a physreg (%CPSR), just like X86 2010-06-18 16:49:33 +00:00
tools Don't produce output only if *all* files are unused. 2010-06-14 21:20:52 +00:00
unittests ADT: Add DAGDeltaAlgorithm, which is a DAG minimization algorithm built on top of the standard 'delta debugging' algorithm. 2010-06-08 16:21:22 +00:00
utils In case Rec is a definition and not a class, do the proper comparison! 2010-06-17 23:00:16 +00:00
website
build-for-llvm-top.sh
CMakeLists.txt
configure Fix a spello affecting platforms where the configure check fails. 2010-06-01 16:22:27 +00:00
CREDITS.TXT
LICENSE.TXT
llvm.spec.in
Makefile Update for CIndex rename. 2010-04-30 23:36:47 +00:00
Makefile.common
Makefile.config.in Delete unused variables (that weren't even getting expanded). 2010-06-01 17:26:14 +00:00
Makefile.rules improve portability to solaris 10, PR7380, patch by Simon Billingsley! 2010-06-18 00:35:32 +00:00
ModuleInfo.txt
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 HTML documentation provided in docs/index.html for further
assistance with LLVM.

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