llvm-6502/lib
Andrew Trick c846d65f99 Fix PR18361: Invalidate LoopDispositions after LoopSimplify hoists things.
getSCEV for an ashr instruction creates an intermediate zext
expression when it truncates its operand.

The operand is initially inside the loop, so the narrow zext
expression has a non-loop-invariant loop disposition.

LoopSimplify then runs on an outer loop, hoists the ashr operand, and
properly invalidate the SCEVs that are mapped to value.

The SCEV expression for the ashr is now an AddRec with the hoisted
value as the now loop-invariant start value.

The LoopDisposition of this wide value was properly invalidated during
LoopSimplify.

However, if we later get the ashr SCEV again, we again try to create
the intermediate zext expression. We get the same SCEV that we did
earlier, and it is still cached because it was never mapped to a
Value. When we try to create a new AddRec we abort because we're using
the old non-loop-invariant LoopDisposition.

I don't have a solution for this other than to clear LoopDisposition
when LoopSimplify hoists things.

I think the long-term strategy should be to perform LoopSimplify on
all loops before computing SCEV and before running any loop opts on
individual loops. It's possible we may want to rerun LoopSimplify on
individual loops, but it should rarely do anything, so rarely require
invalidating SCEV.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198478 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-04 05:52:49 +00:00
..
Analysis BasicAA: Use reachabilty instead of dominance for checking value equality in phi 2014-01-03 05:47:03 +00:00
AsmParser Begin adding docs and IR-level support for the inalloca attribute 2013-12-19 02:14:12 +00:00
Bitcode Begin adding docs and IR-level support for the inalloca attribute 2013-12-19 02:14:12 +00:00
CodeGen Add a LLVM_DUMP_METHOD macro. 2014-01-03 22:53:37 +00:00
DebugInfo DebugInfo: Move type units into the debug_types section with appropriate comdat grouping and type unit headers 2013-12-13 21:33:40 +00:00
ExecutionEngine Make the llvm mangler depend only on DataLayout. 2014-01-03 19:21:54 +00:00
IR Make the llvm mangler depend only on DataLayout. 2014-01-03 19:21:54 +00:00
IRReader [llvm-c] Expose IRReader interface 2013-11-06 09:21:15 +00:00
Linker Revert "Move copying of global initializers below the cloning of functions." 2013-11-09 00:43:18 +00:00
LTO Make the llvm mangler depend only on DataLayout. 2014-01-03 19:21:54 +00:00
MC Revert "For disassembly when adding a symbolic operand that is a C++ symbol name, also put the human readable name in a comment." 2014-01-03 19:56:20 +00:00
Object Support for microMIPS TLS relocations. 2013-12-19 16:02:32 +00:00
Option Avoid buffer copies when a Twine already is a StringRef. 2013-12-03 18:18:28 +00:00
Support Make llvm::Regex non-copyable but movable. 2014-01-02 19:04:59 +00:00
TableGen [TableGen] Correctly generate implicit anonymous prototype defs in multiclasses 2014-01-02 20:47:09 +00:00
Target Remove JMP64pcrel32 (jmpq ). There are no tests for it. I'm pretty sure it won't be emitted correctly since it was set to NoImm. And I can't prove that gas accepts 'jmpq' with an immediate either. Remove the special case for it from the disassembler table generator. 2014-01-04 05:09:27 +00:00
Transforms Fix PR18361: Invalidate LoopDispositions after LoopSimplify hoists things. 2014-01-04 05:52:49 +00:00
CMakeLists.txt Move LTO support library to a component, allowing it to be tested 2013-09-24 23:52:22 +00:00
LLVMBuild.txt Move LTO support library to a component, allowing it to be tested 2013-09-24 23:52:22 +00:00
Makefile Reformat Makefile. No other changes. 2013-10-30 04:03:03 +00:00