Inline Expansion Problem

Matt Davis mattdavis9@gmail.com
Sat Aug 27 23:30:00 GMT 2011


On Sat, Aug 27, 2011 at 11:25:45AM +0200, Richard Guenther wrote:
> On Sat, Aug 27, 2011 at 10:06 AM, Matt Davis <mattdavis9@gmail.com> wrote:
> > On Sat, Aug 27, 2011 at 09:27:49AM +0200, Richard Guenther wrote:
> >> On Sat, Aug 27, 2011 at 4:47 AM, Matt Davis <mattdavis9@gmail.com> wrote:
> >> > Hello,
> >> > I am having the compiler insert a call to a function which is defined inside
> >> > another object file.  However, during inline expansion via expand_call_inline(),
> >> > the following assertion fails in tree-inline.c:
> >> >>> 3775: edge = cgraph_edge (id->dst_node, stmt);
> >> >>> 3776: gcc_checking_assert (cg_edge);
> >> >
> >> > cg_node comes back as being NULL since there is only one callee and no indirect
> >> > calls, the function that has the inserted call is main().  Is there something I
> >> > forgot to do after inserting the gimple call statement?  This works fine without
> >> > optimization.
> >>
> >> Dependent on where you do it you have to add/rebuild cgraph edges.
> >
> > Thanks Richard,
> > I tired "rebuild_cgraph_edges()" before I sent the initial email.
> > Unfortunately, when I call that function after I add the statement, in an IPA
> > pass, the resulting binary does not link, as it does not seem able to resolve
> > the symbol to the callee.  Maybe providing more context would help make more
> > sense.  insert_func_call inserts the call by adding a new gimple call statement.
> > I've done this tons of times before, but it seems with -O the callgraph isn't
> > happy.
> 
> If you are doing this from an IPA pass you have to add the edge manually using
> update_edges_for_call_stmt.

Thanks Richard,
I was unable to properly use update_edges_for_call_stmt.  It seems that routine
is for updating an existing call.  In my case I am inserting a new gimple call
via gsi_insert_before() with GSI_NEW_STMT.  As a gimple pass, this works fine.
I appreciate all of your correspondence.

-Matt



More information about the Gcc mailing list