public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/52301] New: avr-gcc 4.6.2 produces NOP loop in simple while statement
@ 2012-02-17 21:30 gpib at rickyrockrat dot net
2012-02-21 3:45 ` [Bug target/52301] " pinskia at gcc dot gnu.org
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: gpib at rickyrockrat dot net @ 2012-02-17 21:30 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52301
Bug #: 52301
Summary: avr-gcc 4.6.2 produces NOP loop in simple while
statement
Classification: Unclassified
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: major
Priority: P3
Component: c
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: gpib@rickyrockrat.net
Created attachment 26696
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=26696
Problem source code
The while loop produces a jump to L3 which is = L5. The code immediately
following jumps to L5, which does nothing but loop.
In a main function, I have a loop like so:
while(1) {
if (stat &DAT_READY) {
cli();
stat=0;
sei();
}
Which produces this asm code:
89 .L6:
64:spi_irq_echo.c **** sei(); // Enable global interrupts
90 .loc 1 64 0
91 /* #APP */
92 ; 64 "spi_irq_echo.c" 1
93 0016 7894 sei
94 ; 0 "" 2
65:spi_irq_echo.c **** while(1) {
66:spi_irq_echo.c **** if (stat &DAT_READY) {
95 .loc 1 66 0
96 /* #NOAPP */
97 0018 8091 0000 lds r24,stat
98 001c 80FF sbrs r24,0
99 001e 00C0 rjmp .L3
67:spi_irq_echo.c **** cli();
100 .loc 1 67 0
101 /* #APP */
102 ; 67 "spi_irq_echo.c" 1
103 0020 F894 cli
104 ; 0 "" 2
\fGAS LISTING /tmp/ccXonaYI.s page 4
68:spi_irq_echo.c **** stat=0;
105 .loc 1 68 0
106 /* #NOAPP */
107 0022 1092 0000 sts stat,__zero_reg__
108 0026 00C0 rjmp .L6
109 .L3:
110 .L5:
111 0028 00C0 rjmp .L5
112 .cfi_endproc
If add a global that is u8 x, and modify the loop as follows:
while(1) {
x=1;
if (stat &DAT_READY) {
cli();
stat=0;
sei();
}
It produces the correct assembler.
Command line is:
avr-gcc -Os -Wa,-a=spi_irq_echo.x -fno-zero-initialized-in-bss -Wall -g
-mmcu=attiny26 -mshort-calls -mtiny-stack -I ../../common -I. -c -o
spi_irq_echo.o spi_irq_echo.c
Complete file is attached.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug target/52301] avr-gcc 4.6.2 produces NOP loop in simple while statement
2012-02-17 21:30 [Bug c/52301] New: avr-gcc 4.6.2 produces NOP loop in simple while statement gpib at rickyrockrat dot net
@ 2012-02-21 3:45 ` pinskia at gcc dot gnu.org
2012-02-22 4:29 ` gpib at rickyrockrat dot net
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2012-02-21 3:45 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52301
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> 2012-02-21 03:42:56 UTC ---
Can you provide the preprocessed source? Add -save-temps and attach the .i
file?
Also can you run "avr-gcc -v" and provide the output of that?
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug target/52301] avr-gcc 4.6.2 produces NOP loop in simple while statement
2012-02-17 21:30 [Bug c/52301] New: avr-gcc 4.6.2 produces NOP loop in simple while statement gpib at rickyrockrat dot net
2012-02-21 3:45 ` [Bug target/52301] " pinskia at gcc dot gnu.org
@ 2012-02-22 4:29 ` gpib at rickyrockrat dot net
2012-02-22 4:31 ` gpib at rickyrockrat dot net
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: gpib at rickyrockrat dot net @ 2012-02-22 4:29 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52301
--- Comment #2 from rickyrockrat <gpib at rickyrockrat dot net> 2012-02-22 04:27:01 UTC ---
Created attachment 26722
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=26722
Intermediate file
Intermediate file, as requested. Changed name to bug52301.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug target/52301] avr-gcc 4.6.2 produces NOP loop in simple while statement
2012-02-17 21:30 [Bug c/52301] New: avr-gcc 4.6.2 produces NOP loop in simple while statement gpib at rickyrockrat dot net
2012-02-21 3:45 ` [Bug target/52301] " pinskia at gcc dot gnu.org
2012-02-22 4:29 ` gpib at rickyrockrat dot net
@ 2012-02-22 4:31 ` gpib at rickyrockrat dot net
2012-02-22 4:34 ` gpib at rickyrockrat dot net
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: gpib at rickyrockrat dot net @ 2012-02-22 4:31 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52301
--- Comment #3 from rickyrockrat <gpib at rickyrockrat dot net> 2012-02-22 04:29:21 UTC ---
Created attachment 26723
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=26723
Script to compile bug52301.c
Script to run avr-gcc on the subject file.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug target/52301] avr-gcc 4.6.2 produces NOP loop in simple while statement
2012-02-17 21:30 [Bug c/52301] New: avr-gcc 4.6.2 produces NOP loop in simple while statement gpib at rickyrockrat dot net
` (2 preceding siblings ...)
2012-02-22 4:31 ` gpib at rickyrockrat dot net
@ 2012-02-22 4:34 ` gpib at rickyrockrat dot net
2012-02-22 4:42 ` pinskia at gcc dot gnu.org
2012-02-22 5:32 ` gpib at rickyrockrat dot net
5 siblings, 0 replies; 7+ messages in thread
From: gpib at rickyrockrat dot net @ 2012-02-22 4:34 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52301
--- Comment #4 from rickyrockrat <gpib at rickyrockrat dot net> 2012-02-22 04:31:11 UTC ---
Created attachment 26724
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=26724
Assembly generated using script and original source
Resulting assembly from recently supplied files - just to make sure the problem
is still there.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug target/52301] avr-gcc 4.6.2 produces NOP loop in simple while statement
2012-02-17 21:30 [Bug c/52301] New: avr-gcc 4.6.2 produces NOP loop in simple while statement gpib at rickyrockrat dot net
` (3 preceding siblings ...)
2012-02-22 4:34 ` gpib at rickyrockrat dot net
@ 2012-02-22 4:42 ` pinskia at gcc dot gnu.org
2012-02-22 5:32 ` gpib at rickyrockrat dot net
5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2012-02-22 4:42 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52301
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |INVALID
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> 2012-02-22 04:33:50 UTC ---
This is invalid as GCC has no way to know that stat can change. Mark stat as
volatile and then GCC will know it can change.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug target/52301] avr-gcc 4.6.2 produces NOP loop in simple while statement
2012-02-17 21:30 [Bug c/52301] New: avr-gcc 4.6.2 produces NOP loop in simple while statement gpib at rickyrockrat dot net
` (4 preceding siblings ...)
2012-02-22 4:42 ` pinskia at gcc dot gnu.org
@ 2012-02-22 5:32 ` gpib at rickyrockrat dot net
5 siblings, 0 replies; 7+ messages in thread
From: gpib at rickyrockrat dot net @ 2012-02-22 5:32 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52301
--- Comment #6 from rickyrockrat <gpib at rickyrockrat dot net> 2012-02-22 05:05:56 UTC ---
I guess I'm a little confused. How can GCC NOT know it can change?
Any RAM location not only can but usually does change. It seems that volatile
should be the norm.
Whatever. I'll just set all my data types to be volatile, since this doesn't
make sense to me.
Thanks.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2012-02-22 5:06 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-02-17 21:30 [Bug c/52301] New: avr-gcc 4.6.2 produces NOP loop in simple while statement gpib at rickyrockrat dot net
2012-02-21 3:45 ` [Bug target/52301] " pinskia at gcc dot gnu.org
2012-02-22 4:29 ` gpib at rickyrockrat dot net
2012-02-22 4:31 ` gpib at rickyrockrat dot net
2012-02-22 4:34 ` gpib at rickyrockrat dot net
2012-02-22 4:42 ` pinskia at gcc dot gnu.org
2012-02-22 5:32 ` gpib at rickyrockrat dot net
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).