summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/LiveIntervalUnion.h
Commit message (Collapse)AuthorAgeFilesLines
* Provide LiveIntervalUnion::Query::checkLoopInterference.Jakob Stoklund Olesen2010-12-171-0/+9
| | | | | | | | This is a three-way interval list intersection between a virtual register, a live interval union, and a loop. It will be used to identify interference-free loops for live range splitting. llvm-svn: 122034
* Add LiveIntervalUnion print methods, RegAllocGreedy::trySplit debug spew.Jakob Stoklund Olesen2010-12-141-2/+20
| | | | llvm-svn: 121783
* Use TRI::printReg instead of AbstractRegisterDescription when printingJakob Stoklund Olesen2010-12-141-11/+4
| | | | | | LiveIntervalUnions. llvm-svn: 121781
* Add a forgotten initializer for CheckedFirstInterference.Jakob Stoklund Olesen2010-12-091-2/+3
| | | | llvm-svn: 121410
* Added register reassignment prototype to RAGreedy. It's a simpleAndrew Trick2010-12-091-4/+1
| | | | | | | heuristic to reshuffle register assignments when we can't find an available reg. llvm-svn: 121388
* IntervalMap iterators are heavyweight, so avoid copying them around and useJakob Stoklund Olesen2010-12-091-2/+5
| | | | | | | | | | | references instead. Similarly, IntervalMap::begin() is almost as expensive as find(), so use find(x) instead of begin().advanceTo(x); This makes RegAllocBasic run another 5% faster. llvm-svn: 121344
* Move RABasic::addMBBLiveIns to the base class, it is generally useful.Jakob Stoklund Olesen2010-12-081-0/+1
| | | | | | | Minor optimization to the use of IntervalMap iterators. They are fairly heavyweight, so prefer SI.valid() over SI != end(). llvm-svn: 121217
* Switch LiveIntervalUnion from std::set to IntervalMap.Jakob Stoklund Olesen2010-12-071-73/+19
| | | | | | | This speeds up RegAllocBasic by 20%, not counting releaseMemory which becomes way faster. llvm-svn: 121201
* Remove unused member.Jakob Stoklund Olesen2010-12-071-8/+0
| | | | llvm-svn: 121098
* Coding style. No significant functionality. Abandon linear scan styleAndrew Trick2010-11-301-92/+99
| | | | | | | | in favor of the widespread llvm style. Capitalize variables and add newlines for visual parsing. Rename variables for readability. And other cleanup. llvm-svn: 120490
* Check TRI->getReservedRegs because other allocators do it. Even thoughAndrew Trick2010-11-111-0/+3
| | | | | | | | it makes no sense for allocation_order iterators to visit reserved regs. The inline spiller depends on AliasAnalysis. Manage the Query state to avoid uninitialized or stale results. llvm-svn: 118800
* RABasic is nearly functionally complete. There are a few remainingAndrew Trick2010-11-101-6/+27
| | | | | | | | | benchmarks hitting an assertion. Adds LiveIntervalUnion::collectInterferingVRegs. Fixes "late spilling" by checking for any unspillable live vregs among all physReg aliases. llvm-svn: 118701
* Adds RABasic verification and tracing.Andrew Trick2010-11-091-2/+21
| | | | | | (retry now that the windows build is green) llvm-svn: 118630
* Add a trivial virtual dtor to AbstractRegisterDescription to appeaseMatt Beaumont-Gay2010-11-091-0/+11
| | | | | | -Wnon-virtual-dtor. llvm-svn: 118616
* Reverting r118604. Windows build broke.Andrew Trick2010-11-091-29/+0
| | | | llvm-svn: 118613
* Adds RABasic verification and tracing.Andrew Trick2010-11-091-0/+29
| | | | llvm-svn: 118604
* Adds support for spilling previously allocated live intervals toAndrew Trick2010-11-081-11/+38
| | | | | | | | | handle cases in which a register is unavailable for spill code. Adds LiveIntervalUnion::extract. While processing interferences on a live virtual register, reuses the same Query object for each physcial reg. llvm-svn: 118423
* Remove the vector of live vregs. I thought we would need to trackAndrew Trick2010-10-261-1/+0
| | | | | | | them, but hopefully we won't. And this is not the right data structure to do it anyway. llvm-svn: 117412
* Jakob's review of the basic register allocator.Andrew Trick2010-10-261-17/+24
| | | | llvm-svn: 117384
* This is a prototype of an experimental register allocationAndrew Trick2010-10-221-0/+193
framework. It's purpose is not to improve register allocation per se, but to make it easier to develop powerful live range splitting. I call it the basic allocator because it is as simple as a global allocator can be but provides the building blocks for sophisticated register allocation with live range splitting. A minimal implementation is provided that trivially spills whenever it runs out of registers. I'm checking in now to get high-level design and style feedback. I've only done minimal testing. The next step is implementing a "greedy" allocation algorithm that does some register reassignment and makes better splitting decisions. llvm-svn: 117174
OpenPOWER on IntegriCloud