summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
Commit message (Collapse)AuthorAgeFilesLines
* Move this code to lib/Target/SparcV9/MachineFunctionInfo.cppChris Lattner2004-08-161-158/+1
| | | | llvm-svn: 15834
* This file is moving to lib/Target/SparcV9Chris Lattner2004-08-161-119/+0
| | | | llvm-svn: 15833
* Move MachineCodeForInstruction.h and MachineFunctionInfo.h into ↵Chris Lattner2004-08-165-9/+8
| | | | | | lib/Target/SparcV9 llvm-svn: 15830
* Nuke this fileChris Lattner2004-08-161-72/+0
| | | | llvm-svn: 15829
* Fold MachineInstrAnnot.cpp into this fileChris Lattner2004-08-161-0/+56
| | | | llvm-svn: 15828
* Add a note that people shouldn't use MachineFunctionInfo.Brian Gaeke2004-08-161-0/+2
| | | | llvm-svn: 15823
* Reduce usage of MRegisterInfo::getRegClassChris Lattner2004-08-152-3/+3
| | | | llvm-svn: 15784
* The insertion method returns void nowChris Lattner2004-08-151-5/+1
| | | | llvm-svn: 15779
* Nuke ifdef'd out codeChris Lattner2004-08-151-33/+0
| | | | llvm-svn: 15777
* Stop using CreateStackObject(RegClass*)Chris Lattner2004-08-155-9/+8
| | | | llvm-svn: 15775
* These methods no longer take a TargetRegisterClass* operand.Chris Lattner2004-08-154-18/+11
| | | | llvm-svn: 15774
* Make this compile on gc 3.4.1 (static_cast to non-const type was notAlkis Evlogimenos2004-08-151-2/+2
| | | | | | allowed). llvm-svn: 15766
* Elminiate MachineFunction& argument from eliminateFrameIndexNate Begeman2004-08-141-1/+1
| | | | llvm-svn: 15736
* Split saveCallerSavedRegisters into two methods for clarity, and add comments.Chris Lattner2004-08-121-9/+52
| | | | | | | | Add support for targets that must spill certain physregs at certain locations. Patch contributed by Nate Begeman, slightly hacked by me. llvm-svn: 15701
* Forward substitute some constants into their usersChris Lattner2004-08-121-5/+2
| | | | llvm-svn: 15693
* The only target that uses this code (v9) always has argsOnStackHaveFixedSizeChris Lattner2004-08-121-16/+1
| | | | | | set to true (obviously) llvm-svn: 15692
* Get rid of a warning when compiling optimized. Uninitialized variable hasReid Spencer2004-08-071-1/+1
| | | | | | been initialized. llvm-svn: 15565
* Ok get rid of the REST of the tabsChris Lattner2004-08-071-11/+11
| | | | llvm-svn: 15564
* Death to tabsChris Lattner2004-08-071-14/+14
| | | | llvm-svn: 15563
* Clean up whitespace.Alkis Evlogimenos2004-08-042-16/+15
| | | | llvm-svn: 15490
* Convert indentation to 2 spaces.Alkis Evlogimenos2004-08-044-1380/+1379
| | | | llvm-svn: 15489
* Include SparcV9TmpInstr.h to pick up the def. of TmpInstruction,Brian Gaeke2004-08-041-1/+1
| | | | | | instead of InstrSelection.h, which is dead. llvm-svn: 15476
* Tighten up some whitespace. Include SparcV9TmpInstr.h to pick upBrian Gaeke2004-08-041-10/+4
| | | | | | | the def. of TmpInstruction, instead of InstrSelection.h, which is dead. llvm-svn: 15475
* Squelch warnings in release modeChris Lattner2004-08-041-3/+3
| | | | llvm-svn: 15460
* Add #include <cstdlib> and abort() to silence a warningMisha Brukman2004-08-021-5/+6
| | | | llvm-svn: 15413
* * ceil() requires #include <cmath> for compilationMisha Brukman2004-08-021-3/+4
| | | | | | | * Alphabetize #includes * Fix some lines to fit within 80 cols llvm-svn: 15412
* Adding ModuloScheduling so that it compiles for everyone.Tanya Lattner2004-08-011-1/+1
| | | | llvm-svn: 15408
* Dereferencing end() is bad.Chris Lattner2004-08-011-1/+1
| | | | llvm-svn: 15402
* Make OptimizeBlock take a MachineFunction::iterator instead of aAlkis Evlogimenos2004-07-311-4/+4
| | | | | | | MachineBasicBlock* as a parameter so that nxext() and prior() helper functions can work naturally on it. llvm-svn: 15376
* Next on a pointer increments the pointer, not an iteratorChris Lattner2004-07-311-1/+1
| | | | llvm-svn: 15375
* Use next() helper to make code more readable. UseAlkis Evlogimenos2004-07-311-4/+6
| | | | | | | MachineFunction::iterator instead of MachineBasicBlock* to avoid dereferencing end iterators. llvm-svn: 15373
* Use MachineFunction::iterator instead of a MachineBasicBlock* becauseAlkis Evlogimenos2004-07-311-2/+3
| | | | | | FallThrough maybe == to MF.end(). llvm-svn: 15372
* Implement a simple target-independent CFG cleanup passChris Lattner2004-07-311-0/+201
| | | | llvm-svn: 15368
* Updated ModuloScheduling. It makes it all the wya through register ↵Tanya Lattner2004-07-304-294/+741
| | | | | | allocation on the new code!! llvm-svn: 15351
* Convert a few assertions with side-effects into regular old runtime checks.Brian Gaeke2004-07-291-5/+8
| | | | | | | | | 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. llvm-svn: 15339
* Fix #includes of i*.h => Instructions.h as per PR403.Misha Brukman2004-07-293-3/+3
| | | | llvm-svn: 15334
* Fix #includes of i*.h => Instructions.h as per PR403:Chris Lattner2004-07-291-1/+1
| | | | | | http://llvm.cs.uiuc.edu/PR403 . llvm-svn: 15333
* Fix #includes of i*.h => Instructions.h as per PR403:Chris Lattner2004-07-291-1/+1
| | | | | | http://llvm.cs.uiuc.edu/PR403 . llvm-svn: 15331
* TargetInstrInfo::hasOperandInterlock() is always true, because it isBrian Gaeke2004-07-281-10/+1
| | | | | | never overridden by any target. llvm-svn: 15308
* Add some comments to the backtracking code.Alkis Evlogimenos2004-07-251-2/+17
| | | | llvm-svn: 15200
* Fix the sense of joinableChris Lattner2004-07-252-5/+5
| | | | llvm-svn: 15196
* This patch makes use of the infrastructure implemented before to safely andChris Lattner2004-07-251-1/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 llvm-svn: 15194
* Make a method const, no functionality changesChris Lattner2004-07-252-6/+6
| | | | llvm-svn: 15193
* Fix a bug where we incorrectly value numbered the first PHI definition theChris Lattner2004-07-251-3/+26
| | | | | | | | 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. llvm-svn: 15189
* Fix a bug in the range removerChris Lattner2004-07-251-1/+1
| | | | llvm-svn: 15188
* Add debugging output for joining assignmentsChris Lattner2004-07-251-0/+5
| | | | llvm-svn: 15187
* Remove implementation of operator= and make it private so that it isAlkis Evlogimenos2004-07-241-8/+1
| | | | | | not used accidentally. llvm-svn: 15172
* Change std::map<unsigned, LiveInterval*> into a std::map<unsigned,Alkis Evlogimenos2004-07-246-35/+49
| | | | | | | LiveInterval>. This saves some space and removes the pointer indirection caused by following the pointer. llvm-svn: 15167
* whoops, didn't mean to remove thisChris Lattner2004-07-241-1/+3
| | | | llvm-svn: 15157
* In the joiner, merge the small interval into the large interval. This restoresChris Lattner2004-07-241-0/+9
| | | | | | | | 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. llvm-svn: 15156
OpenPOWER on IntegriCloud