------- Additional Comments From rakdver at atrey dot karlin dot mff dot cuni 
dot cz  2005-05-22 22:15 -------
Subject: Re:  missed optimization due with const function and pulling out of 
loops


> > ------- Additional Comments From rakdver at atrey dot karlin dot mff dot 
> > cuni dot cz  2005-05-22 21:50 -------
> > Subject: Re:  missed optimization due with const function and pulling out 
> > of loops
> > 
> > > const is different from pure, const cannot read from memory.
> > 
> > this is something that have been discussed many times; some people like
> > the definition with "behaves like if" (that enables you for example to
> > cache or precompute the results of the function) more, and it is used in
> > several existing programs.  Anyway, the argument that the function may
> > be costly is valid regardless of whether you want to strictly enforce
> > the no memory access constraint, or whether you use the more useful
> > definition.
> > 
> 
> These people are strictly wrong, and will in fact get burned by the new
> pure/const detection (which is better about recursive calls).
> 
> We shouldn't let people who have the wrong definition of const get in
> the way of optimization

on the other hand, we should not let the definition make the concept
useless.  Being able to make

int something(int i)
{
  static int a[100];

  if (a[i] == 0)
    a[i] = somewhat_slow_computation;
  return a[i];
}

const is fairly useful.

Anyway, moving possibly non-executed const function may cause also
other problems.  Consider

int my_fancy_divide(int x, int z) attribute(const)
{
  return x / z;
}

while (...)
  {
    if (z != 0)
      x = my_fancy_divide (x,z)
  }

Thus you would also have to require the const function to be total.
Making const still more and more useless.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21712

Reply via email to