Commit Graph

172 Commits

Author SHA1 Message Date
Vikram S. Adve 0d5559fdfb Fix several related bugs in DSNode::mergeWith() caused by the
fact that the incoming nodes may be merged away at intermediate
steps.  Use an extra level of indirection via DSNodeHandles
to track the nodes being merged.  All this now happens in a
static helper function MergeNodes().

llvm-svn: 4947
2002-12-06 21:15:21 +00:00
Vikram S. Adve bfff743897 Cute bug fix: when moving links from N to this, some links could have
been missed if node *this got merged away due to recursive merging!
Also, links were not moved correctly if a node is collapsed.

llvm-svn: 4933
2002-12-05 17:17:26 +00:00
Vikram S. Adve 2d2303db22 Fix logical error in TD pass: we should clear Mod/Ref bits of each caller
before inlining their graphs into a function.  To support this,
added flags to CloneFlags to strip/keep Mod/Ref bits.

llvm-svn: 4836
2002-11-27 17:41:13 +00:00
Vikram S. Adve 68690673ad Keep global nodes in each DS Graph (by forcing them to be marked live).
llvm-svn: 4831
2002-11-25 18:21:25 +00:00
Chris Lattner 79d943eb67 Add peak memory usage measurement stuff
Add structure padding optimizations

llvm-svn: 4749
2002-11-18 21:44:46 +00:00
Chris Lattner dcb4ac9594 Fix two bugs:
* The globals vector was getting broken and unsorted, this caused vortex
   to get badly pessimized
 * Node offset handling was being handled really poorly, and in particular
   we were not merging types with offsets right.  This causes several graphs
   to be non-merged.

llvm-svn: 4699
2002-11-12 07:20:45 +00:00
Chris Lattner 8aed9820e2 Elimiante calls to a node with nothing in it.
llvm-svn: 4695
2002-11-11 21:35:38 +00:00
Chris Lattner dd3dd4abeb Mark stuff reachable by _AUX_ calls as incomplete in the BU graph
llvm-svn: 4690
2002-11-11 03:36:55 +00:00
Chris Lattner 6fa9a7f7f4 Use call site mergeWith method to simplify code
llvm-svn: 4687
2002-11-11 00:00:46 +00:00
Chris Lattner d7f9f635ec Fix a bug that could trigger when varargs call sites had non-matching number of arguments
llvm-svn: 4683
2002-11-10 07:46:08 +00:00
Chris Lattner 7b61563d99 * Dramatically rework liveness evaluation.
* Implement the first step of the Globals graph: Deleting nodes from function
  graphs.  In practice, these nodes need to be moved to the globals graph, but
  this will be taken care of later.  Note that the graphs computed right now are
  not strictly correct!

llvm-svn: 4681
2002-11-10 06:59:55 +00:00
Chris Lattner 715a3a3b5c eliminate the ability to remove global nodes from deadNodeElminate... for now.
This slows stuff down a bit, but it should get much better before it gets any
worse.

llvm-svn: 4666
2002-11-09 22:07:02 +00:00
Chris Lattner 0de21ea32d Move maskNodeTypes to header file
llvm-svn: 4661
2002-11-09 21:02:26 +00:00
Chris Lattner 380d1ad4ab Clean up DSGraph::removeDeadNodes interface
llvm-svn: 4660
2002-11-09 21:00:49 +00:00
Chris Lattner e703c52b20 Make removeTriviallyDeadNodes a private interface of DSGraph
llvm-svn: 4659
2002-11-09 20:55:24 +00:00
Chris Lattner e742f31e0c Add initial support for a globals graph
llvm-svn: 4656
2002-11-09 20:01:01 +00:00
Chris Lattner 5737a600d7 Tighten up array handling
llvm-svn: 4655
2002-11-09 19:25:27 +00:00
Chris Lattner 63aeefeafb Fix warning & release build
llvm-svn: 4648
2002-11-09 00:49:05 +00:00
Chris Lattner be46569ba1 Fold arrays down to a single element. This causes huge wins on some benchmarks
for example: 197.parser (64M->14M), 164.gzip (14M->2.7M).  The actual graphs
represented should not change at all.

