| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
real benefit).
llvm-svn: 47779
|
|
|
|
| |
llvm-svn: 47368
|
|
|
|
| |
llvm-svn: 47196
|
|
|
|
|
|
| |
with the TIED_TO attribute.
llvm-svn: 47177
|
|
|
|
|
|
|
| |
that should be checked for the TIED_TO attribute instead of
using CountOperands.
llvm-svn: 47176
|
|
|
|
| |
llvm-svn: 46930
|
|
|
|
| |
llvm-svn: 46514
|
|
|
|
| |
llvm-svn: 46513
|
|
|
|
| |
llvm-svn: 46508
|
|
|
|
| |
llvm-svn: 45787
|
|
|
|
|
|
|
| |
Make MachineInstr::getDesc return a reference instead
of a pointer, since it can never be null.
llvm-svn: 45695
|
|
|
|
| |
llvm-svn: 45693
|
|
|
|
|
|
|
|
| |
all clients over to using predicates instead of these flags directly.
These are now private values which are only to be used to statically
initialize the tables.
llvm-svn: 45692
|
|
|
|
| |
llvm-svn: 45680
|
|
|
|
| |
llvm-svn: 45673
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
that "machine" classes are used to represent the current state of
the code being compiled. Given this expanded name, we can start
moving other stuff into it. For now, move the UsedPhysRegs and
LiveIn/LoveOuts vectors from MachineFunction into it.
Update all the clients to match.
This also reduces some needless #includes, such as MachineModuleInfo
from MachineFunction.
llvm-svn: 45467
|
|
|
|
| |
llvm-svn: 45418
|
|
|
|
| |
llvm-svn: 45259
|
|
|
|
| |
llvm-svn: 45252
|
|
|
|
|
|
| |
a new node. If not, do not create a new SUnit.
llvm-svn: 45157
|
|
|
|
| |
llvm-svn: 43922
|
|
|
|
|
|
|
| |
other uses. There was a overly restricted check that prevented some obvious
cases.
llvm-svn: 43762
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
take a deleted nodes vector, instead of requiring it.
One more significant change: Implement the start of a legalizer that
just works on types. This legalizer is designed to run before the
operation legalizer and ensure just that the input dag is transformed
into an output dag whose operand and result types are all legal, even
if the operations on those types are not.
This design/impl has the following advantages:
1. When finished, this will *significantly* reduce the amount of code in
LegalizeDAG.cpp. It will remove all the code related to promotion and
expansion as well as splitting and scalarizing vectors.
2. The new code is very simple, idiomatic, and modular: unlike
LegalizeDAG.cpp, it has no 3000 line long functions. :)
3. The implementation is completely iterative instead of recursive, good
for hacking on large dags without blowing out your stack.
4. The implementation updates nodes in place when possible instead of
deallocating and reallocating the entire graph that points to some
mutated node.
5. The code nicely separates out handling of operations with invalid
results from operations with invalid operands, making some cases
simpler and easier to understand.
6. The new -debug-only=legalize-types option is very very handy :),
allowing you to easily understand what legalize types is doing.
This is not yet done. Until the ifdef added to SelectionDAGISel.cpp is
enabled, this does nothing. However, this code is sufficient to legalize
all of the code in 186.crafty, olden and freebench on an x86 machine. The
biggest issues are:
1. Vectors aren't implemented at all yet
2. SoftFP is a mess, I need to talk to Evan about it.
3. No lowering to libcalls is implemented yet.
4. Various operations are missing etc.
5. There are FIXME's for stuff I hax0r'd out, like softfp.
Hey, at least it is a step in the right direction :). If you'd like to help,
just enable the #ifdef in SelectionDAGISel.cpp and compile code with it. If
this explodes it will tell you what needs to be implemented. Help is
certainly appreciated.
Once this goes in, we can do three things:
1. Add a new pass of dag combine between the "type legalizer" and "operation
legalizer" passes. This will let us catch some long-standing isel issues
that we miss because operation legalization often obfuscates the dag with
target-specific nodes.
2. We can rip out all of the type legalization code from LegalizeDAG.cpp,
making it much smaller and simpler. When that happens we can then
reimplement the core functionality left in it in a much more efficient and
non-recursive way.
3. Once the whole legalizer is non-recursive, we can implement whole-function
selectiondags maybe...
llvm-svn: 42981
|
|
|
|
|
|
|
|
|
| |
(almost) a register copy. However, it always coalesced to the register of the
RHS (the super-register). All uses of the result of a EXTRACT_SUBREG are sub-
register uses which adds subtle complications to load folding, spiller rewrite,
etc.
llvm-svn: 42899
|
|
|
|
| |
llvm-svn: 42635
|
|
|
|
| |
llvm-svn: 42627
|
|
|
|
| |
llvm-svn: 42626
|
|
|
|
|
|
|
|
|
| |
scheduler will try a number of tricks in order to avoid generating the
copies. This may not be possible in case the node produces a chain value
that prevent movement. Try unfolding the load from the node before to allow
it to be moved / cloned.
llvm-svn: 42625
|
|
|
|
|
|
|
| |
terminator) the one that has a CopyToReg use. This fixes
2006-05-11-InstrSched.ll with -new-cc-modeling-scheme.
llvm-svn: 42453
|
|
|
|
| |
llvm-svn: 42443
|
|
|
|
| |
llvm-svn: 42442
|
|
|
|
| |
llvm-svn: 42410
|
|
|
|
| |
llvm-svn: 42388
|
|
|
|
|
|
| |
copies; Added statistics.
llvm-svn: 42387
|
|
|
|
| |
llvm-svn: 42384
|
|
|
|
|
|
|
| |
- Added ability to emit cross class register copies to the BBRU scheduler.
- More aggressive backtracking.
llvm-svn: 42375
|
|
|
|
|
|
| |
physical register dependency. The BURR scheduler can now backtrace and duplicate instructions in order to avoid "expensive / impossible to copy" values (e.g. status flag EFLAGS for x86) from being clobbered.
llvm-svn: 42284
|
|
|
|
|
|
| |
in tracking physical register output dependencies.
llvm-svn: 42125
|
|
|
|
| |
llvm-svn: 41900
|
|
|
|
|
|
| |
scheduler implementations.
llvm-svn: 41191
|
|
|
|
|
|
|
| |
Change name of -sched option and DEBUG_TYPE to
pre-RA-sched; adjust testcases.
llvm-svn: 39816
|
|
|
|
| |
llvm-svn: 37816
|
|
|
|
| |
llvm-svn: 37799
|
|
|
|
|
|
|
| |
ordering and thus violated the strict weak ordering requirement of
priority_queue. Uncovered by _GLIBCXX_DEBUG.
llvm-svn: 37794
|
|
|
|
|
|
| |
time. For Duraid's example. The overall isel time is reduced from 0.6255 sec to 0.1876 sec.
llvm-svn: 37701
|
|
|
|
| |
llvm-svn: 36485
|
|
|
|
|
|
|
|
|
|
| |
it as a late BURR scheduling tie-breaker.
Intuitively, it's good to push down instructions whose results are liveout so
their long live ranges won't conflict with other values which are needed inside
the BB. Further prioritize liveout instructions by the number of operands which
are calculated within the BB.
llvm-svn: 35109
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
e.g.
t1 = op t2, c1
t3 = op t4, c2
and the following instructions are both ready.
t2 = op c3
t4 = op c4
Then schedule t2 = op first.
i.e.
t4 = op c4
t2 = op c3
t1 = op t2, c1
t3 = op t4, c2
This creates more short live intervals which work better with the register
allocator.
llvm-svn: 35089
|
|
|
|
|
|
| |
speeds up isel as a whole time by 2.6%.
llvm-svn: 33810
|
|
|
|
| |
llvm-svn: 33745
|