llvm-6502/lib/Transforms/Utils
Chandler Carruth d5a9ea8afe [LPM] A terribly simple fix to a terribly complex bug: PR18773.
The crux of the issue is that LCSSA doesn't preserve stateful alias
analyses. Before r200067, LICM didn't cause LCSSA to run in the LTO pass
manager, where LICM runs essentially without any of the other loop
passes. As a consequence the globalmodref-aa pass run before that loop
pass manager was able to survive the loop pass manager and be used by
DSE to eliminate stores in the function called from the loop body in
Adobe-C++/loop_unroll (and similar patterns in other benchmarks).

When LICM was taught to preserve LCSSA it had to require it as well.
This caused it to be run in the loop pass manager and because it did not
preserve AA, the stateful AA was lost. Most of LLVM's AA isn't stateful
and so this didn't manifest in most cases. Also, in most cases LCSSA was
already running, and so there was no interesting change.

The real kicker is that LCSSA by its definition (injecting PHI nodes
only) trivially preserves AA! All we need to do is mark it, and then
everything goes back to working as intended. It probably was blocking
some other weird cases of stateful AA but the only one I have is
a 1000-line IR test case from loop_unroll, so I don't really have a good
test case here.

Hopefully this fixes the regressions on performance that have been seen
since that revision.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201104 91177308-0d34-0410-b5e6-96231b3b80d8
2014-02-10 19:39:35 +00:00
..
ASanStackFrameLayout.cpp [asan] fix ndebug build with strict warnings (-Wunused-variable) 2013-12-06 09:26:09 +00:00
BasicBlockUtils.cpp [PM] Split DominatorTree into a concrete analysis result object which 2014-01-13 13:07:17 +00:00
BreakCriticalEdges.cpp [LPM] Fix PR18643, another scary place where loop transforms failed to 2014-01-29 13:16:53 +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 [cleanup] Move the Dominators.h and Verifier.h headers into the IR 2014-01-13 09:26:24 +00:00
DemoteRegToStack.cpp Re-sort all of the includes with ./utils/sort_includes.py so that 2014-01-07 11:48:04 +00:00
FlattenCFG.cpp Fix known typos 2014-01-24 17:20:08 +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 [LPM] A terribly simple fix to a terribly complex bug: PR18773. 2014-02-10 19:39:35 +00:00
LLVMBuild.txt LLVMBuild: Remove trailing newline, which irked me. 2011-12-12 19:48:00 +00:00
Local.cpp [PM] Split DominatorTree into a concrete analysis result object which 2014-01-13 13:07:17 +00:00
LoopSimplify.cpp [LPM] Make LoopSimplify no longer a LoopPass and instead both a utility 2014-01-23 11:23:19 +00:00
LoopUnroll.cpp [LPM] Fix PR18616 where the shifts to the loop pass manager to extract 2014-01-28 01:25:38 +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 Lower llvm.expect intrinsic correctly for i1 2014-02-02 22:43:55 +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 [PM] Split DominatorTree into a concrete analysis result object which 2014-01-13 13:07:17 +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 [cleanup] Move the Dominators.h and Verifier.h headers into the IR 2014-01-13 09:26:24 +00:00
SimplifyCFG.cpp Fix pr14893. 2014-01-28 16:56:46 +00:00
SimplifyIndVar.cpp [cleanup] Move the Dominators.h and Verifier.h headers into the IR 2014-01-13 09:26:24 +00:00
SimplifyInstructions.cpp [PM] Split DominatorTree into a concrete analysis result object which 2014-01-13 13:07:17 +00:00
SimplifyLibCalls.cpp SimplifyLibCalls: Push TLI through the exp2->ldexp transform. 2014-02-04 20:27:23 +00:00
SpecialCaseList.cpp Re-sort all of the includes with ./utils/sort_includes.py so that 2014-01-07 11:48:04 +00:00
SSAUpdater.cpp Remove some unused #includes 2014-02-01 13:12:54 +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 Re-sort all of the includes with ./utils/sort_includes.py so that 2014-01-07 11:48:04 +00:00
ValueMapper.cpp Extend RemapInstruction and friends to take an optional new parameter, a ValueMaterializer. 2013-05-28 15:17:05 +00:00