> > > 
> > > The problem with instrumented call is that instrumented function
> > > returns two values and call lhs gets only the first one. Thus we
> > > generate bndret call to get the second one to build own return with
> > > two values.
> > 
> > I see, patch is OK then (preferably merging as much as possible with 
> > ipa-split)
> > 
> > Honza
> 
> Here is a refactored version with common code moved to tree-chkp.c.  
> Bootstrapped and tested on x86_64-unknown-linux-gnu.  Does it look OK?
> 
> Thanks,
> Ilya
> --
> gcc/
> 
> 2015-04-07  Ilya Enkovich  <ilya.enkov...@intel.com>
> 
>       * tree-chkp.h (chkp_insert_retbnd_call): New.
>       * tree-chkp.c (chkp_insert_retbnd_call): New.
>       * ipa-split.c (insert_bndret_call_after): Remove.
>       (split_function): Use chkp_insert_retbnd_call.
>       * cgraphunit.c (cgraph_node::expand_thunk): Build returned
>       bounds for instrumented functions.
> 
> gcc/testsuite/
> 
> 2015-04-07  Ilya Enkovich  <ilya.enkov...@intel.com>
> 
>       * gcc/testsuite/gcc.target/i386/thunk-retbnd.c: New.

OK, thanks!
> @@ -1697,6 +1698,17 @@ cgraph_node::expand_thunk (bool output_asm_thunks, 
> bool force_gimple_thunk)
>        gsi_insert_after (&bsi, call, GSI_NEW_STMT);
>        if (!alias_is_noreturn)
>       {
> +       if (instrumentation_clone
> +           && !DECL_BY_REFERENCE (resdecl)
> +           && restmp
> +           && BOUNDED_P (restmp))
> +         {
> +           resbnd = chkp_insert_retbnd_call (NULL, restmp, &bsi);
> +           create_edge (get_create (gimple_call_fndecl (gsi_stmt (bsi))),
> +                        as_a <gcall *> (gsi_stmt (bsi)),
> +                        callees->count, callees->frequency);
> +         }

Is there any reasons the rtbnd builtin call is not gimple_call_internal_p?
That way we would not need to worry about representing this in callgraph.

Honza

Reply via email to