[LLVMdev] alias analysis and functions
Chris Lattner
clattner at apple.com
Thu Oct 1 20:51:37 PDT 2009
On Oct 1, 2009, at 6:58 PM, dan mihai wrote:
> Hi,
>
> I am trying to use alias analysis (Anderson) and noticed that for
> pointers to functions
> I don't get the expected result: a pointer that clearly may point to
> a function is
> reported as NoAlias.
Hi Dan,
Andersaa is extremely experimental at this point and has many known
bugs.
-Chris
>
> I use -anders-aa -aa-eval -print-no-aliases -print-may-aliases -
> print-must-aliases
>
> Here is a test case:
>
> ///////////////try_calls_aliases.c
> #include <stdio.h>
>
> typedef int (*PF)();
>
> PF pf01=0;
> PF pf2=0;
>
> int pointed_to_function0() {
> printf("pointed_to_function0\n");
> return 1;
> }
>
> int pointed_to_function1() {
> pf01 = pointed_to_function1;
> printf("pointed_to_function1\n");
> return 1;
> }
>
> void ptr_function_caller(PF pf) {
> printf("ptr_function_caller\n");
> pf();
> PF lpf0 = pointed_to_function0;
> PF lpf1 = pointed_to_function1;
> }
>
> int main(int argc, char* argv[]) {
> ptr_function_caller(pointed_to_function0);
> return 0;
> }
> -------------
>
> After
> llvmgcc -emit-llvm try_calls_aliases.c -c -o try_calls_aliases.bc
> opt 2>&1 -anders-aa -aa-eval -print-no-aliases -print-may-
> aliases -print-must-aliases try_calls_aliases.bc | egrep -e 'Alias|
> Function' > c
> I get:
> ...........
> Function: ptr_function_caller: 8 pointers, 2 call sites
> NoAlias: i32 (...)* bitcast (i32 ()* @pointed_to_function0 to
> i32 (...)*), i32 (...)* bitcast (i32 ()* @pointed_to_function1 to
> i32 (...)*)
> NoAlias: i32 (...)* %pf, i32 (...)* bitcast (i32 ()*
> @pointed_to_function0 to i32 (...)
> *) ???????????????????????????????????????????????????????????????????????????????
> NoAlias: i32 (...)* %pf, i32 (...)* bitcast (i32 ()*
> @pointed_to_function1 to i32 (...)*)
> NoAlias: i32 (...)* bitcast (i32 ()* @pointed_to_function0 to
> i32 (...)*), i8* getelementptr ([20 x i8]* @.str2, i32 0, i64 0)
> NoAlias: i32 (...)* bitcast (i32 ()* @pointed_to_function1 to
> i32 (...)*), i8* getelementptr ([20 x i8]* @.str2, i32 0, i64 0)
> NoAlias: i32 (...)* %pf, i8* getelementptr ([20 x i8]* @.str2,
> i32 0, i64 0)
> NoAlias: i32 (...)* bitcast (i32 ()* @pointed_to_function0 to
> i32 (...)*), i32 (...)** %pf_addr
> NoAlias: i32 (...)* bitcast (i32 ()* @pointed_to_function1 to
> i32 (...)*), i32 (...)** %pf_addr
> NoAlias: i32 (...)* %pf, i32 (...)** %pf_addr
> NoAlias: i32 (...)** %pf_addr, i8* getelementptr ([20 x i8]*
> @.str2, i32 0, i64 0)
> NoAlias: i32 (...)* bitcast (i32 ()* @pointed_to_function0 to
> i32 (...)*), i32 (...)** %lpf1
> NoAlias: i32 (...)* bitcast (i32 ()* @pointed_to_function1 to
> i32 (...)*), i32 (...)** %lpf1
> NoAlias: i32 (...)* %pf, i32 (...)** %lpf1
> NoAlias: i32 (...)** %lpf1, i8* getelementptr ([20 x i8]*
> @.str2, i32 0, i64 0)
> NoAlias: i32 (...)** %lpf1, i32 (...)** %pf_addr
> NoAlias: i32 (...)* bitcast (i32 ()* @pointed_to_function0 to
> i32 (...)*), i32 (...)** %lpf0
> NoAlias: i32 (...)* bitcast (i32 ()* @pointed_to_function1 to
> i32 (...)*), i32 (...)** %lpf0
> NoAlias: i32 (...)* %pf, i32 (...)** %lpf0
> NoAlias: i32 (...)** %lpf0, i8* getelementptr ([20 x i8]*
> @.str2, i32 0, i64 0)
> NoAlias: i32 (...)** %lpf0, i32 (...)** %pf_addr
> NoAlias: i32 (...)** %lpf0, i32 (...)** %lpf1
> NoAlias: i32 (...)* %1, i32 (...)* bitcast (i32 ()*
> @pointed_to_function0 to i32 (...)*)
> NoAlias: i32 (...)* %1, i32 (...)* bitcast (i32 ()*
> @pointed_to_function1 to i32 (...)*)
> MayAlias: i32 (...)* %1, i32 (...)* %pf
> NoAlias: i32 (...)* %1, i8* getelementptr ([20 x i8]* @.str2,
> i32 0, i64 0)
> NoAlias: i32 (...)* %1, i32 (...)** %pf_addr
> NoAlias: i32 (...)* %1, i32 (...)** %lpf1
> NoAlias: i32 (...)* %1, i32 (...)** %lpf0
> ...............
>
> Any advice on how to get this work as expected? (that is pf MayAlias
> pointed_to_function0 inside ptr_function_caller, etc)?
>
> Thank you,
> Dan
>
>
>
> Insert movie times and more without leaving HotmailĀ®. See
> how._______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20091001/fc329237/attachment.html>
More information about the llvm-dev
mailing list