| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 51465
|
|
|
|
|
|
| |
generated by the spiller.
llvm-svn: 51439
|
|
|
|
|
|
| |
If local spiller optimization turns some instruction into an identity copy, it will be removed. If the output register happens to be dead (and source is obviously killed), transfer the kill / dead information to last use / def in the same MBB.
llvm-svn: 51306
|
|
|
|
|
|
|
| |
several things that were neither in an anonymous namespace nor static
but not intended to be global.
llvm-svn: 51017
|
|
|
|
|
|
|
|
|
|
| |
%ecx = op
store %cl<kill>, (addr)
(addr) = op %al
It's not safe to unfold the last operand and eliminate store even though %cl is marked kill. It's a sub-register use which means one of its super-register(s) may be used below.
llvm-svn: 50794
|
|
|
|
|
|
| |
the uses when the live interval is being spilled.
llvm-svn: 49542
|
|
|
|
| |
llvm-svn: 48995
|
|
|
|
|
|
| |
use of the same val# is a copy instruction that has already been coalesced.
llvm-svn: 48833
|
|
|
|
| |
llvm-svn: 48653
|
|
|
|
|
|
| |
entries for a different key) can invalidate multimap iterators.
llvm-svn: 48371
|
|
|
|
|
|
|
| |
can be called from within a debuger without having -debug specified
on the command-line.
llvm-svn: 48298
|
|
|
|
| |
llvm-svn: 48263
|
|
|
|
| |
llvm-svn: 48261
|
|
|
|
| |
llvm-svn: 48246
|
|
|
|
|
|
| |
around the def's and use's of the interval being allocated to make it possible for the interval to target a register and spill it right away and restore a register for uses. This likely generates terrible code but is before than aborting.
llvm-svn: 48218
|
|
|
|
|
|
| |
findRegisterUseOperandIdx, findRegisterDefOperandIndx. Fix some naming inconsistencies.
llvm-svn: 47927
|
|
|
|
| |
llvm-svn: 47687
|
|
|
|
| |
llvm-svn: 47663
|
|
|
|
| |
llvm-svn: 47657
|
|
|
|
| |
llvm-svn: 47629
|
|
|
|
|
|
| |
would have been a Godsend here!
llvm-svn: 47625
|
|
|
|
| |
llvm-svn: 47598
|
|
|
|
| |
llvm-svn: 47492
|
|
|
|
|
|
|
|
| |
operands if
the definition of the operand also reaches its uses.
llvm-svn: 47475
|
|
|
|
| |
llvm-svn: 47368
|
|
|
|
| |
llvm-svn: 46930
|
|
|
|
| |
llvm-svn: 46896
|
|
|
|
|
|
|
| |
Make MachineInstr::getDesc return a reference instead
of a pointer, since it can never be null.
llvm-svn: 45695
|
|
|
|
| |
llvm-svn: 45680
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
that it is cheap and efficient to get.
Move a variety of predicates from TargetInstrInfo into
TargetInstrDescriptor, which makes it much easier to query a predicate
when you don't have TII around. Now you can use MI->getDesc()->isBranch()
instead of going through TII, and this is much more efficient anyway. Not
all of the predicates have been moved over yet.
Update old code that used MI->getInstrDescriptor()->Flags to use the
new predicates in many places.
llvm-svn: 45674
|
|
|
|
| |
llvm-svn: 45673
|
|
|
|
| |
llvm-svn: 45484
|
|
|
|
|
|
| |
Machine-level API cleanup instigated by Chris.
llvm-svn: 45470
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
that "machine" classes are used to represent the current state of
the code being compiled. Given this expanded name, we can start
moving other stuff into it. For now, move the UsedPhysRegs and
LiveIn/LoveOuts vectors from MachineFunction into it.
Update all the clients to match.
This also reduces some needless #includes, such as MachineModuleInfo
from MachineFunction.
llvm-svn: 45467
|
|
|
|
|
|
|
|
|
|
| |
- Eliminate the static "print" method for operands, moving it
into MachineOperand::print.
- Change various set* methods for register flags to take a bool
for the value to set it to. Remove unset* methods.
- Group methods more logically by operand flavor in MachineOperand.h
llvm-svn: 45461
|
|
|
|
| |
llvm-svn: 45418
|
|
|
|
|
|
| |
register R and reload is targeting R), make sure to invalidate the kill information of the last kill.
llvm-svn: 44894
|
|
|
|
| |
llvm-svn: 44612
|
|
|
|
|
|
| |
last use.
llvm-svn: 44611
|
|
|
|
| |
llvm-svn: 44609
|
|
|
|
|
|
|
|
|
| |
This allows an important optimization to be re-enabled.
- If all uses / defs of a split interval can be folded, give the interval a
low spill weight so it would not be picked in case spilling is needed (avoid
pushing other intervals in the same BB to be spilled).
llvm-svn: 44601
|
|
|
|
|
|
| |
the stored register is killed.
llvm-svn: 44600
|
|
|
|
| |
llvm-svn: 44587
|
|
|
|
|
|
| |
unless it can be modified.
llvm-svn: 44575
|
|
|
|
| |
llvm-svn: 44549
|
|
|
|
| |
llvm-svn: 44531
|
|
|
|
| |
llvm-svn: 44517
|
|
|
|
| |
llvm-svn: 44428
|
|
|
|
| |
llvm-svn: 44386
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When a live interval is being spilled, rather than creating short, non-spillable
intervals for every def / use, split the interval at BB boundaries. That is, for
every BB where the live interval is defined or used, create a new interval that
covers all the defs and uses in the BB.
This is designed to eliminate one common problem: multiple reloads of the same
value in a single basic block. Note, it does *not* decrease the number of spills
since no copies are inserted so the split intervals are *connected* through
spill and reloads (or rematerialization). The newly created intervals can be
spilled again, in that case, since it does not span multiple basic blocks, it's
spilled in the usual manner. However, it can reuse the same stack slot as the
previously split interval.
This is currently controlled by -split-intervals-at-bb.
llvm-svn: 44198
|