On Fri, Feb 22, 2013 at 3:08 PM, Easwaran Raman <era...@google.com> wrote:
> Hi,
>
> Consider the following function
>
> A *CheckNotNull (A *a_ptr) {
>   if (a_ptr == NULL) {
>     // Code with non-trivial code size
>   }
>   return a_ptr;
> }
>
> If this is invoked as CheckNotNull(&a), the inliner should be able to
> infer that  (a_ptr == 0) predicate is false and estimate the size and
> time based on that. For this to happen, there should be a way to
> specify that the  parameter is non-NULL.  Is it reasonable to replace
> trees corresponding to IPA_JF_CONST with a value_range and encode
> non-NULL as an anti_range?

I think this will be useful. Function splitting/outliining may or may
not happen for this case, making inline size estimation smarter is a
good way to go. Also consider the following scenario
(interprprocedural VRP:

int foo (int a)
{
   if (a > 0)
   {
      ...
   }
   ...
}

int bar ()
{

   if (a > 9) {

     foo (a) ;       // more precise size estimation.
     ....
  }
  else
  {
     foo (a + 1);
   }
 ...
}


More generally, can the following be handled?

nt foo (int a, int b)
{
   if (a > b)
   {
      ...
   }
   ...
}

int bar ()
{

   if (a > b) {

     foo (a, b) ;       // more precise size estimation.
     ....
  }
  else
  {
     foo (b, a);
   }
 ...
}


>
> This would mean that ipa-cp versions can not be created by just
> initializing the parameter with the propagated constant. This leads to
> another thought:  Versioning of functions based on values may not be
> ideal in the context of cloning. Consider a similar function:
>
> int foo (int n) {
>   if (n == 0)
>   {
>     // Non-trivial amount of code
>   }
>   // Some more code, but no/few expressions involving N and a constant.
> }
>
>  If ipa-cp-clone is on, we might end up with many clones for foo for
> different non-zero values for N. Instead, it may be beneficial to
> create just a single  foo.non_zeroN and reap most of the benefits of
> cloning. Cloning could be done primarily based on the number of
> predicates of the function that are true at the call site. (Doing so
> might also help avoid putting clone of comdats as file-locals as one
> could generate the clone name based on the predicate and put in its
> comdat group. )
>
> Are these worth pursuing?
>

IMO, yes. The more context you can pass to the callee for inline/clone
benefit/cost analysis, the better.  Other things include alias info,
alignment info etc.

David



> Thanks,
> Easwaran

Reply via email to