llvm-svn: 4643
2002-11-08 22:49:57 +00:00
Chris Lattner 56363a05e6 Allow specification of whether the call sites should be copied, AND whether
the aux call sites should be copied

llvm-svn: 4639
2002-11-08 22:27:09 +00:00
Chris Lattner c20122732e - Add a bunch of checking to make sure that dead nodes are not used after they
are marked DEAD.  This helped track down some bugs
- Fix a bunch of bugs where we were doing work on nodes after they became dead
- Add support for aux function call sites
- Add support for not cloning call sites

llvm-svn: 4633
2002-11-08 21:27:12 +00:00
Chris Lattner a075a5801b Use DSNodeHandleMap instead to be safe
llvm-svn: 4622
2002-11-08 05:01:14 +00:00
Chris Lattner b0c9b37048 Add flush
llvm-svn: 4619
2002-11-08 01:21:07 +00:00
Chris Lattner 5e865cdbe2 Instead of using a bool that constant has to be explained, use a self
explanitory enum instead.

llvm-svn: 4600
2002-11-07 07:06:20 +00:00
Chris Lattner df307e6fd0 Implement a new mergeInGraph method, which basically factors code out of
the BU class.

This will be used by the IPModRef class to do stuff, eventually perhaps the
TD pass will use it also.

Speaking of the TD pass, this also eliminates the self recursive case, which
was broken, and couldn't occur anyway.

llvm-svn: 4599
2002-11-07 06:31:54 +00:00
Chris Lattner ca03c3b516 Rename DataStructureAnalysis namespace to DS
llvm-svn: 4596
2002-11-07 05:20:53 +00:00
Chris Lattner f9d29b3299 Minor bugfix to enable generation of methcall.llvm.lib, objinst.llvm.lib, and
The problem was merging two unsized types like function's, ie int (int*) with
int (uint *)

llvm-svn: 4594
2002-11-07 04:59:28 +00:00
Chris Lattner 4f8e2acaa2 Move printouts to be wrapped in DEBUG() macros
llvm-svn: 4588
2002-11-07 01:54:56 +00:00
Chris Lattner 2b79f4b7c3 Make PointerSize & Shift be enums
Fix problem with recursive merging

llvm-svn: 4570
2002-11-06 18:01:39 +00:00
Chris Lattner 48e37d9b97 Dramatically simplify internal DSNode representation, get implementation
*FULLY OPERATIONAL* and safe.  We are now capable of completely analyzing
at LEAST the Olden benchmarks + 181.mcf

llvm-svn: 4562
2002-11-06 06:20:27 +00:00
Chris Lattner 6c213d673b Attempted fixes to the mergemap to make it work better.
Ended up disabling merge map merging completely.  It shall be removed.

llvm-svn: 4550
2002-11-05 00:01:58 +00:00
Chris Lattner 7e8b76009f Change the "Cannot merge two portions of the same node yet" from an assertion
into a "oh crap, lets collapse" case

llvm-svn: 4530
2002-11-04 06:48:26 +00:00
Chris Lattner a20fabc7ec Rename ValueMap to ScalarMap
llvm-svn: 4516
2002-11-03 21:27:48 +00:00
Chris Lattner bd7af8e664 Rename NewNode flag to HeapNode
llvm-svn: 4515
2002-11-03 21:24:04 +00:00
Chris Lattner a7b0d4eb08 Stop representing scalars as explicit nodes in the graph. Now the only
nodes in the graph are memory objects, which is very nice.  This also greatly
reduces the size and memory footprint for DSGraphs.  For example, the local
DSGraph for llu went from 65 to 13 nodes with this change.  As a side bonus,
dot seems to lay out the graphs slightly better too.  :)

llvm-svn: 4488
2002-11-02 00:13:20 +00:00
Chris Lattner c1d8820711 * Minor optimization: when merging nodes, merge the smaller one into the
larger one.
     * Handle the case where we are merging two nodes of different size better.

llvm-svn: 4476
2002-10-31 22:41:15 +00:00
Chris Lattner 7d5f19886d This fixes all kinds of problems with array handling. There are still bugs to
be fixed, but we are getting much closer now.

    * Make DSNode::TypeRec a full fledged DSTypeRec type.
    * Add methods used to update and access the typerecords elements
    * Add methods to query if and to cause a node to be completely folded
    * DSGraph construction doesn't use the allocation type for anything at all,
      now nodes get their type information based on how they are used.
    * Fixed a bug with global value handling introduced in the last checkin
    * GEP support is now much better, arrays are handled correctly.  The array
      flag is now updated in type records.  There are still cases that are not
      handled yet (we do not detect pessimizations), but getting much closer.

