Ayal Zaks <ayal.z...@gmail.com> writes: > Richard Sandiford <richard.sandif...@linaro.org> wrote on 30/08/2011 > 03:10:50 PM: > >> From: Richard Sandiford <richard.sandif...@linaro.org> >> To: gcc-patches@gcc.gnu.org >> Cc: Ayal Zaks/Haifa/IBM@IBMIL >> Date: 30/08/2011 03:10 PM >> Subject: [3/4] SMS: Record moves in the partial schedule > >> >> This patch adds infrastructure that will be used by the final patch. >> Specifically: >> >> - it splits the generation of register moves into two: > schedule_reg_moves >> records moves in the partial schedule, while apply_reg_moves makes > the >> register substitutions. >> >> This patch doesn't actually schedule the moves. Instead, there's >> some throw-away code in apply_reg_moves to emit the moves in the >> same as we do now. That's throw-away code that will be removed >> in the final patch. >> >> - schedule_reg_moves is allowed to fail. We then try again with the >> next ii (subject to the usual ii limits). >> >> In this patch, schedule_reg_moves always returns true. >> >> - The partial schedule uses ids to represent register moves. >> The first register move has id g->num_nodes. >> >> Richard > This is fine.
Thanks. > Only request is to document that the register moves are > placed/assigned-id's in a specific order. I suppose this is the downside of splitting the patches up, sorry, but the ids are only ordered for the throw-away loop: FOR_EACH_VEC_ELT_REVERSE (ps_reg_move_info, ps->reg_moves, i, move) add_insn_before (move->insn, ps_first_note (ps, move->def), NULL); and for the prologue/epilogue code. Both are replaced in patch 4 with code that doesn't rely on the ordering of ids. I'd rather the code didn't rely on any ordering here. If any future code is added that needs to know more about the moves, I think it should use the move structure instead of the ids. (There's already a fair bit of info in the structure, but we could add more later if we need it.) > Functionality-wise it results in identical code as current version, > right? Yeah, that's right. Only patch 4 does anything useful to the output. Richard