public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Florian Weimer <fw@deneb.enyo.de>
To: "gcc@gcc.gnu.org" <gcc@gcc.gnu.org>
Subject: Re: [RFC] Contributing tree-ssa to mainline
Date: Sat, 17 Jan 2004 13:47:00 -0000	[thread overview]
Message-ID: <20040117134753.GA14621@deneb.enyo.de> (raw)
In-Reply-To: <1074309907.3147.139.camel@frodo.toronto.redhat.com>

Diego Novillo wrote:

> On Fri, 2004-01-16 at 22:24, Richard Kenner wrote:
> 
> > Remember that the last time we had the discussion of the timing of tree-ssa,
> > people claimed it was "essential" for 3.5 since there was a tremendous
> > improvement on some C++ cases.  So let's see those cases.
> >
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12747

I've been toying with boost::tie() lately, and the temporary tuple is
still *not* eleminated in the interesting cases, unfortunately.

For an example, look at the code generated for bar(foo&) and baz(foo&)
below, which should be quite similar once the template metaprogram has
been expanded.  However, in the template case, indirection through
references still clutters the generated machine code.

We can do better; bar_neg(foo&) and baz_neg(foo&) show this.  The
template version results in identical code in this case, except that
unnecessary space is allocated on the stack.  (However, this
optimization happens on mainline, too, not just on the branch.)

(Probably this is a different issue, but I had hoped that the tree-ssa
branch would somehow improve things in this area.)

#include <boost/tuple/tuple.hpp>

struct foo {
  int a, b, c, d, e, f, g, h, i, j;
};

template <typename T>
struct make_abs_t
{
  static void doit(const T& t)
  {
    if (t.head < 0) {
      t.head = -t.head;
    }
    make_abs_t<typename T::tail_type>::doit(t.tail);
  }
};

template <typename Car>
struct make_abs_t<boost::tuples::cons<Car, boost::tuples::null_type> >
{
  static void doit(const boost::tuples::cons<Car, boost::tuples::null_type>& t)
  {
    if (t.head < 0) {
      t.head = -t.head;
    }
  }
};

template <typename T>
inline void make_abs(const T& t)
{
  make_abs_t<T>::doit(t);
}

void bar(foo& x)
{
  make_abs(boost::tie(x.a, x.b, x.c, x.d, x.e, x.f, x.g, x.h, x.i, x.j));
}

void baz(foo& x)
{
  if (x.a < 0) x.a = -x.a;
  if (x.b < 0) x.b = -x.b;
  if (x.c < 0) x.c = -x.c;
  if (x.d < 0) x.d = -x.d;
  if (x.e < 0) x.e = -x.e;
  if (x.f < 0) x.f = -x.f;
  if (x.g < 0) x.g = -x.g;
  if (x.h < 0) x.h = -x.h;
  if (x.i < 0) x.i = -x.i;
  if (x.j < 0) x.j = -x.j;
}

template <typename T>
struct make_neg_t
{
  static void doit(const T& t)
  {
    t.head = -t.head;
    make_neg_t<typename T::tail_type>::doit(t.tail);
  }
};

template <typename Car>
struct make_neg_t<boost::tuples::cons<Car, boost::tuples::null_type> >
{
  static void doit(const boost::tuples::cons<Car, boost::tuples::null_type>& t)
  {
    t.head = -t.head;
  }
};

template <typename T>
inline void make_neg(const T& t)
{
  make_neg_t<T>::doit(t);
}

void bar_neg(foo& x)
{
  make_neg(boost::tie(x.a, x.b, x.c, x.d, x.e, x.f, x.g, x.h, x.i, x.j));
}

void baz_neg(foo& x)
{
  x.a = -x.a;
  x.b = -x.b;
  x.c = -x.c;
  x.d = -x.d;
  x.e = -x.e;
  x.f = -x.f;
  x.g = -x.g;
  x.h = -x.h;
  x.i = -x.i;
  x.j = -x.j;
}

  parent reply	other threads:[~2004-01-17 13:47 UTC|newest]

Thread overview: 193+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-01-17  3:21 Richard Kenner
2004-01-17  3:26 ` Diego Novillo
2004-01-17  5:52   ` Per Bothner
2004-01-17  6:09     ` Andrew Pinski
2004-01-18  2:46       ` Scott A Crosby
2004-01-17  8:00     ` Diego Novillo
2004-01-17 13:47   ` Florian Weimer [this message]
2004-01-17 14:48     ` Daniel Berlin
2004-01-17 14:53       ` Florian Weimer
2004-01-17 15:14         ` Daniel Berlin
2004-01-17 17:07       ` Joseph S. Myers
2004-01-17 17:14         ` Diego Novillo
2004-01-17 17:40           ` Daniel Berlin
2004-01-17 18:34         ` Mark Mitchell
2004-01-17 14:57     ` Diego Novillo
2004-01-19 23:30 ` Joe Buck
2004-01-19 23:43   ` Daniel Berlin
2004-01-20  0:20     ` Dale Johannesen
2004-01-20  3:12     ` Geert Bosch
2004-01-20  3:27       ` Diego Novillo
2004-01-27 21:24         ` tree-ssa/13756 Documentation issues Geert Bosch
  -- strict thread matches above, loose matches on Subject: below --
