#
dae1dc1f |
| 12-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
That's it, I am declaring this a failure of the C++03 STL.
There are too many compatibility problems with using mixed types in std::upper_bound, and I don't want to spend 110 lines of boilerplate se
That's it, I am declaring this a failure of the C++03 STL.
There are too many compatibility problems with using mixed types in std::upper_bound, and I don't want to spend 110 lines of boilerplate setting up a call to a 10-line function. Binary search is not /that/ hard to implement correctly.
I tried terminating the binary search with a linear search, but that actually made the algorithm slower against my expectation. Most live intervals have less than 4 segments. The early test against endIndex() does pay, and this version is 25% faster than plain std::upper_bound().
llvm-svn: 127522
show more ...
|
#
8559f591 |
| 11-Mar-2011 |
John Wiegley <johnw@boostpro.com> |
Fix use of CompEnd predicate to be standards conforming
The existing CompEnd predicate does not define a strict weak order as required by the C++03 standard; therefore, its use as a predicate to std
Fix use of CompEnd predicate to be standards conforming
The existing CompEnd predicate does not define a strict weak order as required by the C++03 standard; therefore, its use as a predicate to std::upper_bound is invalid. For a discussion of this issue, see http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#270
This patch replaces the asymmetrical comparison with an iterator adaptor that achieves the same effect while being strictly standard-conforming by ensuring an apples-to-apples comparison.
llvm-svn: 127462
show more ...
|
#
880e0b77 |
| 08-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Fix the build for MSVC 9 whose upper_bound() wants to compare elements in the sorted array.
Patch by Olaf Krzikalla!
llvm-svn: 127264
|
#
a28879b8 |
| 08-Mar-2011 |
Oscar Fuentes <ofv@wanadoo.es> |
Revert "Make a comparator's argument `const'. This fixes the build for MSVC 9."
The "fix" was meaningless.
This reverts commit r127245.
llvm-svn: 127260
|
#
6ec5983a |
| 08-Mar-2011 |
Oscar Fuentes <ofv@wanadoo.es> |
Make a comparator's argument `const'. This fixes the build for MSVC 9.
llvm-svn: 127245
|
Revision tags: llvmorg-2.9.0-rc1 |
|
#
a04dddf7 |
| 03-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Avoid comparing invalid slot indexes.
llvm-svn: 126922
|
#
9e326a84 |
| 02-Mar-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Move LiveIntervalMap::extendTo into LiveInterval itself.
This method could probably be used by LiveIntervalAnalysis::shrinkToUses, and now it can use extendIntervalEndTo() which coalesces ranges.
l
Move LiveIntervalMap::extendTo into LiveInterval itself.
This method could probably be used by LiveIntervalAnalysis::shrinkToUses, and now it can use extendIntervalEndTo() which coalesces ranges.
llvm-svn: 126803
show more ...
|
#
9fb04015 |
| 19-Jan-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Implement RAGreedy::splitAroundRegion and remove loop splitting.
Region splitting includes loop splitting as a subset, and it is more generic. The splitting heuristics for variables that are live in
Implement RAGreedy::splitAroundRegion and remove loop splitting.
Region splitting includes loop splitting as a subset, and it is more generic. The splitting heuristics for variables that are live in more than one block are now:
1. Try to create a region that covers multiple basic blocks. 2. Try to create a new live range for each block with multiple uses. 3. Spill.
Steps 2 and 3 are similar to what the standard spiller is doing.
llvm-svn: 123853
show more ...
|
#
b83a6b23 |
| 09-Jan-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Teach TargetRegisterInfo how to cram stack slot indexes in with the virtual and physical register numbers.
This makes the hack used in LiveInterval official, and lets LiveInterval be oblivious of st
Teach TargetRegisterInfo how to cram stack slot indexes in with the virtual and physical register numbers.
This makes the hack used in LiveInterval official, and lets LiveInterval be oblivious of stack slots.
The isPhysicalRegister() and isVirtualRegister() predicates don't know about this, so when a variable may contain a stack slot, isStackSlot() should always be tested first.
llvm-svn: 123128
show more ...
|
#
1331a15b |
| 09-Jan-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Replace TargetRegisterInfo::printReg with a PrintReg class that also works without a TRI instance.
Print virtual registers numbered from 0 instead of the arbitrary FirstVirtualRegister. The first vi
Replace TargetRegisterInfo::printReg with a PrintReg class that also works without a TRI instance.
Print virtual registers numbered from 0 instead of the arbitrary FirstVirtualRegister. The first virtual register is printed as %vreg0. TRI::NoRegister is printed as %noreg.
llvm-svn: 123107
show more ...
|
#
4c278f82 |
| 21-Dec-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Use IntEqClasses to compute connected components of live intervals.
llvm-svn: 122296
|
#
251337e1 |
| 19-Dec-2010 |
Cameron Zwarich <zwarich@apple.com> |
Fix PR8815 by checking for an explicit clobber def tied to a use operand in ConnectedVNInfoEqClasses::Classify().
llvm-svn: 122202
|
#
dff6a6e4 |
| 29-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Teach ConnectedVNInfoEqClasses::Classify to deal with unused values.
We don't want unused values forming their own equivalence classes, so we lump them all together in one class, and then merge them
Teach ConnectedVNInfoEqClasses::Classify to deal with unused values.
We don't want unused values forming their own equivalence classes, so we lump them all together in one class, and then merge them with the class of the last used value.
llvm-svn: 117670
show more ...
|
#
13d7e0d0 |
| 29-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Fix broken equivalence class calculation. We could probably also use EquvivalenceClasses.h except it looks like overkill when elements are continuous integers.
llvm-svn: 117631
|
#
d84bb168 |
| 09-Oct-2010 |
Benjamin Kramer <benny.kra@googlemail.com> |
Silence compiler warning.
llvm-svn: 116156
|
#
05cae832 |
| 08-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Classify value numbers into connected components in linear time.
llvm-svn: 116105
|
#
0f1677e1 |
| 07-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
After splitting, the remaining LiveInterval may be fragmented into multiple connected components. These components should be allocated different virtual registers because there is no reason for them
After splitting, the remaining LiveInterval may be fragmented into multiple connected components. These components should be allocated different virtual registers because there is no reason for them to be allocated together.
Add the ConnectedVNInfoEqClasses class to calculate the connected components, and move values to new LiveIntervals.
Use it from SplitKit::rewrite by creating new virtual registers for the components.
llvm-svn: 116006
show more ...
|
Revision tags: llvmorg-2.8.0 |
|
#
9a414901 |
| 05-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Tweak VNInfo printing.
llvm-svn: 115650
|
#
1c9afa1a |
| 05-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add assert for valid slot indexes.
llvm-svn: 115649
|
#
28792c4a |
| 01-Oct-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
When RemoveCopyByCommutingDef is creating additional identity copies, just use LiveInterval::MergeValueNumberInto instead of trying to extend LiveRanges and getting it wrong.
This fixed PR8249 where
When RemoveCopyByCommutingDef is creating additional identity copies, just use LiveInterval::MergeValueNumberInto instead of trying to extend LiveRanges and getting it wrong.
This fixed PR8249 where a valno with a multi-segment live range was defined by an identity copy created by RemoveCopyByCommutingDef. Some of the live segments disappeared.
llvm-svn: 115385
show more ...
|
Revision tags: llvmorg-2.8.0-rc3 |
|
#
56495686 |
| 25-Sep-2010 |
Lang Hames <lhames@gmail.com> |
Removed VNInfo::isDefAccurate(). Def "accuracy" can be checked by testing whether LiveIntervals::getInstructionFromIndex(def) returns NULL.
llvm-svn: 114791
|
#
beb64f55 |
| 21-Sep-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Refix MSVC9 and upper_bound. It actually needs a fully symmetric comparator.
llvm-svn: 114469
|
#
f7a8e93b |
| 21-Sep-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Don't pollute the global namespace.
llvm-svn: 114459
|
#
25a123df |
| 21-Sep-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
MSVC9 does not support upper_bound with an asymmetric comparator.
llvm-svn: 114455
|
#
1ccded77 |
| 21-Sep-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add LiveInterval::find and use it for most LiveRange searching operations instead of calling lower_bound or upper_bound directly.
This cleans up the search logic a bit because {lower,upper}_bound co
Add LiveInterval::find and use it for most LiveRange searching operations instead of calling lower_bound or upper_bound directly.
This cleans up the search logic a bit because {lower,upper}_bound compare LR->start by default, and it is usually simpler to search LR->end.
Funnelling all searches through one function also makes it possible to replace the search algorithm with something faster than binary search.
llvm-svn: 114448
show more ...
|