public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* optimization/8829: Over-optimization at -O2 and above (affecting GLIBC macros)
@ 2002-12-05 13:26 bagnara
  0 siblings, 0 replies; 3+ messages in thread
From: bagnara @ 2002-12-05 13:26 UTC (permalink / raw)
  To: gcc-gnats; +Cc: abramo.bagnara


>Number:         8829
>Category:       optimization
>Synopsis:       Over-optimization at -O2 and above (affecting GLIBC macros)
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Thu Dec 05 13:26:00 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     Roberto Bagnara
>Release:        3.2.1
>Organization:
>Environment:
RedHat 8.0
$ uname -a
Linux zoltan.unisuv.it 2.4.20 #33 Sun Dec 1 21:23:01 CET 2002 i686 athlon i386 GNU/Linux
$ gcc -v
Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.2.1/specs
Configured with: ../gcc-3.2.1/configure --prefix=/usr/local
Thread model: posix
gcc version 3.2.1
>Description:
With -O2, gcc removes instructions that should not be removed.
>How-To-Repeat:
Compile the attached file, bug.cc, with
$ gcc -S -O2 bug.c
and notice that the instructions for swapping the bytes
have been removed from get_float32() while, interestingly,
they have not been removed from get_int32().
Notice also that, if the call to q(v) is uncommented from
get_float32(), the over-optimization goes away.
It is perhaps worth noticing that the macros in bug.c
come from GLIBC.

Here is the file bug.s that I obtain from bug.c (untouched)
with the compilation command above:

	.file	"bug.c"
	.text
	.p2align 4,,15
.globl get_float32
	.type	get_float32,@function
get_float32:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$4, %esp
	movl	8(%ebp), %eax
	flds	(%eax)
	movl	%ebp, %esp
	popl	%ebp
	ret
.Lfe1:
	.size	get_float32,.Lfe1-get_float32
	.p2align 4,,15
.globl get_int32
	.type	get_int32,@function
get_int32:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$4, %esp
	movl	8(%ebp), %eax
	movl	(%eax), %eax
	movl	%eax, -4(%ebp)
	movl	%ebp, %esp
#APP
	rorw $8, %ax;rorl $16, %eax;rorw $8, %ax
#NO_APP
	popl	%ebp
	ret
.Lfe2:
	.size	get_int32,.Lfe2-get_int32
	.ident	"GCC: (GNU) 3.2.1"
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="bug.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="bug.c"

