|  | Commit message (Collapse) | Author | Age | Files | Lines | 
|---|
| | 
| 
| 
| | llvm-svn: 62359 | 
| | 
| 
| 
| 
| 
| | by a single CopyToReg, it reuses the virtual register assigned to the CopyToReg. This won't work for SDNode that is a clone or is itself cloned. Disable this optimization for those nodes or it can end up with non-SSA machine instructions.
llvm-svn: 62356 | 
| | 
| 
| 
| 
| 
| 
| | Split Support/Registry.h into two files so that we have less to
recompile every time CommandLine.h is changed.
llvm-svn: 62312 | 
| | 
| 
| 
| | llvm-svn: 62307 | 
| | 
| 
| 
| 
| 
| 
| | 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 | 
| | 
| 
| 
| | llvm-svn: 62286 | 
| | 
| 
| 
| | llvm-svn: 62285 | 
| | 
| 
| 
| 
| 
| 
| | to support MachineInstr-based scheduling in addition to
SDNode-based scheduling.
llvm-svn: 62284 | 
| | 
| 
| 
| | llvm-svn: 62279 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | 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 | 
| | 
| 
| 
| 
| 
| | previous commit.
llvm-svn: 62266 | 
| | 
| 
| 
| | llvm-svn: 62262 | 
| | 
| 
| 
| | llvm-svn: 62260 | 
| | 
| 
| 
| | llvm-svn: 62256 | 
| | 
| 
| 
| 
| 
| | hierarchy) that were used to handle debug info.
llvm-svn: 62199 | 
| | 
| 
| 
| | llvm-svn: 62190 | 
| | 
| 
| 
| | llvm-svn: 62184 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | scheduling dependencies. Add assertion checks to help catch
this.
It appears the Mips target defaults to list-td, and it has a
regression test that uses a physreg dependence. Such code was
liable to be miscompiled, and now evokes an assertion failure.
llvm-svn: 62177 | 
| | 
| 
| 
| 
| 
| 
| 
| | via two paths, process it once not twice, d'oh!
Analysis, testcase and original patch thanks to
Mon Ping Wang.
llvm-svn: 62169 | 
| | 
| 
| 
| 
| 
| | was not being cleaned by ExpungeNode.
llvm-svn: 62167 | 
| | 
| 
| 
| | llvm-svn: 62166 | 
| | 
| 
| 
| | llvm-svn: 62127 | 
| | 
| 
| 
| 
| 
| | suggested by Chris.
llvm-svn: 62099 | 
| | 
| 
| 
| 
| 
| 
| 
| | register to a virtual register unless it requires an expensive cross class copy. That means we are only treating "expensive to copy" register dependency as physical register dependency.
Also future proof the scheduler to handle "normal" physical register dependencies. The code is not exercised yet.
llvm-svn: 62074 | 
| | 
| 
| 
| 
| 
| | functionality change.
llvm-svn: 62036 | 
| | 
| 
| 
| | llvm-svn: 62015 | 
| | 
| 
| 
| | llvm-svn: 62005 | 
| | 
| 
| 
| | llvm-svn: 61999 | 
| | 
| 
| 
| | llvm-svn: 61991 | 
| | 
| 
| 
| | llvm-svn: 61891 | 
| | 
| 
| 
| 
| 
| 
| 
| | aggregate types. Don't increment the current index after reaching
the end of a struct, as it will already be pointing at
one-past-the end. This fixes PR3288.
llvm-svn: 61828 | 
| | 
| 
| 
| 
| 
| | argument. This doesn't affect current functionality.
llvm-svn: 61779 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | AddPseudoTwoAddrDeps. This lets the scheduling infrastructure
avoid recalculating node heights. In very large testcases this
was a major bottleneck. Thanks to Roman Levenstein for finding
this!
As a side effect, fold-pcmpeqd-0.ll is now scheduled better
and it no longer requires spilling on x86-32.
llvm-svn: 61778 | 
| | 
| 
| 
| 
| 
| 
| | own OpActionsCapacity magic number; it can just use ISD::BUILTIN_OP_END,
as long as it takes care to round up when needed.
llvm-svn: 61733 | 
| | 
| 
| 
| | llvm-svn: 61715 | 
| | 
| 
| 
| | llvm-svn: 61707 | 
| | 
| 
| 
| | llvm-svn: 61613 | 
| | 
| 
| 
| | llvm-svn: 61612 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | instructions to avoid copies, because TwoAddressInstructionPass
also does this optimization.  The scheduler's version didn't
account for live-out values, which resulted in spurious commutes
and missed opportunities.
Now, TwoAddressInstructionPass handles all the opportunities,
instead of just those that the scheduler missed. The result is
usually the same, though there are occasional trivial differences
resulting from the avoidance of spurious commutes.
llvm-svn: 61611 | 
| | 
| 
| 
| 
| 
| 
| | and BRCOND conditions.  Reorder a few methods while
there.
llvm-svn: 61547 | 
| | 
| 
| 
| | llvm-svn: 61545 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | promote from i1 all the way up to the canonical SetCC type.
In order to discover an appropriate type to use, pass
MVT::Other to getSetCCResultType.  In order to be able to
do this, change getSetCCResultType to take a type as an
argument, not a value (this is also more logical).
llvm-svn: 61542 | 
| | 
| 
| 
| | llvm-svn: 61463 | 
| | 
| 
| 
| | llvm-svn: 61405 | 
| | 
| 
| 
| | llvm-svn: 61401 | 
| | 
| 
| 
| | llvm-svn: 61398 | 
| | 
| 
| 
| | llvm-svn: 61397 | 
| | 
| 
| 
| | llvm-svn: 61396 | 
| | 
| 
| 
| | llvm-svn: 61395 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | This removes all the _8, _16, _32, and _64 opcodes and replaces each
group with an unsuffixed opcode. The MemoryVT field of the AtomicSDNode
is now used to carry the size information. In tablegen, the size-specific
opcodes are replaced by size-independent opcodes that utilize the
ability to compose them with predicates.
This shrinks the per-opcode tables and makes the code that handles
atomics much more concise.
llvm-svn: 61389 |