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



Georg-Johann Lay <gjl at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

                 CC|                            |gjl at gcc dot gnu.org



--- Comment #8 from Georg-Johann Lay <gjl at gcc dot gnu.org> 2013-03-07 
23:26:01 UTC ---

(In reply to comment #3)

> (In reply to comment #2)

>> Any specific sections you can point me to? I'd be interested to hear a

>> justification for this behavior.

> 

> Simple answer, an interrupt can happen any time after the access/assignment of

> the global register variable so it needs to be set to the value and treated as

> a volatile variable.



Is this really the case?  There is not even a means to tag a REG as volatile. 

The /v flag is set but for REGs it means "user variable", see rtl.h and the

docs for volatil.



http://gcc.gnu.org/viewcvs/trunk/gcc/rtl.h?view=markup#l286



And qualifying foo as volatile diagnoses as expected:



<stdin>:1:1: warning: optimization may eliminate reads and/or writes to

register variables [-Wvolatile-register-var]



This issue looks rather like a fallout of reload that for some reasons spills

for the shift insn.



See also PR49491 



Or are global registers spacial for reload? I still don't see why a spilling is

needed for the shift insn...

Reply via email to