This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Howto avoid temporaries instantiated fully?


Hi!

While designing an iterator for iterating a 3d grid for
numerical physics, I stumbled over the problem, that gcc
fully instantiates a temporary for an operator like
[full compilable example attached, compile with g++ -S -O3 and
see the difference in output for both methods]

Iterator operator+(int i) const {
  Iterator it(*this);
  it.m_i += i;
  return it;
}

even if only the (updated) m_i field of the new instance
is used (read once) in uses like

  array(i+1);

which is optimized ok if written as (ugly) array(i,+1) and
defining

  double& operator(const Iterator& i, int d) { return a[i.m_i+d]; }

which the compiler should be able to guess.

Is there a way to make the compiler optimize away this local
temporary class instance?

Please CC me, I'm not on the list.

Richard.

--
Richard Guenther <richard.guenther@uni-tuebingen.de>
WWW: http://www.tat.physik.uni-tuebingen.de/~rguenth/
The GLAME Project: http://www.glame.de/

Attachment: iterator.cpp
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]