0e5a60b4ebc06a4fe6bb58f0200acf130d7be685 |
|
06-Jun-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Move LiveUnionArray into LiveIntervalUnion.h It is useful outside RegAllocBase. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158041 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
2fd0923593c4d30691a45ade1e8b0bd484896c3f |
|
06-Jun-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Don't print register names in LiveIntervalUnion::print(). Soon we'll be making LiveIntervalUnions for register units as well. This was the only place using the RepReg member, so just remove it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158038 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
bac22fac7d46aa496248ae9659e34f21718b6b42 |
|
21-Dec-2011 |
Lang Hames <lhames@gmail.com> |
Remove disused STL header include. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147088 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
9b7ff12dd1e5e93d3305b366f79896308bed4a60 |
|
12-Aug-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Simplify the interference checking code a bit. This is possible now that we now longer provide an interface to iterate the interference overlaps. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137397 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
8facc7def811aeb3db20233de0aef1c69f0d1922 |
|
12-Aug-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Remove the InterferenceResult class. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137381 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
fe026e182993a94381d197f140b19b999c3e17ec |
|
12-Aug-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Eliminate the last use of InterferenceResult. The Query class now holds two iterators instead of an InterferenceResult instance. The iterators are used as bookmarks for repeated collectInterferingVRegs calls. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137380 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
9942ba9c0ed45c77298cdeb7a9326f04745d5709 |
|
11-Aug-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Remove more dead code. collectInterferingVRegs will be the primary function for interference checks. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137354 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
98985f959c57f2b8c0b6e4b5ee519252e71e9cd9 |
|
11-Aug-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Privatize an unused part of the LiveIntervalUnion::Query interface. No clients are iterating over interference overlaps. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137350 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
bb688cec09d08fb4c5e17d82c86bba11f0ce3168 |
|
11-Aug-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Remove some dead code. The InterferenceResult iterator turned out to be less important than we thought it would be. LiveIntervalUnion clients want higher level information, like the list of interfering virtual registers. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137346 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
51458ed09e6db0e424cd528e10b879f59915abe4 |
|
08-Jul-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Be more aggressive about following hints. RAGreedy::tryAssign will now evict interference from the preferred register even when another register is free. To support this, add the EvictionCost struct that counts how many hints are broken by an eviction. We don't want to break one hint just to satisfy another. Rename canEvict to shouldEvict, and add the first bit of eviction policy that doesn't depend on spill weights: Always make room in the preferred register as long as the evictees can be split and aren't already assigned to their preferred register. Also make the CSR avoidance more accurate. When looking for a cheaper register it is OK to use a new volatile register. Only CSR aliases that have never been used before should be avoided. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134735 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
560ab9ebf78532df11188770c916c4eb6dcce1b2 |
|
12-Apr-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Reuse live interval union between functions. This saves a bit of compile time when compiling many small functions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129321 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
3f5bedf5cbde2cc2badc86b1a0b377f6efcde71c |
|
11-Apr-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Speed up eviction by stopping collectInterferingVRegs as soon as the spill weight limit has been exceeded. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129305 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
314a3ef502c67e9be7a67c9be7ea3ecffce8298b |
|
31-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Fix bug found by valgrind. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128634 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
2926733240d0766fbd45df6eb609ad2328f0307d |
|
16-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Tag cached interference with a user-provided tag instead of the virtual register number. The live range of a virtual register may change which invalidates the cached interference information. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127772 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
5522e8a936d8735f3366b33901e2d582bedd48dc |
|
13-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Now that we are deleting unused live intervals during allocation, pointers may be reused. Use the virtual register number as a cache tag instead. They are not reused. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127561 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
4f6364fd3f2af74330b1bc4e545173af074707a5 |
|
09-Feb-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add tags to live interval unions to avoid using stale queries. The tag is updated whenever the live interval union is changed, and it is tested before using cached information. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125224 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
ff2e9b4225ab55ee049b33158a9cce1ef138c2f7 |
|
17-Dec-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Provide LiveIntervalUnion::Query::checkLoopInterference. 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122034 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
bfce678de7b509a497ac6d91f29e749adab7e40c |
|
14-Dec-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add LiveIntervalUnion print methods, RegAllocGreedy::trySplit debug spew. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121783 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
4a84cce3ed0008baf72ccc6831a046215addd2d7 |
|
14-Dec-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Use TRI::printReg instead of AbstractRegisterDescription when printing LiveIntervalUnions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121781 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
a0382c629093a2edd175dc256750667c296d3a43 |
|
09-Dec-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add a forgotten initializer for CheckedFirstInterference. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121410 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
b853e6c3702149cdbbd6fa404334e3ba0055641a |
|
09-Dec-2010 |
Andrew Trick <atrick@apple.com> |
Added register reassignment prototype to RAGreedy. It's a simple heuristic to reshuffle register assignments when we can't find an available reg. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121388 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
a35cce1a14d8eee7e250e02b03903a5096d22c2f |
|
09-Dec-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
IntervalMap iterators are heavyweight, so avoid copying them around and use 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121344 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
1b19dc1d8b7594434ea9a157bfe2ae68eabf9f05 |
|
08-Dec-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Move RABasic::addMBBLiveIns to the base class, it is generally useful. Minor optimization to the use of IntervalMap iterators. They are fairly heavyweight, so prefer SI.valid() over SI != end(). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121217 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
953af2c3c560a13bd5eeb676c128b7e362dca684 |
|
08-Dec-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Switch LiveIntervalUnion from std::set to IntervalMap. This speeds up RegAllocBasic by 20%, not counting releaseMemory which becomes way faster. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121201 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
1fe045279b10550f06fd755c1aa6377e67ff0473 |
|
07-Dec-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Remove unused member. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121098 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
18c57a8a09a7c79fbcf4348b0ad8135246ab984f |
|
01-Dec-2010 |
Andrew Trick <atrick@apple.com> |
Coding style. No significant functionality. Abandon linear scan style in favor of the widespread llvm style. Capitalize variables and add newlines for visual parsing. Rename variables for readability. And other cleanup. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120490 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
8a83d54528c197675ba0f21ebe95ac30fa3d8841 |
|
11-Nov-2010 |
Andrew Trick <atrick@apple.com> |
Check TRI->getReservedRegs because other allocators do it. Even though 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118800 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
f4baeaf8485f01beda46d29fd55753199dc68070 |
|
10-Nov-2010 |
Andrew Trick <atrick@apple.com> |
RABasic is nearly functionally complete. There are a few remaining benchmarks hitting an assertion. Adds LiveIntervalUnion::collectInterferingVRegs. Fixes "late spilling" by checking for any unspillable live vregs among all physReg aliases. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118701 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
071d1c063f1080c70a7141d947a96cf511a1ba45 |
|
09-Nov-2010 |
Andrew Trick <atrick@apple.com> |
Adds RABasic verification and tracing. (retry now that the windows build is green) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118630 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
e33daaaaf9d67f30b141430bffc34bbda93063d1 |
|
09-Nov-2010 |
Matt Beaumont-Gay <matthewbg@google.com> |
Add a trivial virtual dtor to AbstractRegisterDescription to appease -Wnon-virtual-dtor. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118616 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
32d9aeb1df982638766757704c4e23f58ffb40d1 |
|
09-Nov-2010 |
Andrew Trick <atrick@apple.com> |
Reverting r118604. Windows build broke. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118613 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
39a5ce46a51c8e855a2f52c9f733d9d5dd8a65c4 |
|
09-Nov-2010 |
Andrew Trick <atrick@apple.com> |
Adds RABasic verification and tracing. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118604 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
e141a4960f702bef957b28abde3801ec64e32d87 |
|
08-Nov-2010 |
Andrew Trick <atrick@apple.com> |
Adds support for spilling previously allocated live intervals to 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118423 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
3d26d5d5240fb3bfe121434d4881da22f4b35ba5 |
|
27-Oct-2010 |
Andrew Trick <atrick@apple.com> |
Remove the vector of live vregs. I thought we would need to track them, but hopefully we won't. And this is not the right data structure to do it anyway. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117412 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
e16eecc323879744dcff4f359ba9ccdb25bd6909 |
|
26-Oct-2010 |
Andrew Trick <atrick@apple.com> |
Jakob's review of the basic register allocator. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117384 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|
14e8d71cc945034d4ee6e76be00e00f14efac62f |
|
23-Oct-2010 |
Andrew Trick <atrick@apple.com> |
This is a prototype of an experimental register allocation 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117174 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/LiveIntervalUnion.h
|