[llvm-dev] Question about basic-aa's assumptions

ramshankar r via llvm-dev llvm-dev at lists.llvm.org
Wed Jul 8 06:56:44 PDT 2020


Got it, thanks guys.

The aa pass does say that load(load(@ppc,...)) May-aliases with load(pc)
and for the NoAlias dump that I shared, two different globals  ppc and pc
do not alias- There is most likely something else in my copy of llvm that
makes my test fail. Thanks 🙏  very much for your help!

On Wed, Jul 8, 2020 at 3:14 AM Jeroen Dobbelaere <
Jeroen.Dobbelaere at synopsys.com> wrote:

> Hi Ramshankar,
>
>
>
> giving it a try:
>
>
>
> > 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
>
>
>
> - the first is an 'i8**' (the address of pc),
>
> - the second 'i8***' (aka the address of ppc.)
>
>
>
> Those represent two different objects.
>
>
>
> Greetings,
>
>
>
> Jeroen Dobbelaere
>
>
>
>
>
> *From:* llvm-dev <llvm-dev-bounces at lists.llvm.org> *On Behalf Of *ramshankar
> r via llvm-dev
> *Sent:* Tuesday, July 7, 2020 18:16
> *To:* llvm-dev at lists.llvm.org
> *Subject:* Re: [llvm-dev] Question about basic-aa's assumptions
>
>
>
> Any takers on this?
>
>
>
> Best,
>
> Ram
>
>
>
> On Mon, Jul 6, 2020 at 12:18 PM ramshankar r <ramshankar543 at gmail.com>
> wrote:
>
> 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
>
>
>
> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200708/02883b5f/attachment.html>


More information about the llvm-dev mailing list