| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
llvm-svn: 60524
|
|
|
|
|
|
|
|
|
| |
introduce any new spilling; it just uses unused registers.
Refactor the SUnit topological sort code out of the RRList scheduler and
make use of it to help with the post-pass scheduler.
llvm-svn: 59999
|
|
|
|
|
|
|
| |
to removePred because an SUnit can both data-depend and anti-depend
on the same SUnit.
llvm-svn: 59969
|
|
|
|
| |
llvm-svn: 59785
|
|
|
|
|
|
| |
less mysterious.
llvm-svn: 59782
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
schedulers. This doesn't have much immediate impact because
targets that use these schedulers by default don't yet provide
pipeline information.
This code also didn't have the benefit of register pressure
information. Also, removing it will avoid problems with list-burr
suddenly starting to do latency-oriented scheduling on x86 when we
start providing pipeline data, which would increase spilling.
llvm-svn: 59775
|
|
|
|
|
|
|
|
|
| |
the RR scheduler actually does look at latency values, but it
doesn't use a hazard recognizer so it has no way to know when
a no-op is needed, as opposed to just stalling and incrementing
the cycle count.
llvm-svn: 59759
|
|
|
|
| |
llvm-svn: 59702
|
|
|
|
|
|
| |
list-tdrr schedulers into a common base class.
llvm-svn: 59701
|
|
|
|
|
|
|
|
|
| |
dedicated "fast" scheduler in -fast mode instead, which is
faster. This speeds up llc -fast by a few percent on some
testcases -- the speedup only happens for code not handled by
fast-isel.
llvm-svn: 59700
|
|
|
|
|
|
|
| |
the list-burr scheduler so that it can be used by the list-tdrr
scheduler too.
llvm-svn: 59698
|
|
|
|
|
|
|
| |
extend it a bit, and make use of it in all schedulers, to
ensure consistent checking.
llvm-svn: 59689
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
is currently off by default, and can be enabled with
-disable-post-RA-scheduler=false.
This doesn't have a significant impact on most code yet because it doesn't
yet do anything to address anti-dependencies and it doesn't attempt to
disambiguate memory references. Also, several popular targets
don't have pipeline descriptions yet.
The majority of the changes here are splitting the SelectionDAG-specific
code out of ScheduleDAG, so that ScheduleDAG can be moved to
libLLVMCodeGen.a. The interface between ScheduleDAG-using code and
the rest of the scheduling code is somewhat rough and will evolve.
llvm-svn: 59676
|
|
|
|
| |
llvm-svn: 59580
|
|
|
|
|
|
| |
consistent with ScheduleNodeTopDown methods.
llvm-svn: 59550
|
|
|
|
|
|
| |
a SelectionDAG*.
llvm-svn: 59488
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
new CycleBound value. Instead, just update CycleBound on each call.
Also, make ReleasePred and ReleaseSucc methods more consistent accross
the various schedulers.
This also happens to make ScheduleDAGRRList's CycleBound computation
somewhat more interesting, though it still doesn't have any noticeable
effect, because no current targets that use the register-pressure
reduction scheduler provide pipeline models.
llvm-svn: 59475
|
|
|
|
|
|
| |
functions in these two schedulers.
llvm-svn: 59465
|
|
|
|
|
|
|
|
|
|
| |
to carry a SmallVector of flagged nodes, just calculate the flagged nodes
dynamically when they are needed.
The local-liveness change is due to a trivial scheduling change where
the scheduler arbitrary decision differently.
llvm-svn: 59273
|
|
|
|
| |
llvm-svn: 59264
|
|
|
|
|
|
| |
for the possibility of scheduling without a SelectionDAG being present.
llvm-svn: 59263
|
|
|
|
|
|
|
|
|
| |
before creating the SUnit for the operation that it was unfolded from. This
allows each SUnit to have all of its predecessor SUnits available at the time
it is created. I don't know yet if this will be absolutely required, but it
is a little tidier to do it this way.
llvm-svn: 59083
|
|
|
|
|
|
|
| |
argument instead of taking the SelectionDAG's TargetMachine. This is
needed for some upcoming scheduler changes.
llvm-svn: 59055
|
|
|
|
| |
llvm-svn: 58524
|
|
|
|
|
|
|
|
|
| |
instead of requiring all "short description" strings to begin with
two spaces. This makes these strings less mysterious, and it fixes
some cases where short description strings mistakenly did not
begin with two spaces.
llvm-svn: 57521
|
|
|
|
|
|
|
| |
track of the number of live registers, which is all the set was
being used for.
llvm-svn: 56498
|
|
|
|
| |
llvm-svn: 56281
|
|
|
|
|
|
| |
Node to reflect semantics
llvm-svn: 55504
|
|
|
|
|
|
|
|
| |
of two, and to not need a scratch std::vector. Also, compute the ordering
immediately in the result array, instead of in another scratch std::vector
that is copied to the result array.
llvm-svn: 55421
|
|
|
|
| |
llvm-svn: 55394
|
|
|
|
| |
llvm-svn: 54688
|
|
|
|
| |
llvm-svn: 54349
|
|
|
|
| |
llvm-svn: 54128
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
replacement of multiple values. This is slightly more efficient
than doing multiple ReplaceAllUsesOfValueWith calls, and theoretically
could be optimized even further. However, an important property of this
new function is that it handles the case where the source value set and
destination value set overlap. This makes it feasible for isel to use
SelectNodeTo in many very common cases, which is advantageous because
SelectNodeTo avoids a temporary node and it doesn't require CSEMap
updates for users of values that don't change position.
Revamp MorphNodeTo, which is what does all the work of SelectNodeTo, to
handle operand lists more efficiently, and to correctly handle a number
of corner cases to which its new wider use exposes it.
This commit also includes a change to the encoding of post-isel opcodes
in SDNodes; now instead of being sandwiched between the target-independent
pre-isel opcodes and the target-dependent pre-isel opcodes, post-isel
opcodes are now represented as negative values. This makes it possible
to test if an opcode is pre-isel or post-isel without having to know
the size of the current target's post-isel instruction set.
These changes speed up llc overall by 3% and reduce memory usage by 10%
on the InstructionCombining.cpp testcase with -fast and -regalloc=local.
llvm-svn: 53728
|
|
|
|
|
|
|
| |
the BB member to the current basic block after emitting
instructions.
llvm-svn: 53567
|
|
|
|
| |
llvm-svn: 53502
|
|
|
|
| |
llvm-svn: 53480
|
|
|
|
|
|
|
|
| |
use a timer group for the timers in SelectionDAGISel. Also,
Split scheduling out from emitting, to give each their own
timer.
llvm-svn: 53476
|
|
|
|
|
|
| |
- Code clean up.
llvm-svn: 53010
|
|
|
|
| |
llvm-svn: 52971
|
|
|
|
|
|
|
| |
clear() on each iteration. This avoids allocating and deallocating
all of DenseMap's memory on each iteration.
llvm-svn: 52642
|
|
|
|
|
|
| |
check this with an assert.
llvm-svn: 52603
|
|
|
|
|
|
|
| |
field, which is otherwise unused after instruction selection, as an index
into the SUnit array.
llvm-svn: 52583
|
|
|
|
|
|
|
| |
and provides fairly efficient removal of arbitrary elements. Switch
ScheduleDAGRRList from std::set to this new priority queue.
llvm-svn: 52582
|
|
|
|
|
|
|
|
| |
to DenseMap<SDNode*, SUnit*>, and adjust the way cloned SUnit nodes are
handled so that only the original node needs to be in the map.
This speeds up llc on 447.dealII.llvm.bc by about 2%.
llvm-svn: 52576
|
|
|
|
| |
llvm-svn: 52571
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and better control the abstraction. Rename the type
to MVT. To update out-of-tree patches, the main
thing to do is to rename MVT::ValueType to MVT, and
rewrite expressions like MVT::getSizeInBits(VT) in
the form VT.getSizeInBits(). Use VT.getSimpleVT()
to extract a MVT::SimpleValueType for use in switch
statements (you will get an assert failure if VT is
an extended value type - these shouldn't exist after
type legalization).
This results in a small speedup of codegen and no
new testsuite failures (x86-64 linux).
llvm-svn: 52044
|
|
|
|
|
|
| |
original method caused gcc-4.2 to complain.
llvm-svn: 51186
|
|
|
|
| |
llvm-svn: 51115
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This removes the existing bottleneck related to the removal of elements from
the middle of the queue.
Also fixes a subtle bug in ScheduleDAGRRList::CapturePred:
It was updating the state of the SUnit before removing it. As a result, the
comparison operators were working incorrectly and this SUnit could not be removed
from the queue properly.
Reviewed by Evan and Dan. Approved by Dan.
llvm-svn: 50412
|