summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/IPO
Commit message (Collapse)AuthorAgeFilesLines
* These llvm.dbg.* constants are not used anymore.Devang Patel2011-03-091-3/+0
| | | | llvm-svn: 127352
* Don't internalize available_externally functions. We already did the rightRafael Espindola2011-03-061-0/+2
| | | | | | thing for variables. llvm-svn: 127138
* Add an obvious missing safety check to DAE::RemoveDeadArgumentsFromCallers.Eli Friedman2011-03-011-1/+1
| | | | llvm-svn: 126720
* Instead of keeping two Value*->id# mappings, keep one Value->Value mapping andNick Lewycky2011-02-201-12/+14
| | | | | | | one Value set. This is faster because we only need to use the set when there isn't already an entry in the map. No functionality change! llvm-svn: 126076
* convert ConstantVector::get to use ArrayRef.Chris Lattner2011-02-151-2/+1
| | | | llvm-svn: 125537
* revert my ConstantVector patch, it seems to have made the llvm-gccChris Lattner2011-02-141-1/+2
| | | | | | builders unhappy. llvm-svn: 125504
* Switch ConstantVector::get to use ArrayRef instead of a pointer+sizeChris Lattner2011-02-141-2/+1
| | | | | | idiom. Change various clients to simplify their code. llvm-svn: 125487
* When removing a function from the function set and adding it to deferred, weNick Lewycky2011-02-091-2/+19
| | | | | | | | | | | | | could end up removing a different function than we intended because it was functionally equivalent, then end up with a comparison of a function against itself in the next round of comparisons (the one in the function set and the one on the deferred list). To fix this, I introduce a choice in the form of comparison for ComparableFunctions, either normal or "pointer only" used to find exact Function*'s in lookups. Also add some debugging statements. llvm-svn: 125180
* Simplify away redundant test, and document what's going on.Nick Lewycky2011-02-061-2/+5
| | | | llvm-svn: 124977
* Remove specialized comparison of InlineAsm objects. They're uniqued on creationNick Lewycky2011-02-061-6/+2
| | | | | | now, and this wasn't comparing some of their relevant bits anyhow. llvm-svn: 124976
* Remove wasteful caching. This isn't needed for correctness because any functionNick Lewycky2011-02-021-23/+2
| | | | | | | | that might have changed been affected by a merge elsewhere will have been removed from the function set, and it isn't needed for performance because we call grow() ahead of time to prevent reallocations. llvm-svn: 124717
* Rename functions to follow coding standard. Also rejiggers comments. NoNick Lewycky2011-01-281-89/+88
| | | | | | functionality change. llvm-svn: 124482
* Add a doxygen comment for this class.Nick Lewycky2011-01-281-0/+2
| | | | llvm-svn: 124480
* Reorder for readability. (Chris, is this what you meant?)Nick Lewycky2011-01-281-148/+150
| | | | llvm-svn: 124479
* Reduce the number of functions we look at in the first pass, and preallocateNick Lewycky2011-01-281-1/+3
| | | | | | the function equality set. llvm-svn: 124475
* Unbreak the build.Benjamin Kramer2011-01-271-1/+1
| | | | llvm-svn: 124426
* Expound upon this comparison!Nick Lewycky2011-01-271-0/+2
| | | | llvm-svn: 124406
* Use dyn_cast instead of isa+cast.Nick Lewycky2011-01-271-2/+1
| | | | llvm-svn: 124404
* Fix surprising missed optimization in mergefunc where we forgot to considerNick Lewycky2011-01-271-3/+12
| | | | | | that relationships like "i8* null" is equivalent to "i32* null". llvm-svn: 124368
* AttrListPtr has an overloaded operator== which does this for us, we should useNick Lewycky2011-01-261-4/+2
| | | | | | it. No functionality change! llvm-svn: 124286
* Teach mergefunc that intptr_t is the same width as a pointer. We still can'tNick Lewycky2011-01-261-1/+7
| | | | | | | merge vector<intptr_t>::push_back() and vector<void*>::push_back() because Enumerate() doesn't realize that "i64* null" and "i8** null" are equivalent. llvm-svn: 124285
* There are no vectors of pointer or arrays, so we don't need to check vectorNick Lewycky2011-01-261-7/+1
| | | | | | elements for type equivalence. llvm-svn: 124284
* Teach mergefunc how to emit aliases safely again -- but keep it turned it offNick Lewycky2011-01-251-25/+79
| | | | | | | for now. It's controlled by the HasGlobalAliases variable which is not attached to any flag yet. llvm-svn: 124182
* Add unnamed_addr when we can show that address of a global is not used.Rafael Espindola2011-01-191-13/+42
| | | | llvm-svn: 123834
* Reduce indentation and remove commented out code.Rafael Espindola2011-01-181-122/+101
| | | | llvm-svn: 123729
* Teach DAE to look for functions whose arguments are unused, and change all ↵Anders Carlsson2011-01-161-1/+61
| | | | | | callers to pass in an undefvalue instead. llvm-svn: 123596
* Don't merge two constants if we care about the address of both.Rafael Espindola2011-01-161-22/+38
| | | | | | | | | | | | | | This fixes the original testcase in PR8927. It also causes a clang binary built with a patched clang to increase in size by 0.21%. We can probably get some of the size back by writing a pass that detects that a global never has its pointer compared and adds unnamed_addr to it (maybe extend global opt). It is also possible that there are some other cases clang could add unnamed_addr to. I will investigate extending globalopt next. llvm-svn: 123584
* fix PR8932, a case where arg promotion could infinitely promote.Chris Lattner2011-01-161-24/+51
| | | | llvm-svn: 123574
* Improve the safety of my globalopt enhancement by ensuring that the bitcastOwen Anderson2011-01-161-12/+22
| | | | | | of the stored value to the new store type is always. Also, add a testcase. llvm-svn: 123563
* simplify this code, it is still broken but will follow up on llvm-commits.Chris Lattner2011-01-161-15/+5
| | | | llvm-svn: 123558
* remove the partial specialization pass. It is unmaintained and has bugs.Chris Lattner2011-01-163-230/+0
| | | | llvm-svn: 123554
* Add missing whitespace.Nick Lewycky2011-01-151-2/+2
| | | | llvm-svn: 123543
* Make constmerge a two-pass algorithm so that it won't miss mergingNick Lewycky2011-01-151-4/+34
| | | | | | opporuntities. Fixes PR8978. llvm-svn: 123541
* Try to unbreak selfhost.Benjamin Kramer2011-01-151-0/+1
| | | | llvm-svn: 123537
* Add a cache that protects mergefunc's internals from more surprises in DenseSet.Nick Lewycky2011-01-151-5/+27
| | | | | | Also, replace tabs with spaces. Yes, it's 2011. llvm-svn: 123535
* Fix a false-positive warning.Owen Anderson2011-01-141-1/+3
| | | | llvm-svn: 123480
* Enhance GlobalOpt to be able evaluate initializers that involve stores throughOwen Anderson2011-01-141-2/+49
| | | | | | bitcasts, at least in simple cases. This fixes clang's CodeGenCXX/virtual-base-dtor.cpp llvm-svn: 123477
* Improve the accuracy of the inlining heuristic looking for theDale Johannesen2011-01-041-9/+14
| | | | | | | | | | case where a static caller is itself inlined everywhere else, and thus may go away if it doesn't get too big due to inlining other things into it. If there are references to the caller other than calls, it will not be removed; account for this. This results in same-day completion of the case in PR8853. llvm-svn: 122821
* Also remove functions that use complex constant expressions in terms ofNick Lewycky2011-01-021-5/+18
| | | | | | another function. llvm-svn: 122705
* Remove functions from the FnSet when one of their callee's is being merged. ThisNick Lewycky2011-01-021-82/+66
| | | | | | | | | | | maintains the guarantee that the DenseSet expects two elements it contains to not go from inequal to equal under its nose. As a side-effect, this also lets us switch from iterating to a fixed-point to actually maintaining a work queue of functions to look at again, and we don't add thunks to our work queue so we don't need to detect and ignore them. llvm-svn: 122677
* fix a globalopt crash on two Adobe-C++ testcases that the recentChris Lattner2011-01-011-0/+5
| | | | | | loop idiom pass exposed. llvm-svn: 122674
* reapply r121100 with a tweak to constant fold ConstExprs with TargetDataChris Lattner2010-12-071-8/+95
| | | | | | | | (if available) as we go so that we get simple constantexprs not insane ones. This fixes the failure of clang/test/CodeGenCXX/virtual-base-ctor.cpp that the previous iteration of this patch had. llvm-svn: 121111
* Temporarily revert r121100 as it's causing clang to failEric Christopher2010-12-071-85/+5
| | | | | | CodeGenCXX/virtual-base-ctor.cpp. llvm-svn: 121102
* fix PR8710 - teach global opt that some constantexprs are too complex toChris Lattner2010-12-071-5/+85
| | | | | | put in a global variable's initializer. llvm-svn: 121100
* replace a linear scan with a symtab lookup, reduce indentation.Chris Lattner2010-12-061-38/+38
| | | | | | No functionality change. llvm-svn: 121042
* Fix PR8735, a really terrible problem in the inliner's "alloca merging"Chris Lattner2010-12-061-3/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | optimization. Consider: static void foo() { A = alloca ... } static void bar() { B = alloca ... call foo(); } void main() { bar() } The inliner proceeds bottom up, but lets pretend it decides not to inline foo into bar. When it gets to main, it inlines bar into main(), and says "hey, I just inlined an alloca "B" into main, lets remember that. Then it keeps going and finds that it now contains a call to foo. It decides to inline foo into main, and says "hey, foo has an alloca A, and I have an alloca B from another inlined call site, lets reuse it". The problem with this of course, is that the lifetime of A and B are nested, not disjoint. Unfortunately I can't create a reasonable testcase for this: the one in the PR is both huge and extremely sensitive, because you minor tweaks end up causing foo to get inlined into bar too early. We already have tests for the basic alloca merging optimization and this does not break them. llvm-svn: 120995
* improve -debug output and comments a little.Chris Lattner2010-12-061-3/+5
| | | | llvm-svn: 120993
* Add helper functions for computing the Location of load, store,Dan Gohman2010-11-112-14/+4
| | | | | | and vaarg instructions. llvm-svn: 118845
* Factor out Instruction::isSafeToSpeculativelyExecute's code forDan Gohman2010-11-111-14/+1
| | | | | | | | | | | | testing for dereferenceable pointers into a helper function, isDereferenceablePointer. Teach it how to reason about GEPs with simple non-zero indices. Also eliminate ArgumentPromtion's IsAlwaysValidPointer, which didn't check for weak externals or out of range gep indices. llvm-svn: 118840
* TBAA-enable ArgumentPromotion.Dan Gohman2010-11-111-8/+8
| | | | llvm-svn: 118804
OpenPOWER on IntegriCloud