llvm/lib/Transforms/Utils
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
..
ASanStackFrameLayout.cpp [asan] fix ndebug build with strict warnings (-Wunused-variable) 2013-12-06 09:26:09 +00:00
BasicBlockUtils.cpp [asan] don't unpoison redzones on function exit in use-after-return mode. 2013-12-23 14:15:08 +00:00
BreakCriticalEdges.cpp Remove the very substantial, largely unmaintained legacy PGO 2013-10-02 15:42:23 +00:00
BuildLibCalls.cpp Enable double to float shrinking optimizations for binary functions like 'fmin/fmax'. Fix radar:15283121 2013-12-16 22:42:40 +00:00
BypassSlowDivision.cpp Bypass Slow Divides 2013-03-04 18:13:57 +00:00
CloneFunction.cpp Extend RemapInstruction and friends to take an optional new parameter, a ValueMaterializer. 2013-05-28 15:17:05 +00:00
CloneModule.cpp Move all of the header files which are involved in modelling the LLVM IR 2013-01-02 11:36:10 +00:00
CMakeLists.txt [asan] rewrite asan's stack frame layout 2013-12-06 09:00:17 +00:00
CmpInstAnalysis.cpp Move all of the header files which are involved in modelling the LLVM IR 2013-01-02 11:36:10 +00:00
CodeExtractor.cpp Revert patches to add case-range support for PR1255. 2013-09-09 19:14:35 +00:00
DemoteRegToStack.cpp Reimplement isPotentiallyReachable to make nocapture deduction much stronger. 2013-07-27 01:24:00 +00:00
FlattenCFG.cpp Convert manual insert point restores to the new RAII object. 2013-09-30 15:40:17 +00:00
GlobalStatus.cpp Handle calls and invokes in GlobalStatus. 2013-10-25 21:29:52 +00:00
InlineFunction.cpp Fix inlining to not lose the "cleanup" clause from landingpads 2013-12-08 00:51:21 +00:00
InstructionNamer.cpp Move all of the header files which are involved in modelling the LLVM IR 2013-01-02 11:36:10 +00:00
IntegerDivision.cpp Add support for software expansion of 64-bit integer division instructions. 2013-11-19 06:54:19 +00:00
LCSSA.cpp Quick look-up for block in loop. 2013-10-26 03:08:02 +00:00
LLVMBuild.txt LLVMBuild: Remove trailing newline, which irked me. 2011-12-12 19:48:00 +00:00
Local.cpp Transforms: Don't create bad branch weights when folding a switch 2013-12-10 00:13:41 +00:00
LoopSimplify.cpp Fix PR18361: Invalidate LoopDispositions after LoopSimplify hoists things. 2014-01-04 05:52:49 +00:00
LoopUnroll.cpp Don't #include heavy Dominators.h file in LoopInfo.h. This change reduces 2013-12-07 21:20:17 +00:00
LoopUnrollRuntime.cpp Move all of the header files which are involved in modelling the LLVM IR 2013-01-02 11:36:10 +00:00
LowerExpectIntrinsic.cpp Fix spelling intruction -> instruction. 2013-09-28 11:46:15 +00:00
LowerInvoke.cpp Remove several unused variables. 2013-10-01 13:32:03 +00:00
LowerSwitch.cpp Revert patches to add case-range support for PR1255. 2013-09-09 19:14:35 +00:00
Makefile
Mem2Reg.cpp Revert r187191, which broke opt -mem2reg on the testcases included in PR16867. 2013-08-13 22:51:58 +00:00
MetaRenamer.cpp Add 'const' qualifier to some arrays. 2013-07-15 08:02:13 +00:00
ModuleUtils.cpp Respect llvm.used in Internalize. 2013-07-25 03:23:25 +00:00
PromoteMemoryToRegister.cpp Correct word hyphenations 2013-12-05 05:44:44 +00:00
SimplifyCFG.cpp Transforms: Don't create bad weights when eliminating dead cases 2013-12-20 08:21:30 +00:00
SimplifyIndVar.cpp Add support to indvars for optimizing sadd.with.overflow. 2013-12-23 23:31:49 +00:00
SimplifyInstructions.cpp Move all of the header files which are involved in modelling the LLVM IR 2013-01-02 11:36:10 +00:00
SimplifyLibCalls.cpp Enable double to float shrinking optimizations for binary functions like 'fmin/fmax'. Fix radar:15283121 2013-12-16 22:42:40 +00:00
SpecialCaseList.cpp Introduce SpecialCaseList::isIn overload for GlobalAliases. 2013-08-19 19:00:35 +00:00
SSAUpdater.cpp Basic blocks typically have few predecessors. Use a SmallDenseMap to 2013-10-14 16:05:55 +00:00
UnifyFunctionExitNodes.cpp Move all of the header files which are involved in modelling the LLVM IR 2013-01-02 11:36:10 +00:00
Utils.cpp This patch breaks up Wrap.h so that it does not have to include all of 2013-05-01 20:59:00 +00:00
ValueMapper.cpp Extend RemapInstruction and friends to take an optional new parameter, a ValueMaterializer. 2013-05-28 15:17:05 +00:00