| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 160898
|
|
|
|
|
|
|
|
| |
A value number is a PHI def if and only if it begins at a block
boundary. This can be derived from the def slot, a separate flag is not
necessary.
llvm-svn: 160893
|
|
|
|
|
|
|
|
|
| |
This option replaces the existing live interval computation with one
based on LiveRangeCalc.cpp. The new algorithm does not depend on
LiveVariables, and it can be run at any time, before or after leaving
SSA form.
llvm-svn: 160892
|
|
|
|
| |
llvm-svn: 159030
|
|
|
|
|
|
| |
It is both smaller and faster than DenseMap.
llvm-svn: 159029
|
|
|
|
|
|
|
| |
There is no need to check for physreg live ranges. They don't exist any
more.
llvm-svn: 159019
|
|
|
|
|
|
| |
Everyone is using on-demand regunit ranges now.
llvm-svn: 159018
|
|
|
|
|
|
|
|
|
| |
With regunit liveness permanently enabled, this function would always
return true.
Also remove now obsolete code for checking physreg interference.
llvm-svn: 159006
|
|
|
|
|
|
| |
Register allocators depend on it being permanently enabled now.
llvm-svn: 158873
|
|
|
|
|
|
| |
Deterministically enumerate the virtual registers instead.
llvm-svn: 158872
|
|
|
|
|
|
| |
Soon we won't need to compute live intervals for physical registers.
llvm-svn: 158865
|
|
|
|
|
|
|
|
|
|
|
| |
Regunit live ranges are computed on demand, so when mi-sched calls
handleMove, some regunits may not have live ranges yet.
That makes updating them easier: Just skip the non-existing ranges. They
will be computed correctly from the rescheduled machine code when they
are needed.
llvm-svn: 158831
|
|
|
|
| |
llvm-svn: 158827
|
|
|
|
|
|
|
| |
When LiveIntervals is tracking fixed interference in regunits, make sure
to update those intervals as well. Currently guarded by -live-regunits.
llvm-svn: 158766
|
|
|
|
| |
llvm-svn: 158755
|
|
|
|
|
|
|
| |
Remat has been stable for years, and it isn't done by
LiveIntervalAnalysis any longer. (See LiveRangeEdit).
llvm-svn: 158079
|
|
|
|
| |
llvm-svn: 158037
|
|
|
|
|
|
|
|
|
|
| |
Don't print out the register number and spill weight, making the TRI
argument unnecessary.
This allows callers to interpret the reg field. It can currently be a
virtual register, a physical register, a spill slot, or a register unit.
llvm-svn: 158031
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Instead of computing a live interval per physreg, LiveIntervals can
compute live intervals per register unit. This makes impossible the
confusing situation where aliasing registers could have overlapping live
intervals. It should also make fixed interferernce checking cheaper
since registers have fewer register units than aliases.
Live intervals for regunits are computed on demand, using MRI use-def
chains and the new LiveRangeCalc class. Only regunits live in to ABI
blocks are precomputed during LiveIntervals::runOnMachineFunction().
The regunit liveness computations don't depend on LiveVariables.
llvm-svn: 158029
|
|
|
|
|
|
| |
Rematerialization is handled by LiveRangeEdit now.
llvm-svn: 157974
|
|
|
|
| |
llvm-svn: 157963
|
|
|
|
|
|
| |
No functional change.
llvm-svn: 157957
|
|
|
|
|
|
|
|
|
|
| |
ranges for the instruction about to be bundled. This fixes a bug in an external
project where an assertion was triggered due to spurious 'multiple defs' within
the bundle.
Patch by Ivan Llopard. Thanks Ivan!
llvm-svn: 157632
|
|
|
|
| |
llvm-svn: 157145
|
|
|
|
|
|
| |
std::for_each. Turns out std::for_each doesn't update the variable passed in for the functor but instead copy constructs a new one.
llvm-svn: 155041
|
|
|
|
| |
llvm-svn: 153162
|
|
|
|
| |
llvm-svn: 153158
|
|
|
|
|
|
|
|
| |
The first def of a virtual register cannot also read the register.
Assert on such bad machine code instead of trying to fix it.
TwoAddressInstructionPass should never create code like that.
llvm-svn: 152010
|
|
|
|
|
|
|
|
|
| |
This allows the function to be inlined, and makes it suitable for use in
getInstructionIndex().
Also provide a const version. C++ is great for touch typing practice.
llvm-svn: 151782
|
|
|
|
|
|
|
|
|
|
|
|
| |
into
bundles. This method takes a bundle start and an MI being bundled, and makes
the intervals for the MI's operands appear to start/end on the bundle start.
Also fixes some minor cosmetic issues (whitespace, naming convention) in the
HMEditor code.
llvm-svn: 151099
|
|
|
|
| |
llvm-svn: 151006
|
|
|
|
| |
llvm-svn: 150921
|
|
|
|
| |
llvm-svn: 150915
|
|
|
|
| |
llvm-svn: 150914
|
|
|
|
| |
llvm-svn: 150912
|
|
|
|
| |
llvm-svn: 150910
|
|
|
|
|
|
| |
Hold (LiveInterval, LiveRange) pairs to update, rather than vregs.
llvm-svn: 150909
|
|
|
|
| |
llvm-svn: 150851
|
|
|
|
| |
llvm-svn: 150841
|
|
|
|
| |
llvm-svn: 150840
|
|
|
|
|
|
|
|
|
| |
any changes.
Internally this adds a private inner class HMEditor, to LiveIntervals. HMEditor provides
an API for updating live intervals when code is moved or bundled.
llvm-svn: 150826
|
|
|
|
|
|
| |
NDEBUG guards.
llvm-svn: 150771
|
|
|
|
|
|
| |
un-allocatable registers.
llvm-svn: 150768
|
|
|
|
| |
llvm-svn: 150630
|
|
|
|
| |
llvm-svn: 150627
|
|
|
|
| |
llvm-svn: 150608
|
|
|
|
| |
llvm-svn: 150553
|
|
|
|
| |
llvm-svn: 150552
|
|
|
|
|
|
|
|
|
|
|
|
| |
When a physreg is live in to a basic block, look for any instruction in
the block that clobbers the physreg.
The instruction doesn't have to properly redefine the register, any
overlapping clobber is OK.
This slightly changes live ranges when compiling with register masks.
llvm-svn: 150528
|
|
|
|
|
|
| |
The old DenseMap hashed order was very confusing.
llvm-svn: 150527
|