1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-01 16:33:37 +01:00
llvm-mirror/include/llvm/Analysis
Chris Lattner acdb45e484 Step #1 to giving Callgraph some sane invariants. The problems with callgraph
stem from the fact that we have two types of passes that need to update it:

1. callgraphscc and module passes that are explicitly aware of it
2. Functionpasses (and loop passes etc) that are interlaced with CGSCC passes
   by the CGSCC Passmgr.

In the case of #1, we can reasonably expect the passes to update the call
graph just like any analysis.  However, functionpasses are not and generally
should not be CG aware.  This has caused us no end of problems, so this takes
a new approach.  Logically, the CGSCC Pass manager can rescan every function 
after it runs a function pass over it to see if the functionpass made any 
updates to the IR that affect the callgraph.  This allows it to catch new calls
introduced by the functionpass.

In practice, doing this would be slow.  This implementation keeps track of
whether or not the current scc is dirtied by a function pass, and, if so, 
delays updating the callgraph until it is actually needed again.  This was
we avoid extraneous rescans, but we still have good invariants when the
callgraph is needed.

Step #2 of the "give Callgraph some sane invariants" is to change CallGraphNode
to use a CallBackVH for the callsite entry of the CallGraphNode.  This way
we can immediately remove entries from the callgraph when a FunctionPass is
active instead of having dangling pointers.  The current pass tries to tolerate
these dangling pointers, but it is just an evil hack.

This is related to PR3601/4835/4029.  This also reverts r80541, a hack working
around the sad lack of invariants.

llvm-svn: 80566
2009-08-31 07:23:46 +00:00
..
AliasAnalysis.h Global Aliases are not identifiable objects. 2009-08-27 17:52:56 +00:00
AliasSetTracker.h eliminate all 80-col violations that I have introduced in my recent checkins (and some others more) 2009-08-27 23:44:33 +00:00
CallGraph.h Step #1 to giving Callgraph some sane invariants. The problems with callgraph 2009-08-31 07:23:46 +00:00
CaptureTracking.h BasicAliasAnalysis and FunctionAttrs were both 2009-01-18 12:19:30 +00:00
CFGPrinter.h
ConstantFolding.h Make LLVMContext and LLVMContextImpl classes instead of structs. 2009-08-11 17:45:13 +00:00
ConstantsScanner.h eliminate all 80-col violations that I have introduced in my recent checkins (and some others more) 2009-08-27 23:44:33 +00:00
DebugInfo.h Reapply 79977. 2009-08-28 23:24:31 +00:00
DominatorInternals.h Tidy up #includes, deleting a bunch of unnecessary #includes. 2009-01-05 17:59:02 +00:00
Dominators.h Be somewhat more consistent about const qualifiers. 2009-08-27 17:54:15 +00:00
FindUsedTypes.h Change Pass::print to take a raw ostream instead of std::ostream, 2009-08-23 06:03:38 +00:00
Interval.h Change Pass::print to take a raw ostream instead of std::ostream, 2009-08-23 06:03:38 +00:00
IntervalIterator.h eliminate all 80-col violations that I have introduced in my recent checkins (and some others more) 2009-08-27 23:44:33 +00:00
IntervalPartition.h Change Pass::print to take a raw ostream instead of std::ostream, 2009-08-23 06:03:38 +00:00
IVUsers.h remove a few dead insertion methods. 2009-08-24 02:39:26 +00:00
LibCallAliasAnalysis.h More MSVC fixes -- class/struct conflicts. 2009-05-12 21:55:29 +00:00
LibCallSemantics.h
LiveValues.h Add a liveness analysis pass for LLVM IR values. This computes 2009-03-19 17:29:04 +00:00
LoopDependenceAnalysis.h remove a few dead insertion methods. 2009-08-24 02:39:26 +00:00
LoopInfo.h Minor code simplification. 2009-08-27 17:59:08 +00:00
LoopPass.h Get rid of the Pass+Context magic. 2009-07-22 00:24:57 +00:00
LoopVR.h Change Pass::print to take a raw ostream instead of std::ostream, 2009-08-23 06:03:38 +00:00
MemoryDependenceAnalysis.h Fix a typo in a comment. 2009-07-31 19:26:54 +00:00
Passes.h Create a ScalarEvolution-based AliasAnalysis implementation. 2009-08-26 14:53:06 +00:00
PointerTracking.h remove a few dead insertion methods. 2009-08-24 02:39:26 +00:00
PostDominators.h Change Pass::print to take a raw ostream instead of std::ostream, 2009-08-23 06:03:38 +00:00
ProfileInfo.h Move ProfileInfo::Edge's operator<< out of line. Among other benefits, 2009-08-26 15:56:38 +00:00
ProfileInfoLoader.h Remove unnecessary ProfileInfoLoader methods. 2009-08-05 15:55:56 +00:00
ProfileInfoTypes.h
ScalarEvolution.h remove a few dead insertion methods. 2009-08-24 02:39:26 +00:00
ScalarEvolutionExpander.h Various comment and whitespace cleanups. 2009-08-20 16:42:55 +00:00
ScalarEvolutionExpressions.h Rename hasNoUnsignedOverflow and hasNoSignedOverflow to hasNoUnsignedWrap 2009-08-20 17:11:38 +00:00
SparsePropagation.h eliminate the "Value" printing methods that print to a std::ostream. 2009-08-23 04:37:46 +00:00
Trace.h eliminate the "Value" printing methods that print to a std::ostream. 2009-08-23 04:37:46 +00:00
ValueTracking.h Handle TargetData with const. 2009-08-27 17:51:25 +00:00
Verifier.h