Ci8qIFN3YXAgYnl0ZXMgaW4gMzIgYml0IHZhbHVlLiAgKi8KI2RlZmluZSBfX2Jzd2FwX2NvbnN0
YW50XzMyKHgpIFwKICAgICAoKCgoeCkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh4KSAmIDB4
MDBmZjAwMDApID4+ICA4KSB8CQkgICAgICBcCiAgICAgICgoKHgpICYgMHgwMDAwZmYwMCkgPDwg
IDgpIHwgKCgoeCkgJiAweDAwMDAwMGZmKSA8PCAyNCkpCgojaWYgZGVmaW5lZCBfX0dOVUNfXyAm
JiBfX0dOVUNfXyA+PSAyCi8qIFRvIHN3YXAgdGhlIGJ5dGVzIGluIGEgd29yZCB0aGUgaTQ4NiBw
cm9jZXNzb3JzIGFuZCB1cCBwcm92aWRlIHRoZQogICBgYnN3YXAnIG9wY29kZS4gIE9uIGkzODYg
d2UgaGF2ZSB0byB1c2UgdGhyZWUgaW5zdHJ1Y3Rpb25zLiAgKi8KIyBpZiAhZGVmaW5lZCBfX2k0
ODZfXyAmJiAhZGVmaW5lZCBfX3BlbnRpdW1fXyAmJiAhZGVmaW5lZCBfX3BlbnRpdW1wcm9fXwoj
ICBkZWZpbmUgX19ic3dhcF8zMih4KQkJCQkJCQkgICAgICBcCiAgICAgKF9fZXh0ZW5zaW9uX18J
CQkJCQkJICAgICAgXAogICAgICAoeyByZWdpc3RlciB1bnNpZ25lZCBpbnQgX192LCBfX3ggPSAo
eCk7CQkJCSAgICAgIFwKCSBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKF9feCkpCQkJCSAgICAg
IFwKCSAgIF9fdiA9IF9fYnN3YXBfY29uc3RhbnRfMzIgKF9feCk7CQkJCSAgICAgIFwKCSBlbHNl
CQkJCQkJCQkgICAgICBcCgkgICBfX2FzbV9fICgicm9ydyAkOCwgJXcwOyIJCQkJCSAgICAgIFwK
CQkgICAgInJvcmwgJDE2LCAlMDsiCQkJCQkgICAgICBcCgkJICAgICJyb3J3ICQ4LCAldzAiCQkJ
CQkgICAgICBcCgkJICAgIDogIj1yIiAoX192KQkJCQkJICAgICAgXAoJCSAgICA6ICIwIiAoX194
KQkJCQkJCSAgICAgIFwKCQkgICAgOiAiY2MiKTsJCQkJCQkgICAgICBcCgkgX192OyB9KSkKIyBl
bHNlCiMgIGRlZmluZSBfX2Jzd2FwXzMyKHgpIFwKICAgICAoX19leHRlbnNpb25fXwkJCQkJCQkg
ICAgICBcCiAgICAgICh7IHJlZ2lzdGVyIHVuc2lnbmVkIGludCBfX3YsIF9feCA9ICh4KTsJCQkJ
ICAgICAgXAoJIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX194KSkJCQkJICAgICAgXAoJICAg
X192ID0gX19ic3dhcF9jb25zdGFudF8zMiAoX194KTsJCQkJICAgICAgXAoJIGVsc2UJCQkJCQkJ
CSAgICAgIFwKCSAgIF9fYXNtX18gKCJic3dhcCAlMCIgOiAiPXIiIChfX3YpIDogIjAiIChfX3gp
KTsJCSAgICAgIFwKCSBfX3Y7IH0pKQojIGVuZGlmCiNlbHNlCiMgZGVmaW5lIF9fYnN3YXBfMTYo
eCkgXAogICAgIChfX2V4dGVuc2lvbl9fCQkJCQkJCSAgICAgIFwKICAgICAgKHsgcmVnaXN0ZXIg
dW5zaWduZWQgaW50IF9feCA9ICh4KTsgX19ic3dhcF9jb25zdGFudF8zMiAoX194KTsgfSkpCiNl
bmRpZgoKc3RhdGljIGlubGluZSB2b2lkIHN3YXBfZmxvYXQzMihmbG9hdCogcCkKewoJKihpbnQq
KXAgPSBfX2Jzd2FwXzMyKCooaW50KilwKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIHN3YXBfaW50
MzIoaW50KiBwKQp7CgkqKGludCopcCA9IF9fYnN3YXBfMzIoKihpbnQqKXApOwp9CgpmbG9hdCBn
ZXRfZmxvYXQzMih2b2lkICpwZGF0YSkKewoJZmxvYXQgdiA9ICooZmxvYXQqKXBkYXRhOwoJc3dh
cF9mbG9hdDMyKCZ2KTsKLy8JcSh2KTsKCXJldHVybiB2Owp9CgkJCmludCBnZXRfaW50MzIodm9p
ZCAqcGRhdGEpCnsKCWludCB2ID0gKihpbnQqKXBkYXRhOwoJc3dhcF9pbnQzMigmdik7Ci8vCXEo
dik7CglyZXR1cm4gdjsKfQoJCQo=


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: optimization/8829: Over-optimization at -O2 and above (affecting GLIBC macros)
@ 2002-12-10 14:22 bangerth
  0 siblings, 0 replies; 3+ messages in thread
From: bangerth @ 2002-12-10 14:22 UTC (permalink / raw)
  To: abramo.bagnara, bagnara, gcc-bugs, gcc-prs, nobody

Synopsis: Over-optimization at -O2 and above (affecting GLIBC macros)

State-Changed-From-To: open->closed
State-Changed-By: bangerth
State-Changed-When: Tue Dec 10 14:22:54 2002
State-Changed-Why:
    Aliasing rule violation

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=8829


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: optimization/8829: Over-optimization at -O2 and above (affecting GLIBC macros)
@ 2002-12-05 14:46 Falk Hueffner
  0 siblings, 0 replies; 3+ messages in thread
From: Falk Hueffner @ 2002-12-05 14:46 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR optimization/8829; it has been noted by GNATS.

From: Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
To: bagnara@cs.unipr.it
Cc: gcc-gnats@gcc.gnu.org,  abramo.bagnara@libero.it
Subject: Re: optimization/8829: Over-optimization at -O2 and above (affecting GLIBC macros)
Date: 05 Dec 2002 23:41:02 +0100

 bagnara@cs.unipr.it writes:
 
 > With -O2, gcc removes instructions that should not be removed.
 > >How-To-Repeat:
 > Compile the attached file, bug.cc, with
 > $ gcc -S -O2 bug.c
 > and notice that the instructions for swapping the bytes
 > have been removed from get_float32() while, interestingly,
 > they have not been removed from get_int32().
 > Notice also that, if the call to q(v) is uncommented from
 > get_float32(), the over-optimization goes away.
 
 [...]
 
 > static inline void swap_float32(float* p)
 > {
 > 	*(int*)p = __bswap_32(*(int*)p);
 > }
 
 Looks to me like this violates aliasing rules, and indeed
 -fno-strict-aliasing keeps the asm.
 
 -- 
 	Falk


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2002-12-10 22:22 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-12-05 13:26 optimization/8829: Over-optimization at -O2 and above (affecting GLIBC macros) bagnara
2002-12-05 14:46 Falk Hueffner
2002-12-10 14:22 bangerth

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).