This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
optimization/9814: gcc fails to optimise if (l&2) l|=2 away
- From: Matthias Klose <doko at net dot local>
- To: gcc-gnats at gcc dot gnu dot org, debian-gcc at lists dot debian dot org
- Date: Sun, 23 Feb 2003 08:45:37 +0100
- Subject: optimization/9814: gcc fails to optimise if (l&2) l|=2 away
- Reply-to: 181096 at bugs dot debian dot org
>Number: 9814
>Category: optimization
>Synopsis: gcc fails to optimise if (l&2) l|=2 away
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: unassigned
>State: open
>Class: change-request
>Submitter-Id: net
>Arrival-Date: Sun Feb 23 07:46:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator: herbert at gondor dot apana dot org dot au
>Release: 3.2.2 (Debian) (Debian unstable)
>Organization:
The Debian Project
>Environment:
System: Debian GNU/Linux (unstable)
Architecture: i686
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name Version Description
+++-==============-==============-============================================
ii gcc-3.2 3.2.3-0pre1 The GNU C compiler
ii g++-3.2 3.2.3-0pre1 The GNU C++ compiler
ii libstdc++5 3.2.3-0pre1 The GNU Standard C++ Library v3
ii libstdc++5-dev 3.2.3-0pre1 The GNU Standard C++ Library v3 (development
ii binutils 2.13.90.0.18-1 The GNU assembler, linker and binary utiliti
ii libc6 2.3.1-13 GNU C Library: Shared libraries and Timezone
host: i386-linux
>Description:
[ Reported to the Debian BTS as report #181096.
Please CC 181096 at bugs dot debian dot org on replies.
Log of report can be found at http://bugs.debian.org/181096 ]
Checked with current 3.2 and 3.3 branches (20030221)
The following function doesn't get optimised away as a noop:
int k(int l)
{
if (l & 2)
l |= 2;
return l;
}
$ gcc-3.2 -O2 -S b.c
$ cat b.s
.file "b.c"
.text
.p2align 2,,3
.globl k
.type k,@function
k:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
testl $2, %eax
je .L2
orl $2, %eax
.L2:
leave
ret
.Lfe1:
.size k,.Lfe1-k
.ident "GCC: (GNU) 3.2.3 20030210 (Debian prerelease)"
>How-To-Repeat:
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted: