On Tue, Nov 19, 2013 at 8:02 PM, Jeff Law <l...@redhat.com> wrote: > On 11/18/13 14:03, Ilya Enkovich wrote: >> >> 2013/11/19 Jeff Law <l...@redhat.com>: >>> >>> On 11/18/13 12:16, Ilya Enkovich wrote: >>>> >>>> >>>> With current recursion elimination we will have: >>>> >>>> test (int *param1) >>>> { >>>> <bb1>: >>>> >>>> <bb2>: >>>> _7 = PHI<param1(D) (bb1), _6 (bb2)> >>>> bounds2 = __builtin_arg_bounds (_7) -- WRONG >>> >>> >>> I wouldn't say it's wrong. It's conservatively correct if properly >>> implemented. Why precisely do you consider this wrong? If your code >>> can't >>> handle it, it really should be fixed. >> >> >> It is wrong because __builtin_arg_bounds is used to get bounds of >> input parameter and PHI node here is not an input parameter. > > OK, now we're getting somewhere. So we've got this odd little function > which only works on parameters. I can't help but feel this is a bit of > mis-design coming back to haunt us and I wonder if we're going to see other > instances of this kind of problem.
Right. > There's something just wrong with the semantics of __builtin_arg_bounds, but > I'm having trouble putting my finger on it. Well, the issue is that it accepts any pointer argument as input. I originally thought it may just get an integer constant argument - the argument position. It really seems to me that we have __builtin_arg_boundsN (), but to avoid having N builtins we specify N via an argument to the function. But as it may not change we should use something that cannot change - like a constant. A constant that identifies a parameter is one that gives its position for example. Note that any restrictions you impose on what is "valid" for GIMPLE should be verified in tree-cfg.c:verify_gimple_* - in the __builtin_arg_bounds call case in verify_gimple_call. Richard. > > Correctl >> >> handling of __builtin_arg_bounds in this 'wrong' example requires >> adding it a PHI node semantics based on it's arg. For me it seems >> more complex then generating a regular PHI node for bounds and makes >> GIMPLE less readable. > > But presumably you have code to merge bound information already, right? You > need that for PHI nodes. Can't you use that to walk up the use-def chains > and build the bounds information? > > Or if you want to fix the tailcall stuff, you can start down that direction. > I don't think that'll fix the nagging concerns about the overall semantics > of builtin_arg_bounds, but it might be enough for you to go forward. > > jeff