Hello, I have a simple program using aliases to functions, and it seems
that the CallGraph doesn't follow these aliases. Here is the example:
@alias = alias void ()* @realfunc
define void @realfunc() {
entry:
ret void
}
define i32 @main() {
entry:
call void @alias()
ret i32 0
}
******* Output of the CallGraph *******
Call graph node <<null function>><<0xbe64c0>> #uses=0
CS<0x0> calls function 'realfunc'
CS<0x0> calls function 'realfunc'
CS<0x0> calls function 'main'
Call graph node for function: 'realfunc'<<0xbe6880>>
#uses=2
Call graph node for function: 'main'<<0xbe6d80>> #uses=1
CS<0xbdfe7c> calls external node
Is there a reason the CallGraph doesn't try to see through aliases? I
would like this capability, but was wondering if it is generally safe to do.
Thanks,
-Stephen
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20121011/b0b63740/attachment.html>
On Thu, Oct 11, 2012 at 3:56 PM, Stephen Schiffli <sschiffli at gmail.com> wrote:> Hello, I have a simple program using aliases to functions, and it seems that > the CallGraph doesn't follow these aliases. Here is the example: > > @alias = alias void ()* @realfunc > > define void @realfunc() { > entry: > ret void > } > > define i32 @main() { > entry: > call void @alias() > ret i32 0 > } > > ******* Output of the CallGraph ******* > > Call graph node <<null function>><<0xbe64c0>> #uses=0 > CS<0x0> calls function 'realfunc' > CS<0x0> calls function 'realfunc' > CS<0x0> calls function 'main' > > Call graph node for function: 'realfunc'<<0xbe6880>> #uses=2 > > Call graph node for function: 'main'<<0xbe6d80>> #uses=1 > CS<0xbdfe7c> calls external node > > Is there a reason the CallGraph doesn't try to see through aliases? I would > like this capability, but was wondering if it is generally safe to do.CallGraph is designed to be as simple as possible. GlobalOpt will perform the optimization in question. -Eli
That works perfect, thanks! -Stephen On Thu, Oct 11, 2012 at 4:02 PM, Eli Friedman <eli.friedman at gmail.com>wrote:> On Thu, Oct 11, 2012 at 3:56 PM, Stephen Schiffli <sschiffli at gmail.com> > wrote: > > Hello, I have a simple program using aliases to functions, and it seems > that > > the CallGraph doesn't follow these aliases. Here is the example: > > > > @alias = alias void ()* @realfunc > > > > define void @realfunc() { > > entry: > > ret void > > } > > > > define i32 @main() { > > entry: > > call void @alias() > > ret i32 0 > > } > > > > ******* Output of the CallGraph ******* > > > > Call graph node <<null function>><<0xbe64c0>> #uses=0 > > CS<0x0> calls function 'realfunc' > > CS<0x0> calls function 'realfunc' > > CS<0x0> calls function 'main' > > > > Call graph node for function: 'realfunc'<<0xbe6880>> #uses=2 > > > > Call graph node for function: 'main'<<0xbe6d80>> #uses=1 > > CS<0xbdfe7c> calls external node > > > > Is there a reason the CallGraph doesn't try to see through aliases? I > would > > like this capability, but was wondering if it is generally safe to do. > > CallGraph is designed to be as simple as possible. GlobalOpt will > perform the optimization in question. > > -Eli >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20121011/4a562419/attachment.html>