[PATCH] D20665: Claim NoAlias if two GEPs index different fields of the same struct

Daniel Berlin via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 1 17:32:49 PDT 2016

His point is that types in GEP's are just suggestions (see the GEP faq).

The type itself is meaningless.  You can take the result, bitcast it to a
int*, whatever.

You can also take an int *, bitcast it to a struct, gep it, and use the

On Wed, Jun 1, 2016 at 5:29 PM, Taewook Oh <twoh at fb.com> wrote:

> twoh added inline comments.
> ================
> Comment at: llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp:842
> @@ +841,3 @@
> +  // of the same struct, they do not alias.
> +  if (GEP1->isInBounds() && GEP2->isInBounds()) {
> +    auto Opi1 = GEP1->op_begin() + 1;
> ----------------
> eli.friedman wrote:
> > You aren't allowed to make aliasing assumptions based on the type of a
> GEP; it's just pointer math.  "inbounds" just means that the result has to
> be in bounds relative to the allocation as a whole.  See
> http://llvm.org/docs/LangRef.html#getelementptr-instruction .
> >
> > Even if a frontend generates "nice" code, LLVM itself performs
> transformations which will break any assumptions based on the type of a GEP
> (for example, LLVM will transform a bitcast into a GEP).
> @eli.friedman Thanks for the comment. I'm afraid I didn't understand the
> point of your comments. This patch is for the case where two GEPs have the
> same pointer operand and access through the same indices until a certain
> point. For such case, not only types, but also indexed values should be
> identical at that point. If so, when the next index values are different,
> it means that two GEPs will point different fields of the same struct.
> It would be great if you could suggest an example that this patch
> generates wrong result.
> Repository:
>   rL LLVM
> http://reviews.llvm.org/D20665
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160601/babbc479/attachment.html>

More information about the llvm-commits mailing list