summaryrefslogtreecommitdiffstats
path: root/llvm/lib
Commit message (Collapse)AuthorAgeFilesLines
* Inline both direct and indirect callees in the CBU phase becauseVikram S. Adve2004-05-231-34/+34
| | | | | | a direct callee may have indirect callees and so may have changed. llvm-svn: 13649
* Fix a typo in a comment.Brian Gaeke2004-05-231-1/+1
| | | | llvm-svn: 13643
* Fix for PR340: Verifier misses malformed switch instructionChris Lattner2004-05-211-0/+12
| | | | llvm-svn: 13618
* Fix to make the CBE always emit comparisons inline. Hopefully this willChris Lattner2004-05-201-0/+4
| | | | | | fix the really bad code we're getting on PPC. llvm-svn: 13609
* 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.) llvm-svn: 13608
* Minor simplification: eliminate a dyn_cast.Brian Gaeke2004-05-191-9/+4
| | | | | | Fix a typo in a debug message. llvm-svn: 13607
* Add CloneTraceInto(), which is based on (and has mostly the sameBrian Gaeke2004-05-191-0/+33
| | | | | | effects as) CloneFunctionInto(). llvm-svn: 13601
* Move RemapInstruction() to ValueMapper, so that it can be shared withBrian Gaeke2004-05-193-22/+26
| | | | | | | | CloneTrace, and because it is primarily an operation on ValueMaps. It is now a global (non-static) function which can be pulled in using ValueMapper.h. llvm-svn: 13600
* Fold two assertions with backwards error messages into one with aBrian Gaeke2004-05-171-6/+3
| | | | | | correct error message. llvm-svn: 13590
* Clean up this pass somewhat:Brian Gaeke2004-05-141-42/+38
| | | | | | | | | | | | Add better comments, including a better head-of-file comment. Prune #includes. Fix a FIXME that Chris put here by using doInitialization(). Use DEBUG() to print out debug msgs. Give names to basic blocks inserted by this pass. Expand tabs. Use InsertProfilingInitCall() from ProfilingUtils to insert the initialize call. llvm-svn: 13581
* Don't keep track of references to LLVM BasicBlocks while emitting; useBrian Gaeke2004-05-141-11/+9
| | | | | | MachineBasicBlocks instead. llvm-svn: 13568
* Support MachineBasicBlock operands on RawFrm instructions.Brian Gaeke2004-05-141-27/+12
| | | | | | | Get rid of separate numbering for LLVM BasicBlocks; use the automatically generated MachineBasicBlock numbering. llvm-svn: 13567
* Generate branch machine instructions with MachineBasicBlock operands instead ofBrian Gaeke2004-05-141-7/+9
| | | | | | LLVM BasicBlock operands. llvm-svn: 13566
* This was not meant to be committedChris Lattner2004-05-131-7/+0
| | | | llvm-svn: 13565
* Fix a nasty bug that caused us to unroll EXTREMELY large loops due to overflowChris Lattner2004-05-132-3/+10
| | | | | | | | | | | | | | | | | | | | in the size calculation. This is not something you want to see: Loop Unroll: F[main] Loop %no_exit Loop Size = 2 Trip Count = 2147483648 - UNROLLING! The problem was that 2*2147483648 == 0. Now we get: Loop Unroll: F[main] Loop %no_exit Loop Size = 2 Trip Count = 2147483648 - TOO LARGE: 4294967296>100 Thanks to some anonymous person playing with the demo page that repeatedly caused zion to go into swapping land. That's one way to ensure you'll get a quick bugfix. :) Testcase here: Transforms/LoopUnroll/2004-05-13-DontUnrollTooMuch.ll llvm-svn: 13564
* Two more improvements for null pointer handling: storing a null pointerChris Lattner2004-05-131-3/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 llvm-svn: 13558
* Second half of my fixed-sized-alloca patch. This folds the LEA to computeChris Lattner2004-05-131-93/+179
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 llvm-svn: 13557
* Substantially improve code generation for address exposed locals (aka fixedChris Lattner2004-05-131-64/+101
| | | | | | | | | | | | | | | | | | | | | | | | | | | 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. llvm-svn: 13554
* Fix a really nasty bug from my changes on Monday to PHIElim. These changesChris Lattner2004-05-121-11/+19
| | | | | | | | broke obsequi and a lot of other things. It all boiled down to MBB being overloaded in an inner scope and me confusing it with the one in the outer scope. Ugh! llvm-svn: 13517
* Start NextMBBNumber out at zero.Brian Gaeke2004-05-121-1/+1
| | | | llvm-svn: 13515
* Add non-const MachineBasicBlock::getParent() accessor method.Brian Gaeke2004-05-121-0/+19
| | | | | | | | MBBs start out as #-1. When a MBB is added to a MachineFunction, it gets the next available unique MBB number. If it is removed from a MachineFunction, it goes back to being #-1. llvm-svn: 13514
* Pass boolean constants into function calls more efficiently, generating:Chris Lattner2004-05-121-1/+7
| | | | | | | | | | | mov DWORD PTR [%ESP + 4], 1 instead of: mov %EAX, 1 mov DWORD PTR [%ESP + 4], %EAX llvm-svn: 13494
* Do not pass in the same argument to the extracted function more than once, andChris Lattner2004-05-121-1/+8
| | | | | | give the extracted function a more useful name than just foo_code. llvm-svn: 13493
* Implement support for code extracting basic blocks that have a returnChris Lattner2004-05-121-2/+12
| | | | | | instruction in them. llvm-svn: 13490
* Implement splitting of PHI nodes, allowing block extraction of BB's that haveChris Lattner2004-05-121-7/+96
| | | | | | | | | | PHI node entries from multiple outside-the-region blocks. This also fixes extraction of the entry block in a function. Yaay. This has successfully block extracted all (but one) block from the score_move function in obsequi (out of 33). Hrm, I wonder which block the bug is in. :) llvm-svn: 13489
* * Pull some code out into the definedInRegion/definedInCaller methodsChris Lattner2004-05-121-78/+78
| | | | | | | | | | | | | | | | * Add a stub for the severSplitPHINodes which will allow us to bbextract bb's with PHI nodes in them soon. * Remove unused arguments from findInputsOutputs * Dramatically simplify the code in findInputsOutputs. In particular, nothing really cares whether or not a PHI node is using something. * Move moveCodeToFunction to after emitCallAndSwitchStatement as that's the order they get called. * Fix a bug where we would code extract a region that included a call to vastart. Like 'alloca', calls to vastart must stay in the function that they are defined in. * Add some comments. llvm-svn: 13482
* Generate substantially better code when there are a limited number of exitsChris Lattner2004-05-121-22/+61
| | | | | | | | | | | from the extracted region. If the return has 0 or 1 exit blocks, the new function returns void. If it has 2 exits, it returns bool, otherwise it returns a ushort as before. This allows us to use a conditional branch instruction when there are two exit blocks, as often happens during block extraction. llvm-svn: 13481
* Two minor improvements:Chris Lattner2004-05-121-18/+14
| | | | | | | | | | | | 1. Get rid of the silly abort block. When doing bb extraction, we get one abort block for every block extracted, which is kinda annoying. 2. If the switch ends up having a single destination, turn it into an unconditional branch. I would like to add support for conditional branches, but to do this we will want to have the function return a bool instead of a ushort. llvm-svn: 13478
* Switch this from using an std::map to using a DenseMap. This speeds upChris Lattner2004-05-101-6/+5
| | | | | | phi-elimination from 0.6 to 0.54s on kc++. llvm-svn: 13454
* Use a new VRegPHIUseCount to compute uses of PHI values by other phi valuesChris Lattner2004-05-101-14/+21
| | | | | | | in the basic block being processed. This fixes PhiElimination on kimwitu++ from taking 105s to taking a much more reasonable 0.6s (in a debug build). llvm-svn: 13453
* Now that we use an ilist of machine instructions, iterators are more robustChris Lattner2004-05-101-5/+8
| | | | | | | | | than before. Because this is the case, we can compute the first non-phi instruction once when de-phi'ing a block. This shaves ~4s off of phielimination of _Z7yyparsev in kimwitu++ from 109s -> 105s. There are still much more important gains to come. llvm-svn: 13452
* Fix a fairly serious pessimizaion that was preventing us from efficientlyChris Lattner2004-05-101-2/+3
| | | | | | | 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. llvm-svn: 13451
* Patch to fix PR337. Make sure to mark all aliased physical registers as usedChris Lattner2004-05-101-3/+8
| | | | | | | | | | | | | when we see a read of a register. This is important in cases like: AL = ... AH = ... = AX The read of AX must make both the AL and AH defs live until the use. llvm-svn: 13444
* Fix some comments, avoid sign extending booleans when zero extend works fineChris Lattner2004-05-091-5/+5
| | | | llvm-svn: 13440
* Generate more efficient code for casting booleans to integers (no sign ↵Chris Lattner2004-05-091-1/+1
| | | | | | extension required) llvm-svn: 13439
* syntactically loopify natural loops so that the GCC loop optimizer can find ↵Chris Lattner2004-05-091-52/+85
| | | | | | them. This should *dramatically* improve the performance of CBE compiled code on targets that depend on GCC's loop optimizations (like PPC) llvm-svn: 13438
* Do not emit prototypes for setjmp/longjmp, as they are handled speciallyChris Lattner2004-05-091-1/+2
| | | | llvm-svn: 13437
* Fine grainify namespacificationChris Lattner2004-05-091-4/+1
| | | | llvm-svn: 13436
* Make the floating point constant pools local to each function, split theChris Lattner2004-05-091-99/+112
| | | | | | | FindUsedTypes manipulation stuff out to be a seperate pass, and make the main CWriter be a function pass now! llvm-svn: 13435
* Get this looking more like a function pass.Chris Lattner2004-05-091-32/+33
| | | | llvm-svn: 13433
* Implement the AddPrototypes methodChris Lattner2004-05-091-1/+43
| | | | llvm-svn: 13432
* Print all PHI copies for successor blocks before the terminator, whether it ↵Chris Lattner2004-05-091-10/+23
| | | | | | be a conditional branch or switch. llvm-svn: 13430
* Fix stupid bug in my checkin yesterdayChris Lattner2004-05-081-2/+1
| | | | llvm-svn: 13429
* Changed CPUResource to allow access to maxnum users.Tanya Lattner2004-05-081-6/+16
| | | | llvm-svn: 13425
* Updating my versions of ModuloScheduling in cvs. Still not complete.Tanya Lattner2004-05-084-303/+860
| | | | llvm-svn: 13424
* Add support for widening integral casts.Brian Gaeke2004-05-081-34/+76
| | | | | | | | | | | | | | | | | | 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. llvm-svn: 13423
* Add a bunch more branchesBrian Gaeke2004-05-081-4/+12
| | | | llvm-svn: 13422
* Flesh out GEP supportBrian Gaeke2004-05-081-3/+53
| | | | llvm-svn: 13421
* Add ADD with immediateBrian Gaeke2004-05-081-0/+1
| | | | llvm-svn: 13420
* Add forms of CMP, SUBCC, and a few branches, and some comments.Brian Gaeke2004-05-081-0/+13
| | | | llvm-svn: 13419
OpenPOWER on IntegriCloud