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

Reply via email to