summaryrefslogtreecommitdiffstats
path: root/llvm/lib
Commit message (Collapse)AuthorAgeFilesLines
* Add one that I missedChris Lattner2004-02-081-0/+1
| | | | llvm-svn: 11179
* Instead of callign removeTriviallyDeadNodes on the global graph every timeChris Lattner2004-02-084-8/+13
| | | | | | | | | removeDeadNodes is called, only call it at the end of the pass being run. This saves 1.3 seconds running DSA on 177.mesa (5.3->4.0s), which is pretty big. This is only possible because of the automatic garbage collection done on forwarding nodes. llvm-svn: 11178
* Remove another unneeded call.Chris Lattner2004-02-081-1/+0
| | | | llvm-svn: 11177
* This call is no longer needed now that merging does not produce garbageChris Lattner2004-02-081-1/+0
| | | | llvm-svn: 11176
* Substantially improve the DSA code by removing 'forwarding' nodes fromChris Lattner2004-02-081-1/+5
| | | | | | | | | DSGraphs while they are forwarding. When the last reference to the forwarding node is dropped, the forwarding node is autodeleted. This should simplify removeTriviallyDead nodes, and is only (efficiently) possible because we are using an ilist of dsnodes now. llvm-svn: 11175
* Bugfix for ilist conversion. The ilist wants to make an 'end' node which hasChris Lattner2004-02-081-1/+1
| | | | | | G == 0 llvm-svn: 11174
* Switch the Nodes list from being an std::vector<DSNode*> to an ilist<DSNode>Chris Lattner2004-02-081-19/+17
| | | | llvm-svn: 11173
* Change to use node_iterators instead of direct access to NodesChris Lattner2004-02-081-34/+43
| | | | llvm-svn: 11171
* getNodes() is gone, use node_begin/end insteadChris Lattner2004-02-073-15/+18
| | | | | | | Rename stats from dsnode -> dsa Add a new stat llvm-svn: 11167
* getNodes() is goneChris Lattner2004-02-071-21/+21
| | | | llvm-svn: 11166
* There is no need to clone over nodes that are going to be dead anywayChris Lattner2004-02-071-3/+5
| | | | llvm-svn: 11157
* Increase code clarity.Alkis Evlogimenos2004-02-061-127/+100
| | | | llvm-svn: 11151
* Eliminate uneeded lookups by passing a Virt2PhysMap::iterator insteadAlkis Evlogimenos2004-02-061-23/+33
| | | | | | of the virtual register to certain functions. llvm-svn: 11143
* Fix another dominator update bug. These bugs keep getting exposed because GCSEChris Lattner2004-02-051-1/+1
| | | | | | keeps finding more code motion opportunities now that the dominators are correct! llvm-svn: 11142
* Change live interval representation. Machine instructions now have twoAlkis Evlogimenos2004-02-051-22/+31
| | | | | | | | | | | | | | | | | | slots each. As a concequence they get numbered as 0, 2, 4 and so on. The first slot is used for operand uses and the second for defs. Here's an example: 0: A = ... 2: B = ... 4: C = A + B ;; last use of A The live intervals should look like: A = [1, 5) B = [3, x) C = [5, y) llvm-svn: 11141
* Fix bug updating dominatorsChris Lattner2004-02-051-2/+2
| | | | llvm-svn: 11140
* Add debug outputChris Lattner2004-02-051-0/+4
| | | | llvm-svn: 11139
* Fix PR223: Loopsimplify incorrectly updates dominator informationChris Lattner2004-02-051-33/+105
| | | | | | | | The problem is that the dominator update code didn't "realize" that it's possible for the newly inserted basic block to dominate anything. Because it IS possible, stuff was getting updated wrong. llvm-svn: 11137
* We don't need to scan the blocks that we are live-in on everyAlkis Evlogimenos2004-02-051-12/+13
| | | | | | access. Rather we only have to do it on the creation of the interval. llvm-svn: 11135
* In a "seeing the forest through the trees" kinda situation, I realized that aChris Lattner2004-02-051-227/+230
| | | | | | | | | | complete rewrite of load-vn will make it a bit faster. This changes speeds up the gcse pass (which uses load-vn) from 25.45s to 0.42s on the testcase in PR209. I've also verified that this gives the exact same results as the old one. llvm-svn: 11132
* This is a big diff with no functionality change. We just reorder some code,Chris Lattner2004-02-051-73/+60
| | | | | | | which causes big reindentation. While I'm at it, I fix the fixme by removing some dead code. llvm-svn: 11131
* finegrainify namespacificationChris Lattner2004-02-051-5/+2
| | | | llvm-svn: 11130
* Added missing include.Tanya Lattner2004-02-051-0/+1
| | | | llvm-svn: 11129
* Fixed Chris' typo.Tanya Lattner2004-02-051-1/+1
| | | | llvm-svn: 11128
* Implement optimizations for handling large basic blocks.Chris Lattner2004-02-051-29/+77
| | | | llvm-svn: 11126
* Modify the two address instruction pass to remove the duplicateAlkis Evlogimenos2004-02-047-170/+160
| | | | | | operand of the instruction and thus simplify the register allocation. llvm-svn: 11124
* Minor speedup, don't query ValueMap each time through the loopChris Lattner2004-02-041-6/+3
| | | | llvm-svn: 11123
* Take away the default iostream argument of createMachineFunctionPrinterPass(),Brian Gaeke2004-02-041-6/+6
| | | | | | at Chris's request. llvm-svn: 11120
* Two changes:Chris Lattner2004-02-041-5/+12
| | | | | | | | | | | | | 1. Don't scan to the end of alloca instructions in the caller function to insert inlined allocas, just insert at the top. This saves a lot of time inlining into functions with a lot of allocas. 2. Use splice to move the alloca instructions over, instead of remove/insert. This allows us to transfer a block at a time, and eliminates a bunch of silly symbol table manipulations. This speeds up the inliner on the testcase in PR209 from 1.73s -> 1.04s (67%) llvm-svn: 11118
* IMULri* instructions do not require their first two registers operandsAlkis Evlogimenos2004-02-042-7/+9
| | | | | | to be the same (IOW they are not two address instructions). llvm-svn: 11117
* Optimize the case where we are inlining a function that contains only one ↵Chris Lattner2004-02-041-37/+67
| | | | | | | | | | | basic block, and that basic block ends with a return instruction. In this case, we can just splice the cloned "body" of the function directly into the source basic block, avoiding a lot of rearrangement and splitBasicBlock's linear scan over the split block. This speeds up the inliner on the testcase in PR209 from 2.3s to 1.7s, a 35% reduction. llvm-svn: 11116
* Adjust to the new BasicBlock ctor, which requires a function parameterChris Lattner2004-02-042-2/+2
| | | | llvm-svn: 11114
* Adjust to the new BB ctorChris Lattner2004-02-041-24/+8
| | | | llvm-svn: 11113
* Remove unneeded code now that splitBasicBlock does the "right thing"Chris Lattner2004-02-041-5/+0
| | | | llvm-svn: 11111
* When splitting a basic block, insert the new half immediately after the firstChris Lattner2004-02-041-1/+1
| | | | | | half. llvm-svn: 11110
* More refactoring. Move alloca instructions and handle invoke instructionsChris Lattner2004-02-041-129/+132
| | | | | | | before we delete the original call site, allowing slight simplifications of code, but nothing exciting. llvm-svn: 11109
* Move the cloning of the function body much earlier in the inlinefunctionChris Lattner2004-02-041-52/+54
| | | | | | | | | | process. The only optimization we did so far is to avoid creating a PHI node, then immediately destroying it in the common case where the callee has one return statement. Instead, we just don't create the return value. This has no noticable performance impact, but paves the way for future improvements. llvm-svn: 11108
* Give CloneBasicBlock an optional function argument to specify which functionChris Lattner2004-02-042-13/+10
| | | | | | | | to add the cloned block to. This allows the block to be added to the function immediately, and all of the instructions to be immediately added to the function symbol table, which speeds up the inliner from 3.7 -> 3.38s on the PR209. llvm-svn: 11107
* If changing a parent, don't add then remove the object from the leak detectorChris Lattner2004-02-041-5/+5
| | | | llvm-svn: 11106
* In BasicBlock::splitBasicBlock, just use islist::splice to move the ↵Chris Lattner2004-02-031-8/+3
| | | | | | | | | | | instructions, instead of a loop that is really inefficient with large basic blocks. This speeds up the inliner pass on the testcase in PR209 from 13.8s to 2.24s which still isn't exactly speedy, but is a lot better. :) llvm-svn: 11105
* Bunch up all locally used allocas by the block they are allocated in, andChris Lattner2004-02-031-13/+74
| | | | | | | process them all as a group. This speeds up SRoA/mem2reg from 28.46s to 0.62s on the testcase from PR209. llvm-svn: 11100
* Handle extremely trivial cases extremely efficiently. This speeds upChris Lattner2004-02-031-17/+30
| | | | | | SRoA/mem2reg from 41.2s to 27.5s on the testcase in PR209. llvm-svn: 11099
* Generate ftst instructions for comparison against zeroChris Lattner2004-02-031-0/+9
| | | | llvm-svn: 11098
* Add the ftst instructionChris Lattner2004-02-031-1/+3
| | | | llvm-svn: 11095
* Add support for one argument OneArgFP instructionsChris Lattner2004-02-031-3/+4
| | | | llvm-svn: 11094
* When an instruction like: A += B had both A and B virtual registersAlkis Evlogimenos2004-02-032-10/+24
| | | | | | spilled, A was loaded from its stack location twice. This fixes the bug. llvm-svn: 11093
* Revert changes. Will implement this using a different set of primitivesAlkis Evlogimenos2004-02-021-9/+3
| | | | llvm-svn: 11091
* Fix debugging output.Alkis Evlogimenos2004-02-021-1/+1
| | | | llvm-svn: 11088
* Correctly update def/use information for modified machine operands.Alkis Evlogimenos2004-02-021-3/+9
| | | | llvm-svn: 11087
* Should be more careful. The previously applied change made all countsAlkis Evlogimenos2004-02-021-10/+6
| | | | | | outside of loops = 0. llvm-svn: 11085
OpenPOWER on IntegriCloud