public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/13511] New: Problem with compiler optimization -o2
@ 2003-12-30 10:48 osoentgen at lucent dot com
2003-12-30 17:01 ` [Bug c++/13511] " pinskia at gcc dot gnu dot org
` (12 more replies)
0 siblings, 13 replies; 14+ messages in thread
From: osoentgen at lucent dot com @ 2003-12-30 10:48 UTC (permalink / raw)
To: gcc-bugs
We ran into a problem with compiler optimization -o2.
It is related to a macro which performs a variable bit shift and an assignment:
#define WRITE_TFI(x, value) { x[TFI_UPPER] = (char)(value >>
SIZE_OF_BYTE_IN_BITS); x[TFI_LOWER] = (char)(value); }
The macro was used even in cases where SIZE_OF_BYTE_IN_BITS is 8 which means
that a bit shift of 8 bits had to be performed.
This specific case seems to confuse GCC as the generated PowerPC assembler code
lacks some instructions (see below).
Problem was initially observed with GCC 2.7.6.
Verification with GCC 2.95.3 showed the same problem.
Problem is independent of switch "-fstrict-aliasing".
Without optimization (i.e. -o0) everything is fine.
Sample code:
#define TFI_UPPER 12
#define TFI_LOWER 13
#define SIZE_OF_BYTE_IN_BITS 8
#define WRITE_TFI(x, value) { x[TFI_UPPER] = (char)(value >>
SIZE_OF_BYTE_IN_BITS); x[TFI_LOWER] = (char)(value); }
char buffer[100];
char buffer2[100];
void test ()
{
char *Frameptr = (char *) buffer;
char *CEmsgArray = (char *)buffer2;
Frameptr++;
WRITE_TFI(CEmsgArray, *Frameptr);
CEmsgArray[10]=(char) (*Frameptr);
CEmsgArray[11]=(char) (*Frameptr);
}
With -o2 the instruction Frameptr is not being incremented at all!
With -o0 everything is fine.
---
Below 3 variants are given which show:
* -o2 bug
* -o2 without bug (bit shift 7 instead of 8)
* -o0 without bug
---
Example file with extended macro:
char buffer[100];
char buffer2[100];
void test2 ()
{
char *Frameptr = (char *) buffer;
char *CEmsgArray = (char *)buffer2;
Frameptr++;
CEmsgArray [12 ] = (char)( *Frameptr >> 8 );
CEmsgArray [13 ] = (char)( *Frameptr );
CEmsgArray[10]=(char) (*Frameptr);
CEmsgArray[11]=(char) (*Frameptr);
}
---
Assembler output (opt. enabled: -o2)
Instruction 'Frameptr++;' is missing:
void test2 ()
{
char *Frameptr = (char *) buffer;
char *CEmsgArray = (char *)buffer2;
0: 3d 40 00 00 lis r10,0
4: 39 4a 00 00 addi r10,r10,0
Frameptr++;
CEmsgArray [12 ] = (char)( *Frameptr >> 8 );
8: 38 00 00 00 li r0,0
c: 3d 60 00 00 lis r11,0
10: 98 0a 00 0c stb r0,12(r10)
14: 39 6b 00 00 addi r11,r11,0
CEmsgArray [13 ] = (char)( *Frameptr );
18: 88 0b 00 00 lbz r0,0(r11)
1c: 98 0a 00 0d stb r0,13(r10)
CEmsgArray[10]=(char) (*Frameptr);
20: 89 2b 00 00 lbz r9,0(r11)
24: 99 2a 00 0a stb r9,10(r10)
CEmsgArray[11]=(char) (*Frameptr);
28: 88 0b 00 00 lbz r0,0(r11)
2c: 98 0a 00 0b stb r0,11(r10)
30: 4e 80 00 20 blr
---
Assembler output (bit shift 7 instead of 8)
In this case everything is fine:
(Note: the main difference is the lbzu instruction in line 8)
void test2 ()
{
char *Frameptr = (char *) buffer;
0: 3d 40 00 00 lis r10,0
4: 39 4a 00 00 addi r10,r10,0
char *CEmsgArray = (char *)buffer2;
Frameptr++;
CEmsgArray [12 ] = (char)( *Frameptr >> 7 );
8: 8c 0a 00 01 lbzu r0,1(r10)
c: 3d 60 00 00 lis r11,0
10: 39 6b 00 00 addi r11,r11,0
14: 54 00 c9 fe rlwinm r0,r0,25,7,31
18: 98 0b 00 0c stb r0,12(r11)
CEmsgArray [13 ] = (char)( *Frameptr );
1c: 89 2a 00 00 lbz r9,0(r10)
20: 99 2b 00 0d stb r9,13(r11)
CEmsgArray[10]=(char) (*Frameptr);
24: 88 0a 00 00 lbz r0,0(r10)
28: 98 0b 00 0a stb r0,10(r11)
CEmsgArray[11]=(char) (*Frameptr);
2c: 89 2a 00 00 lbz r9,0(r10)
30: 99 2b 00 0b stb r9,11(r11)
34: 4e 80 00 20 blr
---
Assembler output (without optimization, i.e. -o0):
void test2 ()
{
0: 94 21 ff e0 stwu r1,-32(r1)
4: 93 e1 00 1c stw r31,28(r1)
8: 7c 3f 0b 78 mr r31,r1
char *Frameptr = (char *) buffer;
c: 3d 20 00 00 lis r9,0
10: 38 09 00 00 addi r0,r9,0
14: 90 1f 00 08 stw r0,8(r31)
char *CEmsgArray = (char *)buffer2;
18: 3d 20 00 00 lis r9,0
1c: 38 09 00 00 addi r0,r9,0
20: 90 1f 00 0c stw r0,12(r31)
Frameptr++;
24: 81 3f 00 08 lwz r9,8(r31)
28: 38 09 00 01 addi r0,r9,1
2c: 90 1f 00 08 stw r0,8(r31)
CEmsgArray [12 ] = (char)( *Frameptr >> 8 );
30: 81 7f 00 0c lwz r11,12(r31)
34: 39 2b 00 0c addi r9,r11,12
38: 81 7f 00 08 lwz r11,8(r31)
3c: 89 4b 00 00 lbz r10,0(r11)
40: 55 40 06 3e clrlwi r0,r10,24
44: 7c 0b 46 70 srawi r11,r0,8
48: 7d 60 5b 78 mr r0,r11
4c: 98 09 00 00 stb r0,0(r9)
CEmsgArray [13 ] = (char)( *Frameptr );
50: 81 7f 00 0c lwz r11,12(r31)
54: 39 2b 00 0d addi r9,r11,13
58: 81 7f 00 08 lwz r11,8(r31)
5c: 88 0b 00 00 lbz r0,0(r11)
60: 98 09 00 00 stb r0,0(r9)
CEmsgArray[10]=(char) (*Frameptr);
64: 81 7f 00 0c lwz r11,12(r31)
68: 39 2b 00 0a addi r9,r11,10
6c: 81 7f 00 08 lwz r11,8(r31)
70: 88 0b 00 00 lbz r0,0(r11)
74: 98 09 00 00 stb r0,0(r9)
CEmsgArray[11]=(char) (*Frameptr);
78: 81 7f 00 0c lwz r11,12(r31)
7c: 39 2b 00 0b addi r9,r11,11
80: 81 7f 00 08 lwz r11,8(r31)
84: 88 0b 00 00 lbz r0,0(r11)
88: 98 09 00 00 stb r0,0(r9)
8c: 48 00 00 08 b 94 <test2__Fv+0x94>
90: 48 00 00 04 b 94 <test2__Fv+0x94>
}
94: 81 61 00 00 lwz r11,0(r1)
98: 83 eb ff fc lwz r31,-4(r11)
9c: 7d 61 5b 78 mr r1,r11
a0: 4e 80 00 20 blr
---
Compiler commmand line:
/vobs/gnu/gcc/PPC.SunOS-5.8/gcc/bin/powerpc-wrs-vxworks-c++ -c
tmp/__umc_vx_what.c -v \
-DOS_SunOS_5_8 -g -O0 -v -save-temps -fstrict-aliasing -Wall -mcpu=603e -
DMODULE_TEST=off -DUMTS -DONEBTS -DFLEXENT \
-DMODCELL -DDM_PC -Dppc8260_TARGET -I. -I../include \
-I/vobs/ubtssw_onecell_src/usl/pub/include \
-I/vobs/ubtssw_onecell_src/usl/pub/include/ssrv \
-I/vobs/ubtssw_onecell_src/usl/src/lcid \
-I/vobs/ubtssw_onecell_src/usl/include/bsp \
-I/vobs/ubtssw_onecell_src/usl/include/gdf \
-I/vobs/ubtssw_onecell_src/usl/include/osapi \
-I/vobs/ubtssw_onecell_src/usl/include/sim \
-I/vobs/ubtssw_onecell_src/usl/include/util -I/vobs/ubtssw_tornado/target/h \
-I/vobs/ubtssw_tools/codetest/include \
-fkeep-inline-functions -DPPC_TARGET -DCPU=P603 \
-fvolatile -fno-for-scope -fdollars-in-identifiers -traditional -fno-builtin \
-nostdinc $1
---
.ii file (-o2 with problem):
# 1 "test3.cc"
char buffer[100];
char buffer2[100];
void test2 ()
{
char *Frameptr = (char *) buffer;
char *CEmsgArray = (char *)buffer2;
Frameptr++;
CEmsgArray [12 ] = (char)( *Frameptr >> 8 );
CEmsgArray [13 ] = (char)( *Frameptr );
CEmsgArray[10]=(char) (*Frameptr);
CEmsgArray[11]=(char) (*Frameptr);
}
---
Shell output of compiler:
powerpc-wrs-vxworks-c++: tmp/__umc_vx_what.c: No such file or directory
Reading specs from /vobs/gnu/gcc/PPC.SunOS-5.8/gcc/lib/gcc-lib/powerpc-wrs-
vxworks/2.95.3/specs
gcc version 2.95.3 20010315 (release)
/vobs/gnu/gcc/PPC.SunOS-5.8/gcc/lib/gcc-lib/powerpc-wrs-vxworks/2.95.3/cpp0 -
lang-c++ -nostdinc -v -I. -I../include -
I/vobs/ubtssw_onecell_src/usl/pub/include -
I/vobs/ubtssw_onecell_src/usl/pub/include/ssrv -
I/vobs/ubtssw_onecell_src/usl/src/lcid -
I/vobs/ubtssw_onecell_src/usl/include/bsp -
I/vobs/ubtssw_onecell_src/usl/include/gdf -
I/vobs/ubtssw_onecell_src/usl/include/osapi -
I/vobs/ubtssw_onecell_src/usl/include/sim -
I/vobs/ubtssw_onecell_src/usl/include/util -I/vobs/ubtssw_tornado/target/h -
I/vobs/ubtssw_tools/codetest/include -iprefix /vobs/ubtssw_tornado/host/sun4-
solaris2/lib/gcc-lib/powerpc-wrs-vxworks/2.95.3/ -D__GNUC__=2 -D__GNUG__=2 -
D__GNUC_MINOR__=95 -D__cplusplus -D__vxworks -D__vxworks -Asystem(vxworks) -
Asystem(embedded) -Acpu(powerpc) -Amachine(powerpc) -D__EXCEPTIONS -
D__CHAR_UNSIGNED__ -D__OPTIMIZE__ -g -Wall -D_CALL_SYSV -D_BIG_ENDIAN -
D__BIG_ENDIAN__ -Amachine(bigendian) -D_ARCH_PPC -DOS_SunOS_5_8 -
DMODULE_TEST=off -DUMTS -DONEBTS -DFLEXENT -DMODCELL -DDM_PC -Dppc8260_TARGET -
DPPC_TARGET -DCPU=P603 test3.cc test3.ii
GNU CPP version 2.95.3 20010315 (release) (PowerPC System V.4)
#include "..." search starts here:
#include <...> search starts here:
.
/vobs/ubtssw_onecell_src/usl/pub/include
/vobs/ubtssw_onecell_src/usl/pub/include/ssrv
/vobs/ubtssw_onecell_src/usl/src/lcid
/vobs/ubtssw_onecell_src/usl/include/bsp
/vobs/ubtssw_onecell_src/usl/include/gdf
/vobs/ubtssw_onecell_src/usl/include/util
/vobs/ubtssw_tornado/target/h
End of search list.
The following default directories have been omitted from the search path:
/vobs/gnu/gcc/PPC.SunOS-5.8/gcc/lib/gcc-lib/powerpc-wrs-
vxworks/2.95.3/../../../../include/g++-3
/vobs/gnu/gcc/PPC.SunOS-5.8/gcc/lib/gcc-lib/powerpc-wrs-vxworks/2.95.3/include
/vobs/gnu/gcc/PPC.SunOS-5.8/gcc/lib/gcc-lib/powerpc-wrs-
vxworks/2.95.3/../../../../powerpc-wrs-vxworks/sys-include
/vobs/gnu/gcc/PPC.SunOS-5.8/gcc/lib/gcc-lib/powerpc-wrs-
vxworks/2.95.3/../../../../powerpc-wrs-vxworks/include
End of omitted list.
/vobs/gnu/gcc/PPC.SunOS-5.8/gcc/lib/gcc-lib/powerpc-wrs-vxworks/2.95.3/cc1plus
test3.ii -quiet -dumpbase test3.cc -mcpu=603e -g -O2 -Wall -version -fstrict-
aliasing -fkeep-inline-functions -fvolatile -fno-for-scope -fdollars-in-
identifiers -fno-builtin -o test3.s
GNU C++ version 2.95.3 20010315 (release) (powerpc-wrs-vxworks) compiled by GNU
C version 2.95.3 20010315 (release).
/vobs/gnu/gcc/PPC.SunOS-5.8/binutils/bin/powerpc-wrs-vxworks-as -mppc -V -Qy -
o test3.o test3.s
GNU assembler version 2.10 (powerpc-wrs-vxworks) using BFD version 2.10
--
Summary: Problem with compiler optimization -o2
Product: gcc
Version: 2.95.3
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: osoentgen at lucent dot com
CC: gcc-bugs at gcc dot gnu dot org
GCC host triplet: SunOS 5.8
GCC target triplet: PowerPC
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/13511] Problem with compiler optimization -o2
2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
@ 2003-12-30 17:01 ` pinskia at gcc dot gnu dot org
2004-01-05 12:43 ` osoentgen at lucent dot com
` (11 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2003-12-30 17:01 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2003-12-30 15:35 -------
The relocations which are 0 in your output will show that the problem is that you are not reading
the asm right:
-O1:
lis r9,ha16(_buffer2)
la r9,lo16(_buffer2)(r9)
lis r2,ha16(_buffer+1)
lbz r2,lo16(_buffer+1)(r2) <--- see the plus one
extsb r0,r2
srawi r0,r0,8
stb r0,12(r9)
stb r2,13(r9)
stb r2,10(r9)
stb r2,11(r9)
blr
-O2 (the same on the mainline).
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |INVALID
Summary|Problem with compiler |Problem with compiler
|optimization -o2 |optimization -o2
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/13511] Problem with compiler optimization -o2
2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
2003-12-30 17:01 ` [Bug c++/13511] " pinskia at gcc dot gnu dot org
@ 2004-01-05 12:43 ` osoentgen at lucent dot com
2004-01-05 12:44 ` osoentgen at lucent dot com
` (10 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: osoentgen at lucent dot com @ 2004-01-05 12:43 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From osoentgen at lucent dot com 2004-01-05 12:43 -------
Subject: RE: Problem with compiler optimization -o2
Andrew,
Now with commented assembler code.
'*Frameptr >> 8' leads to missing pointer increment:
void test ()
{
char *Frameptr = (char *) buffer;
char *CEmsgArray = (char *)buffer2;
100000: 3d 40 00 10 lis r10,16 Prepare
CEmsgArray address
100004: 39 4a 00 98 addi r10,r10,152 CEmsgArray
addr has been loaded into R10
Frameptr++;
{ CEmsgArray [12 ] = (char)( *Frameptr >> 8 ); CEmsgArray [13 ]
= (char)( *Frameptr ); } ;
100008: 38 00 00 00 li r0,0 Shift by 8
is always zero
10000c: 3d 60 00 10 lis r11,16 Prepare
Frameptr address
100010: 98 0a 00 0c stb r0,12(r10)
CEmsgArray[12] is being assigned (OK)
100014: 39 6b 00 34 addi r11,r11,52 Frameptr
addr has been loaded into R11
100018: 88 0b 00 00 lbz r0,0(r11) *Frameptr
10001c: 98 0a 00 0d stb r0,13(r10)
CEmsgArray[13] is being assigned (WRONG!!!)
CEmsgArray[10]=(char) (*Frameptr);
100020: 89 2b 00 00 lbz r9,0(r11) *Frameptr
100024: 99 2a 00 0a stb r9,10(r10)
CEmsgArray[10] is being assigned (WRONG!!!)
CEmsgArray[11]=(char) (*Frameptr);
100028: 88 0b 00 00 lbz r0,0(r11) *Frameptr
10002c: 98 0a 00 0b stb r0,11(r10)
CEmsgArray[11] is being assigned (WRONG!!!)
100030: 4e 80 00 20 blr
=================
Example of good case (shift of 7):
void test ()
{
char *Frameptr = (char *) buffer;
100000: 3d 40 00 10 lis r10,16 Prepare
Frameptr address
100004: 39 4a 00 38 addi r10,r10,56 Frameptr
addr has been loaded into R10
char *CEmsgArray = (char *)buffer2;
Frameptr++;
{ CEmsgArray [12 ] = (char)( *Frameptr >> 7 ); CEmsgArray [13 ]
= (char)( *Frameptr ); } ;
100008: 8c 0a 00 01 lbzu r0,1(r10) Frameptr++
10000c: 3d 60 00 10 lis r11,16 Prepare
CEmsgArray address
100010: 39 6b 00 9c addi r11,r11,156 CEmsgArray
addr has been loaded into R11
100014: 54 00 c9 fe rlwinm r0,r0,25,7,31 >> 7
100018: 98 0b 00 0c stb r0,12(r11)
CEmsgArray[12] is being assigned (OK)
10001c: 89 2a 00 00 lbz r9,0(r10) *Frameptr
100020: 99 2b 00 0d stb r9,13(r11)
CEmsgArray[13] is being assigned (OK)
CEmsgArray[10]=(char) (*Frameptr);
100024: 88 0a 00 00 lbz r0,0(r10) *Frameptr
100028: 98 0b 00 0a stb r0,10(r11)
CEmsgArray[10] is being assigned (OK)
CEmsgArray[11]=(char) (*Frameptr);
10002c: 89 2a 00 00 lbz r9,0(r10) *Frameptr
100030: 99 2b 00 0b stb r9,11(r11)
CEmsgArray[11] is being assigned (OK)
100034: 4e 80 00 20 blr
Regards,
Olaf
-----Original Message-----
From: pinskia at gcc dot gnu dot org [mailto:gcc-bugzilla@gcc.gnu.org]
Sent: Dienstag, 30. Dezember 2003 16:36
To: osoentgen@lucent.com
Subject: [Bug c++/13511] Problem with compiler optimization -o2
------- Additional Comments From pinskia at gcc dot gnu dot org 2003-12-30
15:35 -------
The relocations which are 0 in your output will show that the problem is
that you are not reading
the asm right:
-O1:
lis r9,ha16(_buffer2)
la r9,lo16(_buffer2)(r9)
lis r2,ha16(_buffer+1)
lbz r2,lo16(_buffer+1)(r2) <--- see the plus one
extsb r0,r2
srawi r0,r0,8
stb r0,12(r9)
stb r2,13(r9)
stb r2,10(r9)
stb r2,11(r9)
blr
-O2 (the same on the mainline).
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |INVALID
Summary|Problem with compiler |Problem with compiler
|optimization -o2 |optimization -o2
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511
------- You are receiving this mail because: -------
You reported the bug, or are watching the reporter.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/13511] Problem with compiler optimization -o2
2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
2003-12-30 17:01 ` [Bug c++/13511] " pinskia at gcc dot gnu dot org
2004-01-05 12:43 ` osoentgen at lucent dot com
@ 2004-01-05 12:44 ` osoentgen at lucent dot com
2004-01-05 12:48 ` falk dot hueffner at student dot uni-tuebingen dot de
` (9 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: osoentgen at lucent dot com @ 2004-01-05 12:44 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From osoentgen at lucent dot com 2004-01-05 12:44 -------
Now with commented assembler code.
'*Frameptr >> 8' leads to missing pointer increment:
void test ()
{
char *Frameptr = (char *) buffer;
char *CEmsgArray = (char *)buffer2;
100000: 3d 40 00 10 lis r10,16 Prepare
CEmsgArray address
100004: 39 4a 00 98 addi r10,r10,152 CEmsgArray addr
has been loaded into R10
Frameptr++;
{ CEmsgArray [12 ] = (char)( *Frameptr >> 8 ); CEmsgArray [13 ] =
(char)( *Frameptr ); } ;
100008: 38 00 00 00 li r0,0 Shift by 8 is
always zero
10000c: 3d 60 00 10 lis r11,16 Prepare
Frameptr address
100010: 98 0a 00 0c stb r0,12(r10) CEmsgArray[12]
is being assigned (OK)
100014: 39 6b 00 34 addi r11,r11,52 Frameptr addr
has been loaded into R11
100018: 88 0b 00 00 lbz r0,0(r11) *Frameptr
10001c: 98 0a 00 0d stb r0,13(r10) CEmsgArray[13]
is being assigned (WRONG!!!)
CEmsgArray[10]=(char) (*Frameptr);
100020: 89 2b 00 00 lbz r9,0(r11) *Frameptr
100024: 99 2a 00 0a stb r9,10(r10) CEmsgArray[10]
is being assigned (WRONG!!!)
CEmsgArray[11]=(char) (*Frameptr);
100028: 88 0b 00 00 lbz r0,0(r11) *Frameptr
10002c: 98 0a 00 0b stb r0,11(r10) CEmsgArray[11]
is being assigned (WRONG!!!)
100030: 4e 80 00 20 blr
=================
Example of good case (shift of 7):
void test ()
{
char *Frameptr = (char *) buffer;
100000: 3d 40 00 10 lis r10,16 Prepare
Frameptr address
100004: 39 4a 00 38 addi r10,r10,56 Frameptr addr
has been loaded into R10
char *CEmsgArray = (char *)buffer2;
Frameptr++;
{ CEmsgArray [12 ] = (char)( *Frameptr >> 7 ); CEmsgArray [13 ] =
(char)( *Frameptr ); } ;
100008: 8c 0a 00 01 lbzu r0,1(r10) Frameptr++
10000c: 3d 60 00 10 lis r11,16 Prepare
CEmsgArray address
100010: 39 6b 00 9c addi r11,r11,156 CEmsgArray addr
has been loaded into R11
100014: 54 00 c9 fe rlwinm r0,r0,25,7,31 >> 7
100018: 98 0b 00 0c stb r0,12(r11) CEmsgArray[12]
is being assigned (OK)
10001c: 89 2a 00 00 lbz r9,0(r10) *Frameptr
100020: 99 2b 00 0d stb r9,13(r11) CEmsgArray[13]
is being assigned (OK)
CEmsgArray[10]=(char) (*Frameptr);
100024: 88 0a 00 00 lbz r0,0(r10) *Frameptr
100028: 98 0b 00 0a stb r0,10(r11) CEmsgArray[10]
is being assigned (OK)
CEmsgArray[11]=(char) (*Frameptr);
10002c: 89 2a 00 00 lbz r9,0(r10) *Frameptr
100030: 99 2b 00 0b stb r9,11(r11) CEmsgArray[11]
is being assigned (OK)
100034: 4e 80 00 20 blr
--
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |UNCONFIRMED
Resolution|INVALID |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/13511] Problem with compiler optimization -o2
2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
` (2 preceding siblings ...)
2004-01-05 12:44 ` osoentgen at lucent dot com
@ 2004-01-05 12:48 ` falk dot hueffner at student dot uni-tuebingen dot de
2004-01-05 12:54 ` osoentgen at lucent dot com
` (8 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: falk dot hueffner at student dot uni-tuebingen dot de @ 2004-01-05 12:48 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From falk dot hueffner at student dot uni-tuebingen dot de 2004-01-05 12:48 -------
Subject: Re: Problem with compiler optimization -o2
"osoentgen at lucent dot com" <gcc-bugzilla@gcc.gnu.org> writes:
> ------- Additional Comments From osoentgen at lucent dot com 2004-01-05 12:44 -------
> Now with commented assembler code.
I think it would be a lot more helpful if you demonstrated the problem
by giving a complete example which will print a wrong result, can you
provide one?
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/13511] Problem with compiler optimization -o2
2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
` (3 preceding siblings ...)
2004-01-05 12:48 ` falk dot hueffner at student dot uni-tuebingen dot de
@ 2004-01-05 12:54 ` osoentgen at lucent dot com
2004-01-05 13:06 ` nathan at gcc dot gnu dot org
` (7 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: osoentgen at lucent dot com @ 2004-01-05 12:54 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From osoentgen at lucent dot com 2004-01-05 12:54 -------
Bug was observed on a deeply embedded system.
As the bug is related to the generated code, this would anyway not help very
much.
Also the symptom is quite simple:
The pointer increment (Frameptr++) is simply omitted.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/13511] Problem with compiler optimization -o2
2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
` (4 preceding siblings ...)
2004-01-05 12:54 ` osoentgen at lucent dot com
@ 2004-01-05 13:06 ` nathan at gcc dot gnu dot org
2004-01-05 13:29 ` osoentgen at lucent dot com
` (6 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: nathan at gcc dot gnu dot org @ 2004-01-05 13:06 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From nathan at gcc dot gnu dot org 2004-01-05 13:06 -------
As Andrew keeps pointing out, the increment of Frameptr is being folded into
its initialization. I.e. the compiler is converting
char *Frameptr = (char *) buffer;
Frameptr++;
into
char *Frameptr = (char *) buffer + 1;
and that addend is being held in the relocation table of the object file. You
need to examine that relocation table. Are you using a bespoke linker/loader
and getting the relocations incorrect?
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |FIXED
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/13511] Problem with compiler optimization -o2
2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
` (5 preceding siblings ...)
2004-01-05 13:06 ` nathan at gcc dot gnu dot org
@ 2004-01-05 13:29 ` osoentgen at lucent dot com
2004-01-05 13:37 ` osoentgen at lucent dot com
` (5 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: osoentgen at lucent dot com @ 2004-01-05 13:29 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From osoentgen at lucent dot com 2004-01-05 13:29 -------
We are not using any special loader.
This is what the objectfile generated by the linker contains
plus a register dump (see R10 and R11).
There is no obvious displacement regarding 'Frameptr' or 'buffer'.
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000034 00100000 00100000 00000074 2**2
CONTENTS, ALLOC, LOAD, CODE
1 .sdata2 00000000 00100034 00100034 000000a8 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
2 .data 00000000 00100034 00100034 000000a8 2**0
CONTENTS, ALLOC, LOAD, DATA
3 .sdata 00000000 00100034 00100034 000000a8 2**2
CONTENTS, ALLOC, LOAD, DATA
4 .sbss 00000000 00100034 00100034 000000a8 2**0
CONTENTS
5 .bss 000000c8 00100034 00100034 000000a8 2**2
ALLOC
6 .stab 00000210 00000000 00000000 000000a8 2**2
CONTENTS, READONLY, DEBUGGING
7 .stabstr 0000049b 00000000 00000000 000002b8 2**0
CONTENTS, READONLY, DEBUGGING
8 .comment 00000026 00000000 00000000 00000753 2**0
CONTENTS, READONLY
SYMBOL TABLE:
00100000 l d .text 00000000
00100034 l d .sdata2 00000000
00100034 l d .data 00000000
00100034 l d .sdata 00000000
00100034 l d .sbss 00000000
00100034 l d .bss 00000000
00000000 l d .stab 00000000
00000000 l d .stabstr 00000000
00000000 l d .comment 00000000
00000000 l d *ABS* 00000000
00000000 l d *ABS* 00000000
00000000 l d *ABS* 00000000
00000000 l df *ABS* 00000000 test4.cc
00100034 l .text 00000000 Letext
00100098 g O .bss 00000064 buffer2
001000fc g O *ABS* 00000000 __end
00108034 g O .sdata 00000000 _SDA_BASE_
00100034 g O .bss 00000064 buffer
00100000 g F .text 00000034 test__Fv
00100034 g O *ABS* 00000000 __bss_start
00100034 g O *ABS* 00000000 _edata
001000fc g O *ABS* 00000000 _end
00108034 g O .sdata2 00000000 _SDA2_BASE_
MCC::register
R0 4E R8 0 R16 0 R24 0
R1 0 R9 0 R17 0 R25 0
R2 0 R10 00100098 R18 0 R26 0
R3 0 R11 00100034 R19 0 R27 0
R4 0 R12 0 R20 0 R28 0
R5 0 R13 0 R21 0 R29 0
R6 0 R14 0 R22 0 R30 0
R7 0 R15 0 R23 0 R31 0
--------------------------------------------------------------
TB 5 XER 0 CR 0 LR 0
TBU 0 CTR 0 IP 00100020
--------------------------------------------------------------
SPRG0 0 SRR0 0 DSISR 0 MSR 0
SPRG1 0 SRR1 0 DAR 0 PVR 0
SPRG2 0 EAR 0 DEC FFFFFFFB
SPRG3 0
POW _ TGPR_ ILE _ EE _ PR _ FP _ ME _
FE0 _ SE _ BE _ FE1 _ IP _ IR _ DR _ RI _ LE _
--
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |UNCONFIRMED
Resolution|FIXED |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/13511] Problem with compiler optimization -o2
2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
` (6 preceding siblings ...)
2004-01-05 13:29 ` osoentgen at lucent dot com
@ 2004-01-05 13:37 ` osoentgen at lucent dot com
2004-01-05 14:09 ` nathan at gcc dot gnu dot org
` (4 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: osoentgen at lucent dot com @ 2004-01-05 13:37 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From osoentgen at lucent dot com 2004-01-05 13:37 -------
These are the relocation table entries of both the compiler output and the
linker output files:
compiler output:
test4.o: file format elf32-powerpc
RELOCATION RECORDS FOR [.text]:
OFFSET TYPE VALUE
00000002 R_PPC_ADDR16_HA buffer2
00000006 R_PPC_ADDR16_LO buffer2
0000000e R_PPC_ADDR16_HA buffer
00000016 R_PPC_ADDR16_LO buffer
RELOCATION RECORDS FOR [.stab]:
OFFSET TYPE VALUE
00000014 R_PPC_ADDR32 .text
00000020 R_PPC_ADDR32 .text
00000140 R_PPC_ADDR32 test__Fv
0000020c R_PPC_ADDR32 Letext
linker output:
test4_out.o: file format elf32-powerpc
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/13511] Problem with compiler optimization -o2
2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
` (7 preceding siblings ...)
2004-01-05 13:37 ` osoentgen at lucent dot com
@ 2004-01-05 14:09 ` nathan at gcc dot gnu dot org
2004-01-05 14:14 ` osoentgen at lucent dot com
` (3 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: nathan at gcc dot gnu dot org @ 2004-01-05 14:09 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From nathan at gcc dot gnu dot org 2004-01-05 14:09 -------
what is the .s file the compiler emits with -save-temps or -S
and what is the output of objdump -dr on the object file?
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/13511] Problem with compiler optimization -o2
2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
` (8 preceding siblings ...)
2004-01-05 14:09 ` nathan at gcc dot gnu dot org
@ 2004-01-05 14:14 ` osoentgen at lucent dot com
2004-01-05 14:15 ` pinskia at gcc dot gnu dot org
` (2 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: osoentgen at lucent dot com @ 2004-01-05 14:14 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From osoentgen at lucent dot com 2004-01-05 14:14 -------
pobjdump -dr test4.o:
test4.o: file format elf32-powerpc
Disassembly of section .text:
00000000 <test__Fv>:
0: 3d 40 00 00 lis r10,0
2: R_PPC_ADDR16_HA buffer2
4: 39 4a 00 00 addi r10,r10,0
6: R_PPC_ADDR16_LO buffer2
8: 38 00 00 00 li r0,0
c: 3d 60 00 00 lis r11,0
e: R_PPC_ADDR16_HA buffer
10: 98 0a 00 0c stb r0,12(r10)
14: 39 6b 00 00 addi r11,r11,0
16: R_PPC_ADDR16_LO buffer
18: 88 0b 00 00 lbz r0,0(r11)
1c: 98 0a 00 0d stb r0,13(r10)
20: 89 2b 00 00 lbz r9,0(r11)
24: 99 2a 00 0a stb r9,10(r10)
28: 88 0b 00 00 lbz r0,0(r11)
2c: 98 0a 00 0b stb r0,11(r10)
30: 4e 80 00 20 blr
.s file contents:
.file "test4.cc"
.stabs "/home/osoentge/del/opt_comp/",100,0,0,.Ltext0
.stabs "test4.cc",100,0,0,.Ltext0
.section ".text"
.Ltext0:
.stabs "gcc2_compiled.", 0x3c, 0, 0, 0
.stabs "int:t(0,1)=r(0,1);0020000000000;0017777777777;",128,0,0,0
.stabs "char:t(0,2)=r(0,2);0;255;",128,0,0,0
.stabs "long int:t(0,3)=r(0,1);0020000000000;0017777777777;",128,0,0,0
.stabs "unsigned int:t(0,4)=r(0,1);0000000000000;0037777777777;",128,0,0,0
.stabs "long unsigned int:t(0,5)=r(0,1);0000000000000;0037777777777;",128,0,0,0
.stabs "long long int:t(0,6)=r
(0,1);01000000000000000000000;0777777777777777777777;",128,0,0,0
.stabs "long long unsigned int:t(0,7)=r
(0,1);0000000000000;01777777777777777777777;",128,0,0,0
.stabs "short int:t(0,8)=r(0,8);-32768;32767;",128,0,0,0
.stabs "short unsigned int:t(0,9)=r(0,9);0;65535;",128,0,0,0
.stabs "signed char:t(0,10)=r(0,10);-128;127;",128,0,0,0
.stabs "unsigned char:t(0,11)=r(0,11);0;255;",128,0,0,0
.stabs "float:t(0,12)=r(0,1);4;0;",128,0,0,0
.stabs "double:t(0,13)=r(0,1);8;0;",128,0,0,0
.stabs "long double:t(0,14)=r(0,1);8;0;",128,0,0,0
.stabs "complex int:t(0,15)=s8real:(0,1),0,32;imag:(0,1),32,32;;",128,0,0,0
.stabs "complex float:t(0,16)=r(0,16);4;0;",128,0,0,0
.stabs "complex double:t(0,17)=r(0,17);8;0;",128,0,0,0
.stabs "complex long double:t(0,18)=r(0,18);8;0;",128,0,0,0
.stabs "bool:t(0,19)=@s32;-16;",128,0,0,0
.stabs "void:t(0,20)=(0,20)",128,0,0,0
.stabs "__wchar_t:t(0,21)=r(0,1);0020000000000;0017777777777;",128,0,0,0
.stabs "__vtbl_ptr_type:t(0,22)=s8__delta:(0,8),0,16;__index:(0,8),16,16;__pfn:
(0,23)=*(0,20),32,32;__delta2:(0,8),32,16;;",128,0,0,0
.align 2
.stabs "test__Fv:F(0,20)",36,0,5,test__Fv
.globl test__Fv
.type test__Fv,@function
test__Fv:
.stabn 68,0,5,.LM1-test__Fv
.LM1:
.LBB2:
.stabn 68,0,7,.LM2-test__Fv
.LM2:
lis 10,buffer2@ha
la 10,buffer2@l(10)
.stabn 68,0,11,.LM3-test__Fv
.LM3:
li 0,0
.stabn 68,0,6,.LM4-test__Fv
.LM4:
lis 11,buffer@ha
.stabn 68,0,11,.LM5-test__Fv
.LM5:
stb 0,12(10)
.stabn 68,0,6,.LM6-test__Fv
.LM6:
la 11,buffer@l(11)
.stabn 68,0,11,.LM7-test__Fv
.LM7:
lbz 0,0(11)
stb 0,13(10)
.stabn 68,0,12,.LM8-test__Fv
.LM8:
lbz 9,0(11)
stb 9,10(10)
.stabn 68,0,13,.LM9-test__Fv
.LM9:
lbz 0,0(11)
stb 0,11(10)
.LBE2:
blr
.Lfe1:
.size test__Fv,.Lfe1-test__Fv
.stabs "Frameptr:r(0,24)=*(0,2)",64,0,6,11
.stabs "CEmsgArray:r(0,24)",64,0,7,10
.stabn 192,0,0,.LBB2-test__Fv
.stabn 224,0,0,.LBE2-test__Fv
.Lscope0:
.stabs "",36,0,0,.Lscope0-test__Fv
.stabs "buffer:G(0,25)=ar(0,1);0;99;(0,2)",32,0,1,0
.globl buffer
.lcomm buffer,100,4
.stabs "buffer2:G(0,25)",32,0,2,0
.globl buffer2
.lcomm buffer2,100,4
.text
.stabs "",100,0,0,Letext
Letext:
.ident "GCC: (GNU) 2.95.3 20010315 (release)"
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/13511] Problem with compiler optimization -o2
2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
` (9 preceding siblings ...)
2004-01-05 14:14 ` osoentgen at lucent dot com
@ 2004-01-05 14:15 ` pinskia at gcc dot gnu dot org
2004-01-05 14:20 ` pinskia at gcc dot gnu dot org
2004-01-05 14:21 ` pinskia at gcc dot gnu dot org
12 siblings, 0 replies; 14+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-01-05 14:15 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2004-01-05 14:15 -------
If the relocations are wrong, then it is a binutils bug, report it to them.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |INVALID
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/13511] Problem with compiler optimization -o2
2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
` (10 preceding siblings ...)
2004-01-05 14:15 ` pinskia at gcc dot gnu dot org
@ 2004-01-05 14:20 ` pinskia at gcc dot gnu dot org
2004-01-05 14:21 ` pinskia at gcc dot gnu dot org
12 siblings, 0 replies; 14+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-01-05 14:20 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2004-01-05 14:20 -------
Anyway this is fixed since at 3.0 so reopening to close it right.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |UNCONFIRMED
Resolution|INVALID |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/13511] Problem with compiler optimization -o2
2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
` (11 preceding siblings ...)
2004-01-05 14:20 ` pinskia at gcc dot gnu dot org
@ 2004-01-05 14:21 ` pinskia at gcc dot gnu dot org
12 siblings, 0 replies; 14+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-01-05 14:21 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2004-01-05 14:21 -------
lis 11,buffer+1@ha
lis 3,buffer2@ha
lbz 10,buffer+1@l(11)
la 9,buffer2@l(3)
li 0,0
stb 10,11(9)
stb 0,12(9)
stb 10,13(9)
stb 10,10(9)
blr
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |FIXED
Target Milestone|--- |3.0.x
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2004-01-05 14:21 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
2003-12-30 17:01 ` [Bug c++/13511] " pinskia at gcc dot gnu dot org
2004-01-05 12:43 ` osoentgen at lucent dot com
2004-01-05 12:44 ` osoentgen at lucent dot com
2004-01-05 12:48 ` falk dot hueffner at student dot uni-tuebingen dot de
2004-01-05 12:54 ` osoentgen at lucent dot com
2004-01-05 13:06 ` nathan at gcc dot gnu dot org
2004-01-05 13:29 ` osoentgen at lucent dot com
2004-01-05 13:37 ` osoentgen at lucent dot com
2004-01-05 14:09 ` nathan at gcc dot gnu dot org
2004-01-05 14:14 ` osoentgen at lucent dot com
2004-01-05 14:15 ` pinskia at gcc dot gnu dot org
2004-01-05 14:20 ` pinskia at gcc dot gnu dot org
2004-01-05 14:21 ` pinskia at gcc dot gnu dot org
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).