> > > > > > 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