[all-commits] [llvm/llvm-project] 6cd673: [LangRef][AliasAnalysis] Clarify `noalias` affects...
Johannes Doerfert via All-commits
all-commits at lists.llvm.org
Wed Apr 1 18:42:01 PDT 2020
Branch: refs/heads/master
Home: https://github.com/llvm/llvm-project
Commit: 6cd673345cfa7b1dc25568ac9fd45e23402bbd02
https://github.com/llvm/llvm-project/commit/6cd673345cfa7b1dc25568ac9fd45e23402bbd02
Author: Johannes Doerfert <johannes at jdoerfert.de>
Date: 2020-04-01 (Wed, 01 Apr 2020)
Changed paths:
M llvm/docs/LangRef.rst
Log Message:
-----------
[LangRef][AliasAnalysis] Clarify `noalias` affects only modified objects
We already mention that `noalias` is modeled after the C99 `restrict`
qualifier but we did omit one important requirement in the description.
For the restrict guarantees the object affected has to be modified
during the execution of the function, in any way (see 6.7.3.1.4 in [0]).
There are two reasons we want this restriction as well:
1) To match the `restrict` semantics when we lower it to `noalias`.
2) To allow the reasoning that the object pointed to by a `noalias`
pointer is not modified through means not derived from this
pointer. Hence, following the uses of that pointer is sufficient
to determine potential modifications.
The discussion on this came up as part of D73428. In that patch the
Attributor is taught to derive `noalias` for call site arguments based
on alias queries against objects that are accessed in the callee. This
is possible even if the pointer passed at the call site was "not-`noalias`".
To simplify the logic there *and* to allow the use of `noalias` as
described in 2) above, it is beneficial to follow the C `restrict`
semantics in cases where there might be "read-read-aliases". Note that
AliasAnalysis* queries for read only objects already result in
`NoAlias` even if the pointers might "alias".
* From this point of view our Alias Analysis is basically a Dependence
Analysis.
[0] http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
Reviewed By: efriedma
Differential Revision: https://reviews.llvm.org/D74935
More information about the All-commits
mailing list