summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
Commit message (Collapse)AuthorAgeFilesLines
* Finegrainify namespacificationChris Lattner2004-01-301-4/+17
| | | | | | Implement LiveVariables::getIndexMachineBasicBlock llvm-svn: 11018
* Give clients of MachineFunctionPrinter the ability to specify a banner andBrian Gaeke2004-01-301-3/+14
| | | | | | choose an ostream. llvm-svn: 11016
* Fix failing test cases with joined live intervals. It turns out thatAlkis Evlogimenos2004-01-231-3/+24
| | | | | | | | | 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
* Add option to join live intervals. Two intervals are joined if thereAlkis Evlogimenos2004-01-222-44/+232
| | | | | | | | | | | | | | 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
* Remove unneeded check. An interval in active, by definition overlapsAlkis Evlogimenos2004-01-221-4/+1
| | | | | | with the current one. llvm-svn: 10959
* Improve debugging output. Remove unneeded virtReg->0 mapping whenAlkis Evlogimenos2004-01-221-20/+31
| | | | | | | | virtReg lives on the stack. Now a virtual register has an entry in the virtual->physical map or the virtual->stack slot map but never in both. llvm-svn: 10958
* Revert previous change. The code was correct...Alkis Evlogimenos2004-01-221-1/+1
| | | | llvm-svn: 10957
* Fix incorrect negatives in LiveIntervals::Interval::liveAt().Alkis Evlogimenos2004-01-221-1/+1
| | | | llvm-svn: 10956
* Moved iterators around.Tanya Lattner2004-01-201-2/+0
| | | | llvm-svn: 10926
* Moved iterators to common file.Tanya Lattner2004-01-201-62/+0
| | | | llvm-svn: 10925
* Handle printing of intervals that are not assign to any physicalAlkis Evlogimenos2004-01-161-1/+1
| | | | | | register yet (2nd try). llvm-svn: 10896
* Handle printing of intervals that are not assign to any physicalAlkis Evlogimenos2004-01-161-6/+7
| | | | | | register yet. llvm-svn: 10895
* Fold open interval ends handling intoAlkis Evlogimenos2004-01-161-10/+4
| | | | | | LiveIntervals::Interval::expiredAt() and simplify regalloc code. llvm-svn: 10894
* Add asserts to previous change.Alkis Evlogimenos2004-01-161-2/+6
| | | | llvm-svn: 10893
* Use a list instead of a vector to store intervals. This will be neededAlkis Evlogimenos2004-01-161-7/+6
| | | | | | when we join intervals and one of the two will need to be removed. llvm-svn: 10892
* Properly update #intervals statistic.Alkis Evlogimenos2004-01-141-0/+2
| | | | llvm-svn: 10847
* Fix bug in LiveIntervals::Interval::overlaps andAlkis Evlogimenos2004-01-141-3/+3
| | | | | | | LiveIntervals::Interval::liveAt. Both were considering the live ranges closed in the end, when they are actually open. llvm-svn: 10835
* Improve debugging output.Alkis Evlogimenos2004-01-141-2/+3
| | | | llvm-svn: 10834
* Fix miscomputation of live intervals. The catch is that registers canAlkis Evlogimenos2004-01-131-0/+17
| | | | | | | be dead at the defining instruction but can only be killed in subsequent ones. llvm-svn: 10833
* Remove allocatable registers vector. It is already provided byAlkis Evlogimenos2004-01-131-21/+2
| | | | | | LiveVariables. llvm-svn: 10830
* Cleanup debugging output.Alkis Evlogimenos2004-01-131-9/+6
| | | | llvm-svn: 10824
* Fix output of live intervals to show correctly its closed, openAlkis Evlogimenos2004-01-131-1/+1
| | | | | | ranges, i.e. [a,b) llvm-svn: 10822
* Remove unneeded check (with the recent change in live variables a useAlkis Evlogimenos2004-01-131-4/+2
| | | | | | of a physical register is always dominated by a def). llvm-svn: 10821
* Indentation and whitespace cleanups.Alkis Evlogimenos2004-01-131-9/+9
| | | | llvm-svn: 10820
* Fix bug introduced by previous commit: check if fixed intervalsAlkis Evlogimenos2004-01-131-0/+3
| | | | | | overlap before adding their spill weight. llvm-svn: 10819
* Correctly compute live variable information for physical registersAlkis Evlogimenos2004-01-133-33/+30
| | | | | | | | | | | | | | 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
* Make LiveVariables::HandlePhysRegUse andAlkis Evlogimenos2004-01-111-21/+11
| | | | | | | | | LiveVariables::HandlePhysRegDef private they use information that is not in memory when LiveVariables finishes the analysis. Also update the TwoAddressInstructionPass to not use this interface. llvm-svn: 10755
* Remove use of llvm/CodeGen/InstrSelection.hChris Lattner2004-01-101-2/+2
| | | | llvm-svn: 10749
* Finegrainify namespacification.Chris Lattner2004-01-091-9/+4
| | | | | | | | This should get hunked over to the Sparc backend, along with MachineCodeForInstruction and a bunch of files in include/llvm/Codegen, but those battles will have to wait for a later time. llvm-svn: 10731
* Move InstrSelection into lib/Target/Sparc, as it's sparc specificChris Lattner2004-01-095-1038/+3
| | | | llvm-svn: 10730
* Move lib/Codegen/RegAlloc into lib/Target/Sparc, as it is sparc specificChris Lattner2004-01-0915-3354/+1
| | | | llvm-svn: 10728
* Add a separate list of fixed intervals. This improves the running timeAlkis Evlogimenos2004-01-071-64/+111
| | | | | | | | | | | | | | | | | | of the register allocator as follows: before after mesa 2.3790 1.5994 vpr 2.6008 1.2078 gcc 1.9840 0.5273 mcf 0.2569 0.0470 eon 1.8468 1.4359 twolf 0.9475 0.2004 burg 1.6807 1.3300 lambda 1.2191 0.3764 Speedups range anyware from 30% to over 400% :-) llvm-svn: 10712
* Minor cleanups.Alkis Evlogimenos2004-01-071-29/+3
| | | | llvm-svn: 10711
* Remove declared but undefined method.Alkis Evlogimenos2004-01-071-5/+0
| | | | llvm-svn: 10710
* Change implementation of LiveIntervals::overlap(). This results in aAlkis Evlogimenos2004-01-071-10/+22
| | | | | | 30-50% decrease in running time of the linear scan register allocator. llvm-svn: 10707
* Remove simple coalescing.Alkis Evlogimenos2004-01-052-26/+0
| | | | llvm-svn: 10695
* fix warningChris Lattner2004-01-051-1/+1
| | | | llvm-svn: 10692
* Currently we cannot handle two-address instructions of the form:Alkis Evlogimenos2004-01-051-0/+9
| | | | | | | A = B op C where A == C, but this cannot really occur in practice because of SSA form. Add an assert to check that just to be safe. llvm-svn: 10682
* Update description.Alkis Evlogimenos2004-01-041-5/+10
| | | | llvm-svn: 10681
* Clean up a lot of the code I added yesterday by exposing the IntrinsicLoweringChris Lattner2003-12-281-8/+4
| | | | | | implementation from the TargetMachine directly. llvm-svn: 10636
* Reserve ECX and EDI instead of EBX and EDI. Since EBX is a calleeAlkis Evlogimenos2003-12-281-8/+8
| | | | | | | | saved register it has a longer free range than ECX (which is defined every time there is a fnuction call) which makes ECX a better register to reserve. llvm-svn: 10635
* Add coalescing to register allocator. A hint is added to each intervalAlkis Evlogimenos2003-12-282-2/+29
| | | | | | | | | | | 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
* Whoops, don't try to lower non intrinsic callsChris Lattner2003-12-281-0/+1
| | | | llvm-svn: 10632
* Use the intrinsic lowering functionalityChris Lattner2003-12-281-15/+44
| | | | llvm-svn: 10626
* Move into the VMCore libraryChris Lattner2003-12-281-57/+0
| | | | llvm-svn: 10623
* Implement the default implementation of the intrinsic lowering classChris Lattner2003-12-281-0/+57
| | | | llvm-svn: 10621
* finegrainify namespacificationChris Lattner2003-12-281-9/+7
| | | | | | minor cleanups llvm-svn: 10619
* Improve debugging output when choosing a register to spill.Alkis Evlogimenos2003-12-241-8/+3
| | | | llvm-svn: 10604
* Do a separate pass to compute spill weights because doing it inlineAlkis Evlogimenos2003-12-241-10/+27
| | | | | | | | with live intervals was missing registers that were used before they were defined (in the arbitrary order live intervals numbers instructions). llvm-svn: 10603
* Change the way free regusters are computed and perform betterAlkis Evlogimenos2003-12-231-130/+77
| | | | | | allocation in the presence of preallocated intervals. llvm-svn: 10595
OpenPOWER on IntegriCloud