summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
Commit message (Collapse)AuthorAgeFilesLines
* Fix several bugs in the loop extractor. In particular, subloops were neverChris Lattner2004-03-151-8/+48
| | | | | | | extracted, and a function that contained a single top-level loop never had the loop extracted, regardless of how much non-loop code there was. llvm-svn: 12403
* No correctness fixes here, just minor qoi fixes:Chris Lattner2004-03-141-30/+26
| | | | | | | | | | | | | * Don't insert a branch to the switch instruction after the call, just make it a single block. * Insert the new alloca instructions in the entry block of the original function instead of having them execute dynamically * Don't make the default edge of the switch instruction go back to the switch. The loop extractor shouldn't create new loops! * Give meaningful names to the alloca slots and the reload instructions * Some minor code simplifications llvm-svn: 12402
* Simplify code a bit, and fix bug CodeExtractor/2004-03-14-NoSwitchSupport.llChris Lattner2004-03-141-62/+34
| | | | | | | | | | This also implements a two minor improvements: * Don't insert live-out stores IN the region, insert them on the code path that exits the region * If the region is exited to the same block from multiple paths, share the switch statement entry, live-out store code, and the basic block. llvm-svn: 12401
* Simplify the code a bit by making the collection of basic blocks to extractChris Lattner2004-03-141-57/+39
| | | | | | | a member of the class. While we're at it, turn the collection into a set instead of a vector to improve efficiency and make queries simpler. llvm-svn: 12400
* Split into two passes. Now there is the general loop extractor, usable onChris Lattner2004-03-141-6/+24
| | | | | | the command line, and the single loop extractor, usable by bugpoint llvm-svn: 12390
* Passes don't print stuff!Chris Lattner2004-03-141-2/+0
| | | | llvm-svn: 12385
* Do not create empty basic blocks when the lowerswitch pass expects blocks toChris Lattner2004-03-141-5/+2
| | | | | | be non-empty! This fixes LowerSwitch/2004-03-13-SwitchIsDefaultCrash.ll llvm-svn: 12384
* Minor random cleanupsChris Lattner2004-03-141-9/+7
| | | | llvm-svn: 12382
* FunctionPass's should not define their own 'run' method.Chris Lattner2004-03-141-8/+2
| | | | | | | Require 'simplified' loops, not just raw natural loops. This fixes CodeExtractor/2004-03-13-LoopExtractorCrash.ll llvm-svn: 12381
* If a block is dead, dominators will not be calculated for it. Because of thisChris Lattner2004-03-141-2/+33
| | | | | | | | loop information won't see it, and we could have unreachable blocks pointing to the non-header node of blocks in a natural loop. This isn't tidy, so have the loopsimplify pass clean it up. llvm-svn: 12380
* Verify functions as they are produced if -debug is specified. ReduceChris Lattner2004-03-141-6/+5
| | | | | | curly braceage llvm-svn: 12378
* Move prototype to IPO.h instead of Scalar.hChris Lattner2004-03-141-3/+2
| | | | | | | Make sure that the file interface header (IPO.h) is included first remove dead #incldue llvm-svn: 12375
* Indent anon namespace properly, add copyright blockChris Lattner2004-03-141-19/+20
| | | | llvm-svn: 12373
* Move to the IPO library. Utils shouldn't contain passes.Chris Lattner2004-03-141-0/+0
| | | | llvm-svn: 12372
* DemoteRegToStack got moved from DemoteRegToStack.h to Local.hChris Lattner2004-03-143-6/+6
| | | | llvm-svn: 12368
* Add some debugging outputChris Lattner2004-03-131-1/+8
| | | | | | | Fix InstCombine/2004-03-13-InstCombineInfLoop.ll which caused an infinite loop compiling (I think) povray. llvm-svn: 12365
* This change makes two big adjustments.Chris Lattner2004-03-131-11/+49
| | | | | | | | | | * Be a lot more accurate about what the effects will be when inlining a call to a function when an argument is an alloca. * Dramatically reduce the penalty for inlining a call in a large function. This heuristic made it almost impossible to inline a function into a large function, no matter how small the callee is. llvm-svn: 12363
* This little patch speeds up the loop used to update the dominator set analysis.Chris Lattner2004-03-131-17/+18
| | | | | | | | | | | | | On the testcase from GCC PR12440, which has a LOT of loops (1392 of which require preheaders to be inserted), this speeds up the loopsimplify pass from 1.931s to 0.1875s. The loop in question goes from 1.65s -> 0.0097s, which isn't bad. All of these times are a debug build. This adds a dependency on DominatorTree analysis that was not there before, but we always had dominatortree available anyway, because LICM requires both loop simplify and DT, so this doesn't add any extra analysis in practice. llvm-svn: 12362
* Implement sub.ll:test14Chris Lattner2004-03-131-8/+29
| | | | llvm-svn: 12355
* Implement InstCombine/sub.ll:test12 & test13Chris Lattner2004-03-121-0/+36
| | | | llvm-svn: 12353
* Add constant folding wrapper support for select instructions.Chris Lattner2004-03-121-0/+4
| | | | llvm-svn: 12319
* Add sccp support for select instructionsChris Lattner2004-03-121-0/+23
| | | | llvm-svn: 12318
* Add trivial optimizations for select instructionsChris Lattner2004-03-121-0/+15
| | | | llvm-svn: 12317
* Initial support for edge profilingChris Lattner2004-03-081-0/+94
| | | | llvm-svn: 12225
* Split utility functions out of BlockProfiling.cppChris Lattner2004-03-083-85/+137
| | | | llvm-svn: 12224
* finegrainify namespacificationChris Lattner2004-03-081-14/+14
| | | | llvm-svn: 12221
* Implement ArgumentPromotion/aggregate-promote.llChris Lattner2004-03-081-25/+145
| | | | | | | | | | | | | | | | | | This allows pointers to aggregate objects, whose elements are only read, to be promoted and passed in by element instead of by reference. This can enable a LOT of subsequent optimizations in the caller function. It's worth pointing out that this stuff happens a LOT of C++ programs, because objects in templates are generally passed around by reference. When these templates are instantiated on small aggregate or scalar types, however, it is more efficient to pass them in by value than by reference. This transformation triggers most on C++ codes (e.g. 334 times on eon), but does happen on C codes as well. For example, on mesa it triggers 72 times, and on gcc it triggers 35 times. this is amazingly good considering that we are using 'basicaa' so far. llvm-svn: 12202
* Implement: ArgumentPromotion/chained.llChris Lattner2004-03-071-0/+5
| | | | llvm-svn: 12200
* Fix another minor bug, exposed by perlbmkChris Lattner2004-03-071-3/+11
| | | | llvm-svn: 12198
* Since 'load null' is undefined, we can make it do whatever we want. ReturningChris Lattner2004-03-071-0/+6
| | | | | | a zero value is the most likely way to cause further simplification, so we do it. llvm-svn: 12197
* Fix a minor bug and turn debug output into, well, debug output.Chris Lattner2004-03-071-2/+2
| | | | llvm-svn: 12195
* New LLVM pass: argument promotion. This version only handles simple scalarChris Lattner2004-03-071-0/+328
| | | | | | variables. llvm-svn: 12193
* Don't emit things like malloc(16*1). Allocation instructions are fixed ↵Chris Lattner2004-03-031-1/+1
| | | | | | arity now. llvm-svn: 12086
* Implement ExtractCodeRegion()Misha Brukman2004-03-021-1/+9
| | | | llvm-svn: 12070
* Make a note that this is usually used via bugpoint.Misha Brukman2004-03-021-3/+2
| | | | llvm-svn: 12068
* * Add implementation of ExtractBasicBlock()Misha Brukman2004-03-011-0/+10
| | | | | | * Add comments to ExtractLoop() llvm-svn: 12053
* Disable tail duplication in a case that breaks on Olden/tspChris Lattner2004-03-012-1/+5
| | | | llvm-svn: 12021
* * Remove function to find "main" in a Module, there's a method for thatMisha Brukman2004-02-291-168/+124
| | | | | | * Removing extraneous empty space and empty comment lines llvm-svn: 12014
* Fix bug: test/Regression/Transforms/LowerInvoke/2004-02-29-PHICrash.llxChris Lattner2004-02-291-2/+5
| | | | | | ... which tickled the lowerinvoke pass because it used the BCE routines. llvm-svn: 12012
* Fix PR255: [tailduplication] Single basic block loops are very rareChris Lattner2004-02-291-1/+2
| | | | | | | Note that this is a band-aid put over a band-aid. This just undisables tail duplication in on very specific case that it seems to work in. llvm-svn: 11989
* Implement switch->br and br->switch folding by ripping out the switch->switchChris Lattner2004-02-281-178/+174
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | and br->br code and generalizing it. This allows us to compile code like this: int test(Instruction *I) { if (isa<CastInst>(I)) return foo(7); else if (isa<BranchInst>(I)) return foo(123); else if (isa<UnwindInst>(I)) return foo(1241); else if (isa<SetCondInst>(I)) return foo(1); else if (isa<VAArgInst>(I)) return foo(42); return foo(-1); } into: int %_Z4testPN4llvm11InstructionE("struct.llvm::Instruction"* %I) { entry: %tmp.1.i.i.i.i.i.i.i = getelementptr "struct.llvm::Instruction"* %I, long 0, ubyte 4 ; <uint*> [#uses=1] %tmp.2.i.i.i.i.i.i.i = load uint* %tmp.1.i.i.i.i.i.i.i ; <uint> [#uses=2] %tmp.2.i.i.i.i.i.i = seteq uint %tmp.2.i.i.i.i.i.i.i, 27 ; <bool> [#uses=0] switch uint %tmp.2.i.i.i.i.i.i.i, label %endif.0 [ uint 27, label %then.0 uint 2, label %then.1 uint 5, label %then.2 uint 14, label %then.3 uint 15, label %then.3 uint 16, label %then.3 uint 17, label %then.3 uint 18, label %then.3 uint 19, label %then.3 uint 32, label %then.4 ] ... As well as handling the cases in 176.gcc and many other programs more effectively. llvm-svn: 11964
* if there is already a prototype for malloc/free, use it, even if it's incorrect.Chris Lattner2004-02-281-10/+42
| | | | | | Do not just inject a new prototype. llvm-svn: 11951
* Rename AddUsesToWorkList -> AddUsersToWorkList, as that is what it does.Chris Lattner2004-02-281-19/+54
| | | | | | | Create a new AddUsesToWorkList method optimize memmove/set/cpy of zero bytes to a noop. llvm-svn: 11941
* Turn 'free null' into nothingChris Lattner2004-02-281-0/+8
| | | | llvm-svn: 11940
* Right, it's really Extractor, not Extraction.Misha Brukman2004-02-281-2/+2
| | | | llvm-svn: 11939
* A pass that uses the generic CodeExtractor to rip out *every* loop in everyMisha Brukman2004-02-281-0/+69
| | | | | | | function, as long as the loop isn't the only one in that function. This should help debugging passes easier with BugPoint. llvm-svn: 11936
* A generic code extractor: given a list of BasicBlocks, it will rip them out intoMisha Brukman2004-02-281-0/+573
| | | | | | a new function, taking care of inputs and outputs. llvm-svn: 11935
* setcond instructions don't have aliasing implications.Chris Lattner2004-02-271-2/+2
| | | | llvm-svn: 11919
* Implement test/Regression/Transforms/InstCombine/canonicalize_branch.llChris Lattner2004-02-271-1/+23
| | | | | | | This is a really minor thing, but might help out the 'switch statement induction' code in simplifycfg. llvm-svn: 11900
* Since LLVM uses structure type equivalence, it isn't useful to keep aroundChris Lattner2004-02-261-10/+11
| | | | | | | multiple type names for the same structural type. Make DTE eliminate all but one of the type names llvm-svn: 11879
OpenPOWER on IntegriCloud