Owen Anderson
e121e85517
Make a bunch of optimizations for compile time to GVNPRE, including smarter set unions, deferring blocks rather than computing maximal sets, and smarter use of sets. With these enhancements, the time to optimize 273.perlbmk goes from 5.3s to 2.7s.
...
llvm-svn: 37698
2007-06-22 00:20:30 +00:00
Owen Anderson
eb29dac190
Change lots of sets from std::set to SmallPtrSet. This reduces the time required to optimize 253.perlbmk from 10.9s to 5.3s.
...
llvm-svn: 37690
2007-06-21 17:57:53 +00:00
Owen Anderson
a783224b25
Eliminate a redundant check. This speeds up optimization of 253.perlbmk from 13.5 seconds to 10.9 seconds.
...
llvm-svn: 37683
2007-06-21 01:59:05 +00:00
Owen Anderson
b06cc18b7c
Comment-ize the functions in GVNPRE.
...
llvm-svn: 37681
2007-06-21 00:19:05 +00:00
Owen Anderson
ff60973eb8
Split runOnFunction into many smaller functions. This make it easier to get accurate performance analysis of GVNPRE.
...
llvm-svn: 37678
2007-06-20 22:10:02 +00:00
Owen Anderson
58265d2391
Make GVNPRE accurate report whether it modified the function or not.
...
llvm-svn: 37673
2007-06-20 18:30:20 +00:00
Owen Anderson
815c4d384b
Get rid of an unneeded helper function.
...
llvm-svn: 37670
2007-06-20 00:43:33 +00:00
Owen Anderson
997c4e5e47
Use a DenseMap instead of an std::map for the value numbering. This reduces the time to optimize lencod on a PPC Debug build from ~300s to ~140s.
...
llvm-svn: 37668
2007-06-19 23:23:54 +00:00
Owen Anderson
5a902e6afc
Make dependsOnInvoke much more specific in what it tests, which in turn make it much faster to run. This reduces the time to optimize lencondwith a debug build on PPC from ~450s to ~300s.
...
llvm-svn: 37667
2007-06-19 23:07:16 +00:00
Owen Anderson
0eafdcafe7
Handle constants in phi nodes properly. This fixes test/Transforms/GVNPRE/2007-06-18-ConstantInPhi.ll
...
llvm-svn: 37655
2007-06-19 07:35:36 +00:00
Owen Anderson
f74f94d859
Be careful to erase values from all of the appropriate sets when they're not needed anymore. This fixes a few more memory-related issues.
...
llvm-svn: 37647
2007-06-19 05:37:32 +00:00
Owen Anderson
d3d1716516
Remember to clear the maximal sets between functions.
...
Thanks to Nicholas for valgrinding this.
llvm-svn: 37646
2007-06-19 04:32:55 +00:00
Owen Anderson
dc858f6498
Refactor GVNPRE to use a much smart method of uniquing value sets, and centralize a lot of the value numbering information. No functionality change.
...
llvm-svn: 37645
2007-06-19 03:31:41 +00:00
Owen Anderson
58098f3560
Cache the results of dependsOnInvoke()
...
llvm-svn: 37622
2007-06-18 04:42:29 +00:00
Owen Anderson
8956588783
Fix indentation.
...
llvm-svn: 37621
2007-06-18 04:31:21 +00:00
Owen Anderson
c45b435273
Don't perform an expensive check if it's not necessary.
...
llvm-svn: 37620
2007-06-18 04:30:44 +00:00
Owen Anderson
0c8b051523
Fix test/Transforms/GVNPRE/2007-06-15-InvokeInst.ll by ignoring all instructions that depend on invokes.
...
llvm-svn: 37610
2007-06-16 00:26:54 +00:00
Owen Anderson
5a2d597072
Fix test/Transforms/GVNPRE/2007-06-15-Looping.ll
...
llvm-svn: 37595
2007-06-15 17:55:15 +00:00
Owen Anderson
67084c3848
Fix test/Transforms/GVNPRE/2007-06-12-PhiTranslate.ll
...
llvm-svn: 37564
2007-06-12 22:43:57 +00:00
Owen Anderson
f476df648e
Refactor some code, and fix test/Transforms/GVNPRE/2007-06-12-NoExit.ll by being more careful when using
...
post-dominator information.
llvm-svn: 37556
2007-06-12 16:57:50 +00:00
Owen Anderson
8fd2a040de
Fix a few more bugs, including an instance of walking in reverse topological rather than topological order. This
...
fixes a testcase extracted from llvm-test.
llvm-svn: 37550
2007-06-12 00:50:47 +00:00
Owen Anderson
cdb51c9ac4
Handle functions with multiple exit blocks properly.
...
llvm-svn: 37539
2007-06-11 16:25:17 +00:00
Owen Anderson
532366fb7d
Perform PRE of comparison operators.
...
llvm-svn: 37536
2007-06-09 18:35:31 +00:00
Owen Anderson
1e60429027
Collect statistics from GVN-PRE.
...
llvm-svn: 37530
2007-06-08 22:02:36 +00:00
Owen Anderson
2cf00c37de
Fix typo in a comment.
...
llvm-svn: 37526
2007-06-08 20:57:08 +00:00
Owen Anderson
4621335527
Fix a bug that was causing the elimination phase not to replace values when it should be.
...
With this patch, GVN-PRE now correctly optimizes the example from the thesis.
Many thanks to Daniel Berlin for helping me find errors in this.
llvm-svn: 37525
2007-06-08 20:44:02 +00:00
Owen Anderson
64daf17aa0
Small bugfix, and const-ify some methods (Thanks, Bill).
...
llvm-svn: 37513
2007-06-08 01:52:45 +00:00
Owen Anderson
ccd2616fbb
Add partial redundancy elimination.
...
llvm-svn: 37510
2007-06-08 01:03:01 +00:00
Owen Anderson
501e5873d4
Add simple full redundancy elimination.
...
llvm-svn: 37455
2007-06-06 01:27:49 +00:00
Owen Anderson
3aa2107b02
Fix a misunderstanding of the algorithm. Really, we should be tracking values
...
and expression separately. We can get around this, however, by only keeping
opaque values in TMP_GEN.
llvm-svn: 37443
2007-06-05 23:46:12 +00:00
Owen Anderson
3c9c199f2d
Don't leak memory.
...
llvm-svn: 37442
2007-06-05 22:11:49 +00:00
Owen Anderson
25a0068940
Fix a small bug, some 80 cols violations, and add some more debugging output.
...
llvm-svn: 37436
2007-06-05 17:31:23 +00:00
Owen Anderson
dde6943d82
Don't use std::set_difference when the two sets are sorted differently. Compute
...
the difference manually instead.
This allows GVNPRE to produce correct analysis for the example in the GVNPRE
paper.
llvm-svn: 37425
2007-06-04 23:34:56 +00:00
Owen Anderson
0cab4450c3
Fix a bunch of small bugs, and improve the debugging output significantly.
...
llvm-svn: 37424
2007-06-04 23:28:33 +00:00
Owen Anderson
2043bb65a4
Make phi_translate correct.
...
llvm-svn: 37418
2007-06-04 18:05:26 +00:00
Devang Patel
2ef6caf14f
s/llvm::DominatorTreeBase::DomTreeNode/llvm::DomTreeNode/g
...
llvm-svn: 37407
2007-06-04 00:32:22 +00:00
Owen Anderson
39e6d31260
Don't use the custom comparator where it's not necessary.
...
llvm-svn: 37406
2007-06-03 22:02:14 +00:00
Devang Patel
d58b82f83a
s/DominatorTreeBase::Node/DominatorTreeBase:DomTreeNode/g
...
llvm-svn: 37403
2007-06-03 06:26:14 +00:00
Owen Anderson
76e8d46c1b
Remove an unused method.
...
llvm-svn: 37402
2007-06-03 05:58:25 +00:00
Owen Anderson
d7388dc4ce
There's no need to have an Expression class... Value works just as well! This simplifies a lot of code.
...
llvm-svn: 37401
2007-06-03 05:55:58 +00:00
Owen Anderson
fadd9e4a7a
clean() needs to process things in topological order.
...
llvm-svn: 37389
2007-06-01 22:00:37 +00:00
Owen Anderson
da27462cea
Fix Expression comparison, which in turn fixes a value numbering error.
...
llvm-svn: 37386
2007-06-01 17:34:47 +00:00
Owen Anderson
6e39e65e7f
Add a topological sort function.
...
llvm-svn: 37376
2007-05-31 22:44:11 +00:00
Owen Anderson
919ee81e51
Attempt to fix up phi_translate.
...
llvm-svn: 37366
2007-05-31 00:42:15 +00:00
Owen Anderson
328c980fad
Fix a typo
...
llvm-svn: 37350
2007-05-29 23:34:14 +00:00
Owen Anderson
0f46c29ffd
Re-fix a bug, where I was now being too aggressive.
...
llvm-svn: 37348
2007-05-29 23:26:30 +00:00
Owen Anderson
cfeeaac401
Use proper debugging facilities so other people don't have to look at my commented-out
...
debugging lines.
llvm-svn: 37347
2007-05-29 23:15:21 +00:00
Owen Anderson
1e1d693893
Comment debug code out that I accidentally uncommented last time.
...
llvm-svn: 37346
2007-05-29 22:43:03 +00:00
Owen Anderson
707e37c6a6
Add a place where I missed using the maximal set. Note that using the maximal
...
set this way is _SLOW_. Somewhere down the line, I'll look at speeding it up.
llvm-svn: 37345
2007-05-29 22:35:41 +00:00
Owen Anderson
83bd7bcf6c
Very first part of a GVN-PRE implementation. It currently performs a bunch of analysis, and nothing more. It is also quite slow for the moment. However,
...
it should give a sense of what's going on.
llvm-svn: 37343
2007-05-29 21:53:49 +00:00