#
6b9c49a2 |
| 21-Jun-2013 |
Andrew Trick <atrick@apple.com> |
Handle more cases in LiveRangeEdit::eliminateDeadDefs.
Live intervals for dead physregs may be created during coalescing. We need to update these in the event that their instruction goes away.
cras
Handle more cases in LiveRangeEdit::eliminateDeadDefs.
Live intervals for dead physregs may be created during coalescing. We need to update these in the event that their instruction goes away.
crash.ll is the unit test that catches it when MI sched is enabled on X86.
llvm-svn: 184572
show more ...
|
#
530fc1f4 |
| 21-Jun-2013 |
Andrew Trick <atrick@apple.com> |
Refactor LiveRangeEdit::eliminateDeadDefs.
I want to add logic to handle more cases.
llvm-svn: 184571
|
#
7df3f017 |
| 21-Jun-2013 |
Andrew Trick <atrick@apple.com> |
whitespace
llvm-svn: 184570
|
#
e2a1d89e |
| 17-Jun-2013 |
Benjamin Kramer <benny.kra@googlemail.com> |
Switch spill weights from a basic loop depth estimation to BlockFrequencyInfo.
The main advantages here are way better heuristics, taking into account not just loop depth but also __builtin_expect a
Switch spill weights from a basic loop depth estimation to BlockFrequencyInfo.
The main advantages here are way better heuristics, taking into account not just loop depth but also __builtin_expect and other static heuristics and will eventually learn how to use profile info. Most of the work in this patch is pushing the MachineBlockFrequencyInfo analysis into the right places.
This is good for a 5% speedup on zlib's deflate (x86_64), there were some very unfortunate spilling decisions in its hottest loop in longest_match(). Other benchmarks I tried were mostly neutral.
This changes register allocation in subtle ways, update the tests for it. 2012-02-20-MachineCPBug.ll was deleted as it's very fragile and the instruction it looked for was gone already (but the FileCheck pattern picked up unrelated stuff).
llvm-svn: 184105
show more ...
|
Revision tags: llvmorg-3.3.0, llvmorg-3.3.0-rc3, llvmorg-3.3.0-rc2, llvmorg-3.3.0-rc1 |
|
#
26ac8a7b |
| 18-Mar-2013 |
Jakub Staszak <kubastaszak@gmail.com> |
Add some constantness.
llvm-svn: 177356
|
Revision tags: llvmorg-3.2.0, llvmorg-3.2.0-rc3 |
|
#
ed0881b2 |
| 03-Dec-2012 |
Chandler Carruth <chandlerc@gmail.com> |
Use the new script to sort the includes of every file under lib.
Sooooo many of these had incorrect or strange main module includes. I have manually inspected all of these, and fixed the main module
Use the new script to sort the includes of every file under lib.
Sooooo many of these had incorrect or strange main module includes. I have manually inspected all of these, and fixed the main module include to be the nearest plausible thing I could find. If you own or care about any of these source files, I encourage you to take some time and check that these edits were sensible. I can't have broken anything (I strictly added headers, and reordered them, never removed), but they may not be the headers you'd really like to identify as containing the API being implemented.
Many forward declarations and missing includes were added to a header files to allow them to parse cleanly when included first. The main module rule does in fact have its merits. =]
llvm-svn: 169131
show more ...
|
Revision tags: llvmorg-3.2.0-rc2 |
|
#
26c9d70d |
| 28-Nov-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Make the LiveRegMatrix analysis available to targets.
No functional change, just moved header files.
Targets can inject custom passes between register allocation and rewriting. This makes it possib
Make the LiveRegMatrix analysis available to targets.
No functional change, just moved header files.
Targets can inject custom passes between register allocation and rewriting. This makes it possible to tweak the register allocation before rewriting, using the full global interference checking available from LiveRegMatrix.
llvm-svn: 168806
show more ...
|
Revision tags: llvmorg-3.2.0-rc1 |
|
#
4df59a9f |
| 16-Oct-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Avoid rematerializing a redef immediately after the old def.
PR14098 contains an example where we would rematerialize a MOV8ri immediately after the original instruction:
%vreg7:sub_8bit<def> = M
Avoid rematerializing a redef immediately after the old def.
PR14098 contains an example where we would rematerialize a MOV8ri immediately after the original instruction:
%vreg7:sub_8bit<def> = MOV8ri 9; GR32_ABCD:%vreg7 %vreg22:sub_8bit<def> = MOV8ri 9; GR32_ABCD:%vreg7
Besides being pointless, it is also wrong since the original instruction only redefines part of the register, and the value read by the new instruction is wrong.
The problem was the LiveRangeEdit::allUsesAvailableAt() didn't special-case OrigIdx == UseIdx and found the wrong SSA value.
llvm-svn: 166068
show more ...
|
#
cea596ac |
| 15-Oct-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Remove LIS::isAllocatable() and isReserved() helpers.
All callers can simply use the corresponding MRI functions.
llvm-svn: 165985
|
#
1d19582a |
| 27-Sep-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Avoid dereferencing a NULL pointer.
Fixes PR13943.
llvm-svn: 164778
|
#
374071dd |
| 02-Aug-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Avoid creating dangling physreg live ranges during DCE.
LiveRangeEdit::eliminateDeadDefs() can delete a dead instruction that reads unreserved physregs. This would leave the corresponding regunit li
Avoid creating dangling physreg live ranges during DCE.
LiveRangeEdit::eliminateDeadDefs() can delete a dead instruction that reads unreserved physregs. This would leave the corresponding regunit live interval dangling because we don't have shrinkToUses() for physical registers.
Fix this problem by turning the instruction into a KILL instead of deleting it. This happens in a landing pad in test/CodeGen/X86/2012-05-19-CoalescerCrash.ll:
%vreg27<def,dead> = COPY %EDX<kill>; GR32:%vreg27
becomes:
KILL %EDX<kill>
An upcoming fix to the machine verifier will catch problems like this by verifying regunit live intervals.
This fixes PR13498. I am not including the test case from the PR since we already have one exposing the problem once the verifier is fixed.
llvm-svn: 161182
show more ...
|
#
e2cfd0d4 |
| 20-Jul-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Avoid folding loads that are unsafe to move.
LiveRangeEdit::foldAsLoad() can eliminate a register by folding a load into its only use. Only do that when the load is safe to move, and it won't extend
Avoid folding loads that are unsafe to move.
LiveRangeEdit::foldAsLoad() can eliminate a register by folding a load into its only use. Only do that when the load is safe to move, and it won't extend any live ranges.
This fixes PR13414.
llvm-svn: 160575
show more ...
|
#
7809578c |
| 22-Jun-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Use MRI::isConstantPhysReg() to check remat feasibility.
Don't depend on LiveIntervals::hasInterval() to determine if a physreg is reserved and constant.
llvm-svn: 159013
|
#
924279ca |
| 22-May-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Only erase virtregs with no uses left.
Also make sure registers aren't erased twice if the dead def mentions the register twice.
This fixes PR12911.
llvm-svn: 157254
|
#
a34a69ce |
| 19-May-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Fix 12892.
Dead code elimination during coalescing could cause a virtual register to be split into connected components. The following rewriting would be confused about the already joined copies pre
Fix 12892.
Dead code elimination during coalescing could cause a virtual register to be split into connected components. The following rewriting would be confused about the already joined copies present in the code, but without a corresponding value number in the live range.
Erase all joined copies instantly when joining intervals such that the MI and LiveInterval representations are always in sync.
llvm-svn: 157135
show more ...
|
#
e5bbe379 |
| 19-May-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Allow LiveRangeEdit to be created with a NULL parent.
The dead code elimination with callbacks is still useful.
llvm-svn: 157100
|
#
3834dae6 |
| 18-May-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Modernize naming convention for class members.
No functional change.
llvm-svn: 157079
|
Revision tags: llvmorg-3.1.0, llvmorg-3.1.0-rc3, llvmorg-3.1.0-rc2, llvmorg-3.1.0-rc1 |
|
#
b98934cf |
| 03-Apr-2012 |
Pete Cooper <peter_cooper@apple.com> |
Removed one last bad continue statement meant to be removed in r153914.
llvm-svn: 153975
|
#
4f0dbb27 |
| 03-Apr-2012 |
Pete Cooper <peter_cooper@apple.com> |
Fixes to r153903. Added missing explanation of behaviour when the VirtRegMap is NULL. Also changed it in this case to just avoid updating the map, but live ranges or intervals will still get update
Fixes to r153903. Added missing explanation of behaviour when the VirtRegMap is NULL. Also changed it in this case to just avoid updating the map, but live ranges or intervals will still get updated and created
llvm-svn: 153914
show more ...
|
#
3ca96f99 |
| 02-Apr-2012 |
Pete Cooper <peter_cooper@apple.com> |
Moved LiveRangeEdit.h so that it can be called from other parts of the backend, not just libCodeGen
llvm-svn: 153906
|
#
2bde2f42 |
| 02-Apr-2012 |
Pete Cooper <peter_cooper@apple.com> |
Refactored the LiveRangeEdit interface so that MachineFunction, TargetInstrInfo, MachineRegisterInfo, LiveIntervals, and VirtRegMap are all passed into the constructor and stored as members instead o
Refactored the LiveRangeEdit interface so that MachineFunction, TargetInstrInfo, MachineRegisterInfo, LiveIntervals, and VirtRegMap are all passed into the constructor and stored as members instead of passed in to each method.
llvm-svn: 153903
show more ...
|
#
2fbad222 |
| 28-Feb-2012 |
Lang Hames <lhames@gmail.com> |
Kill off LiveRangeEdit::getNewVRegs and LiveRangeEdit::getUselessVRegs. These methods are no longer needed now that LinearScan has gone away.
(Contains tweaks trivialSpillEverywhere to enable the re
Kill off LiveRangeEdit::getNewVRegs and LiveRangeEdit::getUselessVRegs. These methods are no longer needed now that LinearScan has gone away.
(Contains tweaks trivialSpillEverywhere to enable the removal of getNewVRegs).
llvm-svn: 151658
show more ...
|
#
905c952e |
| 17-Feb-2012 |
Jim Grosbach <grosbach@apple.com> |
Tidy up.
llvm-svn: 150820
|
#
a379b181 |
| 20-Dec-2011 |
David Blaikie <dblaikie@gmail.com> |
Unweaken vtables as per http://llvm.org/docs/CodingStandards.html#ll_virtual_anch
llvm-svn: 146960
|
#
76e4bc4e |
| 12-Dec-2011 |
Pete Cooper <peter_cooper@apple.com> |
Fixed register allocator splitting a live range on a spilling variable.
If we create new intervals for a variable that is being spilled, then those new intervals are not guaranteed to also spill. T
Fixed register allocator splitting a live range on a spilling variable.
If we create new intervals for a variable that is being spilled, then those new intervals are not guaranteed to also spill. This means that anything reading from the original spilling value might not get the correct value if spills were missed.
Fixes <rdar://problem/10546864>
llvm-svn: 146428
show more ...
|