[Bug target/115726] New: [avr] Wrong code with __memx and local register variables
gjl at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Jul 1 08:49:31 GMT 2024
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115726
Bug ID: 115726
Summary: [avr] Wrong code with __memx and local register
variables
Product: gcc
Version: 14.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: gjl at gcc dot gnu.org
Target Milestone: ---
Created attachment 58548
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=58548&action=edit
GNU-C99 test case
When the result of a read from address-space __memx is forced into some
register, wrong code might be generated. Reason is that respective insns
expand with clobbers of some hard registers that they will use later on.
With the attached test case for example, with avr-gcc-v14.1 -mmcu=atmega128 -Os
-dp -S the generated assembly is basically like:
xload8_r30:
;;
mov r24,r30 ; 17 [c=4 l=1] movqi_insn/0
ret ; 20 [c=0 l=1] return
xload16_r30:
;;
movw r24,r30 ; 17 [c=4 l=1] *movhi/0
ret ; 20 [c=0 l=1] return
xload8_r22:
;;
mov r24,r22 ; 17 [c=4 l=1] movqi_insn/0
ret ; 20 [c=0 l=1] return
xload16_r22:
;;
movw r24,r22 ; 17 [c=4 l=1] *movhi/0
ret ; 20 [c=0 l=1] return
so not a single load is present.
More information about the Gcc-bugs
mailing list