llvm-svn: 4465
2002-10-31 05:45:02 +00:00
Chris Lattner 155fffd350 Delete unused arguments to DSGraph::cloneInto method
llvm-svn: 4253
2002-10-21 19:50:29 +00:00
Chris Lattner c6191df9af Add another copy ctor form
llvm-svn: 4251
2002-10-21 15:32:34 +00:00
Chris Lattner 78c1e7d83c As it turns out, we don't need a fully generic mapping copy ctor, we just need
something that maps through a std::map.  Since this simplified the client and
implementation code, do so now.

llvm-svn: 4250
2002-10-21 15:04:18 +00:00
Chris Lattner 2f5a6d46ae Remove some unneccesary 'using' directives
llvm-svn: 4246
2002-10-21 13:31:48 +00:00
Chris Lattner 80e1a74820 Fix bug with prior checkin
llvm-svn: 4242
2002-10-21 02:18:55 +00:00
Chris Lattner 5c3ce31e1f - Make DSCallSite not inherit from std::vector. Renamed methods slightly.
Make copy ctor have two versions to avoid dealing with conditional template
    argument.  DSCallSite ctor now takes all arguments instead of taking one
    and being populated later.

llvm-svn: 4240
2002-10-21 02:08:03 +00:00
Chris Lattner 3af17ce2cf Simplify code a bit, add comment flyer
llvm-svn: 4238
2002-10-20 22:11:44 +00:00
Vikram S. Adve e85319693e Remove spurious caller pointer in DSCallSite.
Also add functions to access pointer argument nodes cleanly.

llvm-svn: 4235
2002-10-20 21:41:02 +00:00
Chris Lattner c94855e46b This function can be static
llvm-svn: 4234
2002-10-20 20:39:31 +00:00
Vikram S. Adve dc9e142686 Added a first-class representation for each call site that can be
used in the DS graphs.  Essentially, what was vector<DSNodeHandle>
before is now a DSCallSite with the same vector, plus pointers to the
CallInst and the caller Function.  The special-purpose class
BUDataStructure::CallSite is no longer needed.

llvm-svn: 4228
2002-10-20 18:07:37 +00:00
Chris Lattner f931f6b5c7 Convert typerec to be a structure instead of a pair
llvm-svn: 4226
2002-10-18 18:22:46 +00:00
Chris Lattner b182216df8 * Make the DSGraph cloner automatically merge global nodes
* BUClosure doesn't have to worry about global nodes
 * TDClosure now works with global nodes
 * Reenable DNE on TD pass, now that globals work right

llvm-svn: 4220
2002-10-17 20:09:52 +00:00
Chris Lattner 981c92a9e2 Remove obsolete code
llvm-svn: 4218
2002-10-17 04:58:10 +00:00
Chris Lattner 9df1cf3034 Prune function nodes that are no longer referenced due to inlining
llvm-svn: 4036
2002-10-03 21:55:28 +00:00
Chris Lattner 4ee4381a23 Handle bug exposed by power benchmark
llvm-svn: 4033
2002-10-03 21:06:38 +00:00
Chris Lattner 0b2a6e00d1 * Significant rework of DSNode to support arbitrary aliasing due to merging
* Now all and any bytes of a DSNode can be merged together individually.  This
  is neccesary to support the full generality of C and support aliasing
  correctly.

llvm-svn: 4008
2002-10-02 04:57:39 +00:00
Chris Lattner 193e6924ca Checkin some major reworks of data structure analysis. This is not done,
nor does it work very well, but I need to get it checked in before I break
the tree unintentionally.

