Jakob Stoklund Olesen
2e98ee31b3
Make the -verify-regalloc command line option available to base classes as
...
RegAllocBase::VerifyEnabled.
Run the machine code verifier in a few interesting places during RegAllocGreedy.
llvm-svn: 122107
2010-12-17 23:16:35 +00:00
Jakob Stoklund Olesen
1740e00104
Enable loop splitting in RegAllocGreedy.
...
The heuristics split around the largest loop where the current register may be
allocated without interference.
llvm-svn: 122106
2010-12-17 23:16:32 +00:00
Jakob Stoklund Olesen
e7601e97e1
Start using SplitKit and MachineLoopRanges in RegAllocGreedy in preparation of
...
live range splitting around loops guided by register pressure.
So far, trySplit() simply prints a lot of debug output.
llvm-svn: 121918
2010-12-15 23:46:13 +00:00
Jakob Stoklund Olesen
0b7ca3a6a7
Simplify RegAllocGreedy's use of register aliases.
...
llvm-svn: 121807
2010-12-14 23:38:19 +00:00
Matt Beaumont-Gay
86a05d0bed
Move debugging code entirely within DEBUG(). Silences an unused variable
...
warning in the opt build.
llvm-svn: 121791
2010-12-14 21:14:55 +00:00
Jakob Stoklund Olesen
5c3ad0d51e
Add LiveIntervalUnion print methods, RegAllocGreedy::trySplit debug spew.
...
llvm-svn: 121783
2010-12-14 19:38:49 +00:00
Jakob Stoklund Olesen
e7ee72087e
Q.seenAllInterferences() must be called after Q.collectInterferingVRegs().
...
llvm-svn: 121774
2010-12-14 17:47:36 +00:00
Jakob Stoklund Olesen
eba9095df2
Remove unused vector.
...
llvm-svn: 121741
2010-12-14 00:58:47 +00:00
Jakob Stoklund Olesen
903b6d3261
Try reassigning all virtual register interferences, not just those with lower
...
spill weight. Filter out fixed registers instead.
Add support for reassigning an interference that was assigned to an alias.
llvm-svn: 121737
2010-12-14 00:37:49 +00:00
Jakob Stoklund Olesen
3d7b8066aa
Add stub for RAGreedy::trySplit.
...
llvm-svn: 121736
2010-12-14 00:37:44 +00:00
Jakob Stoklund Olesen
92da705261
Add named timer groups for the different stages of register allocation.
...
llvm-svn: 121604
2010-12-11 00:19:56 +00:00
Jakob Stoklund Olesen
8de03d222f
Move MRI into RegAllocBase. Clean up debug output a bit.
...
llvm-svn: 121599
2010-12-10 23:49:00 +00:00
Nick Lewycky
bb8610635f
Remove extraneous close parenthesis.
...
Fix build breakage.
llvm-svn: 121596
2010-12-10 23:14:35 +00:00
Nick Lewycky
07a95f8f06
Move variable that's unused in an NDEBUG build inside the DEBUG() macro, fixing
...
lib/CodeGen/RegAllocGreedy.cpp:233: error: unused variable 'TRC' [-Wunused-variable]
llvm-svn: 121594
2010-12-10 23:05:10 +00:00
Jakob Stoklund Olesen
adecb5e82c
Force the greedy register allocator to always use the inline spiller.
...
Soon, RegAllocGreedy will start splitting live ranges, and then deferred
spilling won't work anyway.
llvm-svn: 121591
2010-12-10 22:54:44 +00:00
Jakob Stoklund Olesen
4d7432ebf1
Use AllocationOrder in RegAllocGreedy, fix a bug in the hint calculation.
...
llvm-svn: 121584
2010-12-10 22:21:05 +00:00
Jakob Stoklund Olesen
1c6196228a
Fix miscompilation caused by trivial logic error in the reassignVReg()
...
interference check.
llvm-svn: 121519
2010-12-10 20:45:04 +00:00
Jakob Stoklund Olesen
3413807913
Remember to filter out reserved rergisters from the allocation order.
...
llvm-svn: 121411
2010-12-09 21:20:46 +00:00
Andrew Trick
ccef09888c
Added register reassignment prototype to RAGreedy. It's a simple
...
heuristic to reshuffle register assignments when we can't find an
available reg.
llvm-svn: 121388
2010-12-09 18:15:21 +00:00
Jakob Stoklund Olesen
8c5f0c3115
Properly deal with empty intervals when checking for interference.
...
llvm-svn: 121319
2010-12-08 23:51:35 +00:00
Jakob Stoklund Olesen
eaa650a945
Implement very primitive hinting support in RegAllocGreedy.
...
The hint is simply tried first and then forgotten if it couldn't be allocated
immediately.
llvm-svn: 121306
2010-12-08 22:57:16 +00:00
Jakob Stoklund Olesen
e0df786c98
Store (priority,regnum) pairs in the priority queue instead of providing an
...
abstract priority queue interface in subclasses that want to override the
priority calculations.
Subclasses must provide a getPriority() implementation instead.
This approach requires less code as long as priorities are expressable as simple
floats, and it avoids the dangers of defining potentially expensive priority
comparison functions.
It also should speed up priority_queue operations since they no longer have to
chase pointers when comparing registers. This is not measurable, though.
Preferably, we shouldn't use floats to guide code generation. The use of floats
here is derived from the use of floats for spill weights. Spill weights have a
dynamic range that doesn't lend itself easily to a fixpoint implementation.
When someone invents a stable spill weight representation, it can be reused for
allocation priorities.
llvm-svn: 121294
2010-12-08 22:22:41 +00:00
Jakob Stoklund Olesen
310916a22d
Trim includes.
...
llvm-svn: 121283
2010-12-08 21:12:00 +00:00
Jakob Stoklund Olesen
b8812a1c15
Stub out RegAllocGreedy.
...
This new register allocator is initially identical to RegAllocBasic, but it will
receive all of the tricks that RegAllocBasic won't get.
RegAllocGreedy will eventually replace linear scan.
llvm-svn: 121234
2010-12-08 03:26:16 +00:00