summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/IPO/FunctionAttrs.cpp
Commit message (Collapse)AuthorAgeFilesLines
* BasicAliasAnalysis and FunctionAttrs were bothDuncan Sands2009-01-181-81/+2
| | | | | | | | | doing very similar pointer capture analysis. Factor out the common logic. The new version is from FunctionAttrs since it does a better job than the version in BasicAliasAnalysis llvm-svn: 62461
* Remove alloca tracking from nocapture analysis. Not onlyDuncan Sands2009-01-071-69/+16
| | | | | | | | | | was it not very helpful, it was also wrong! The problem is shown in the testcase: the alloca might be passed to a nocapture callee which dereferences it and returns the original pointer. But because it was a nocapture call we think we don't need to track its uses, but we do. llvm-svn: 61876
* Reorder these.Duncan Sands2009-01-071-24/+24
| | | | llvm-svn: 61873
* Use a switch rather than a sequence of "isa" tests.Duncan Sands2009-01-071-16/+32
| | | | llvm-svn: 61872
* Any void readonly functions are provably dead, don't waste time adding Nick Lewycky2009-01-031-14/+0
| | | | | | nocapture attributes to them. llvm-svn: 61610
* Load tracking means that the value analyzed mayDuncan Sands2009-01-021-2/+8
| | | | | | | | | | | | not have pointer type. In particular, it may be the condition argument for a select or a GEP index. While I was unable to construct a testcase for which some bits of the original pointer are captured due to one of these, it's very very close to being possible - so play safe and exclude these possibilities. llvm-svn: 61580
* When calculating 'nocapture' argument attributes, allowDuncan Sands2009-01-021-21/+60
| | | | | | | | | | | | the argument to be stored to an alloca by tracking uses of the alloca. This occurs 4 times (out of 7121, 0.05%) in MultiSource/Applications, so may not be worth it. On the other hand, it is easy to do and fairly cheap. The functions it helps are: W_addcom and W_addlit in spiff; process_args (argv) in d (make_dparser); ercPixConcealIMB in JM/ldecod. llvm-svn: 61570
* Improve comments and reorganize a bit - no functionalityDuncan Sands2009-01-021-56/+44
| | | | | | change. llvm-svn: 61569
* Make adding nocapture a bit stronger. FreeInst is nocapture. Also, Nick Lewycky2009-01-021-3/+27
| | | | | | | | | | functions that don't write can't leak a pointer except through the return value, so a void readonly function is implicitly nocapture. Test these, and add a test that verifies that f1 calling f2 with an otherwise dead pointer gets both of them marked nocapture. llvm-svn: 61552
* Mention that this pass does escape analysis in theDuncan Sands2009-01-011-3/+5
| | | | | | leading comments. llvm-svn: 61548
* Look through phi nodes and select instructions whenDuncan Sands2008-12-311-3/+8
| | | | | | calculating nocapture attributes. llvm-svn: 61535
* Don't analyze arguments already marked 'nocapture'.Duncan Sands2008-12-311-1/+2
| | | | llvm-svn: 61532
* Rename AddReadAttrs to FunctionAttrs, and teach it howDuncan Sands2008-12-311-0/+280
to work out (in a very simplistic way) which function arguments (pointer arguments only) are only dereferenced and so do not escape. Mark such arguments 'nocapture'. llvm-svn: 61525
OpenPOWER on IntegriCloud