| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
llvm-svn: 29250
|
|
|
|
| |
llvm-svn: 29221
|
|
|
|
| |
llvm-svn: 29220
|
|
|
|
|
|
| |
dropped. This shrinks libllvmgcc.dylib another 67K
llvm-svn: 28975
|
|
|
|
|
|
|
| |
live at function entry. This prevents it from using arg registers for other
purposes before the arguments are used.
llvm-svn: 28809
|
|
|
|
| |
llvm-svn: 28102
|
|
|
|
| |
llvm-svn: 25515
|
|
|
|
| |
llvm-svn: 24258
|
|
|
|
|
|
| |
allocator from 23s to 11s on kc++ in debug mode.
llvm-svn: 24255
|
|
|
|
|
|
|
| |
code. PrologEpilogInserter hasn't been updated yet though, so targets cannot
use this info.
llvm-svn: 23536
|
|
|
|
| |
llvm-svn: 22992
|
|
|
|
| |
llvm-svn: 21420
|
|
|
|
| |
llvm-svn: 19792
|
|
|
|
|
|
| |
Patch contributed by Morten Ofstad
llvm-svn: 17251
|
|
|
|
|
|
|
|
| |
Move include/Config and include/Support into include/llvm/Config,
include/llvm/ADT and include/llvm/Support. From here on out, all LLVM
public header files must be under include/llvm/.
llvm-svn: 16137
|
|
|
|
| |
llvm-svn: 15784
|
|
|
|
| |
llvm-svn: 15777
|
|
|
|
| |
llvm-svn: 15775
|
|
|
|
| |
llvm-svn: 15774
|
|
|
|
|
|
| |
"Support/Debug.h".
llvm-svn: 15089
|
|
|
|
|
|
|
|
| |
The vector may actually be empty if the register that we are marking as
recently used is not actually allocatable. This happens for physical registers
that are not allocatable, like the ST(x) registers on X86.
llvm-svn: 14195
|
|
|
|
| |
llvm-svn: 13956
|
|
|
|
|
|
| |
instruction to make the API more flexible.
llvm-svn: 12386
|
|
|
|
|
|
|
| |
MRegisterInfo::is{Physical,Virtual}Register. Apply appropriate fixes
to relevant files.
llvm-svn: 11882
|
|
|
|
| |
llvm-svn: 11868
|
|
|
|
|
|
| |
to objects.
llvm-svn: 11840
|
|
|
|
|
|
|
|
|
|
|
|
| |
block into MachineBasicBlock::getFirstTerminator().
This also fixes a bug in the implementation of the above in both
RegAllocLocal and InstrSched, where instructions where added after the
terminator if the basic block's only instruction was a terminator (it
shouldn't matter for RegAllocLocal since this case never occurs in
practice).
llvm-svn: 11748
|
|
|
|
| |
llvm-svn: 11716
|
|
|
|
|
|
| |
one terminator instruction in each basic block.
llvm-svn: 11714
|
|
|
|
| |
llvm-svn: 11687
|
|
|
|
|
|
|
| |
variable information to take into account the change of instruction
address.
llvm-svn: 11628
|
|
|
|
| |
llvm-svn: 11619
|
|
|
|
|
|
| |
and it was only for debugging in the first place.
llvm-svn: 11557
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
that need them. This is very useful on CISCy targets like the X86 because it
reduces the total spill pressure, and makes better use of it's (large)
instruction set. Though the X86 backend doesn't know how to rewrite many
instructions yet, this already makes a substantial difference on 176.gcc for
example:
Before:
Time:
8.0099 ( 31.2%) 0.0100 ( 12.5%) 8.0199 ( 31.2%) 7.7186 ( 30.0%) Local Register Allocator
Code quality:
734559 asm-printer - Number of machine instrs printed
111395 ra-local - Number of registers reloaded
79902 ra-local - Number of registers spilled
231554 x86-peephole - Number of peephole optimization performed
After:
Time:
7.8700 ( 30.6%) 0.0099 ( 19.9%) 7.8800 ( 30.6%) 7.7892 ( 30.2%) Local Register Allocator
Code quality:
733083 asm-printer - Number of machine instrs printed
2379 ra-local - Number of reloads fused into instructions
109046 ra-local - Number of registers reloaded
79881 ra-local - Number of registers spilled
230658 x86-peephole - Number of peephole optimization performed
So by fusing 2300 instructions, we reduced the static number of instructions
by 1500, and reduces the number of peepholes (and thus the work) by about 900.
This also clearly reduces the number of reload/spill instructions that are
emitted.
llvm-svn: 11542
|
|
|
|
| |
llvm-svn: 11535
|
|
|
|
|
|
| |
way to use it. :)
llvm-svn: 11517
|
|
|
|
|
|
| |
things to come.
llvm-svn: 11515
|
|
|
|
|
|
|
|
|
|
| |
MRegisterInfo::getNumRegs() instead of
MRegisterInfo::FirstVirtualRegister.
Also use MRegisterInfo::is{Physical,Virtual}Register where
appropriate.
llvm-svn: 11477
|
|
|
|
| |
llvm-svn: 11393
|
|
|
|
|
|
| |
Whitespace cleanups.
llvm-svn: 11389
|
|
|
|
|
|
|
|
|
| |
ilist of MachineInstr objects. This allows constant time removal and
insertion of MachineInstr instances from anywhere in each
MachineBasicBlock. It also allows for constant time splicing of
MachineInstrs into or out of MachineBasicBlocks.
llvm-svn: 11340
|
|
|
|
| |
llvm-svn: 11283
|
|
|
|
| |
llvm-svn: 11278
|
|
|
|
|
|
|
|
| |
the Virt2PhysRegMap std::map with an std::vector. This speeds up the
register allocator another (almost) 40%, from .72->.45s in a release build
of LLC on 253.perlbmk.
llvm-svn: 11219
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
from physical registers, and they are always dense, it makes sense to not have
a ton of RBtree overhead. This change speeds up regalloclocal about ~30% on
253.perlbmk, from .35s -> .27s in the JIT (in LLC, it goes from .74 -> .55).
Now live variable analysis is the slowest codegen pass. Of course it doesn't
help that we have to run it twice, because regalloclocal doesn't update it,
but even if it did it would be the slowest pass (now it's just the 2x slowest
pass :(
llvm-svn: 11215
|
|
|
|
|
|
| |
method
llvm-svn: 11037
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
when an implicitely defined register is later used by an alias. For example:
call foo
%reg1024 = mov %AL
The call implicitely defines EAX but only AL is used. Before this fix
no information was available on AL. Now EAX and all its aliases except
AL get defined and die at the call instruction whereas AL lives to be
killed by the assignment.
llvm-svn: 10813
|
|
|
|
|
|
| |
instead, since this pass doesn't expose any state to its users.
llvm-svn: 10520
|
|
|
|
| |
llvm-svn: 10513
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
a) remove opIsUse(), opIsDefOnly(), opIsDefAndUse()
b) add isUse(), isDef()
c) rename opHiBits32() to isHiBits32(),
opLoBits32() to isLoBits32(),
opHiBits64() to isHiBits64(),
opLoBits64() to isLoBits64().
This results to much more readable code, for example compare
"op.opIsDef() || op.opIsDefAndUse()" to "op.isDef()" a pattern used
very often in the code.
llvm-svn: 10461
|