summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/SpillPlacement.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Build the Hopfield network incrementally when splitting global live ranges.Jakob Stoklund Olesen2011-04-091-27/+44
| | | | | | | | | It is common for large live ranges to have few basic blocks with register uses and many live-through blocks without any uses. This approach grows the Hopfield network incrementally around the use blocks, completely avoiding checking interference for some through blocks. llvm-svn: 129188
* Prefer multiplications to divisions.Jakob Stoklund Olesen2011-04-071-7/+13
| | | | llvm-svn: 129080
* Extract SpillPlacement::addLinks for handling the special transparent blocks.Jakob Stoklund Olesen2011-04-071-17/+18
| | | | llvm-svn: 129079
* Keep track of the number of positively biased nodes when adding constraints.Jakob Stoklund Olesen2011-04-061-3/+8
| | | | | | If there are no positive nodes, the algorithm can be aborted early. llvm-svn: 129021
* Break the spill placement algorithm into three parts: prepare, ↵Jakob Stoklund Olesen2011-04-061-14/+13
| | | | | | | | addConstraints, and finish. This will allow us to abort the algorithm early if it is determined to be futile. llvm-svn: 129020
* Precompute block frequencies, pow() isn't free.Jakob Stoklund Olesen2011-03-041-11/+5
| | | | llvm-svn: 126975
* Trim debugging output.Jakob Stoklund Olesen2011-02-181-25/+0
| | | | llvm-svn: 125802
* Silence an MSVC warningJakob Stoklund Olesen2011-02-031-1/+1
| | | | llvm-svn: 124798
* Divert Hopfield network debug output. It is very noisy.Jakob Stoklund Olesen2011-01-191-1/+1
| | | | llvm-svn: 123859
* Add RAGreedy methods for splitting live ranges around regions.Jakob Stoklund Olesen2011-01-181-0/+1
| | | | | | | | | | Analyze the live range's behavior entering and leaving basic blocks. Compute an interference pattern for each allocation candidate, and use SpillPlacement to find an optimal region where that register can be live. This code is still not enabled. llvm-svn: 123774
* Add the SpillPlacement analysis pass.Jakob Stoklund Olesen2011-01-061-0/+354
This pass precomputes CFG block frequency information that can be used by the register allocator to find optimal spill code placement. Given an interference pattern, placeSpills() will compute which basic blocks should have the current variable enter or exit in a register, and which blocks prefer the stack. The algorithm is ready to consume block frequencies from profiling data, but for now it gets by with the static estimates used for spill weights. This is a work in progress and still not hooked up to RegAllocGreedy. llvm-svn: 122938
OpenPOWER on IntegriCloud