| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
| |
- Create and update spill slot live intervals.
- Lots of bug fixes.
llvm-svn: 58367
|
|
|
|
|
|
|
| |
can give it the same stack slot as the spilled interval if it is folded.
This prevents the fold/unfold code from pointing to the wrong register.
llvm-svn: 58255
|
|
|
|
|
|
| |
re-materializable val# (for now).
llvm-svn: 58068
|
|
|
|
| |
llvm-svn: 57766
|
|
|
|
| |
llvm-svn: 57765
|
|
|
|
| |
llvm-svn: 57259
|
|
|
|
|
|
| |
isReg, etc., from isRegister, etc.
llvm-svn: 57006
|
|
|
|
|
|
| |
amount of time to track down.
llvm-svn: 56889
|
|
|
|
| |
llvm-svn: 56848
|
|
|
|
|
|
|
|
|
|
| |
"If a re-materializable instruction has a register
operand, the spiller will change the register operand's
spill weight to HUGE_VAL to avoid it being spilled.
However, if the operand is already in the queue ready
to be spilled, avoid re-materializing it".
llvm-svn: 56837
|
|
|
|
|
|
| |
change the register operand's spill weight to HUGE_VAL to avoid it being spilled. However, if the operand is already in the queue ready to be spilled, avoid re-materializing it.
llvm-svn: 56835
|
|
|
|
|
|
|
|
|
|
| |
RA problem by expanding the live interval of an
earlyclobber def back one slot. Remove
overlap-earlyclobber throughout. Remove
earlyclobber bits and their handling from
live internals.
llvm-svn: 56539
|
|
|
|
|
|
|
|
| |
live-in indices
correct in the presence of things like EH labels.
llvm-svn: 56410
|
|
|
|
|
|
|
| |
and redo as linked list walk. Logic moved into RA.
Per review feedback.
llvm-svn: 56326
|
|
|
|
|
|
|
|
|
| |
with an earlyclobber operand elsewhere. Propagate
this bit and the earlyclobber bit through SDISel.
Change linear-scan RA not to allocate regs in a way
that conflicts with an earlyclobber. See also comments.
llvm-svn: 56290
|
|
|
|
|
|
|
|
|
| |
basic block, not at the first
instruction. Also, their valno's should have an unknown def. This has no effect currently, but was
causing issues when StrongPHIElimination was enabled.
llvm-svn: 56231
|
|
|
|
|
|
|
|
|
| |
isImmediate(), isRegister(), and friends, to avoid confusion
about having two different names with the same meaning. I'm
not attached to the longer names, and would be ok with
changing to the shorter names if others prefer it.
llvm-svn: 56189
|
|
|
|
|
|
| |
remat and splitting.
llvm-svn: 55012
|
|
|
|
|
|
|
|
|
| |
appropriate.
With this patch, all of MultiSource/Applications and all of SPEC2000/2006 pass with
the SimpleSpiller and this fast-path enabled.
llvm-svn: 55000
|
|
|
|
| |
llvm-svn: 54958
|
|
|
|
|
|
|
| |
1) Assign stack slots to new temporaries.
2) Don't insert an interval into the return vector more than once.
llvm-svn: 54956
|
|
|
|
|
|
|
|
| |
1) Remove an incorrect assertion.
2) Set the stack slot weight properly.
3) Resize the VirtRegMap when needed.
llvm-svn: 54949
|
|
|
|
|
|
| |
sorted by starting index.
llvm-svn: 54939
|
|
|
|
|
|
| |
MachineRegisterInfo::reg_iterator.
llvm-svn: 54930
|
|
|
|
|
|
|
|
|
| |
remat, or splitting. This code has been updated to current APIs
in so far as it compiles and, in theory, works, but does not take advantage of recent advancements. For instance, it could be improved by using
MachineRegisterInfo::use_iterator.
llvm-svn: 54924
|
|
|
|
| |
llvm-svn: 54766
|
|
|
|
| |
llvm-svn: 54765
|
|
|
|
|
|
|
|
| |
the r2iMap_ by value. This will prevent references to them from being invalidated
if the map is changed.
llvm-svn: 54763
|
|
|
|
| |
llvm-svn: 54425
|
|
|
|
| |
llvm-svn: 54420
|
|
|
|
|
|
| |
remapped.
llvm-svn: 54218
|
|
|
|
| |
llvm-svn: 54186
|
|
|
|
| |
llvm-svn: 54173
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
a new ilist_node class, and remove them. Unlike alist_node,
ilist_node doesn't attempt to manage storage itself, so it avoids
the associated problems, including being opaque in gdb.
Adjust the Recycler class so that it doesn't depend on alist_node.
Also, change it to use explicit Size and Align parameters, allowing
it to work when the largest-sized node doesn't have the greatest
alignment requirement.
Change MachineInstr's MachineMemOperand list from a pool-backed
alist to a std::list for now.
llvm-svn: 54146
|
|
|
|
| |
llvm-svn: 54136
|
|
|
|
|
|
| |
to fix this problem.
llvm-svn: 54072
|
|
|
|
|
|
|
|
|
| |
a PHI has been removed. The interval previously defined
by the PHI needs to be extended to the beginning of its basic block, and the intervals that were inputs need to be trimmed to the end
of their basic blocks.
llvm-svn: 54070
|
|
|
|
| |
llvm-svn: 54061
|
|
|
|
|
|
|
|
|
| |
robust.
This is tricky business, and will probably take a few more iterations to get
the last kinks out of it.
llvm-svn: 54043
|
|
|
|
|
|
|
| |
regressions, such as PR2595. Also, there is a significant code-quality
issue in SPEC 464.h264ref and a few others.
llvm-svn: 54014
|
|
|
|
|
|
|
|
|
|
| |
AliasAnalysis::pointsToConstantMemory,
and knowledge of PseudoSourceValues. This unfortunately isn't sufficient to allow
constants to be rematerialized in PIC mode -- the extra indirection is a
complication.
llvm-svn: 54000
|
|
|
|
|
|
| |
renumbering possible.
llvm-svn: 53961
|
|
|
|
|
|
|
|
|
| |
forgot
to multiply the instruction count by a constant factor in a few places, which
caused the register allocator to require many more iterations.
llvm-svn: 53959
|
|
|
|
|
|
|
| |
live intervals itself to use an instruction count approximation that is
not affected by inserting empty indices.
llvm-svn: 53937
|
|
|
|
| |
llvm-svn: 53779
|
|
|
|
|
|
|
| |
Fix a leak that this turned up in LowerSubregs.cpp.
And, comment a leak in LiveIntervalAnalysis.cpp.
llvm-svn: 53746
|
|
|
|
| |
llvm-svn: 53504
|
|
|
|
|
|
|
|
|
|
|
| |
register but the use portion of its live range is not part of its liveinterval, it must be defined by an implicit_def. In that case, do not spill the use. e.g.
8 %reg1024<def> = IMPLICIT_DEF
12 %reg1024<def> = INSERT_SUBREG %reg1024<kill>, %reg1025, 2
The live range [12, 14) are not part of the r1024 live interval since it's defined by an implicit def. It will not conflicts with live interval of r1025. Now suppose both registers are spilled, you can easily see a situation where both registers are reloaded before the INSERT_SUBREG and both target registers that would overlap.
llvm-svn: 53503
|
|
|
|
|
|
|
|
| |
the operand index of def machineoperand and at most one full scan of non-implicit operands is needed.
- Change local register allocator to use the new isRegReDefinedByTwoAddr instead of reinventing the wheel.
llvm-svn: 53394
|
|
|
|
|
|
|
|
|
|
|
| |
MachineMemOperands. The pools are owned by MachineFunctions.
This drastically reduces the number of calls to malloc/free made
during the "Emit" phase of scheduling, as well as later phases
in CodeGen. Combined with other changes, this speeds up the
"instruction selection" phase of CodeGen by 10% in some cases.
llvm-svn: 53212
|