2004-01-20 12:36 [RFC] Contributing tree-ssa to mainline Richard Kenner
2004-01-20 15:06 ` Daniel Jacobowitz
2004-01-20 15:14 ` Steven Bosscher
2004-01-20 16:14 ` Diego Novillo
2004-01-20 11:46 Richard Kenner
2004-01-20 11:57 ` Steven Bosscher
2004-01-20  4:35 Robert Dewar
2004-01-20  4:23 Richard Kenner
2004-01-20  4:28 ` Andrew Pinski
2004-01-20 11:15 ` Diego Novillo
2004-01-19 23:40 Richard Kenner
2004-01-19 23:15 Richard Kenner
2004-01-19 23:31 ` tm_gccmail
2004-01-19 19:13 Richard Kenner
2004-01-19 18:06 Richard Kenner
2004-01-19 16:12 Richard Kenner
2004-01-19 15:05 Richard Kenner
2004-01-19 15:56 ` law
2004-01-19 22:41 ` Andrew Pinski
2004-01-19 14:17 Richard Kenner
2004-01-19 14:46 ` Diego Novillo
2004-01-19 17:58 ` Dan Nicolaescu
2004-01-19 14:02 Richard Kenner
2004-01-19 12:29 Richard Kenner
2004-01-19 12:24 Richard Kenner
2004-01-19 12:31 ` Andrew Haley
2004-01-19 12:36 ` Paul Brook
2004-01-19 12:39   ` Paul Brook
2004-01-19 12:38 ` Andrew Haley
2004-01-19 12:49 ` Diego Novillo
2004-01-19 17:42   ` Geert Bosch
2004-01-19 17:51     ` Diego Novillo
2004-01-19 17:56       ` John R. Shannon
2004-01-19 18:02         ` Diego Novillo
2004-01-19 18:09       ` Geert Bosch
2004-01-19 18:27       ` Robert Dewar
2004-01-19 12:51 ` Jan Hubicka
2004-01-19 15:51   ` law
2004-01-19 17:30     ` Robert Dewar
2004-01-19 17:48       ` law
2004-01-19 17:57         ` Diego Novillo
2004-01-19 13:26 ` Theodore Papadopoulo
2004-01-19 14:23 ` Robert Dewar
2004-01-19 18:00 ` Tom Tromey
2004-01-19 18:11   ` Andrew Haley
2004-01-19 18:39   ` Jeff Sturm
2004-01-19 11:44 Richard Kenner
2004-01-19 12:00 ` Jan Hubicka
2004-01-19 12:13   ` Andrew Pinski
2004-01-19 12:12 ` Richard Henderson
2004-01-18 13:09 Richard Kenner
2004-01-17 17:17 Dara Hazeghi
2004-01-19 17:23 ` law
2004-01-17 13:35 Richard Kenner
2004-01-17 14:05 ` Steven Bosscher
2004-01-17 15:26   ` Andreas Jaeger
2004-01-17 13:33 Richard Kenner
2004-01-17 13:29 Richard Kenner
2004-01-17 17:58 ` Diego Novillo
2004-01-17 13:20 Richard Kenner
2004-01-17  3:26 Richard Kenner
2004-01-17 14:49 ` Scott Robert Ladd
2004-01-17  3:15 Robert Dewar
2004-01-17  2:56 Richard Kenner
2004-01-17  3:14 ` Steven Bosscher
2004-01-17  3:20   ` Diego Novillo
2004-01-17  2:52 Richard Kenner
2004-01-17  3:12 ` Steven Bosscher
2004-01-17  2:39 Richard Kenner
2004-01-17  3:04 ` Robert Dewar
2004-01-17 16:55   ` Gerald Pfeifer
2004-01-19 14:48 ` Lars Segerlund
2004-01-19 23:37   ` Joe Buck
2004-01-17  2:28 Richard Kenner
2004-01-17  3:09 ` Steven Bosscher
2004-01-17  5:04   ` Roger Sayle
2004-01-17  5:31     ` Diego Novillo
2004-01-17  6:04       ` Roger Sayle
2004-01-17  6:19       ` David Edelsohn
2004-01-17 14:54       ` Scott Robert Ladd
2004-01-17 14:01     ` Jan Hubicka
2004-01-17 14:20       ` Roger Sayle
2004-01-17 14:29         ` Roger Sayle
2004-01-17 14:44           ` Jan Hubicka
2004-01-17 15:07             ` Jan Hubicka
2004-01-17 14:37         ` Jan Hubicka
2004-01-17 21:32   ` Richard Henderson
2004-01-17 21:45     ` Diego Novillo
2004-01-17  5:06 ` Diego Novillo
2004-01-17  6:13 ` law
2004-01-17 12:07   ` Robert Dewar
2004-01-17 12:15     ` John R. Shannon
2004-01-19 23:46   ` Joe Buck
2004-01-17  0:19 Diego Novillo
2004-01-17  0:31 ` Daniel Berlin
2004-01-17  0:35 ` Andrew Pinski
2004-01-17  0:44 ` Gerald Pfeifer
2004-01-17  0:53   ` law
2004-01-17  0:54   ` law
2004-01-17  1:37     ` Gerald Pfeifer
2004-01-17  1:46       ` Diego Novillo
2004-01-17  0:55   ` Eric Christopher
2004-01-17  2:48     ` Robert Dewar
2004-01-17 22:08       ` Eric Christopher
2004-01-17  1:02   ` Joseph S. Myers
2004-01-17  1:51     ` Kaveh R. Ghazi
2004-01-17  2:01       ` Gabriel Dos Reis
2004-01-17  2:17         ` Kaveh R. Ghazi
2004-01-17  3:01           ` Daniel Berlin
2004-01-17  2:19         ` Steven Bosscher
2004-01-17  3:02           ` Robert Dewar
2004-01-17  3:55             ` Andrew Pinski
2004-01-17  3:36       ` Diego Novillo
2004-01-17 13:06         ` Giovanni Bajo
2004-01-17 13:53         ` Jan Hubicka
2004-01-18  7:01           ` law
2004-01-17 17:04         ` Kaveh R. Ghazi
2004-01-17 17:16           ` Scott Robert Ladd
2004-01-17 17:30             ` Kaveh R. Ghazi
2004-01-17 17:50               ` Scott Robert Ladd
2004-01-17 17:37             ` Robert Dewar
2004-01-17 17:46               ` Joseph S. Myers
2004-01-17 17:51                 ` Robert Dewar
2004-01-17 18:11                   ` Joseph S. Myers
2004-01-17 19:12                     ` Arnaud Charlet
2004-01-29  0:36                       ` Robert Dewar
2004-01-29  0:00                     ` Robert Dewar
2004-01-17 17:58               ` Scott Robert Ladd
2004-01-17 18:09                 ` Joseph S. Myers
2004-01-17 18:06           ` Mark Mitchell
2004-01-18  7:15           ` law
2004-01-18 15:50             ` Daniel Berlin
2004-01-17 17:12         ` Kaveh R. Ghazi
2004-01-17 17:26           ` Diego Novillo
2004-01-17  5:31     ` Diego Novillo
2004-01-17  6:15       ` law
2004-01-17  6:22         ` Andrew Pinski
2004-01-17  6:38         ` Diego Novillo
2004-01-17 14:45         ` Daniel Berlin
2004-01-17 21:23           ` law
2004-01-17 21:33             ` Steven Bosscher
2004-01-18  2:34               ` Zack Weinberg
2004-01-17 11:16       ` Joseph S. Myers
2004-01-17 17:50         ` Diego Novillo
2004-01-17 18:06           ` Joseph S. Myers
2004-01-17 20:14           ` Steven Bosscher
2004-01-17 23:38         ` Toon Moene
2004-01-18  1:06           ` Phil Edwards
2004-01-17  2:15   ` Steven Bosscher
2004-01-17  3:01     ` Robert Dewar
2004-01-17 11:08 ` Andrew Walrond
2004-01-17 23:33   ` Toon Moene
2004-01-17 14:30 ` Scott Robert Ladd
2004-01-17 14:57   ` Paul Brook
2004-01-17 15:28     ` Scott Robert Ladd
2004-01-17 21:24     ` law
2004-01-17 21:47       ` Diego Novillo
2004-01-17 19:01 ` Mark Mitchell
2004-01-17 19:23   ` Andrew Pinski
2004-01-18  0:14     ` Toon Moene
2004-01-20  1:39   ` Kaveh R. Ghazi
2004-01-20  2:00     ` Gabriel Dos Reis
2004-01-20  2:08       ` Mark Mitchell
2004-01-20  2:31         ` Gabriel Dos Reis
2004-01-20 15:19       ` Scott Robert Ladd
2004-01-20 15:27         ` Andrew Haley
2004-01-20  2:09     ` Diego Novillo
2004-01-22  8:49     ` Gerald Pfeifer
2004-01-17 19:22 ` Daniel Jacobowitz
2004-01-17 19:34   ` Richard Guenther
2004-01-17 20:21     ` Steven Bosscher
2004-01-18  1:24     ` David Edelsohn

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040117134753.GA14621@deneb.enyo.de \
    --to=fw@deneb.enyo.de \
    --cc=gcc@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).