| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
the kill flag of a superreg needs to be cleared because there are one or more subregs live, we instead add implicit-defs of those subregs and leave the kill flag on the superreg. This allows us to end the live-range of the superreg without ending the live-ranges of the subregs.
llvm-svn: 82629
|
|
|
|
|
|
|
|
| |
sdisel will use to properly complete phi nodes.
Not functionality change yet.
llvm-svn: 82273
|
|
|
|
| |
llvm-svn: 81112
|
|
|
|
|
|
| |
wasn't doing the right thing.
llvm-svn: 80958
|
|
|
|
| |
llvm-svn: 80702
|
|
|
|
| |
llvm-svn: 80621
|
|
|
|
| |
llvm-svn: 80410
|
|
|
|
| |
llvm-svn: 80002
|
|
|
|
| |
llvm-svn: 79836
|
|
|
|
| |
llvm-svn: 78843
|
|
|
|
| |
llvm-svn: 78773
|
|
|
|
|
|
| |
in breaking an anti-dependence into a separate function.
llvm-svn: 78767
|
|
|
|
| |
llvm-svn: 78694
|
|
|
|
| |
llvm-svn: 78687
|
|
|
|
| |
llvm-svn: 78634
|
|
|
|
|
|
| |
target schedule information to accurately model the pipeline. Update the scheduler to correctly handle multi-issue targets.
llvm-svn: 78563
|
|
|
|
| |
llvm-svn: 77754
|
|
|
|
|
|
| |
now that TargetOperandInfo does the heavy lifting.
llvm-svn: 77508
|
|
|
|
|
|
|
|
|
| |
This adds location info for all llvm_unreachable calls (which is a macro now) in
!NDEBUG builds.
In NDEBUG builds location info and the message is off (it only prints
"UREACHABLE executed").
llvm-svn: 75640
|
|
|
|
|
|
|
|
|
| |
Make llvm_unreachable take an optional string, thus moving the cerr<< out of
line.
LLVM_UNREACHABLE is now a simple wrapper that makes the message go away for
NDEBUG builds.
llvm-svn: 75379
|
|
|
|
| |
llvm-svn: 70950
|
|
|
|
|
|
|
|
|
|
|
|
| |
register destinations that are tied to source operands. The
TargetInstrDescr::findTiedToSrcOperand method silently fails for inline
assembly. The existing MachineInstr::isRegReDefinedByTwoAddr was very
close to doing what is needed, so this revision makes a few changes to
that method and also renames it to isRegTiedToUseOperand (for consistency
with the very similar isRegTiedToDefOperand and because it handles both
two-address instructions and inline assembly with tied registers).
llvm-svn: 68714
|
|
|
|
| |
llvm-svn: 66653
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
scheduled in multiple regions, liveness data used by the
anti-dependence breaker is carried from one region to the next, however
the information reflects the state of the instructions before scheduling.
After scheduling, there may be new live range overlaps. Handle this by
pessimizing the liveness data carried between regions to the point where
it will be conservatively correct now matter how the earlier region is
scheduled. This fixes a miscompilation in 176.gcc with the post-RA
scheduler enabled.
llvm-svn: 66558
|
|
|
|
|
|
|
|
|
|
|
| |
instruction index across each part. Instruction indices are used
to make live range queries, and live ranges can extend beyond
scheduling region boundaries.
Refactor the ScheduleDAGSDNodes class some more so that it
doesn't have to worry about this additional information.
llvm-svn: 64288
|
|
|
|
|
|
|
|
|
| |
a scheduling region boundary. This isn't necessary for
correctness; it helps with compile time, as it avoids the need
for data- and anti-dependencies from all spills and reloads on
the stack-pointer modification.
llvm-svn: 64255
|
|
|
|
|
|
|
|
|
|
|
| |
scheduling, and generalize is so that preserves state across
scheduling regions. This fixes incorrect live-range information around
terminators and labels, which are effective region boundaries.
In place of looking for terminators to anchor inter-block dependencies,
introduce special entry and exit scheduling units for this purpose.
llvm-svn: 64254
|
|
|
|
| |
llvm-svn: 63938
|
|
|
|
|
|
|
|
| |
that used this header to select a scheduling policy should
use SchedulerRegistry.h instead (llvm-gcc and clang were
updated a while ago).
llvm-svn: 63934
|
|
|
|
|
|
|
|
| |
basic-block segments bottom-up instead of top down. This
is the first step in a general restructuring of the way
register liveness is tracked in the post-RA scheduler.
llvm-svn: 63643
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and every other instruction in their blocks to keep the terminator
instructions at the end, teach the post-RA scheduler how to operate
on ranges of instructions, and exclude terminators from the range
of instructions that get scheduled.
Also, exclude mid-block labels, such as EH_LABEL instructions, and
schedule code before them separately from code after them. This
fixes problems with the post-RA scheduler moving code past
EH_LABELs.
llvm-svn: 62366
|
|
|
|
|
|
|
| |
to 0, to ensure that the subsequent code doesn't try to break the
dependence.
llvm-svn: 62365
|
|
|
|
|
|
|
|
| |
array instead, since this is what the scheduler actually cares about.
And remove a check that is unnecessary, since it can assume that
SUnits isn't empty.
llvm-svn: 62362
|
|
|
|
|
|
| |
warning.
llvm-svn: 62327
|
|
|
|
|
|
|
| |
a new toy hazard recognizier heuristic which attempts to direct the
scheduler to avoid clumping large groups of loads or stores too densely.
llvm-svn: 62291
|
|
|
|
|
|
|
|
|
|
|
| |
and into the ScheduleDAGInstrs class, so that they don't get
destructed and re-constructed for each block. This fixes a
compile-time hot spot in the post-pass scheduler.
To help facilitate this, tidy and do some minor reorganization
in the scheduler constructor functions.
llvm-svn: 62275
|
|
|
|
| |
llvm-svn: 61715
|
|
|
|
|
|
| |
code in ScheduleDAGSDNodes' BuildSchedGraph into separate functions.
llvm-svn: 61376
|
|
|
|
|
|
| |
warnings on compilers that warn about such things.
llvm-svn: 61263
|
|
|
|
|
|
|
| |
position in the critical path during the main instruction walk. This
eliminates the need for the CritialAntiDep DenseMap.
llvm-svn: 61096
|
|
|
|
| |
llvm-svn: 61078
|
|
|
|
|
|
|
| |
one of its aliases defined. This is conservative, but tricky subreg
corner cases are outside the primary aim of this pass.
llvm-svn: 61077
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
computation code. Also, avoid adding output-depenency edges when both
defs are dead, which frequently happens with EFLAGS defs.
Compute Depth and Height lazily, and always in terms of edge latency
values. For the schedulers that don't care about latency, edge latencies
are set to 1.
Eliminate Cycle and CycleBound, and LatencyPriorityQueue's Latencies array.
These are all subsumed by the Depth and Height fields.
llvm-svn: 61073
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The Cost field is removed. It was only being used in a very limited way,
to indicate when the scheduler should attempt to protect a live register,
and it isn't really needed to do that. If we ever want the scheduler to
start inserting copies in non-prohibitive situations, we'll have to
rethink some things anyway.
A Latency field is added. Instead of giving each node a single
fixed latency, each edge can have its own latency. This will eventually
be used to model various micro-architecture properties more accurately.
The PointerIntPair class and an internal union are now used, which
reduce the overall size.
llvm-svn: 60806
|
|
|
|
| |
llvm-svn: 60586
|
|
|
|
|
|
|
|
|
|
| |
While they appear to provide a normal clobbering def, they don't
in the case of the awkward IMPLICIT_DEF+INSERT_SUBREG idiom. It
would be good to change INSERT_SUBREG; until then, this change
allows post-regalloc scheduling to cope in a mildly conservative
way.
llvm-svn: 60583
|
|
|
|
| |
llvm-svn: 60525
|
|
|
|
|
|
| |
issues with subreg operands and tied operands.
llvm-svn: 60510
|
|
|
|
| |
llvm-svn: 60500
|
|
|
|
|
|
|
| |
an area where eventually it would be good to use target-dependent
information.
llvm-svn: 60498
|