https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112415
--- Comment #30 from John David Anglin <danglin at gcc dot gnu.org> ---
0x0019c684 <+588>: stw r23,0(r22)
=> 0x0019c688 <+592>: stw ret1,0(r21)
0x0019c68c <+596>: stw r31,0(r20)
0x0019c690 <+600>: b,l 0x198d58 <compiler_visit_expr1>,rp
0x0019c694 <+604>: stw ret0,0(r19)
These instructions are in a loop:
/* No * or ** args, so can use faster calling sequence */
for (i = 0; i < nelts; i++) {
expr_ty elt = asdl_seq_GET(args, i);
assert(elt->kind != Starred_kind);
VISIT(c, expr, elt);
}
r21 is clobbered by VISIT call. Value is okay in first iteration.
The initialization instructions are outside the loop:
0x0019c638 <+512>: ldo 184(r19),r22
0x0019c63c <+516>: ldw 184(r19),r14
0x0019c640 <+520>: ldo 188(r19),r21
0x0019c644 <+524>: ldw 188(r19),r13
0x0019c648 <+528>: ldo 18c(r19),r20
0x0019c64c <+532>: ldw 18c(r19),r12
0x0019c650 <+536>: ldw 190(r19),r11