On Thu, Oct 31, 2013 at 10:02 AM, Ilya Enkovich <enkovich....@gmail.com> wrote: > Hi, > > Here is a patch which hadles the problem with optimization of > BUILT_IN_CHKP_ARG_BND calls. Pointer Bounds Checker expects that argument of > this call is a default SSA_NAME of the PARM_DECL whose bounds we want to get. > The problem is in optimizations which may replace arg with it's copy or a > known value. This patch suppress such modifications.
This doesn't seem like a good fix. I suppose you require the same on RTL, that is, have the incoming arg reg coalesced with the use? In that case better set SSA_NAME_OCCURS_IN_ABNORMAL_PHI. Richard. > Thanks, > Ilya > -- > > gcc/ > > 2013-10-28 Ilya Enkovich <ilya.enkov...@intel.com> > > * tree-into-ssa.c: Include "target.h" > (rewrite_update_stmt): Skip BUILT_IN_CHKP_ARG_BND calls. > * tree-ssa-dom.c: Include "target.h" > (cprop_into_stmt): Skip BUILT_IN_CHKP_ARG_BND calls. > > > diff --git a/gcc/tree-into-ssa.c b/gcc/tree-into-ssa.c > index 981e9f4..8d48f6d 100644 > --- a/gcc/tree-into-ssa.c > +++ b/gcc/tree-into-ssa.c > @@ -46,6 +46,7 @@ along with GCC; see the file COPYING3. If not see > #include "params.h" > #include "diagnostic-core.h" > #include "tree-into-ssa.h" > +#include "target.h" > > > /* This file builds the SSA form for a function as described in: > @@ -1921,8 +1922,14 @@ rewrite_update_stmt (gimple stmt, gimple_stmt_iterator > gsi) > } > > /* Rewrite USES included in OLD_SSA_NAMES and USES whose underlying > - symbol is marked for renaming. */ > - if (rewrite_uses_p (stmt)) > + symbol is marked for renaming. > + Skip calls to BUILT_IN_CHKP_ARG_BND whose arg should never be > + renamed. */ > + if (rewrite_uses_p (stmt) > + && !(flag_check_pointer_bounds > + && (gimple_code (stmt) == GIMPLE_CALL) > + && gimple_call_fndecl (stmt) > + == targetm.builtin_chkp_function (BUILT_IN_CHKP_ARG_BND))) > { > if (is_gimple_debug (stmt)) > { > diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c > index 211bfcf..445278a 100644 > --- a/gcc/tree-ssa-dom.c > +++ b/gcc/tree-ssa-dom.c > @@ -45,6 +45,7 @@ along with GCC; see the file COPYING3. If not see > #include "params.h" > #include "tree-ssa-threadedge.h" > #include "tree-ssa-dom.h" > +#include "target.h" > > /* This file implements optimizations on the dominator tree. */ > > @@ -2266,6 +2267,16 @@ cprop_into_stmt (gimple stmt) > use_operand_p op_p; > ssa_op_iter iter; > > + /* Call used to obtain bounds of input arg by Pointer Bounds Checker > + should not be optimized. Argument of the call is a default > + SSA_NAME of PARM_DECL. It should never be replaced by value. */ > + if (flag_check_pointer_bounds && gimple_code (stmt) == GIMPLE_CALL) > + { > + tree fndecl = gimple_call_fndecl (stmt); > + if (fndecl == targetm.builtin_chkp_function (BUILT_IN_CHKP_ARG_BND)) > + return; > + } > + > FOR_EACH_SSA_USE_OPERAND (op_p, stmt, iter, SSA_OP_USE) > cprop_operand (stmt, op_p); > }