cddc3e03e4ec99c0268c03a126195173e519ed58 |
|
04-Mar-2016 |
Pirama Arumuga Nainar <pirama@google.com> |
Update aosp/master LLVM for rebase to r256229 http://b/26987366 (cherry picked from commit f3ef5332fa3f4d5ec72c178a2b19dac363a19383) Change-Id: Ic75dcb63191d65df1b69724576392c0aaeb47728
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
6948897e478cbd66626159776a8017b3c18579b9 |
|
01-Jul-2015 |
Pirama Arumuga Nainar <pirama@google.com> |
Update aosp/master LLVM for rebase to r239765 Bug: 20140355: This rebase pulls the upstream fix for the spurious warnings mentioned in the bug. Change-Id: I7fd24253c50f4d48d900875dcf43ce3f1721a3da
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
37ed9c199ca639565f6ce88105f9e39e898d82d0 |
|
01-Dec-2014 |
Stephen Hines <srhines@google.com> |
Update aosp/master LLVM for rebase to r222494. Change-Id: Ic787f5e0124df789bd26f3f24680f45e678eef2d
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
dce4a407a24b04eebc6a376f8e62b41aaa7b071f |
|
29-May-2014 |
Stephen Hines <srhines@google.com> |
Update LLVM for 3.5 rebase (r209712). Change-Id: I149556c940fb7dc92d075273c87ff584f400941f
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
d0a3916e430201d0179c723e4ebdd9bf4f0ee02b |
|
03-Jul-2013 |
Eric Christopher <echristo@gmail.com> |
Use SmallVectorImpl::iterator/const_iterator instead of SmallVector to avoid specifying the vector size. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185511 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
2e80991a7712d51f7637513703fc896f93eea252 |
|
06-Apr-2013 |
Hal Finkel <hfinkel@anl.gov> |
Reapply r178845 with fix - Fix bug in PEI's virtual-register scavenging This fixes PEI as previously described, but correctly handles the case where the instruction defining the virtual register to be scavenged is the first in the block. Arnold provided me with a bugpoint-reduced test case, but even that seems too large to use as a regression test. If I'm successful in cleaning it up then I'll commit that as well. Original commit message: This change fixes a bug that I introduced in r178058. After a register is scavenged using one of the available spills slots the instruction defining the virtual register needs to be moved to after the spill code. The scavenger has already processed the defining instruction so that registers killed by that instruction are available for definition in that same instruction. Unfortunately, after this, the scavenger needs to iterate through the spill code and then visit, again, the instruction that defines the now-scavenged register. In order to avoid confusion, the register scavenger needs the ability to 'back up' through the spill code so that it can again process the instructions in the appropriate order. Prior to this fix, once the scavenger reached the just-moved instruction, it would assert if it killed any registers because, having already processed the instruction, it believed they were undefined. Unfortunately, I don't yet have a small test case. Thanks to Pranav Bhandarkar for diagnosing the problem and testing this fix. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178919 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
b6cfeb63f8192724362565567a4cb4aa642baa1d |
|
05-Apr-2013 |
Hal Finkel <hfinkel@anl.gov> |
Revert r178845 - Fix bug in PEI's virtual-register scavenging Reverting because this breaks one of the LTO builders. Original commit message: This change fixes a bug that I introduced in r178058. After a register is scavenged using one of the available spills slots the instruction defining the virtual register needs to be moved to after the spill code. The scavenger has already processed the defining instruction so that registers killed by that instruction are available for definition in that same instruction. Unfortunately, after this, the scavenger needs to iterate through the spill code and then visit, again, the instruction that defines the now-scavenged register. In order to avoid confusion, the register scavenger needs the ability to 'back up' through the spill code so that it can again process the instructions in the appropriate order. Prior to this fix, once the scavenger reached the just-moved instruction, it would assert if it killed any registers because, having already processed the instruction, it believed they were undefined. Unfortunately, I don't yet have a small test case. Thanks to Pranav Bhandarkar for diagnosing the problem and testing this fix. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178916 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
afe2f43e4ea0a514413bc742fc03ef5c675ae86a |
|
05-Apr-2013 |
Hal Finkel <hfinkel@anl.gov> |
Fix bug in PEI's virtual-register scavenging This change fixes a bug that I introduced in r178058. After a register is scavenged using one of the available spills slots the instruction defining the virtual register needs to be moved to after the spill code. The scavenger has already processed the defining instruction so that registers killed by that instruction are available for definition in that same instruction. Unfortunately, after this, the scavenger needs to iterate through the spill code and then visit, again, the instruction that defines the now-scavenged register. In order to avoid confusion, the register scavenger needs the ability to 'back up' through the spill code so that it can again process the instructions in the appropriate order. Prior to this fix, once the scavenger reached the just-moved instruction, it would assert if it killed any registers because, having already processed the instruction, it believed they were undefined. Unfortunately, I don't yet have a small test case. Thanks to Pranav Bhandarkar for diagnosing the problem and testing this fix. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178845 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
df23a60fa6ce053511388e1bccca5900757e1aac |
|
26-Mar-2013 |
Hal Finkel <hfinkel@anl.gov> |
Fix the register scavenger for targets that provide custom spilling As pointed out by Richard Sandiford, my recent updates to the register scavenger broke targets that use custom spilling (because the new code assumed that if there were no valid spill slots, than spilling would be impossible). I don't have a test case, but it should be possible to create one for Thumb 1, Mips 16, etc. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178073 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
8846129f6eb58982a2cac22306c8c9b586084475 |
|
26-Mar-2013 |
Hal Finkel <hfinkel@anl.gov> |
Update PEI's virtual-register-based scavenging to support multiple simultaneous mappings The previous algorithm could not deal properly with scavenging multiple virtual registers because it kept only one live virtual -> physical mapping (and iterated through operands in order). Now we don't maintain a current mapping, but rather use replaceRegWith to completely remove the virtual register as soon as the mapping is established. In order to allow the register scavenger to return a physical register killed by an instruction for definition by that same instruction, we now call RS->forward(I) prior to eliminating virtual registers defined in I. This requires a minor update to forward to ignore virtual registers. These new features will be tested in forthcoming commits. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178058 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
dc3beb90178fc316f63790812b22201884eaa017 |
|
23-Mar-2013 |
Hal Finkel <hfinkel@anl.gov> |
Allow the register scavenger to spill multiple registers This patch lets the register scavenger make use of multiple spill slots in order to guarantee that it will be able to provide multiple registers simultaneously. To support this, the RS's API has changed slightly: setScavengingFrameIndex / getScavengingFrameIndex have been replaced by addScavengingFrameIndex / isScavengingFrameIndex / getScavengingFrameIndices. In forthcoming commits, the PowerPC backend will use this capability in order to implement the spilling of condition registers, and some special-purpose registers, without relying on r0 being reserved. In some cases, spilling these registers requires two GPRs: one for addressing and one to hold the value being transferred. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177774 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
9b294d4056f47bac5985de89c847aa1a04d38bf0 |
|
22-Mar-2013 |
Hal Finkel <hfinkel@anl.gov> |
Remove ScavengedRC from RegisterScavenging ScavengedRC was a dead private variable (set, but not otherwise used). No functionality change intended. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177708 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
674be02d525d4e24bc6943ed9274958c580bcfbc |
|
10-Jan-2013 |
Jakub Staszak <kubastaszak@gmail.com> |
Fix include guards so they exactly match file names. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172025 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
255f89faee13dc491cb64fbeae3c763e7e2ea4e6 |
|
03-Dec-2012 |
Chandler Carruth <chandlerc@gmail.com> |
Sort the #include lines for the include/... tree with the script. AKA: Recompile *ALL* the source code! This one went much better. No manual edits here. I spot-checked for silliness and grep-checked for really broken edits and everything seemed good. It all still compiles. Yell if you see something that looks goofy. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169133 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
4823be3be1d87632fbd51ce8e51a58ee5e44b115 |
|
15-Nov-2012 |
Chad Rosier <mcrosier@apple.com> |
[reg scavenger] Fix the isUsed/isAliasUsed functions so as to not report a false positive. In this particular case, R6 was being spilled by the register scavenger when it was in fact dead. The isUsed function reported R6 as used because the R6_R7 alias was reserved (due to the fact that we've reserved R7 as the FP). The solution is to only check if the original register (i.e., R6) isReserved and not the aliases. The aliases are only checked to make sure they're available. The test case is derived from one of the nightly tester benchmarks and is rather intractable and difficult to reproduce, so I haven't included it. rdar://12592448 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168054 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
fb9ebbf236974beac31705eaeb9f50ab585af6ab |
|
15-Oct-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Switch most getReservedRegs() clients to the MRI equivalent. Using the cached bit vector in MRI avoids comstantly allocating and recomputing the reserved register bit vector. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165983 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
cf14613455bc32b6a17821808595263e061335bc |
|
23-Feb-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Track reserved registers separately from RegsAvailable. The bulk masking operations from register mask operands don't account for reserved registers. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151222 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
9f946a24d9e69559d1e0aeb6d128c2fa19846c92 |
|
29-Jan-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Fix some scavenger performance issues. - Don't call malloc+free in the very hot forward(). - Don't call isTiedToDefOperand(). - Don't create BitVector temporaries. - Merge DeadRegs into KillRegs. - Eliminate the early clobber checks, they were irrelevant to scavenging. - Remove unnecessary code from -Asserts builds. This speeds up ARM PEI by 3.4x and overall llc -O0 codegen time by 11%. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149189 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
27ea9999e84dfb1e6c2baf06ec27a92f12753917 |
|
05-Mar-2011 |
Jim Grosbach <grosbach@apple.com> |
Teach the register scavenger to take subregs into account when finding a free register. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127049 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
b113cf2fedaf290242939c8f8c6f7e1438d46024 |
|
08-Jul-2010 |
Jim Grosbach <grosbach@apple.com> |
After r107880, findSurvivorReg() no longer needs to be public. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107887 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
d9642faf7c66273eb3a8d99e5fa6b542da5374dd |
|
08-Jul-2010 |
Jim Grosbach <grosbach@apple.com> |
When processing frame index virtual registers, consider all available registers (if there are any) and use the one which remains available for the longest rather than just using the first one. This should help enable better re-use of the loaded frame index values. rdar://7318760 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107847 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
b58f498f7502e7e1833decbbbb4df771367c7341 |
|
07-Oct-2009 |
Jim Grosbach <grosbach@apple.com> |
Add register-reuse to frame-index register scavenging. When a target uses a virtual register to eliminate a frame index, it can return that register and the constant stored there to PEI to track. When scavenging to allocate for those registers, PEI then tracks the last-used register and value, and if it is still available and matches the value for the next index, reuses the existing value rather and removes the re-materialization instructions. Fancier tracking and adjustment of scavenger allocations to keep more values live for longer is possible, but not yet implemented and would likely be better done via a different, less special-purpose, approach to the problem. eliminateFrameIndex() is modified so the target implementations can return the registers they wish to be tracked for reuse. ARM Thumb1 implements and utilizes the new mechanism. All other targets are simply modified to adjust for the changed eliminateFrameIndex() prototype. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83467 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
44ac22cb27684e84f7d5bc6f3d6541de6d1f529e |
|
15-Sep-2009 |
Jim Grosbach <grosbach@apple.com> |
Correct comment pasto git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81896 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
c0823fe7c679ca8f7d1667a310c2fca97b9402d5 |
|
18-Aug-2009 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Simplify RegScavenger::FindUnusedReg. - Drop the Candidates argument and fix all callers. Now that RegScavenger tracks available registers accurately, there is no need to restict the search. - Make sure that no aliases of the found register are in use. This was a potential bug. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79369 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
66a39699fb6b862e674415b32d307263812e996e |
|
16-Aug-2009 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Replace RegScavenger::DistanceMap with a simpler local algorithm. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79195 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
e689ce626ce1d0022f70fb4a85113590bbdbb5e9 |
|
16-Aug-2009 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Clean up the public interface of RegScavenger. Remove unused methods and make others private. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79194 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
8c54a620618a77f18af4bb5a0fb48dc741044b91 |
|
11-Aug-2009 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Rebuild RegScavenger::DistanceMap each time it is needed. The register scavenger maintains a DistanceMap that maps MI pointers to their distance from the top of the current MBB. The DistanceMap is built incrementally in forward() and in bulk in findFirstUse(). It is used by scavengeRegister() to determine which candidate register has the longest unused interval. Unfortunately the DistanceMap contents can become outdated. The first time scavengeRegister() is called, the DistanceMap is filled to cover the MBB. If then instructions are inserted in the MBB (as they always are following scavengeRegister()), the recorded distances are too short. This causes bad behaviour in the included test case where a register use /after/ the current position is ignored because findFirstUse() thinks is is /before/ the current position. A "using an undefined register" assertion follows promptly. The fix is to build a fresh DistanceMap at the top of scavengeRegister(), and discard it after use. This means that DistanceMap is no longer needed as a RegScavenger member variable, and forward() doesn't need to update it. The fix then discloses issue number two in the same test case: The candidate search in scavengeRegister() finds a CSR that has been saved in the prologue, but is currently unused. It would be both inefficient and wrong to spill such a register in the emergency spill slot. In the present case, the emergency slot restore is placed immediately before the normal epilogue restore, leading to a "Redefining a live register" assertion. Fix number two: When scavengerRegister() stumbles upon an unused register that is overwritten later in the MBB, return that register early. It is important to verify that the register is defined later in the MBB, otherwise it might be an unspilled CSR. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78650 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
9390cd0e86cb3b79f6836acab2a27b275e5bde9e |
|
08-Aug-2009 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Remove RegisterScavenger::isSuperRegUsed(). This completely reverses the mistaken commit r77904. Now there is no special treatment of instructions that redefine part of a super-register. Instead, the super-register is marked with <imp-use,kill> and <imp-def>. For instance, from LowerSubregs on ARM: subreg: CONVERTING: %Q1<def> = INSERT_SUBREG %Q1<undef>, %D1<kill>, 5 subreg: %D2<def> = FCPYD %D1<kill>, 14, %reg0, %Q1<imp-def> subreg: CONVERTING: %Q1<def> = INSERT_SUBREG %Q1, %D0<kill>, 6 subreg: %D3<def> = FCPYD %D0<kill>, 14, %reg0, %Q1<imp-use,kill>, %Q1<imp-def> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78466 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
dffb051c21d32209c601ca0ca6baae75b6c6463f |
|
08-Aug-2009 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Simplify RegScavenger::forward a bit more. Verify that early clobber registers and their aliases are not used. All changes to RegsAvailable are now done as a transaction so the order of operands makes no difference. The included test case is from PR4686. It has behaviour that was dependent on the order of operands. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78465 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
31f5591c91d4c012901018013aba19b0015fa6a0 |
|
06-Aug-2009 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Get rid of RegScavenger::backwards() before the bitrot spreads. If we need it one day, there is nothing wrong with putting it back in. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78337 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
e0161ea1050fd4107f3307b1e25b3aac02c2ba16 |
|
06-Aug-2009 |
John Mosby <ojomojo@gmail.com> |
Reg Scavenging generalization (Thumb support): - start support for new PEI w/reg alloc, allow running RS from emit{Pro,Epi}logue() target hooks. - fix minor issue with recursion detection. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78318 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
0e6a4efdd4f97137fb0a58d7bb3de07562185530 |
|
02-Aug-2009 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Scavenger asserts. Allow imp-def and imp-use of anything in the scavenger asserts, just like the machine code verifier. Allow redefinition of a sub-register of a live register. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77904 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
459a7c6b6ad9c4fcb9f119aa6eaaf2769b00d9b1 |
|
01-Jul-2009 |
Evan Cheng <evan.cheng@apple.com> |
Remove special handling of implicit_def. Fix a couple more bugs in liveintervalanalysis and coalescer handling of implicit_def. Note, isUndef marker must be placed even on implicit_def def operand or else the scavenger will not ignore it. This is necessary because -O0 path does not use liveintervalanalysis, it treats implicit_def just like any other def. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74601 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
50564ebc9e3d7ff806062023e6511e91065df0d2 |
|
30-Jun-2009 |
Evan Cheng <evan.cheng@apple.com> |
Temporarily restore the scavenger implicit_def checking code. MachineOperand isUndef mark is not being put on implicit_def of physical registers (created for parameter passing, etc.). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74519 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
4784f1fc73abf6005b7b7262d395af71b57b1255 |
|
30-Jun-2009 |
Evan Cheng <evan.cheng@apple.com> |
Add a bit IsUndef to MachineOperand. This indicates the def / use register operand is defined by an implicit_def. That means it can def / use any register and passes (e.g. register scavenger) can feel free to ignore them. The register allocator, when it allocates a register to a virtual register defined by an implicit_def, can allocate any physical register without worrying about overlapping live ranges. It should mark all of operands of the said virtual register so later passes will do the right thing. This is not the best solution. But it should be a lot less fragile to having the scavenger try to track what is defined by implicit_def. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74518 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
772eeb1adb0062a244e3a2effa6ca2628275642c |
|
06-Feb-2009 |
Roman Levenstein <romix.llvm@googlemail.com> |
Don't pass BitVectors by value, pass them by reference. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63931 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
5b200d8a133a07af1f7802025bd5a58a1cdd544d |
|
19-Dec-2008 |
Dan Gohman <gohman@apple.com> |
Fix RegScavenger::forward() to work on basic blocks containing exactly one instruction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61236 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
9755faab609d65ccd06220625b50dc9d792be3c4 |
|
19-Dec-2008 |
Dan Gohman <gohman@apple.com> |
Delete the RegScavenging constructor that takes a MachineBasicBlock argument. Nothing was using it, and it set the MBB member without calling enterBasicBlock, which was problematic. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61234 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
d37c13cfd1bf4b08d0b99d93c799a1caa74cf3c6 |
|
20-Nov-2008 |
Evan Cheng <evan.cheng@apple.com> |
- Register scavenger should use MachineRegisterInfo and internal map to find the first use of a register after a given machine instruction. - When scavenging a register, in addition to the spill, insert a restore before the first use. - Abort if client is looking to scavenge a register even when a previously scavenged register is still live. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59697 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
5d3600f5766e93cb459ef6108fba00c052aa6388 |
|
11-Apr-2008 |
Evan Cheng <evan.cheng@apple.com> |
Allow registers defined by implicit_def to be clobbered. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49512 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
c5ea2010c06fa6a2eaac17e493fbfe8a042e132a |
|
05-Apr-2008 |
Evan Cheng <evan.cheng@apple.com> |
Forgot this. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49247 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
ed1fcd8987a7d39ca69bfa3cbf14b270738f029c |
|
07-Mar-2008 |
Bill Wendling <isanbard@gmail.com> |
When setting the "unused" info, take into account something like this: %r3<def> = OR %x3<kill>, %x3 We don't want to mark the %r3 as unused even though it's a sub-register of %x3. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48003 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
6130f66eaae89f8878590796977678afa8448926 |
|
05-Mar-2008 |
Evan Cheng <evan.cheng@apple.com> |
Refactor code. Remove duplicated functions that basically do the same thing as findRegisterUseOperandIdx, findRegisterDefOperandIndx. Fix some naming inconsistencies. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47927 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
7194aaf738a1b89441635340403f1c5b06ae18ef |
|
03-Mar-2008 |
Bill Wendling <isanbard@gmail.com> |
This is the initial check-in for adding register scavenging to PPC. (Currently, PPC-64 doesn't work.) This also lowers the spilling of the CR registers so that it uses a register other than the default R0 register (the scavenger scrounges for one). A significant part of this patch fixes how kill information is handled. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47863 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
6f0d024a534af18d9e60b3ea757376cd8a3a980e |
|
10-Feb-2008 |
Dan Gohman <gohman@apple.com> |
Rename MRegisterInfo to TargetRegisterInfo. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46930 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
7ed47a13356daed2a34cd2209a31f92552e3bdd8 |
|
29-Dec-2007 |
Chris Lattner <sabre@nondot.org> |
Don't attribute in file headers anymore. See llvmdev for the discussion of this change. Boy are my fingers tired. ;-) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45411 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
81975f6dfd9d306d0ea7ce3ef22561c949de9af9 |
|
27-Aug-2007 |
Dan Gohman <gohman@apple.com> |
Add explicit keywords and remove spurious trailing semicolons. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41482 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
27e9d457d4047cf0051e17d9ca39740875d11440 |
|
05-Jul-2007 |
Dan Gohman <gohman@apple.com> |
Add explicit keywords. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37925 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
a09f0d4ab76725827d1c4e737b99ff15ba454cbc |
|
01-May-2007 |
Evan Cheng <evan.cheng@apple.com> |
Pass call frame setup SP adjustment along to eliminateFrameIndex(). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36624 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
c6b9ef80a890fcf75f18cabc3fe2d5f9ef2faaf5 |
|
27-Mar-2007 |
Dale Johannesen <dalej@apple.com> |
Fix reversed logic in getRegsUsed. Rename RegStates to RegsAvailable to hopefully forestall similar errors. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35362 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
69cb9b78f11d505f4351a269fc90e7b77fcda437 |
|
20-Mar-2007 |
Dale Johannesen <dalej@apple.com> |
maintain LiveIn when splitting blocks (register scavenging needs it) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35226 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
7e79e396a4ee6f96346881e090c943d7207d8abe |
|
18-Mar-2007 |
Evan Cheng <evan.cheng@apple.com> |
Fix comment. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35139 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
f262b355593100c6e0fc629b03c76ab0b1e2d915 |
|
07-Mar-2007 |
Evan Cheng <evan.cheng@apple.com> |
Add skipTo to set internal iterator. Useful when pointed to instruction is deleted. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34997 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
b74a3e6fda768eb6160559e025f8b65c46db46d9 |
|
06-Mar-2007 |
Evan Cheng <evan.cheng@apple.com> |
Register scavenger is now capable of scavenging. It spills a register whose use of furthest away to make it available. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34964 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
5196b3680cf8df32b6c763e3d97e963e45150e5a |
|
01-Mar-2007 |
Evan Cheng <evan.cheng@apple.com> |
Add a version of FindUnusedReg that restrict search to a specific set of registers. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34784 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
28654b6205acc56863cdf988eed3e345da11eca3 |
|
01-Mar-2007 |
Evan Cheng <evan.cheng@apple.com> |
Clean up interface. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34769 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
898218cc5edecea1275ee266b2cd13313ea6b67b |
|
27-Feb-2007 |
Evan Cheng <evan.cheng@apple.com> |
Some more code clean up. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34700 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
8cab162e03d7ae0638a3ab51e92ac228abe17d55 |
|
27-Feb-2007 |
Evan Cheng <evan.cheng@apple.com> |
Oops. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34698 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
bb6fb3357d6c1e9ffb15de4893e59e3bbdd600a3 |
|
27-Feb-2007 |
Evan Cheng <evan.cheng@apple.com> |
RegScavenger interface change to make it more flexible. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34690 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
ed570dedad945e1fe9a4bfeaa47276d875f1feed |
|
27-Feb-2007 |
Evan Cheng <evan.cheng@apple.com> |
forward() should not increment internal iterator. Its client may insert instruction between now and next forward() call. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34649 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|
96fa612373e258120d351ed14361f964ad22f99d |
|
23-Feb-2007 |
Evan Cheng <evan.cheng@apple.com> |
Initial check in of register scavenger. Its only current functionality is tracking live registers per MBB. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34511 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/CodeGen/RegisterScavenging.h
|