| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
| |
propagate kill / dead markers as new instructions are constructed in foldMemoryOperand, convertToThressAddress, etc.
- Also remove LiveVariables::instructionChanged, etc. Replace all calls with cheaper calls which update VarInfo kill list.
llvm-svn: 53097
|
|
|
|
| |
llvm-svn: 53063
|
|
|
|
|
|
|
|
| |
instructionChanged. That is, it only update the VarInfo.kills if the new instruction is known to have the correct dead and kill markers.
- CommuteInstruction copies kill / dead markers over to new instruction. So use replaceKillInstruction instead.
llvm-svn: 53061
|
|
|
|
|
|
| |
This speeds up a particular testcase from 0.0302s to 0.0222s in LiveVariables.
llvm-svn: 52819
|
|
|
|
| |
llvm-svn: 52744
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
,------.
| |
| v
| t2 = phi ... t1 ...
| |
| v
| t1 = ...
| ... = ... t1 ...
| |
`------'
where there is a use in a PHI node that's a predecessor to the defining
block. We don't want to mark all predecessors as having the value "alive" in
this case. Also, the assert was too restrictive and didn't handle this case.
llvm-svn: 52655
|
|
|
|
|
|
|
|
| |
simplified. It eliminated the nasty recursive routines and removed the partial def / use bookkeeping. There is also potential for performance improvement by replacing the conservative handling of partial physical register definitions. The code is currently disabled until live interval analysis is taught of the name scheme.
This patch also fixed a couple of nasty corner cases.
llvm-svn: 49784
|
|
|
|
|
|
| |
defs, I can do away with the horribleness I introduced a while back. It's impossible to detect if there is any use of a physical register below an instruction (and before any def of the register) with some cheap book keeping.
llvm-svn: 49105
|
|
|
|
|
|
|
|
|
|
|
| |
1. If part of a register is re-defined, an implicit kill and an implicit def are added to denote read / mod / write. However, this should only be necessary if the register is actually read later. This is a performance issue.
2. If a sub-register is being defined, and it doesn't have a previous use, do not add a implicit kill to the last use of a super-register:
= EAX, AX<imp-use,kill>
...
AX =
In this case, EAX is live but AX is killed, this is wrong and will cause the coalescer to do bad things.
llvm-svn: 48521
|
|
|
|
|
|
| |
findRegisterUseOperandIdx, findRegisterDefOperandIndx. Fix some naming inconsistencies.
llvm-svn: 47927
|
|
|
|
| |
llvm-svn: 47453
|
|
|
|
|
|
|
|
| |
No need to go up more levels. A def of a register also sets its sub-registers
(so if PhysRegInfo[SuperReg] is NULL, it means SuperReg's super registers are
not previously defined).
llvm-svn: 47399
|
|
|
|
| |
llvm-svn: 47395
|
|
|
|
| |
llvm-svn: 47389
|
|
|
|
|
|
|
| |
Added two "FIXMEs" for code that looks dubious to me (but I could be
wrong).
llvm-svn: 47366
|
|
|
|
|
|
| |
changes. (Sorry for any formatting changes that creeped in.)
llvm-svn: 47362
|
|
|
|
|
|
|
| |
- Constified some MachineOperand values.
- Added/Modified some comments.
llvm-svn: 47358
|
|
|
|
| |
llvm-svn: 46930
|
|
|
|
|
|
| |
visited earlier, then it is not killed in the def block (i.e. not dead).
llvm-svn: 46763
|
|
|
|
|
|
| |
MachineInstr rather than LiveVariables.
llvm-svn: 46295
|
|
|
|
|
|
| |
executed as frequently in performance sensitive code.
llvm-svn: 46027
|
|
|
|
|
|
| |
MachineRegisterInfo instead.
llvm-svn: 46016
|
|
|
|
|
|
|
| |
Make MachineInstr::getDesc return a reference instead
of a pointer, since it can never be null.
llvm-svn: 45695
|
|
|
|
| |
llvm-svn: 45680
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
| |
e.g. MO.isMBB() instead of MO.isMachineBasicBlock(). I don't plan on
switching everything over, so new clients should just start using the
shorter names.
Remove old long accessors, switching everything over to use the short
accessor: getMachineBasicBlock() -> getMBB(),
getConstantPoolIndex() -> getIndex(), setMachineBasicBlock -> setMBB(), etc.
llvm-svn: 45464
|
|
|
|
|
|
|
|
|
|
| |
- 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: 45432
|
|
|
|
| |
llvm-svn: 45418
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 43866
|
|
|
|
|
|
| |
defined on the same instruction. This fixes PR1767.
llvm-svn: 43699
|
|
|
|
|
|
|
| |
isRegister, isImmediate, and isMachineBasicBlock, which are equivalent,
and more popular.
llvm-svn: 41958
|
|
|
|
| |
llvm-svn: 41893
|
|
|
|
|
|
| |
same time. Do not mark the "smaller" def as dead.
llvm-svn: 41871
|
|
|
|
| |
llvm-svn: 40688
|
|
|
|
|
|
|
|
| |
when there are no uses. This fixes a dangling-pointer bug, where pointers to
deleted instructions were not removed from kills lists. More info here:
http://lists.cs.uiuc.edu/pipermail/llvmdev/2007-July/009749.html
llvm-svn: 40131
|
|
|
|
| |
llvm-svn: 39979
|
|
|
|
| |
llvm-svn: 37746
|
|
|
|
|
|
| |
are read by later instructions.
llvm-svn: 37739
|
|
|
|
|
|
| |
partial use info as well.
llvm-svn: 37046
|
|
|
|
| |
llvm-svn: 36943
|
|
|
|
| |
llvm-svn: 36662
|
|
|
|
|
|
|
| |
Due to darwin gcc bug, one version of darwin linker coalesces
static const int, which defauts PassID based pass identification.
llvm-svn: 36652
|
|
|
|
| |
llvm-svn: 36632
|
|
|
|
| |
llvm-svn: 36483
|
|
|
|
| |
llvm-svn: 36473
|
|
|
|
|
|
| |
/ post reg-allocation.
llvm-svn: 36458
|
|
|
|
| |
llvm-svn: 36449
|
|
|
|
| |
llvm-svn: 36447
|