- Feb 22, 2004
-
-
Chris Lattner authored
llvm-svn: 11716
-
Chris Lattner authored
one terminator instruction in each basic block. llvm-svn: 11714
-
- Feb 21, 2004
-
-
Alkis Evlogimenos authored
llvm-svn: 11687
-
- Feb 19, 2004
-
-
Chris Lattner authored
variable information to take into account the change of instruction address. llvm-svn: 11628
-
Alkis Evlogimenos authored
llvm-svn: 11619
-
- Feb 17, 2004
-
-
Chris Lattner authored
and it was only for debugging in the first place. llvm-svn: 11557
-
Chris Lattner authored
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
-
Chris Lattner authored
llvm-svn: 11535
-
Chris Lattner authored
llvm-svn: 11517
-
Chris Lattner authored
llvm-svn: 11515
-
- Feb 15, 2004
-
-
Alkis Evlogimenos authored
MRegisterInfo::getNumRegs() instead of MRegisterInfo::FirstVirtualRegister. Also use MRegisterInfo::is{Physical,Virtual}Register where appropriate. llvm-svn: 11477
-
- Feb 13, 2004
-
-
Alkis Evlogimenos authored
llvm-svn: 11393
-
Alkis Evlogimenos authored
Whitespace cleanups. llvm-svn: 11389
-
- Feb 12, 2004
-
-
Alkis Evlogimenos authored
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
-
- Feb 10, 2004
-
-
Chris Lattner authored
llvm-svn: 11283
-
Chris Lattner authored
llvm-svn: 11278
-
- Feb 09, 2004
-
-
Chris Lattner authored
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
-
Chris Lattner authored
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
-
- Jan 31, 2004
-
-
Chris Lattner authored
method llvm-svn: 11037
-
- Jan 13, 2004
-
-
Alkis Evlogimenos authored
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
-
- Dec 18, 2003
-
-
Alkis Evlogimenos authored
instead, since this pass doesn't expose any state to its users. llvm-svn: 10520
-
Alkis Evlogimenos authored
llvm-svn: 10513
-
- Dec 14, 2003
-
-
Alkis Evlogimenos authored
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
-
- Dec 13, 2003
-
-
Alkis Evlogimenos authored
llvm-svn: 10444
-
- Dec 05, 2003
-
-
Alkis Evlogimenos authored
this point, the second operand must be a physical register (it cannot be a virtual one). llvm-svn: 10292
-
- Nov 11, 2003
-
-
Brian Gaeke authored
llvm-svn: 9903
-
- Oct 24, 2003
-
-
Chris Lattner authored
llvm-svn: 9496
-
- Oct 20, 2003
-
-
John Criswell authored
Header files will be on the way. llvm-svn: 9298
-
- Oct 08, 2003
-
-
Alkis Evlogimenos authored
and TargetInstrDescriptor::ImplicitUses to always point to a null terminated array and never be null. So there is no need to check for pointer validity when iterating over those sets. Code that looked like: if (const unsigned* AS = TID.ImplicitDefs) { for (int i = 0; AS[i]; ++i) { // use AS[i] } } was changed to: for (const unsigned* AS = TID.ImplicitDefs; *AS; ++AS) { // use *AS } llvm-svn: 8960
-
- Aug 24, 2003
-
-
Chris Lattner authored
llvm-svn: 8095
-
- Aug 17, 2003
-
-
Chris Lattner authored
llvm-svn: 7916
-
- Aug 15, 2003
-
-
Brian Gaeke authored
llvm-svn: 7906
-
- Aug 13, 2003
-
-
Brian Gaeke authored
llvm-svn: 7823
-
- Aug 05, 2003
-
-
Chris Lattner authored
llvm-svn: 7591
-
Chris Lattner authored
llvm-svn: 7588
-
Chris Lattner authored
llvm-svn: 7584
-
Chris Lattner authored
* Add a lot more DEBUG output, which is better structured than before * Fix bug: Jello/2003-08-04-PhysRegLiveFailure.llx llvm-svn: 7583
-
- Aug 03, 2003
-
-
Chris Lattner authored
llvm-svn: 7533
-
Chris Lattner authored
llvm-svn: 7503
-
- Aug 02, 2003
-
-
Chris Lattner authored
llvm-svn: 7497
-