<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 7/6/20 11:18 AM, ramshankar r via
      llvm-dev wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAPKAp6A3AJX10zYxTSWcVmZEGCWd05+MUzP2U=0_EwNm_6gi6Q@mail.gmail.com">
      <pre class="moz-quote-pre" wrap="">Hi,

I have a test-case for which I seem to be getting incorrect information
from basic-aa alias-analysis. Here it is:
#include <stdio.h>
#define ARR_SIZE 4
char c[ARR_SIZE];
char *pc[ARR_SIZE];
char **ppc = pc;

int main() {

  pc[0] = &c[0];
  pc[1] = &c[1];
  pc[2] = &c[2];
  pc[3] = &c[3];

  printf(" ppc: %p\n"
      " pc : %p\n"
      " c  : %p\n"
      " *pc: %p\n",
      ppc, pc, c, *pc);

  return 0;
}

The way I compiled it is as follows:
clang -m32 -g pointer.c -emit-llvm -S -c
opt pointer.ll -aa-pipeline=basic-aa -passes=aa-eval
-print-all-alias-modref-info -disable-output

The result from the AA-Evaluator prints this:
  NoAlias: i8** getelementptr inbounds ([4 x i8*], [4 x i8*]* @pc, i32 0,
i32 0), i8*** @ppc
</pre>
    </blockquote>
    <br>
    <p>Isn't this talking about `&pc[0]` and `&ppc`? If so,
      NoAlias seems reasonable to me.</p>
    <p>I mean, you print the value of `ppc` and `pc` while the above
      talks about the addresses of these.</p>
    <p>(I'm a bit tired so take this as a potential answer only.)<br>
    </p>
    <p><br>
    </p>
    <p>~ Johannes</p>
    <p><br>
    </p>
    <p><br>
    </p>
    <blockquote type="cite"
cite="mid:CAPKAp6A3AJX10zYxTSWcVmZEGCWd05+MUzP2U=0_EwNm_6gi6Q@mail.gmail.com">
      <pre class="moz-quote-pre" wrap="">
If we run the program, the result is this:
 ppc: 0x565ee028
 pc : 0x565ee028
 c  : 0x565ee024
 *pc: 0x565ee024

Basically, I would have liked if basic-aa said ppc and pc are may-aliased
to start with for this kind of usage. This is how the globals look like.
The second one: "ppc" has "pc" on the right hand side.

@pc = common dso_local global [4 x i8*] zeroinitializer, align 4, !dbg !0
@ppc = dso_local global i8** getelementptr inbounds ([4 x i8*], [4 x i8*]*
@pc, i32 0, i32 0), align 4, !dbg !6

Best regards,
Ram

</pre>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
    </blockquote>
  </body>
</html>