llvm-svn: 3996
2002-10-01 22:33:50 +00:00
Chris Lattner 3147fd226a Reorder #includes to be right
llvm-svn: 3260
2002-08-07 21:41:03 +00:00
Chris Lattner c70601cd67 Changes to be GCC3.1 friendly
llvm-svn: 3186
2002-07-31 19:32:12 +00:00
Vikram S. Adve 0d66177bc8 Use a separate globals graph to hold externally visible nodes.
This changes both the bottom-up and top-down propagation so that
globals and other external objects do not have to appear in every
function, but only in functions in which they are referenced or
they can be used to access something else that is referenced.

llvm-svn: 3170
2002-07-30 22:05:22 +00:00
Chris Lattner 96a0dfa33e * Standardize how analysis results/passes as printed with the print() virtual
methods
* Eliminate AnalysisID:  Now it is just a typedef for const PassInfo*
* Simplify how AnalysisID's are initialized
* Eliminate Analysis/Writer.cpp/.h: incorporate printing functionality into
  the analyses themselves.

llvm-svn: 3115
2002-07-27 01:12:15 +00:00
Chris Lattner a2c0985980 * Add support for different "PassType's"
* Add new RegisterOpt/RegisterAnalysis templates for registering passes that
  are to show up in opt or analyze
* Register Analyses now
* Change optimizations to use RegisterOpt instead of RegisterPass
* Add support for different "PassType's"
* Add new RegisterOpt/RegisterAnalysis templates for registering passes that
  are to show up in opt or analyze
* Register Analyses now
* Change optimizations to use RegisterOpt instead of RegisterPass
* Remove getPassName implementations from various subclasses

llvm-svn: 3112
2002-07-26 21:12:44 +00:00
Chris Lattner b6d2dc48c9 * Inline CopyFunctionCallsList
* Don't clone OrigCallList
* Rename removeDeadNodes -> removeTriviallyDeadNodes
* Implement new removeDeadNodes method

llvm-svn: 2970
2002-07-18 18:22:40 +00:00
Vikram S. Adve 4eac78e660 Add support for a top-down propagation pass.
Each DSGraph now keeps a list of pending callers that have not
been inlined into the function represented by that graph.
It also keeps a copy of the original call nodes before the BU pass
eliminates some of them.

llvm-svn: 2965
2002-07-18 16:12:08 +00:00
Chris Lattner db7a680aec Implement cast nodes correctly.
llvm-svn: 2964
2002-07-18 15:54:42 +00:00
Chris Lattner 4c0d620a82 Lots of bug fixes, add BottomUpClosure, which has bugs, but is a start.
llvm-svn: 2945
2002-07-18 00:12:30 +00:00
Chris Lattner 228163059b * Nodes now keep track of any global variables in them
llvm-svn: 2879
2002-07-11 20:32:22 +00:00
Chris Lattner c0dab43c31 New implementation of data structure analysis. Only local analysis has been
implemented so far.

llvm-svn: 2871
2002-07-10 22:38:08 +00:00
Chris Lattner 9e5b6904e5 Fix anand's last checkin
llvm-svn: 2804
2002-06-30 16:01:15 +00:00
Anand Shukla ff4c42b7c3 changes to make it compatible with 64bit gcc
llvm-svn: 2789
2002-06-25 20:35:19 +00:00
Chris Lattner fda72b1aad *** empty log message ***
llvm-svn: 2777
2002-06-25 16:12:52 +00:00
Chris Lattner 071dea7362 * Remove the concept of a critical shadow node
* Make the function pointer argument explicit for a call nodes
* Eliminate unreachable global values
* Merge call nodes that are identical

llvm-svn: 2266
2002-04-16 20:39:59 +00:00
Chris Lattner d6c8dd1473 Add hack to get timing of analysis
llvm-svn: 2101
2002-04-04 19:21:27 +00:00
Chris Lattner b1782d0c90 Many changes
* Simplify a lot of the inlining stuff.  There are still problems, but not
  many
* Break up the Function representation to have a vector for every different
  node type so it is fast to find nodes of a particular flavor.
* Do more intelligent merging of call values
* Allow elimination of unreachable shadow and allocation nodes
* Generalize indistinguishability testing to allow merging of identical calls.
* Increase shadow node merging power

llvm-svn: 2010
2002-03-28 17:56:03 +00:00
Chris Lattner e604d8ec65 Initial checkin of Datastructure analysis.
Has bugs, but shouldn't crash in theory.

llvm-svn: 1994
2002-03-26 22:39:06 +00:00