[Bug c/33111] New: Bad code generation with -O2 (ARM 7 architecture)

2007-08-19 Thread gressau at optusnet dot com dot au
#define UIP_LLH_LEN 1
#define BUF ((uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN])
#define u8_t unsigned char
#define u16_t unsigned short
#define UIP_BUFSIZE 1000

typedef struct {
  /* IP header. */
  u8_t vhl,
tos,  
len[2],   
ipid[2],
ipoffset[2],  
ttl,  
proto; 
  u16_t ipchksum;
  u16_t srcipaddr[2], 
destipaddr[2];

  /* TCP header. */
  u16_t srcport,
destport;
  u8_t seqno[4],  
ackno[4],
tcpoffset,
flags,
wnd[2]; 
  u16_t tcpchksum;
  u8_t urgp[2];
  u8_t optdata[4];
} uip_tcpip_hdr;


u8_t uip_buf[UIP_BUFSIZE+2];
volatile u8_t uip_acc32[4];

int jaroslav;

int main(void)
{
if((BUF->ackno[0] == uip_acc32[0]) &&
(BUF->ackno[1] == uip_acc32[1]) &&
(BUF->ackno[2] == uip_acc32[2]) &&
(BUF->ackno[3] == uip_acc32[3]))
jaroslav++;
return 1;
}

.file   "main.c"
.text
.align  2
.global main
.type   main, %function
main:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
@ link register save eliminated.
ldr r0, .L10
ldr r1, .L10+4
ldrbr2, [r0, #28]   @ zero_extendqisi2
ldrbr3, [r1, #0]@ zero_extendqisi2
cmp r2, r3
@ lr needed for prologue
beq .L9
.L2:
mov r0, #1
bx  lr
.L9:
ldrbr2, [r1, #1]@ zero_extendqisi2
ldrbr3, [r0, #29]   @ zero_extendqisi2
cmp r3, r2
bne .L2
ldrbr2, [r1, #2]@ zero_extendqisi2
ldrbr3, [r0, #30]   @ zero_extendqisi2
cmp r3, r2
bne .L2
ldrbr2, [r1, #3]@ zero_extendqisi2
ldrbr3, [r0, #31]   @ zero_extendqisi2
cmp r3, r2 I THINK CC's OF THIS
COMPARE NEVER GET LOOKED AT
ldreq   r2, .L10+8
ldreq   r3, [r2, #0]
addeq   r3, r3, #1
streq   r3, [r2, #0]
b   .L2
.L11:
.align  2
.L10:
.word   uip_buf+1
.word   uip_acc32
.word   jaroslav
.size   main, .-main
.comm   uip_buf,1002,1
.comm   uip_acc32,4,1
.comm   jaroslav,4,4
.ident  "GCC: (GNU) 4.2.0"


-- 
   Summary: Bad code generation with -O2 (ARM 7 architecture)
   Product: gcc
   Version: 4.2.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: gressau at optusnet dot com dot au


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33111



[Bug c/33111] Bad code generation with -O2 (ARM 7 architecture)

2007-08-19 Thread gressau at optusnet dot com dot au


--- Comment #2 from gressau at optusnet dot com dot au  2007-08-19 13:23 
---
The attached sample code does not illustrate the real problem.
Further investigation is required why the code works with -O0 
and does not work with -O2.


-- 

gressau at optusnet dot com dot au changed:

   What|Removed |Added

 CC|gressau at optusnet dot com |
   |dot au  |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33111



[Bug c/33111] Bad code generation with -O2 (ARM 7 architecture)

2007-08-19 Thread gressau at optusnet dot com dot au


--- Comment #3 from gressau at optusnet dot com dot au  2007-08-19 22:22 
---
Created an attachment (id=14077)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=14077&action=view)
This file does not compile correctly with -O2


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33111



[Bug c/33111] Bad code generation with -O2 (ARM 7 architecture)

2007-08-19 Thread gressau at optusnet dot com dot au


--- Comment #4 from gressau at optusnet dot com dot au  2007-08-19 22:24 
---
Created an attachment (id=14078)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=14078&action=view)
This is the working unoptimized assembly of uip.c


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33111



[Bug c/33111] Bad code generation with -O2 (ARM 7 architecture)

2007-08-19 Thread gressau at optusnet dot com dot au


--- Comment #5 from gressau at optusnet dot com dot au  2007-08-19 22:25 
---
Created an attachment (id=14079)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=14079&action=view)
This is the nonworking optimized assembly of uip.c


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33111



[Bug c/33111] Bad code generation with -O2 (ARM 7 architecture)

2007-09-09 Thread gressau at optusnet dot com dot au


--- Comment #6 from gressau at optusnet dot com dot au  2007-09-09 20:44 
---
Created an attachment (id=14180)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=14180&action=view)
Test of optimized comparison (-O2)

Comparison of four consecutive bytes gets optimized (-O2) as comparison of a
word. The word address produced does not have the last two bits zero and the
ARM7 processor either ignores them (LPC2000) or data aborts (SAM7).


-- 

gressau at optusnet dot com dot au changed:

   What|Removed |Added

  Attachment #14077|0   |1
is obsolete||
  Attachment #14078|0   |1
is obsolete||
  Attachment #14079|0   |1
is obsolete||


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33111



[Bug c/33111] Bad code generation with -O2 (ARM 7 architecture)

2007-09-09 Thread gressau at optusnet dot com dot au


--- Comment #8 from gressau at optusnet dot com dot au  2007-09-09 22:23 
---
Subject: RE:  Bad code generation with -O2 (ARM 7 architecture)

The -fno-strict-aliasing does not fix the unaligned access.

-Original Message-
From: rask at gcc dot gnu dot org [mailto:[EMAIL PROTECTED] 
Sent: Monday, 10 September 2007 07:08
To: [EMAIL PROTECTED]
Subject: [Bug c/33111] Bad code generation with -O2 (ARM 7 architecture)



--- Comment #7 from rask at gcc dot gnu dot org  2007-09-09 21:08
---
Did you read comment #1?
Does -fno-strict-aliasing magically "fix" your code?


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33111