[PATCH] D74935: [LangRef][AliasAnalysis] Clarify `noalias` affects only modified objects

Johannes Doerfert via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 5 15:53:45 PST 2020


jdoerfert added a comment.

In D74935#1908607 <https://reviews.llvm.org/D74935#1908607>, @jeroen.dobbelaere wrote:

> [...]
>  So, adding the 'noalias' attribute to %pA and %pB will change the behavior of foo().
>
> hmm... this explanation is maybe getting too long ?
>  The short conclusion should be:
>
> - adding 'noalias' to a pointer argument, because it is only used to read memory, might lead to 'wrong code'
> - two 'noalias' pointer arguments should not overlap or relaxed:
> - two 'noalias' pointer arguments can only overlap if they (at any level of indirection) are never used to write to memory.


I think we conflate two things here:

1. The modifications to the LangRef which should be in accordance with the C standard (at least I haven't seen you contradict the new wording directly).
2. The extended `noalias` deduction D73428 <https://reviews.llvm.org/D73428>.

If you look at the commit message in D73428 <https://reviews.llvm.org/D73428>, it says that `noalias` is not just derived for all `readonly` arguments.
In your example we access `unknown` memory, e.g., `**pA=42`, so case (1) cannot be applied.
For case (2) we need to show that the loads of `pA` and `pB` do not alias, which we cannot.

WDYT?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D74935/new/

https://reviews.llvm.org/D74935





More information about the llvm-commits mailing list