This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/29158] New: store merge optimization not done
- From: "acahalan at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 21 Sep 2006 04:36:52 -0000
- Subject: [Bug middle-end/29158] New: store merge optimization not done
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
In the example below, define T as "char" or "short". (probably "int" too on a
64-bit machine, with minor adjustment to the example code) Compile the code
with "-Os -S" and observe the assembly. Even if there are no aliasing or
alignment issues, the compiler fails to merge multiple stores into larger
stores.
This is tested with three gcc 4.1 compilers:
i386 from Fedora Core 6 test2
x86-64 from Fedora Core 6 test2
ppc32 from Debian-unstable
BTW, I hope I guessed right in filing against "middle-end". I didn't know if it
was tree-optimization or rtl-optimization, and there still isn't an obvious
place to file bugs which are common to both C and C++.
-------------------------------------
tmp 0 $ cat e.c
#ifndef T
#define T short
#endif
typedef struct S{
T a;
T b;
T c;
T d;
}S;
S *structbug(S *s){
s->a = 1;
s->b = 2;
s->c = 3;
s->d = 4;
return s;
}
T *arraybug(T *s){
s[0] = 1;
s[1] = 2;
s[2] = 3;
s[3] = 4;
return s;
}
tmp 0 $ gcc -W -Wall -m32 -Os -fomit-frame-pointer -S e.c
tmp 0 $ cat e.s
.file "e.c"
.text
.globl structbug
.type structbug, @function
structbug:
movl 4(%esp), %eax
movw $1, (%eax)
movw $2, 2(%eax)
movw $3, 4(%eax)
movw $4, 6(%eax)
ret
.size structbug, .-structbug
.globl arraybug
.type arraybug, @function
arraybug:
movl 4(%esp), %eax
movw $1, (%eax)
movw $2, 2(%eax)
movw $3, 4(%eax)
movw $4, 6(%eax)
ret
.size arraybug, .-arraybug
.ident "GCC: (GNU) 4.1.1 20060828 (Red Hat 4.1.1-20)"
.section .note.GNU-stack,"",@progbits
tmp 0 $
--
Summary: store merge optimization not done
Product: gcc
Version: 4.1.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: acahalan at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29158