From: Paolo Carlini <pcarlini@unitus.it>
To: Daniel Berlin <dan@dberlin.org>
Cc: gcc@gcc.gnu.org
Subject: Re: g++ and aliasing bools
Date: Fri, 25 Jan 2002 10:54:00 -0000 [thread overview]
Message-ID: <3C519C19.BECE6D7D@unitus.it> (raw)
In-Reply-To: <Pine.LNX.4.44.0201251157500.31319-100000@dberlin.org>
Daniel Berlin wrote:
[...]
> The second is what we are trying to change, if it hasn't clicked by now.
> We want to say that everything besides simple c-like structs can alias
> anything, and simple c-like structs have the same aliasing properties as
> c structs.
>
> Simple c-like structs means classes and structs in C++ which have no base
> classes, and no virtual functions.
> If people agree that these are equivalent to c-structs (from an aliasing
> perspective, obviously there are some formal syntactical differences), then we can.
> If they don't, then apparently someone else needs to take the time to
> prove it formally, at which point we can add 6 lines of code (or
> whatever, it depends on whether someone can point out any small
> difference in aliasing properties that need to be accounted for) to g++ to
> do it.
>
> There is no "problem" as aliasing for C++ works today, because it doesn't
> do anything for things that aren't in reality, C.
>
> Therein lies the other half of why i don't think the above needs to be
> proven formally, if they are agreed to be equivalent
>
> Already, for non-aggregate types, the routine for C++ TBAA simply calls
> the c routine.
>
> The whole code is literally:
>
> cxx_get_alias_set ()
> {
> if (AGGREGATE_TYPE)
> return 0;
> return c_get_alias_set();
> }
>
> The above suggestion is simply saying "AGGREGATE_TYPE is way too
> conservative, we only need to return 0 for those things that have C++
> specific features that may affect aliasing, like virtual functions, or
> inheritance", so let's change it to:
>
> cxx_get_alias_set ()
> {
> if (AGGREGATE_TYPE && HAS_BASECLASSES && HAS_VIRTUALS)
> return 0;
> return c_get_alias_set();
> }
[...]
From my, utterly naive point of view, this looks like an incredibly appealing
proposal!!!!
Consider my beloved testcase (distilled from Haney Speed), which is currently
optimized *very* bad by g++:
/////////////////
class RealMatrix {
public:
float &index(int i, int j)
{
return d[i - 1 + n[0] * (j - 1)];
}
float index(int i, int j) const
{
return d[i - 1 + n[0] * (j - 1)];
}
int dim(int i) const { return n[i - 1]; }
private:
float *d;
int n[4];
};
void rmatMul(RealMatrix &t, const RealMatrix &a, const RealMatrix &b)
{
const int M = a.dim(1), N = b.dim(2), K = b.dim(1);
for (int j = 1; j <= N; j++)
{
for (int k = 1; k <= K; k++)
{
float temp = b.index(k, j);
if (temp != 0.0)
{
for (int i = 1; i <= M; i++)
t.index(i, j) += temp * a.index(i, k);
}
}
}
}
///////////////////////
Honestly, I cannot imagine why the bulk of the C aliasing analysis machinery could not
be used for it!!!!
Cheers,
Paolo.
next prev parent reply other threads:[~2002-01-25 17:56 UTC|newest]
Thread overview: 97+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-01-25 8:55 Robert Dewar
2002-01-25 9:21 ` Daniel Berlin
2002-01-25 10:00 ` Daniel Berlin
2002-01-25 10:54 ` Paolo Carlini [this message]
2002-01-25 11:37 ` Daniel Berlin
2002-01-25 11:45 ` David Edelsohn
2002-01-25 11:53 ` Joe Buck
2002-01-25 12:09 ` Mark Mitchell
2002-01-25 12:28 ` Paolo Carlini
2002-01-25 13:49 ` Mark Mitchell
2002-01-25 14:19 ` Joe Buck
2002-01-25 14:21 ` Mark Mitchell
2002-01-25 15:41 ` Neil Booth
2002-01-25 16:04 ` Joe Buck
2002-01-25 17:37 ` Paolo Carlini
2002-01-25 18:10 ` Daniel Berlin
2002-01-27 5:11 ` Mark Mitchell
2002-01-27 5:34 ` Daniel Berlin
2002-01-28 10:39 ` Joe Buck
2002-01-28 10:51 ` Joe Buck
2002-01-28 15:59 ` Mark Mitchell
2002-01-28 17:11 ` Daniel Berlin
2002-01-28 17:28 ` Joe Buck
2002-01-28 18:14 ` Daniel Berlin
2002-01-28 17:18 ` Joe Buck
2002-01-28 18:05 ` Mark Mitchell
2002-01-28 18:50 ` Joe Buck
2002-01-28 19:33 ` Mark Mitchell
2002-01-28 17:40 ` Daniel Berlin
2002-01-28 21:55 ` Daniel Berlin
2002-01-28 22:02 ` Alexandre Oliva
2002-01-28 22:12 ` Mark Mitchell
2002-01-25 13:07 ` Joe Buck
2002-01-25 15:43 ` Daniel Berlin
2002-01-25 16:03 ` Joe Buck
2002-01-25 15:13 ` Daniel Berlin
2002-01-25 12:10 ` Paolo Carlini
2002-01-25 13:16 ` Joe Buck
2002-01-25 15:23 ` Daniel Berlin
2002-01-25 12:05 ` Mark Mitchell
2002-01-25 22:14 ` Daniel Berlin
2002-01-26 3:46 ` Mark Mitchell
-- strict thread matches above, loose matches on Subject: below --
2002-01-25 14:49 mike stump
2002-01-25 12:23 Robert Dewar
2002-01-25 13:29 ` Joe Buck
2002-01-25 12:06 mike stump
2002-01-25 9:13 Robert Dewar
2002-01-25 8:35 Robert Dewar
2002-01-25 8:54 ` Daniel Berlin
2002-01-25 8:33 Richard Kenner
2002-01-25 8:32 Robert Dewar
2002-01-25 8:53 ` Daniel Berlin
2002-01-25 9:39 ` Joe Buck
2002-01-25 8:28 Robert Dewar
2002-01-25 8:49 ` Daniel Berlin
2002-01-25 7:51 Robert Dewar
2002-01-25 8:18 ` Daniel Berlin
2002-01-25 8:20 ` Daniel Berlin
2002-01-25 7:38 Robert Dewar
2002-01-25 8:11 ` Daniel Berlin
2002-01-25 14:09 ` Gabriel Dos Reis
2002-01-25 7:30 Richard Kenner
2002-01-25 7:30 Richard Kenner
2002-01-25 7:33 ` Daniel Berlin
2002-01-25 15:43 ` Daniel Berlin
2002-01-25 7:23 Richard Kenner
2002-01-25 7:24 ` Daniel Berlin
2002-01-25 7:05 Richard Kenner
2002-01-25 8:59 ` Paolo Carlini
2002-01-24 16:09 Richard Kenner
2002-01-24 15:30 Richard Kenner
2002-01-25 2:16 ` Gabriel Dos Reis
2002-01-25 3:04 ` Paolo Carlini
2002-01-25 4:17 ` Gabriel Dos Reis
2002-01-25 4:35 ` Paolo Carlini
2002-01-25 6:34 ` Daniel Berlin
2002-01-25 7:17 ` Daniel Berlin
2002-01-25 13:57 ` Gabriel Dos Reis
2002-01-25 14:47 ` Tim Hollebeek
2002-01-23 17:56 Dan Nicolaescu
2002-01-23 18:27 ` Daniel Berlin
2002-01-23 18:48 ` Dan Nicolaescu
2002-01-23 19:16 ` Daniel Berlin
2002-01-24 14:15 ` Mark Mitchell
2002-01-24 14:16 ` Daniel Berlin
2002-01-24 14:27 ` Mark Mitchell
2002-01-24 14:35 ` Daniel Berlin
2002-01-24 15:06 ` Mark Mitchell
2002-01-24 15:08 ` Paolo Carlini
2002-01-24 15:18 ` Dan Nicolaescu
2002-01-24 15:36 ` Mark Mitchell
2002-01-25 2:25 ` Daniel Berlin
2002-01-25 15:48 ` Dan Nicolaescu
2002-01-25 20:22 ` Joe Buck
2002-01-25 23:59 ` Daniel Berlin
2002-01-27 17:04 ` Dan Nicolaescu
2002-01-27 17:59 ` Paolo Carlini
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=3C519C19.BECE6D7D@unitus.it \
--to=pcarlini@unitus.it \
--cc=dan@dberlin.org \
--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).