summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Utils/InlineCost.cpp
Commit message (Collapse)AuthorAgeFilesLines
* If a function is marked alwaysinline, it must be inlined (possibly for ↵Evan Cheng2009-03-101-7/+7
| | | | | | correctness). Do so even if the callee has dynamic alloca and the caller doesn't. llvm-svn: 66539
* Introduce new linkage types linkonce_odr, weak_odr, common_odrDuncan Sands2009-03-071-6/+3
| | | | | | | | | | | | | | | | | | | | | and extern_weak_odr. These are the same as the non-odr versions, except that they indicate that the global will only be overridden by an *equivalent* global. In C, a function with weak linkage can be overridden by a function which behaves completely differently. This means that IP passes have to skip weak functions, since any deductions made from the function definition might be wrong, since the definition could be replaced by something completely different at link time. This is not allowed in C++, thanks to the ODR (One-Definition-Rule): if a function is replaced by another at link-time, then the new function must be the same as the original function. If a language knows that a function or other global can only be overridden by an equivalent global, it can give it the weak_odr linkage type, and the optimizers will understand that it is alright to make deductions based on the function body. The code generators on the other hand map weak and weak_odr linkage to the same thing. llvm-svn: 66339
* Fix typo caused by too much surfing, dudes...Nick Lewycky2009-02-161-1/+1
| | | | llvm-svn: 64626
* Revert previous change; even this mild and clearlyDale Johannesen2009-01-241-7/+4
| | | | | | | more accurate change loses more than it gains on benchmarks. llvm-svn: 62938
* Improve the inlining cost function a bit.Dale Johannesen2009-01-241-3/+6
| | | | | | Little practical effect. llvm-svn: 62908
* Add the private linkage.Rafael Espindola2009-01-151-1/+1
| | | | llvm-svn: 62279
* Enable recursive inlining. Reduce inlining thresholdDale Johannesen2009-01-121-3/+1
| | | | | | | back to 200; 400 seems to be too high, loses more than it gains. llvm-svn: 62107
* Adjustments to last patch based on review.Dale Johannesen2009-01-091-11/+13
| | | | llvm-svn: 61969
* Do not inline functions with (dynamic) alloca intoDale Johannesen2009-01-081-2/+20
| | | | | | | | | | | functions that don't already have a (dynamic) alloca. Dynamic allocas cause inefficient codegen and we shouldn't propagate this (behavior follows gcc). Two existing tests assumed such inlining would be done; they are hacked by adding an alloca in the caller, preserving the point of the tests. llvm-svn: 61946
* Check Attribute::NoInline.Devang Patel2008-11-051-4/+2
| | | | llvm-svn: 58742
* Add InlineCost class for represent the estimated cost of inlining aDaniel Dunbar2008-10-301-5/+9
| | | | | | | | | function. - This explicitly models the costs for functions which should "always" or "never" be inlined. This fixes bugs where such costs were not previously respected. llvm-svn: 58450
* Rename isWeakForLinker to mayBeOverridden. Use itDuncan Sands2008-09-291-5/+9
| | | | | | | instead of hasWeakLinkage in a bunch of optimization passes. llvm-svn: 56782
* Implement function notes as function attributes. Devang Patel2008-09-261-1/+1
| | | | llvm-svn: 56716
* Large mechanical patch.Devang Patel2008-09-251-1/+1
| | | | | | | | | | | | | | | s/ParamAttr/Attribute/g s/PAList/AttrList/g s/FnAttributeWithIndex/AttributeWithIndex/g s/FnAttr/Attribute/g This sets the stage - to implement function notes as function attributes and - to distinguish between function attributes and return value attributes. This requires corresponding changes in llvm-gcc and clang. llvm-svn: 56622
* Put FN_NOTE_AlwaysInline and others in FnAttr namespace.Devang Patel2008-09-241-1/+1
| | | | llvm-svn: 56527
* Move FN_NOTE_AlwaysInline and other out of ParamAttrs namespace.Devang Patel2008-09-231-1/+1
| | | | | | Do not check isDeclaration() in hasNote(). It is clients' responsibility. llvm-svn: 56524
* Use parameter attribute store (soon to be renamed) forDevang Patel2008-09-231-1/+1
| | | | | | Function Notes also. Function notes are stored at index ~0. llvm-svn: 56511
* Add hasNote() to check note associated with a function.Devang Patel2008-09-221-1/+1
| | | | llvm-svn: 56477
* Handle "always inline" note during inline cost analysis.Devang Patel2008-09-031-0/+3
| | | | llvm-svn: 55712
* Inliner tweak. Function calls should cost more than one instruction!Evan Cheng2008-07-171-0/+5
| | | | llvm-svn: 53712
* Reapply r53540, now with the matching header!Chris Lattner2008-07-141-1/+23
| | | | llvm-svn: 53557
* Revert r53540 - it does not compile.Duncan Sands2008-07-141-23/+1
| | | | llvm-svn: 53549
* If a function calls setjmp, never inline it into other functions. This isChris Lattner2008-07-141-1/+23
| | | | | | | a hack around the fact that we don't represent the CFG correctly for sj/lj. It fixes PR2486. llvm-svn: 53540
* simplify some code, shuffle and insertelt always return a vector.Chris Lattner2008-07-141-2/+1
| | | | llvm-svn: 53538
* Adjust inline cost computation to be less aggressive.Evan Cheng2008-04-241-2/+2
| | | | llvm-svn: 50222
* 1. Drop default inline threshold back down to 200.Evan Cheng2008-04-011-8/+13
| | | | | | | 2. Do not use # of basic blocks as part of the cost computation since it doesn't really figure into function size. 3. More aggressively inline function with vector code. llvm-svn: 49061
* Increasing the inline limit from (overly conservative) 200 to 300. Given ↵Evan Cheng2008-03-241-5/+29
| | | | | | | | each BB costs 20 and each instruction costs 5, 200 means a 4 BB function + 24 instructions (actually less because caller's size also contributes to it). Furthermore, double the limit when more than 10% of the callee instructions are vector instructions. Multimedia kernels tend to love inlining. llvm-svn: 48725
* 80 col violation.Evan Cheng2008-03-201-1/+2
| | | | llvm-svn: 48573
* Remove attribution from file headers, per discussion on llvmdev.Chris Lattner2007-12-291-2/+2
| | | | llvm-svn: 45418
* Fix comment.Devang Patel2007-09-171-1/+1
| | | | llvm-svn: 42048
* Use SmallPtrSet.Devang Patel2007-07-271-1/+1
| | | | llvm-svn: 40560
* Add BasicInliner interface. Devang Patel2007-07-251-0/+241
This interface allows clients to inline bunch of functions with module level call graph information.:wq llvm-svn: 40486
OpenPOWER on IntegriCloud