llvm-6502/lib
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
..
Analysis Remove getIntegerSCEV; it's redundant with getConstant, and getConstant 2010-06-18 14:33:50 +00:00
Archive Eliminate some unnessary Path::exists() calls. 2010-05-27 20:51:54 +00:00
AsmParser Eliminate the restriction that the array size in an alloca must be i32. 2010-05-28 01:14:11 +00:00
Bitcode Speedup bitcode writer. Do not walk all values for all functions to emit function local metadata. In one testcase, probably worst case scenario, the 70x speed up is seen. 2010-06-02 23:05:04 +00:00
CodeGen Fix PR7372: Conditional branches (at least on ARM) are treated as predicated, 2010-06-18 17:07:23 +00:00
CompilerDriver Print a space after the colon. 2010-05-20 21:11:37 +00:00
ExecutionEngine Handle execution entrypoints with non-integer return types. 2010-06-18 02:01:10 +00:00
Linker Add basic error checking to MemoryBuffer::getSTDIN. 2010-05-27 17:31:51 +00:00
MC Update comment. 2010-06-17 00:49:46 +00:00
Support Give NamedRegionTimer an Enabled flag, allowing all its clients to 2010-06-18 15:56:31 +00:00
System Avoid "variable 'bits' set but not used [-Wunused-but-set-variable]" 2010-06-10 16:23:15 +00:00
Target Treat the ARM inline asm {cc} constraint as a physreg (%CPSR), just like X86 2010-06-18 16:49:33 +00:00
Transforms Disable indvars on loops when LoopSimplify form is not available. 2010-06-18 01:35:11 +00:00
VMCore Use separate named MDNode to hold each function's local variable info. 2010-06-16 00:53:55 +00:00
Makefile