1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-22 04:22:57 +02:00
llvm-mirror/include/llvm/Transforms/Utils
Chandler Carruth b19a7319a9 [LPM] Fix PR18616 where the shifts to the loop pass manager to extract
LCSSA from it caused a crasher with the LoopUnroll pass.

This crasher is really nasty. We destroy LCSSA form in a suprising way.
When unrolling a loop into an outer loop, we not only need to restore
LCSSA form for the outer loop, but for all children of the outer loop.
This is somewhat obvious in retrospect, but hey!

While this seems pretty heavy-handed, it's not that bad. Fundamentally,
we only do this when we unroll a loop, which is already a heavyweight
operation. We're unrolling all of these hypothetical inner loops as
well, so their size and complexity is already on the critical path. This
is just adding another pass over them to re-canonicalize.

I have a test case from PR18616 that is great for reproducing this, but
pretty useless to check in as it relies on many 10s of nested empty
loops that get unrolled and deleted in just the right order. =/ What's
worse is that investigating this has exposed another source of failure
that is likely to be even harder to test. I'll try to come up with test
cases for these fixes, but I want to get the fixes into the tree first
as they're causing crashes in the wild.

llvm-svn: 200273
2014-01-28 01:25:38 +00:00
..
ASanStackFrameLayout.h Fix known typos 2014-01-24 17:20:08 +00:00
BasicBlockUtils.h [asan] don't unpoison redzones on function exit in use-after-return mode. 2013-12-23 14:15:08 +00:00
BuildLibCalls.h Enable double to float shrinking optimizations for binary functions like 'fmin/fmax'. Fix radar:15283121 2013-12-16 22:42:40 +00:00
BypassSlowDivision.h Fix include guards so they exactly match file names. 2013-01-10 00:45:19 +00:00
Cloning.h Extend RemapInstruction and friends to take an optional new parameter, a ValueMaterializer. 2013-05-28 15:17:05 +00:00
CmpInstAnalysis.h Fix missing C++ mode comment 2013-12-19 05:32:44 +00:00
CodeExtractor.h Remove excess semi-colons to quiet warnings. 2012-05-08 20:45:04 +00:00
GlobalStatus.h Optimize more linkonce_odr values during LTO. 2013-10-21 17:14:55 +00:00
IntegerDivision.h Add support for software expansion of 64-bit integer division instructions. 2013-11-19 06:54:19 +00:00
Local.h Fix assert with GEP ptr vector indexing structs 2013-08-19 21:43:16 +00:00
LoopUtils.h [LPM] Fix PR18616 where the shifts to the loop pass manager to extract 2014-01-28 01:25:38 +00:00
ModuleUtils.h Respect llvm.used in Internalize. 2013-07-25 03:23:25 +00:00
PromoteMemToReg.h Revert r187191, which broke opt -mem2reg on the testcases included in PR16867. 2013-08-13 22:51:58 +00:00
SimplifyIndVar.h Add support to indvars for optimizing sadd.with.overflow. 2013-12-23 23:31:49 +00:00
SimplifyLibCalls.h instcombine: Migrate math library call simplifications 2012-11-13 04:16:17 +00:00
SpecialCaseList.h Add forgotten header guards 2013-12-05 12:52:32 +00:00
SSAUpdater.h Update comments for SSAUpdater to use the modern doxygen comment 2013-07-28 22:00:33 +00:00
SSAUpdaterImpl.h Fix SSAUpdaterImpl's RecordMatchingPHI to record exactly the 2012-02-03 01:07:01 +00:00
UnifyFunctionExitNodes.h Fix "existant" typos 2013-10-29 02:35:28 +00:00
UnrollLoop.h [LPM] Make LoopSimplify no longer a LoopPass and instead both a utility 2014-01-23 11:23:19 +00:00
ValueMapper.h Extend RemapInstruction and friends to take an optional new parameter, a ValueMaterializer. 2013-05-28 15:17:05 +00:00