This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
optimization/5739: "const" and "pure" function attributes pessimize code
- From: Dan Nicolaescu <dann at godzilla dot ics dot uci dot edu>
- To: gcc-gnats at gcc dot gnu dot org
- Date: 20 Feb 2002 22:08:46 -0000
- Subject: optimization/5739: "const" and "pure" function attributes pessimize code
- Reply-to: Dan Nicolaescu <dann at godzilla dot ics dot uci dot edu>
>Number: 5739
>Category: optimization
>Synopsis: "const" and "pure" function attributes pessimize code
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: unassigned
>State: open
>Class: pessimizes-code
>Submitter-Id: net
>Arrival-Date: Wed Feb 20 14:16:00 PST 2002
>Closed-Date:
>Last-Modified:
>Originator: Dan Nicolaescu <dann@godzilla.ics.uci.edu>
>Release: CVS
>Organization:
>Environment:
sparc-sun-solaris2.8
>Description:
"const" and "pure" function attributes pessimize code
The following code:
#ifdef MY_PURE
extern double mycos (double) __attribute__ ((pure));
extern double mysin (double) __attribute__ ((pure));
#elif defined MY_CONST
extern double mycos (double) __attribute__ ((const));
extern double mysin (double) __attribute__ ((const));
#else
extern double mycos (double);
extern double mysin (double);
#endif
struct my_complex
{
double re;
double im;
};
int main(void) {
struct my_complex u[2048];
int i;
for (i = 0; i < 2048; ++i)
{
u[i].re = 1.0;
u[i].im = 0.0;
}
for (i = 0; i < 2048; ++i) {
struct my_complex *p = u;
unsigned int j;
for (j = 0; j < 2048; ++j) {
double ur = p->re;
double ui = p->im;
double u2 = ur * ur + ui * ui;
double cosv = mycos (u2);
double sinv = mysin (u2);
p->re = p->re * cosv - p->im * sinv;
p->im = p->im * sinv + p->re * cosv;
++p;
}
}
}
generates worse code when compiled with -O2 -DMY_PURE or
-O2 -DMY_CONST than when compiled with -O2 on SPARC with
GCC from CVS on sparc
Attached is an sdiff of the assembly files resulted when compiling with -O2 (left) and -O2 -DMY_CONST (right)
>How-To-Repeat:
Compile the above code with -O2 and -O2 -DMY_CONST and
look at the assembly files.
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="PURE.sdiff"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="PURE.sdiff"
CS5maWxlCSJteS1ub3JtLWNvbXBsZXguYyIJCQkJCS5maWxlCSJteS1ub3JtLWNvbXBsZXguYyIK
CS5zZWN0aW9uCSIucm9kYXRhIgkJCQkJLnNlY3Rpb24JIi5yb2RhdGEiCgkuYWxpZ24gOAkJCQkJ
CQkuYWxpZ24gOAouTExDMDoJCQkJCQkJCS5MTEMwOgoJLmxvbmcJMTA3MjY5MzI0OAkJCQkJCS5s
b25nCTEwNzI2OTMyNDgKCS5sb25nCTAJCQkJCQkJLmxvbmcJMAoJLmFsaWduIDgJCQkJCQkJLmFs
aWduIDgKLkxMQzE6CQkJCQkJCQkuTExDMToKCS5sb25nCTAJCQkJCQkJLmxvbmcJMAoJLmxvbmcJ
MAkJCQkJCQkubG9uZwkwCgkuc2VjdGlvbgkiLnRleHQiCQkJCQkJLnNlY3Rpb24JIi50ZXh0IgoJ
LmFsaWduIDQJCQkJCQkJLmFsaWduIDQKCS5nbG9iYWwgbWFpbgkJCQkJCQkuZ2xvYmFsIG1haW4K
CS50eXBlCW1haW4sI2Z1bmN0aW9uCQkJCQkJLnR5cGUJbWFpbiwjZnVuY3Rpb24KCS5wcm9jCTA0
CQkJCQkJCS5wcm9jCTA0Cm1haW46CQkJCQkJCQltYWluOgoJISNQUk9MT0dVRSMgMAkJCQkJCQkh
I1BST0xPR1VFIyAwCglzZXRoaQklaGkoLTMyODk2KSwgJWcxCQkJICAgICAgfAkJc2V0aGkJJWhp
KC0zMjkxMiksICVnMQoJb3IJJWcxLCAlbG8oLTMyODk2KSwgJWcxCQkJICAgICAgfAkJb3IJJWcx
LCAlbG8oLTMyOTEyKSwgJWcxCglzYXZlCSVzcCwgJWcxLCAlc3AJCQkJCQlzYXZlCSVzcCwgJWcx
LCAlc3AKCSEjUFJPTE9HVUUjIDEJCQkJCQkJISNQUk9MT0dVRSMgMQoJc2V0aGkJJWhpKC0zMjc2
OCksICVvMAkJCQkJc2V0aGkJJWhpKC0zMjc2OCksICVvMAoJYWRkCSVmcCwgLTE2LCAlbDMJCQkJ
CQlhZGQJJWZwLCAtMTYsICVsMwoJYWRkCSVsMywgJW8wLCAlbzIJCQkJCQlhZGQJJWwzLCAlbzAs
ICVvMgoJc2V0aGkJJWhpKC5MTEMwKSwgJW8wCQkJCQkJc2V0aGkJJWhpKC5MTEMwKSwgJW8wCgls
ZGQJWyVvMCslbG8oLkxMQzApXSwgJWY0CQkJCQlsZGQJWyVvMCslbG8oLkxMQzApXSwgJWY0Cglt
b3YJMCwgJWwxCQkJCQkJCW1vdgkwLCAlbDEKCXNldGhpCSVoaSguTExDMSksICVvMAkJCQkJCXNl
dGhpCSVoaSguTExDMSksICVvMAoJbGRkCVslbzArJWxvKC5MTEMxKV0sICVmMgkJCQkJbGRkCVsl
bzArJWxvKC5MTEMxKV0sICVmMgouTEw1OgkJCQkJCQkJLkxMNToKCWZtb3ZzCSVmMiwgJWY2CQkJ
CQkJZm1vdnMJJWYyLCAlZjYKCXNsbAklbDEsIDQsICVvMQkJCQkJCXNsbAklbDEsIDQsICVvMQoJ
YWRkCSVvMSwgOCwgJW8wCQkJCQkJYWRkCSVvMSwgOCwgJW8wCglhZGQJJWwxLCAxLCAlbDEJCQkJ
CQlhZGQJJWwxLCAxLCAlbDEKCWNtcAklbDEsIDIwNDcJCQkJCQljbXAJJWwxLCAyMDQ3CglmbW92
cwklZjMsICVmNwkJCQkJCWZtb3ZzCSVmMywgJWY3CglzdGQJJWY2LCBbJW8yKyVvMF0JCQkJCQlz
dGQJJWY2LCBbJW8yKyVvMF0KCWZtb3ZzCSVmNCwgJWY2CQkJCQkJZm1vdnMJJWY0LCAlZjYKCWZt
b3ZzCSVmNSwgJWY3CQkJCQkJZm1vdnMJJWY1LCAlZjcKCWJsZQkuTEw1CQkJCQkJCWJsZQkuTEw1
CglzdGQJJWY2LCBbJW8yKyVvMV0JCQkJCQlzdGQJJWY2LCBbJW8yKyVvMV0KCW1vdgkwLCAlbDEJ
CQkJCQkJbW92CTAsICVsMQoJc2V0aGkJJWhpKC0zMjc2OCksICVsMgkJCQkJc2V0aGkJJWhpKC0z
Mjc2OCksICVsMgoJYWRkCSVsMywgJWwyLCAlaTAJCQkJCQlhZGQJJWwzLCAlbDIsICVpMAouTEwy
MzoJCQkJCQkJCS5MTDIzOgoJbW92CTAsICVsMAkJCQkJCQltb3YJMCwgJWwwCi5MTDE0OgkJCQkJ
CQkJLkxMMTQ6CglsZGQJWyVpMF0sICVmNAkJCQkgICAgICB8CQlsZGQJWyVpMF0sICVmNgoJc2V0
aGkJJWhpKDQyOTQ5MzM1MDQpLCAlbzIJCQkJCXNldGhpCSVoaSg0Mjk0OTMzNTA0KSwgJW8yCgls
ZGQJWyVpMCs4XSwgJWYyCQkJCSAgICAgIHwJCWxkZAlbJWkwKzhdLCAlZjgKCWZtdWxkCSVmNCwg
JWY0LCAlZjQJCQkJICAgICAgfAkJZm11bGQJJWY2LCAlZjYsICVmNAoJb3IJJW8yLCAxMDAwLCAl
bzIJCQkJICAgICAgfAkJb3IJJW8yLCA5OTIsICVvMgoJYWRkCSVvMiwgJWZwLCAlbzIJCQkJCQlh
ZGQJJW8yLCAlZnAsICVvMgoJYWRkCSVsMCwgMSwgJWwwCQkJCQkJYWRkCSVsMCwgMSwgJWwwCglm
bXVsZAklZjIsICVmMiwgJWYyCQkJCSAgICAgIHwJCWZtdWxkCSVmOCwgJWY4LCAlZjIKCWZhZGRk
CSVmNCwgJWYyLCAlZjQJCQkJCQlmYWRkZAklZjQsICVmMiwgJWY0CglzdGQJJWY0LCBbJWZwLTE2
XQkJCQkJCXN0ZAklZjQsIFslZnAtMTZdCglsZGQJWyVmcC0xNl0sICVvMAkJCQkJCWxkZAlbJWZw
LTE2XSwgJW8wCgljYWxsCW15Y29zLCAwCQkJCSAgICAgIDwKCXN0ZAklZjQsIFslbzJdCQkJCQkJ
c3RkCSVmNCwgWyVvMl0KCQkJCQkJCSAgICAgID4JCXNldGhpCSVoaSg0Mjk0OTMzNTA0KSwgJW8y
CgkJCQkJCQkgICAgICA+CQlvcgklbzIsIDk4NCwgJW8yCgkJCQkJCQkgICAgICA+CQlhZGQJJW8y
LCAlZnAsICVvMgoJCQkJCQkJICAgICAgPgkJc3RkCSVmNiwgWyVvMl0KCQkJCQkJCSAgICAgID4J
CXNldGhpCSVoaSg0Mjk0OTMzNTA0KSwgJW8yCgkJCQkJCQkgICAgICA+CQlvcgklbzIsIDk3Niwg
JW8yCgkJCQkJCQkgICAgICA+CQlhZGQJJW8yLCAlZnAsICVvMgoJCQkJCQkJICAgICAgPgkJY2Fs
bAlteWNvcywgMAoJCQkJCQkJICAgICAgPgkJc3RkCSVmOCwgWyVvMl0KCXNldGhpCSVoaSg0Mjk0
OTMzNTA0KSwgJW8wCQkJCQlzZXRoaQklaGkoNDI5NDkzMzUwNCksICVvMAoJb3IJJW8wLCAxMDAw
LCAlbzAJCQkJICAgICAgfAkJb3IJJW8wLCA5OTIsICVvMAoJYWRkCSVvMCwgJWZwLCAlbzAJCQkJ
CQlhZGQJJW8wLCAlZnAsICVvMAoJbGRkCVslbzBdLCAlZjQJCQkJCQlsZGQJWyVvMF0sICVmNAoJ
Zm1vdnMJJWYwLCAlZjYJCQkJICAgICAgfAkJZm1vdnMJJWYwLCAlZjIKCXN0ZAklZjQsIFslZnAt
MTZdCQkJCQkJc3RkCSVmNCwgWyVmcC0xNl0KCXNldGhpCSVoaSg0Mjk0OTMzNTA0KSwgJW8yCQkJ
CQlzZXRoaQklaGkoNDI5NDkzMzUwNCksICVvMgoJbGRkCVslZnAtMTZdLCAlbzAJCQkJCQlsZGQJ
WyVmcC0xNl0sICVvMAoJb3IJJW8yLCA5OTIsICVvMgkJCQkgICAgICB8CQlvcgklbzIsIDEwMDAs
ICVvMgoJZm1vdnMJJWYxLCAlZjcJCQkJICAgICAgfAkJZm1vdnMJJWYxLCAlZjMKCWFkZAklbzIs
ICVmcCwgJW8yCQkJCQkJYWRkCSVvMiwgJWZwLCAlbzIKCWNhbGwJbXlzaW4sIDAJCQkJCQljYWxs
CW15c2luLCAwCglzdGQJJWY2LCBbJW8yXQkJCQkgICAgICB8CQlzdGQJJWYyLCBbJW8yXQoJc2V0
aGkJJWhpKDQyOTQ5MzM1MDQpLCAlbzAJCQkJCXNldGhpCSVoaSg0Mjk0OTMzNTA0KSwgJW8wCglv
cgklbzAsIDk5MiwgJW8wCQkJCSAgICAgIHwJCW9yCSVvMCwgOTc2LCAlbzAKCWFkZAklbzAsICVm
cCwgJW8wCQkJCQkJYWRkCSVvMCwgJWZwLCAlbzAKCWxkZAlbJWkwXSwgJWYyCQkJCSAgICAgIHwJ
CWxkZAlbJW8wXSwgJWY4CgljbXAJJWwwLCAyMDQ3CQkJCSAgICAgIHwJCXNldGhpCSVoaSg0Mjk0
OTMzNTA0KSwgJW8yCglsZGQJWyVpMCs4XSwgJWY0CQkJCSAgICAgIHwJCXNldGhpCSVoaSg0Mjk0
OTMzNTA0KSwgJW8wCgkJCQkJCQkgICAgICA+CQlvcgklbzIsIDEwMDAsICVvMgoJCQkJCQkJICAg
ICAgPgkJb3IJJW8wLCA5ODQsICVvMAoJCQkJCQkJICAgICAgPgkJYWRkCSVvMiwgJWZwLCAlbzIK
CQkJCQkJCSAgICAgID4JCWFkZAklbzAsICVmcCwgJW8wCgkJCQkJCQkgICAgICA+CQlsZGQJWyVv
Ml0sICVmMgoJCQkJCQkJICAgICAgPgkJZm11bGQJJWY4LCAlZjAsICVmOAoJbGRkCVslbzBdLCAl
ZjYJCQkJCQlsZGQJWyVvMF0sICVmNgoJZm11bGQJJWY0LCAlZjAsICVmNAkJCQkgICAgICB8CQlj
bXAJJWwwLCAyMDQ3CglmbXVsZAklZjIsICVmNiwgJWYyCQkJCSAgICAgIHwJCWZtdWxkCSVmNiwg
JWYyLCAlZjYKCWZzdWJkCSVmMiwgJWY0LCAlZjIJCQkJICAgICAgfAkJZnN1YmQJJWY2LCAlZjgs
ICVmNgoJZm11bGQJJWYyLCAlZjYsICVmNgkJCQkgICAgICB8CQlmbXVsZAklZjYsICVmMiwgJWYy
CglzdGQJJWYyLCBbJWkwXQkJCQkgICAgICB8CQlzdGQJJWY2LCBbJWkwXQoJZmFkZGQJJWY0LCAl
ZjYsICVmNAkJCQkgICAgICB8CQlmYWRkZAklZjgsICVmMiwgJWY4CglzdGQJJWY0LCBbJWkwKzhd
CQkJCSAgICAgIHwJCXN0ZAklZjgsIFslaTArOF0KCWJsZXUJLkxMMTQJCQkJCQkJYmxldQkuTEwx
NAoJYWRkCSVpMCwgMTYsICVpMAkJCQkJCWFkZAklaTAsIDE2LCAlaTAKCWFkZAklbDEsIDEsICVs
MQkJCQkJCWFkZAklbDEsIDEsICVsMQoJY21wCSVsMSwgMjA0NwkJCQkJCWNtcAklbDEsIDIwNDcK
CWJsZSxhCS5MTDIzCQkJCQkJCWJsZSxhCS5MTDIzCglhZGQJJWwzLCAlbDIsICVpMAkJCQkJCWFk
ZAklbDMsICVsMiwgJWkwCglyZXQJCQkJCQkJCXJldAoJcmVzdG9yZQkJCQkJCQkJcmVzdG9yZQou
TExmZTE6CQkJCQkJCQkuTExmZTE6Cgkuc2l6ZQltYWluLC5MTGZlMS1tYWluCQkJCQkuc2l6ZQlt
YWluLC5MTGZlMS1tYWluCgkuaWRlbnQJIkdDQzogKEdOVSkgMy4xIDIwMDIwMTIzIChleHBlcmlt
ZW50YWwpIgkJLmlkZW50CSJHQ0M6IChHTlUpIDMuMSAyMDAyMDEyMyAoZXhwZXJpbWVudGFsKSIK