aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen
AgeCommit message (Collapse)Author
2004-08-16Move MachineCodeForInstruction.h and MachineFunctionInfo.h into ↵Chris Lattner
lib/Target/SparcV9 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15830 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-16Nuke this fileChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15829 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-16Fold MachineInstrAnnot.cpp into this fileChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15828 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-16Add a note that people shouldn't use MachineFunctionInfo.Brian Gaeke
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15823 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-15Reduce usage of MRegisterInfo::getRegClassChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15784 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-15The insertion method returns void nowChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15779 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-15Nuke ifdef'd out codeChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15777 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-15Stop using CreateStackObject(RegClass*)Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15775 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-15These methods no longer take a TargetRegisterClass* operand.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15774 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-15Make this compile on gc 3.4.1 (static_cast to non-const type was notAlkis Evlogimenos
allowed). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15766 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-14Elminiate MachineFunction& argument from eliminateFrameIndexNate Begeman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15736 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-12Split saveCallerSavedRegisters into two methods for clarity, and add comments.Chris Lattner
Add support for targets that must spill certain physregs at certain locations. Patch contributed by Nate Begeman, slightly hacked by me. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15701 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-12Forward substitute some constants into their usersChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15693 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-12The only target that uses this code (v9) always has argsOnStackHaveFixedSizeChris Lattner
set to true (obviously) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15692 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-07Get rid of a warning when compiling optimized. Uninitialized variable hasReid Spencer
been initialized. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15565 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-07Ok get rid of the REST of the tabsChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15564 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-07Death to tabsChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15563 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-04Clean up whitespace.Alkis Evlogimenos
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15490 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-04Convert indentation to 2 spaces.Alkis Evlogimenos
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15489 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-04Include SparcV9TmpInstr.h to pick up the def. of TmpInstruction,Brian Gaeke
instead of InstrSelection.h, which is dead. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15476 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-04Tighten up some whitespace. Include SparcV9TmpInstr.h to pick upBrian Gaeke
the def. of TmpInstruction, instead of InstrSelection.h, which is dead. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15475 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-04Squelch warnings in release modeChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15460 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-02Add #include <cstdlib> and abort() to silence a warningMisha Brukman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15413 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-02* ceil() requires #include <cmath> for compilationMisha Brukman
* Alphabetize #includes * Fix some lines to fit within 80 cols git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15412 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-01Adding ModuloScheduling so that it compiles for everyone.Tanya Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15408 91177308-0d34-0410-b5e6-96231b3b80d8
2004-08-01Dereferencing end() is bad.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15402 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-31Make OptimizeBlock take a MachineFunction::iterator instead of aAlkis Evlogimenos
MachineBasicBlock* as a parameter so that nxext() and prior() helper functions can work naturally on it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15376 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-31Next on a pointer increments the pointer, not an iteratorChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15375 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-31Use next() helper to make code more readable. UseAlkis Evlogimenos
MachineFunction::iterator instead of MachineBasicBlock* to avoid dereferencing end iterators. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15373 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-31Use MachineFunction::iterator instead of a MachineBasicBlock* becauseAlkis Evlogimenos
FallThrough maybe == to MF.end(). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15372 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-31Implement a simple target-independent CFG cleanup passChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15368 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-30Updated ModuloScheduling. It makes it all the wya through register ↵Tanya Lattner
allocation on the new code!! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15351 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-29Convert a few assertions with side-effects into regular old runtime checks.Brian Gaeke
These side-effects seem to make a difference when using llc -march=sparcv9 in Release mode (i.e., with -DNDEBUG); when they are left out, lots of instructions just get dropped on the floor, because they never end up in the schedule. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15339 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-29Fix #includes of i*.h => Instructions.h as per PR403.Misha Brukman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15334 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-29Fix #includes of i*.h => Instructions.h as per PR403:Chris Lattner
http://llvm.cs.uiuc.edu/PR403 . git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15333 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-29Fix #includes of i*.h => Instructions.h as per PR403:Chris Lattner
http://llvm.cs.uiuc.edu/PR403 . git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15331 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-28TargetInstrInfo::hasOperandInterlock() is always true, because it isBrian Gaeke
never overridden by any target. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15308 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-25Add some comments to the backtracking code.Alkis Evlogimenos
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15200 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-25Fix the sense of joinableChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15196 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-25This patch makes use of the infrastructure implemented before to safely andChris Lattner
aggressively coallesce live ranges even if they overlap. Consider this LLVM code for example: int %test(int %X) { %Y = mul int %X, 1 ;; Codegens to Y = X %Z = add int %X, %Y ret int %Z } The mul is just there to get a copy into the code stream. This produces this machine code: (0x869e5a8, LLVM BB @0x869b9a0): %reg1024 = mov <fi#-2>, 1, %NOREG, 0 ;; "X" %reg1025 = mov %reg1024 ;; "Y" (subsumed by X) %reg1026 = add %reg1024, %reg1025 %EAX = mov %reg1026 ret Note that the life times of reg1024 and reg1025 overlap, even though they contain the same value. This results in this machine code: test: mov %EAX, DWORD PTR [%ESP + 4] mov %ECX, %EAX add %EAX, %ECX ret Another, worse case involves loops and PHI nodes. Consider this trivial loop: testcase: int %test2(int %X) { entry: br label %Loop Loop: %Y = phi int [%X, %entry], [%Z, %Loop] %Z = add int %Y, 1 %cond = seteq int %Z, 100 br bool %cond, label %Out, label %Loop Out: ret int %Z } Because of interactions between the PHI elimination pass and the register allocator, this got compiled to this code: test2: mov %ECX, DWORD PTR [%ESP + 4] .LBBtest2_1: *** mov %EAX, %ECX inc %EAX cmp %EAX, 100 *** mov %ECX, %EAX jne .LBBtest2_1 ret Or on powerpc, this code: _test2: mflr r0 stw r0, 8(r1) stwu r1, -60(r1) .LBB_test2_1: addi r2, r3, 1 cmpwi cr0, r2, 100 *** or r3, r2, r2 bne cr0, .LBB_test2_1 *** or r3, r2, r2 lwz r0, 68(r1) mtlr r0 addi r1, r1, 60 blr 0 With this improvement in place, we now generate this code for these two testcases, which is what we want: test: mov %EAX, DWORD PTR [%ESP + 4] add %EAX, %EAX ret test2: mov %EAX, DWORD PTR [%ESP + 4] .LBBtest2_1: inc %EAX cmp %EAX, 100 jne .LBBtest2_1 # Loop ret Or on PPC: _test2: mflr r0 stw r0, 8(r1) stwu r1, -60(r1) .LBB_test2_1: addi r3, r3, 1 cmpwi cr0, r3, 100 bne cr0, .LBB_test2_1 lwz r0, 68(r1) mtlr r0 addi r1, r1, 60 blr 0 Static numbers for spill code loads/stores/reg-reg copies (smaller is better): em3d: before: 47/25/26 after: 44/22/24 164.gzip: before: 433/245/310 after: 403/231/278 175.vpr: before: 3721/2189/1581 after: 4144/2081/1423 176.gcc: before: 26195/8866/9235 after: 25942/8082/8275 186.crafty: before: 4295/2587/3079 after: 4119/2519/2916 252.eon: before: 12754/7585/5803 after: 12508/7425/5643 256.bzip2: before: 463/226/315 after: 482:241/309 Runtime perf number samples on X86: gzip: before: 41.09 after: 39.86 bzip2: runtime: before: 56.71s after: 57.07s gcc: before: 6.16 after: 6.12 eon: before: 2.03s after: 2.00s git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15194 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-25Make a method const, no functionality changesChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15193 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-25Fix a bug where we incorrectly value numbered the first PHI definition theChris Lattner
same as the PHI use. This is not correct as the PHI use value is different depending on which branch is taken. This fixes espresso with aggressive coallescing, and perhaps others. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15189 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-25Fix a bug in the range removerChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15188 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-25Add debugging output for joining assignmentsChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15187 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-24Remove implementation of operator= and make it private so that it isAlkis Evlogimenos
not used accidentally. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15172 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-24Change std::map<unsigned, LiveInterval*> into a std::map<unsigned,Alkis Evlogimenos
LiveInterval>. This saves some space and removes the pointer indirection caused by following the pointer. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15167 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-24whoops, didn't mean to remove thisChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15157 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-24In the joiner, merge the small interval into the large interval. This restoresChris Lattner
us back to taking about 10.5s on gcc, instead of taking 15.6s! The net result is that my big patches have hand no significant effect on compile time or code quality. heh. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15156 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-24Completely eliminate the intervals_ list. instead, the r2iMap_ maintainsChris Lattner
ownership of the intervals. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15155 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-24Big change to compute logical value numbers for each LiveRange added to anChris Lattner
Interval. This generalizes the isDefinedOnce mechanism that we used before to help us coallesce ranges that overlap. As part of this, every logical range with a different value is assigned a different number in the interval. For example, for code that looks like this: 0 X = ... 4 X += ... ... N = X We now generate a live interval that contains two ranges: [2,6:0),[6,?:1) reflecting the fact that there are two different values in the range at different positions in the code. Currently we are not using this information at all, so this just slows down liveintervals. In the future, this will change. Note that this change also substantially refactors the joinIntervalsInMachineBB method to merge the cases for virt-virt and phys-virt joining into a single case, adds comments, and makes the code a bit easier to follow. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15154 91177308-0d34-0410-b5e6-96231b3b80d8