Hi Sebastian,<br><br>This kind of analysis is a pretty complex problem in general case. Consider, for instance, function "f" has nested calls of other functions with "side effects", meaning they could potentially change the contents of "in" or "out" indirectly. For this reason, even current state-of-art commercial APIs that imply strong data analysis (like OpenACC or HMPP) require functions to be free of side effects, because nobody could solve this problem well at compile-time.<br>
<br>Depending on the purpose of your question, this may or may not help: in comparison to general analysis, LLVM community makes way better progress in analysing data access patterns for vectorization and parallelization. In this case, particular code regions or loops are considered for matching suitable access patterns. For details on vectorization - you can look into the work by Nadav Rotem, Hal Finkel et al, the work by Preston Briggs [1], for details on polyhedral analysis - the Polly project [2]. These two could be extended further with runtime-assisted data analysis, where knowing actual values of pointers and index ranges you can also make conclusions about read/write modes with respect to particular code regions, like in [3].<br>
<br>[1] <a href="https://sites.google.com/site/parallelizationforllvm/">https://sites.google.com/site/parallelizationforllvm/</a><br>[2] <a href="http://polly.llvm.org/">http://polly.llvm.org/</a><br>[3] <a href="http://kernelgen.org">http://kernelgen.org</a><br>
<br>Hope it helps,<br>- D.<br><br><div class="gmail_quote">2013/1/9 Sebastian Dreßler <span dir="ltr"><<a href="mailto:dressler@zib.de" target="_blank">dressler@zib.de</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
suppose the following C function declaration:<br>
<br>
    void f(int *in, int *out);<br>
<br>
Now further suppose, that _in_ is an array only read from and _out_ is<br>
an array that is only written to.<br>
<br>
Based on this, I was wondering whether there is some already existing<br>
LLVM pass (or maybe a part of a pass) that detects those "data<br>
directions" for pointers. I'm not quite sure whether e.g. Alias Analysis<br>
can provide me this information (I suppose it *cannot*).<br>
<br>
<br>
Best regards,<br>
Sebastian<br>
<br>
--<br>
Mit freundlichen Grüßen / Kind regards<br>
<br>
Sebastian Dreßler<br>
<br>
Zuse Institute Berlin (ZIB)<br>
Takustraße 7<br>
D-14195 Berlin-Dahlem<br>
Germany<br>
<br>
<a href="mailto:dressler@zib.de">dressler@zib.de</a><br>
Phone: <a href="tel:%2B49%2030%2084185-261" value="+493084185261">+49 30 84185-261</a><br>
<br>
<a href="http://www.zib.de/" target="_blank">http://www.zib.de/</a><br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
</blockquote></div><br>