| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
| |
new gcc warning that complains on self-assignments and
self-initializations.
llvm-svn: 122458
|
|
|
|
| |
llvm-svn: 120842
|
|
|
|
|
|
| |
Patch by Krister Wombell!
llvm-svn: 119791
|
|
|
|
| |
llvm-svn: 119374
|
|
|
|
|
|
| |
constant loads.
llvm-svn: 118741
|
|
|
|
|
|
|
|
|
| |
proper SSA updating.
This doesn't cause MachineDominators to be recomputed since we are already
requiring MachineLoopInfo which uses dominators as well.
llvm-svn: 117598
|
|
|
|
| |
llvm-svn: 117337
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
exposes an initializeMyPassFunction(), which
must be called in the pass's constructor. This function uses static dependency declarations to recursively initialize
the pass's dependencies.
Clients that only create passes through the createFooPass() APIs will require no changes. Clients that want to use the
CommandLine options for passes will need to manually call the appropriate initialization functions in PassInitialization.h
before parsing commandline arguments.
I have tested this with all standard configurations of clang and llvm-gcc on Darwin. It is possible that there are problems
with the static dependencies that will only be visible with non-standard options. If you encounter any crash in pass
registration/creation, please send the testcase to me directly.
llvm-svn: 116820
|
|
|
|
|
|
|
|
|
| |
perform initialization without static constructors AND without explicit initialization
by the client. For the moment, passes are required to initialize both their
(potential) dependencies and any passes they preserve. I hope to be able to relax
the latter requirement in the future.
llvm-svn: 116334
|
|
|
|
| |
llvm-svn: 115996
|
|
|
|
|
|
| |
whether LiveIntervals::getInstructionFromIndex(def) returns NULL.
llvm-svn: 114791
|
|
|
|
|
|
|
| |
at them since they'd end up in the register weights list. Tell it to stop
doing that.
llvm-svn: 112756
|
|
|
|
| |
llvm-svn: 112746
|
|
|
|
|
|
|
| |
physical register in a register class. Make sure to assert if the register
class is empty.
llvm-svn: 112743
|
|
|
|
|
|
| |
r112728 did this for fast regalloc.
llvm-svn: 112741
|
|
|
|
|
|
|
|
|
| |
The earliestStart argument is entirely specific to linear scan allocation, and
can be easily calculated by RegAllocLinearScan.
Replace std::vector with SmallVector.
llvm-svn: 111055
|
|
|
|
| |
llvm-svn: 110460
|
|
|
|
| |
llvm-svn: 110410
|
|
|
|
|
|
|
|
| |
address of the static
ID member as the sole unique type identifier. Clean up APIs related to this change.
llvm-svn: 110396
|
|
|
|
| |
llvm-svn: 109525
|
|
|
|
| |
llvm-svn: 109045
|
|
|
|
|
|
|
|
| |
The spillers can pluck the analyses they need from the pass reference.
Switch some never-null pointers to references.
llvm-svn: 108969
|
|
|
|
|
|
| |
non-const.
llvm-svn: 108734
|
|
|
|
|
|
| |
TII::isMoveInstr is going tobe completely removed.
llvm-svn: 108507
|
|
|
|
|
|
|
|
|
| |
EXTRACT_SUBREG no longer appears as a machine instruction. Use COPY instead.
Add isCopy() checks in many places using isMoveInstr() and isExtractSubreg().
The isMoveInstr hook will be removed later.
llvm-svn: 107879
|
|
|
|
| |
llvm-svn: 107537
|
|
|
|
|
|
|
|
| |
vector instead. This avoids needless copying and allocation.
Add documentation.
llvm-svn: 106788
|
|
|
|
|
|
| |
patch by Evzen Muller!
llvm-svn: 103876
|
|
|
|
| |
llvm-svn: 100709
|
|
|
|
| |
llvm-svn: 97261
|
|
|
|
| |
llvm-svn: 92583
|
|
|
|
| |
llvm-svn: 91764
|
|
|
|
|
|
| |
own pass: CalculateSpillWeights.
llvm-svn: 91273
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The coalescer is supposed to clean these up, but when setting up parameters
for a function call, there may be copies to physregs. If the defining
instruction has been LICM'ed far away, the coalescer won't touch it.
The register allocation hint does not always work - when the register
allocator is backtracking, it clears the hints.
This patch is more conservative than r90502, and does not break
483.xalancbmk/i686. It still breaks the PowerPC bootstrap, so it is disabled
by default, and can be enabled with the -trivial-coalesce-ends option.
llvm-svn: 91049
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When a call is placed to spill an interval this spiller will first try to
break the interval up into its component values. Single value intervals and
intervals which have already been split (or are the result of previous splits)
are spilled by the default spiller.
Splitting intervals as described above may improve the performance of generated
code in some circumstances. This work is experimental however, and it still
miscompiles many benchmarks. It's not recommended for general use yet.
llvm-svn: 90951
|
|
|
|
| |
llvm-svn: 90653
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The coalescer is supposed to clean these up, but when setting up parameters
for a function call, there may be copies to physregs. If the defining
instruction has been LICM'ed far away, the coalescer won't touch it.
The register allocation hint does not always work - when the register
allocator is backtracking, it clears the hints.
This patch takes care of a few more cases that r90163 missed.
llvm-svn: 90502
|
|
|
|
|
|
| |
Make things a little more efficient as suggested by Evan.
llvm-svn: 89489
|
|
|
|
| |
llvm-svn: 89422
|
|
|
|
|
|
|
| |
Fix one case we missed to make sure we reserve registers from
allocation.
llvm-svn: 89376
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add a -linearscan-skip-count argument (default to 0) that tells the
allocator to remember the last N registers it allocated and skip them
when looking for a register candidate. This tends to spread out
register usage and free up post-allocation scheduling at the cost of
slightly more register pressure. The primary benefit is the ability
to backschedule reloads.
This is turned off by default.
llvm-svn: 89356
|
|
|
|
|
|
|
|
|
|
| |
LiveIntervals::addIntervalsForSpills.
All spiller calls in RegAllocLinearScan now go through the new Spiller interface.
The "-new-spill-framework" command line option has been removed. To use the trivial in-place spiller you should now pass "-spiller=trivial -rewriter=trivial".
(Note the trivial spiller/rewriter are only meant to serve as examples of the new in-place modification work. Enabling them will yield terrible, though hopefully functional, code).
llvm-svn: 89311
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This introduces a new pass, SlotIndexes, which is responsible for numbering
instructions for register allocation (and other clients). SlotIndexes numbering
is designed to match the existing scheme, so this patch should not cause any
changes in the generated code.
For consistency, and to avoid naming confusion, LiveIndex has been renamed
SlotIndex.
The processImplicitDefs method of the LiveIntervals analysis has been moved
into its own pass so that it can be run prior to SlotIndexes. This was
necessary to match the existing numbering scheme.
llvm-svn: 85979
|
|
|
|
|
|
| |
VISIBILITY_HIDDEN removal.
llvm-svn: 85043
|
|
|
|
|
|
|
| |
Chris claims we should never have visibility_hidden inside any .cpp file but
that's still not true even after this commit.
llvm-svn: 85042
|
|
|
|
| |
llvm-svn: 83254
|
|
|
|
| |
llvm-svn: 82812
|
|
|
|
|
|
|
|
| |
a new class, MachineInstrIndex, which hides arithmetic details from
most clients. This is a step towards allowing the register allocator
to update/insert code during allocation.
llvm-svn: 81040
|
|
|
|
| |
llvm-svn: 79852
|
|
|
|
| |
llvm-svn: 79756
|