aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target
Commit message (Collapse)AuthorAgeFilesLines
* Make comment lines stick out less.Brian Gaeke2004-05-271-2/+2
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13858 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix PR344: the incorrect remove was being used.Chris Lattner2004-05-262-2/+2
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13790 91177308-0d34-0410-b5e6-96231b3b80d8
* Adding scheduling class.Tanya Lattner2004-05-262-0/+246
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13783 91177308-0d34-0410-b5e6-96231b3b80d8
* Updating my cvs versions. THis is still in progress and much will be changed.Tanya Lattner2004-05-264-157/+299
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13782 91177308-0d34-0410-b5e6-96231b3b80d8
* Add a (not very meaningful) default constructor for AllocInfo objects.Brian Gaeke2004-05-251-4/+8
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13773 91177308-0d34-0410-b5e6-96231b3b80d8
* Convert to SymbolTable's new iteration interface.Reid Spencer2004-05-252-38/+40
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13754 91177308-0d34-0410-b5e6-96231b3b80d8
* Remove use of Type::TypeTy from an assert. It will go away soon.Reid Spencer2004-05-251-1/+0
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13748 91177308-0d34-0410-b5e6-96231b3b80d8
* Add support for accurate garbage collection to the LLVM code generatorsChris Lattner2004-05-234-0/+13
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13696 91177308-0d34-0410-b5e6-96231b3b80d8
* Add some notes to myself, no functional changesChris Lattner2004-05-232-14/+38
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13695 91177308-0d34-0410-b5e6-96231b3b80d8
* minor wording changeChris Lattner2004-05-231-1/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13694 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix a typo in a comment.Brian Gaeke2004-05-231-1/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13643 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix to make the CBE always emit comparisons inline. Hopefully this willChris Lattner2004-05-202-0/+8
| | | | | | | fix the really bad code we're getting on PPC. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13609 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix a bug in outputting branches to constant PCs. Since the PC is supplied asBrian Gaeke2004-05-201-2/+3
| | | | | | | | a full 64-bit address, it must be adjusted to fit in the branch instruction's immediate field. (This is only used in the reoptimizer, for now.) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13608 91177308-0d34-0410-b5e6-96231b3b80d8
* Minor simplification: eliminate a dyn_cast.Brian Gaeke2004-05-191-9/+4
| | | | | | | Fix a typo in a debug message. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13607 91177308-0d34-0410-b5e6-96231b3b80d8
* Don't keep track of references to LLVM BasicBlocks while emitting; useBrian Gaeke2004-05-141-11/+9
| | | | | | | MachineBasicBlocks instead. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13568 91177308-0d34-0410-b5e6-96231b3b80d8
* Support MachineBasicBlock operands on RawFrm instructions.Brian Gaeke2004-05-142-54/+24
| | | | | | | | Get rid of separate numbering for LLVM BasicBlocks; use the automatically generated MachineBasicBlock numbering. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13567 91177308-0d34-0410-b5e6-96231b3b80d8
* Generate branch machine instructions with MachineBasicBlock operands instead ofBrian Gaeke2004-05-142-14/+18
| | | | | | | LLVM BasicBlock operands. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13566 91177308-0d34-0410-b5e6-96231b3b80d8
* Two more improvements for null pointer handling: storing a null pointerChris Lattner2004-05-132-6/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | and passing a null pointer into a function. For this testcase: void %test(int** %X) { store int* null, int** %X call void %test(int** null) ret void } we now generate this: test: sub %ESP, 12 mov %EAX, DWORD PTR [%ESP + 16] mov DWORD PTR [%EAX], 0 mov DWORD PTR [%ESP], 0 call test add %ESP, 12 ret instead of this: test: sub %ESP, 12 mov %EAX, DWORD PTR [%ESP + 16] mov %ECX, 0 mov DWORD PTR [%EAX], %ECX mov %EAX, 0 mov DWORD PTR [%ESP], %EAX call test add %ESP, 12 ret git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13558 91177308-0d34-0410-b5e6-96231b3b80d8
* Second half of my fixed-sized-alloca patch. This folds the LEA to computeChris Lattner2004-05-132-186/+358
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | the alloca address into common operations like loads/stores. In a simple testcase like this (which is just designed to excersize the alloca A, nothing more): int %test(int %X, bool %C) { %A = alloca int store int %X, int* %A store int* %A, int** %G br bool %C, label %T, label %F T: call int %test(int 1, bool false) %V = load int* %A ret int %V F: call int %test(int 123, bool true) %V2 = load int* %A ret int %V2 } We now generate: test: sub %ESP, 12 mov %EAX, DWORD PTR [%ESP + 16] mov %CL, BYTE PTR [%ESP + 20] *** mov DWORD PTR [%ESP + 8], %EAX mov %EAX, OFFSET G lea %EDX, DWORD PTR [%ESP + 8] mov DWORD PTR [%EAX], %EDX test %CL, %CL je .LBB2 # PC rel: F .LBB1: # T mov DWORD PTR [%ESP], 1 mov DWORD PTR [%ESP + 4], 0 call test *** mov %EAX, DWORD PTR [%ESP + 8] add %ESP, 12 ret .LBB2: # F mov DWORD PTR [%ESP], 123 mov DWORD PTR [%ESP + 4], 1 call test *** mov %EAX, DWORD PTR [%ESP + 8] add %ESP, 12 ret Instead of: test: sub %ESP, 20 mov %EAX, DWORD PTR [%ESP + 24] mov %CL, BYTE PTR [%ESP + 28] *** lea %EDX, DWORD PTR [%ESP + 16] *** mov DWORD PTR [%EDX], %EAX mov %EAX, OFFSET G mov DWORD PTR [%EAX], %EDX test %CL, %CL *** mov DWORD PTR [%ESP + 12], %EDX je .LBB2 # PC rel: F .LBB1: # T mov DWORD PTR [%ESP], 1 mov %EAX, 0 mov DWORD PTR [%ESP + 4], %EAX call test *** mov %EAX, DWORD PTR [%ESP + 12] *** mov %EAX, DWORD PTR [%EAX] add %ESP, 20 ret .LBB2: # F mov DWORD PTR [%ESP], 123 mov %EAX, 1 mov DWORD PTR [%ESP + 4], %EAX call test *** mov %EAX, DWORD PTR [%ESP + 12] *** mov %EAX, DWORD PTR [%EAX] add %ESP, 20 ret git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13557 91177308-0d34-0410-b5e6-96231b3b80d8
* Substantially improve code generation for address exposed locals (aka fixedChris Lattner2004-05-132-128/+202
| | | | | | | | | | | | | | | | | | | | | | | | | | | | sized allocas in the entry block). Instead of generating code like this: entry: reg1024 = ESP+1234 ... (much later) *reg1024 = 17 Generate code that looks like this: entry: (no code generated) ... (much later) t = ESP+1234 *t = 17 The advantage being that we DRAMATICALLY reduce the register pressure for these silly temporaries (they were all being spilled to the stack, resulting in very silly code). This is actually a manual implementation of rematerialization :) I have a patch to fold the alloca address computation into loads & stores, which will make this much better still, but just getting this right took way too much time and I'm sleepy. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13554 91177308-0d34-0410-b5e6-96231b3b80d8
* Pass boolean constants into function calls more efficiently, generating:Chris Lattner2004-05-122-2/+14
| | | | | | | | | | | | mov DWORD PTR [%ESP + 4], 1 instead of: mov %EAX, 1 mov DWORD PTR [%ESP + 4], %EAX git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13494 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix a fairly serious pessimizaion that was preventing us from efficientlyChris Lattner2004-05-102-4/+6
| | | | | | | | compiling things like 'add long %X, 1'. The problem is that we were switching the order of the operands for longs even though we can't fold them yet. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13451 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix some comments, avoid sign extending booleans when zero extend works fineChris Lattner2004-05-092-10/+10
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13440 91177308-0d34-0410-b5e6-96231b3b80d8
* Generate more efficient code for casting booleans to integers (no sign ↵Chris Lattner2004-05-092-2/+2
| | | | | | extension required) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13439 91177308-0d34-0410-b5e6-96231b3b80d8
* syntactically loopify natural loops so that the GCC loop optimizer can find ↵Chris Lattner2004-05-092-104/+170
| | | | | | them. This should *dramatically* improve the performance of CBE compiled code on targets that depend on GCC's loop optimizations (like PPC) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13438 91177308-0d34-0410-b5e6-96231b3b80d8
* Do not emit prototypes for setjmp/longjmp, as they are handled speciallyChris Lattner2004-05-092-2/+4
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13437 91177308-0d34-0410-b5e6-96231b3b80d8
* Make the floating point constant pools local to each function, split theChris Lattner2004-05-092-198/+224
| | | | | | | | FindUsedTypes manipulation stuff out to be a seperate pass, and make the main CWriter be a function pass now! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13435 91177308-0d34-0410-b5e6-96231b3b80d8
* Get this looking more like a function pass.Chris Lattner2004-05-092-64/+66
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13433 91177308-0d34-0410-b5e6-96231b3b80d8
* Print all PHI copies for successor blocks before the terminator, whether it ↵Chris Lattner2004-05-092-20/+46
| | | | | | be a conditional branch or switch. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13430 91177308-0d34-0410-b5e6-96231b3b80d8
* Changed CPUResource to allow access to maxnum users.Tanya Lattner2004-05-081-6/+16
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13425 91177308-0d34-0410-b5e6-96231b3b80d8
* Updating my versions of ModuloScheduling in cvs. Still not complete.Tanya Lattner2004-05-084-303/+860
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13424 91177308-0d34-0410-b5e6-96231b3b80d8
* Add support for widening integral casts.Brian Gaeke2004-05-084-136/+304
| | | | | | | | | | | | | | | | | | | Flesh out the SetCC support... which currently ends in a little bit of unfinished code (which is probably completely hilarious) for generating the condition value splitting the basic block up into 4 blocks, like this (clearly a better API is needed for this!): BB cond. branch / / R1=1 R2=0 \ / \ / R=phi(R1,R2) Other minor edits. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13423 91177308-0d34-0410-b5e6-96231b3b80d8
* Add a bunch more branchesBrian Gaeke2004-05-082-8/+24
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13422 91177308-0d34-0410-b5e6-96231b3b80d8
* Flesh out GEP supportBrian Gaeke2004-05-084-12/+212
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13421 91177308-0d34-0410-b5e6-96231b3b80d8
* Add ADD with immediateBrian Gaeke2004-05-082-0/+2
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13420 91177308-0d34-0410-b5e6-96231b3b80d8
* Add forms of CMP, SUBCC, and a few branches, and some comments.Brian Gaeke2004-05-082-0/+26
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13419 91177308-0d34-0410-b5e6-96231b3b80d8
* Add stub support for GEPs.Brian Gaeke2004-05-084-32/+360
| | | | | | | | | | Add support for branches (based loosely on X86/InstSelectSimple). Add support for not visiting phi nodes in the first pass. Add support for loading bools. Flesh out support for stores. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13418 91177308-0d34-0410-b5e6-96231b3b80d8
* Add support for copying bool constants to registers.Brian Gaeke2004-05-074-32/+144
| | | | | | | | | Disable the code that copies long constants to registers - it looks fishy. Implement some simple casts: integral, smaller than longs, and equal-width or narrowing only. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13413 91177308-0d34-0410-b5e6-96231b3b80d8
* Codegen floating point stores of constants into integer instructions. ThisChris Lattner2004-05-072-30/+74
| | | | | | | | | | | | | | | | | | | | allows us to compile: store float 10.0, float* %P into: mov DWORD PTR [%EAX], 1092616192 instead of: .CPItest_0: # float 0x4024000000000000 .long 1092616192 # float 10 ... fld DWORD PTR [.CPItest_0] fstp DWORD PTR [%EAX] git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13409 91177308-0d34-0410-b5e6-96231b3b80d8
* Make comparisons against the null pointer as efficient as integer comparisonsChris Lattner2004-05-072-2/+16
| | | | | | | | | | | | | | against zero. In particular, don't emit: mov %ESI, 0 cmp %ECX, %ESI instead, emit: test %ECX, %ECX git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13407 91177308-0d34-0410-b5e6-96231b3b80d8
* Missing piece of fix for Bug 333Brian Gaeke2004-05-041-1/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13362 91177308-0d34-0410-b5e6-96231b3b80d8
* Correctly mangle function names when they are used as part of aBrian Gaeke2004-05-041-3/+3
| | | | | | | | | | constant pool member's name. This is intended to address Bug 333. Also, fix an anachronistic usage of "M" as a parameter of type Function *. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13357 91177308-0d34-0410-b5e6-96231b3b80d8
* Remove unneeded checkChris Lattner2004-05-042-2/+0
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13355 91177308-0d34-0410-b5e6-96231b3b80d8
* Improve signed division by power of 2 *dramatically* from this:Chris Lattner2004-05-042-18/+126
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | div: mov %EDX, DWORD PTR [%ESP + 4] mov %ECX, 64 mov %EAX, %EDX sar %EDX, 31 idiv %ECX ret to this: div: mov %EAX, DWORD PTR [%ESP + 4] mov %ECX, %EAX sar %ECX, 5 shr %ECX, 26 mov %EDX, %EAX add %EDX, %ECX sar %EAX, 6 ret Note that the intel compiler is currently making this: div: movl 4(%esp), %edx #3.5 movl %edx, %eax #4.14 sarl $5, %eax #4.14 shrl $26, %eax #4.14 addl %edx, %eax #4.14 sarl $6, %eax #4.14 ret #4.14 Which has one less register->register copy. (hint hint alkis :) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13354 91177308-0d34-0410-b5e6-96231b3b80d8
* Improve code generated for integer multiplications by 2,3,5,9Chris Lattner2004-05-042-4/+32
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13342 91177308-0d34-0410-b5e6-96231b3b80d8
* Remove unused #includeChris Lattner2004-05-012-2/+0
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13304 91177308-0d34-0410-b5e6-96231b3b80d8
* Iterate over the Machine CFG that Brian added instead of the LLVM CFG.Chris Lattner2004-05-012-42/+8
| | | | | | | Look at all of the pretty minuses. :) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13303 91177308-0d34-0410-b5e6-96231b3b80d8
* Add a constructor that got lostChris Lattner2004-05-011-0/+3
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13297 91177308-0d34-0410-b5e6-96231b3b80d8
* Removing MachineResource class.Tanya Lattner2004-04-301-1/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13291 91177308-0d34-0410-b5e6-96231b3b80d8
* Make RequiresFPRegKill() take a MachineBasicBlock arg.Brian Gaeke2004-04-282-6/+6
| | | | | | | | In InsertFPRegKills(), just check the MachineBasicBlock for successors instead of its corresponding BasicBlock. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13213 91177308-0d34-0410-b5e6-96231b3b80d8