> Rather than adding do_pending_stack_adjust () in all the places, especially > when it isn't clear whether emit_conditional_move will be called at all and > whether it will actually do do_pending_stack_adjust (), I chose to add > two new functions to save/restore the pending stack adjustment state, > so that when instruction sequence is thrown away (either by doing > start_sequence/end_sequence around it and not emitting it, or > delete_insns_since) the state can be restored, and have changed all the > places that IMHO need it for emit_conditional_move.
Why not do it in emit_conditional_move directly then? The code thinks it's clever to do: do_pending_stack_adjust (); last = get_last_insn (); prepare_cmp_insn (XEXP (comparison, 0), XEXP (comparison, 1), GET_CODE (comparison), NULL_RTX, unsignedp, OPTAB_WIDEN, &comparison, &cmode); [...] delete_insns_since (last); return NULL_RTX; but apparently not, so why not delete the stack adjustment as well and restore the state afterwards? -- Eric Botcazou