- Sep 02, 2005
-
-
Chris Lattner authored
llvm-svn: 23206
-
- Mar 10, 2005
-
-
Chris Lattner authored
numbering values in live ranges for physical registers. The alpha backend currently generates code that looks like this: vreg = preg ... preg = vreg use preg ... preg = vreg use preg etc. Because vreg contains the value of preg coming in, each of the copies back into preg contain that initial value as well. In the case of the Alpha, this allows this testcase: void "foo"(int %blah) { store int 5, int *%MyVar store int 12, int* %MyVar2 ret void } to compile to: foo: ldgp $29, 0($27) ldiq $0,5 stl $0,MyVar ldiq $0,12 stl $0,MyVar2 ret $31,($26),1 instead of: foo: ldgp $29, 0($27) bis $29,$29,$0 ldiq $1,5 bis $0,$0,$29 stl $1,MyVar ldiq $1,12 bis $0,$0,$29 stl $1,MyVar2 ret $31,($26),1 This does not seem to have any noticable effect on X86 code. This fixes PR535. llvm-svn: 20536
-
- Dec 07, 2004
-
-
Reid Spencer authored
Make only one print method to avoid overloaded virtual warnings when \ compiled with -Woverloaded-virtual llvm-svn: 18589
-
- Sep 30, 2004
-
-
Chris Lattner authored
* Add const_iterator stuff * Add a print method, which means that I can now call dump() from the debugger. llvm-svn: 16612
-
- Sep 08, 2004
-
-
Alkis Evlogimenos authored
analysis running time from 2.7869secs to 2.5226secs on 176.gcc. llvm-svn: 16244
-
- Aug 27, 2004
-
-
Alkis Evlogimenos authored
llvm-svn: 16060
-
- Aug 04, 2004
-
-
Alkis Evlogimenos authored
llvm-svn: 15490
-
Alkis Evlogimenos authored
llvm-svn: 15489
-
- Jul 24, 2004
-
-
Alkis Evlogimenos authored
LiveInterval>. This saves some space and removes the pointer indirection caused by following the pointer. llvm-svn: 15167
-
Chris Lattner authored
ownership of the intervals. llvm-svn: 15155
-
Chris Lattner authored
make overlapsAliases take pointers instead of references fix indentation llvm-svn: 15153
-
- Jul 23, 2004
-
-
Chris Lattner authored
* Inline some functions * Eliminate some comparisons from the release build This is good for another .3 on gcc. llvm-svn: 15144
-
Chris Lattner authored
llvm-svn: 15137
-
Chris Lattner authored
llvm-svn: 15135
-
Chris Lattner authored
will soon be renamed) into their own file. The new file should not emit DEBUG output or have other side effects. The LiveInterval class also now doesn't know whether its working on registers or some other thing. In the future we will want to use the LiveInterval class and friends to do stack packing. In addition to a code simplification, this will allow us to do it more easily. llvm-svn: 15134
-
Chris Lattner authored
Use an explicit LiveRange class to represent ranges instead of an std::pair. This is a minor cleanup, but is really intended to make a future patch simpler and less invasive. Alkis, could you please take a look at LiveInterval::liveAt? I suspect that you can add an operator<(unsigned) to LiveRange, allowing us to speed up the upper_bound call by quite a bit (this would also apply to other callers of upper/lower_bound). I would do it myself, but I still don't understand that crazy liveAt function, despite the comment. :) Basically I would like to see this: LiveRange dummy(index, index+1); Ranges::const_iterator r = std::upper_bound(ranges.begin(), ranges.end(), dummy); Turn into: Ranges::const_iterator r = std::upper_bound(ranges.begin(), ranges.end(), index); llvm-svn: 15130
-
Chris Lattner authored
interfere. Because these intervals have a single definition, and one of them is a copy instruction, they are always safe to merge even if their lifetimes interfere. This slightly reduces the amount of spill code, for example on 252.eon, from: 12837 spiller - Number of loads added 7604 spiller - Number of stores added 5842 spiller - Number of register spills 18155 liveintervals - Number of identity moves eliminated after coalescing to: 12754 spiller - Number of loads added 7585 spiller - Number of stores added 5803 spiller - Number of register spills 18262 liveintervals - Number of identity moves eliminated after coalescing The much much bigger win would be to merge intervals with multiple definitions (aka phi nodes) but this is not that day. llvm-svn: 15124
-
- Jul 19, 2004
-
-
Chris Lattner authored
llvm-svn: 15003
-
Chris Lattner authored
remove map that is not needed llvm-svn: 14988
-
- Jun 21, 2004
-
-
Chris Lattner authored
existing llvm::Interval class. Patch contributed by Vladimir Prus! http://mail.cs.uiuc.edu/pipermail/llvmbugs/2004-June/000710.html llvm-svn: 14281
-
- May 30, 2004
-
-
Alkis Evlogimenos authored
llvm-svn: 13910
-
Alkis Evlogimenos authored
spills. This allows for more flexibility when allocating registers for spill code. llvm-svn: 13907
-
- May 29, 2004
-
-
Alkis Evlogimenos authored
llvm-svn: 13892
-
- Apr 09, 2004
-
-
Alkis Evlogimenos authored
llvm-svn: 12791
-
- Mar 01, 2004
-
-
Alkis Evlogimenos authored
llvm-svn: 12058
-
- Feb 23, 2004
-
-
Alkis Evlogimenos authored
llvm-svn: 11719
-
- Feb 22, 2004
-
-
Alkis Evlogimenos authored
Also make it less aggressive as the current implementation breaks in some cases. llvm-svn: 11696
-
- Feb 20, 2004
-
-
Alkis Evlogimenos authored
1. LiveIntervals now implement a 4 slot per instruction model. Load, Use, Def and a Store slot. This is required in order to correctly represent caller saved register clobbering on function calls, register reuse in the same instruction (def resues last use) and also spill code added later by the allocator. The previous representation (2 slots per instruction) was insufficient and as a result was causing subtle bugs. 2. Fixes in spill code generation. This was the major cause of failures in the test suite. 3. Linear scan now has core support for folding memory operands. This is untested and not enabled (the live interval update function does not attempt to fold loads/stores in instructions). 4. Lots of improvements in the debugging output of both live intervals and linear scan. Give it a try... it is beautiful :-) In summary the above fixes all the issues with the recent reserved register elimination changes and get the allocator very close to the next big step: folding memory operands. llvm-svn: 11654
-
- Feb 19, 2004
-
-
Alkis Evlogimenos authored
given a register. llvm-svn: 11608
-
- Feb 17, 2004
-
-
Alkis Evlogimenos authored
llvm-svn: 11520
-
- Feb 15, 2004
-
-
Alkis Evlogimenos authored
llvm-svn: 11476
-
- Jan 31, 2004
-
-
Alkis Evlogimenos authored
any test cases :-) llvm-svn: 11032
-
Alkis Evlogimenos authored
llvm-svn: 11029
-
Alkis Evlogimenos authored
Simplification of LiveIntervals::Interval::overlaps() and addition of examples to overlaps() and liveAt() to make them clearer. llvm-svn: 11028
-
- Jan 23, 2004
-
-
Alkis Evlogimenos authored
when joining we need to check if we overlap with the second interval or any of its aliases. Also make joining intervals the default. llvm-svn: 10973
-
Alkis Evlogimenos authored
is a move between two registers, at least one of the registers is virtual and the two live intervals do not overlap. This results in about 40% reduction in intervals, 30% decrease in the register allocators running time and a 20% increase in peephole optimizations (mainly move eliminations). The option can be enabled by passing -join-liveintervals where appropriate. llvm-svn: 10965
-
- Jan 16, 2004
-
-
Alkis Evlogimenos authored
LiveIntervals::Interval::expiredAt() and simplify regalloc code. llvm-svn: 10894
-
Alkis Evlogimenos authored
when we join intervals and one of the two will need to be removed. llvm-svn: 10892
-
- Jan 13, 2004
-
-
Alkis Evlogimenos authored
LiveVariables. llvm-svn: 10830
-
- Dec 28, 2003
-
-
Alkis Evlogimenos authored
which denotes the register we would like to be assigned to (virtual or physical). In register allocation, if this hint exists and we can map it to a physical register (it is either a physical register or it is a virtual register that already got assigned to a physical one) we use that register if it is available instead of a random one in the free pool. llvm-svn: 10634
-