On Tue, Sep 15, 2020 at 05:31:48PM -0500, Qing Zhao wrote: > > But, scheduling runs *after* that, and then you need to prevent the > > inserted (zeroing) insns from moving -- if you don't, the code after > > some zeroing can be used as gadget! You want to always have all > > zeroing insns after *any* computational insn, or it becomes a gadget. > > Please see the previous discussion, we have agreed to put the new pass > (pass_zero_call_used_regs) > in the beginning of the pass_late_compilation as following:
Yes, I know that at some point it was said that seemed like a good place for it. > PUSH_INSERT_PASSES_WITHIN (pass_late_compilation) > ++++ NEXT_PASS (pass_zero_call_used_regs); > NEXT_PASS (pass_compute_alignments); > NEXT_PASS (pass_variable_tracking); > NEXT_PASS (pass_free_cfg); > NEXT_PASS (pass_machine_reorg); > NEXT_PASS (pass_cleanup_barriers); > NEXT_PASS (pass_delay_slots); > > Scheduling has been done already. But there are many more passes that can reorder things. Like machine_reorg (which is a big deal). I don't think other passes here are harmful (maybe the shorten stuff)? But. Targets can also insert more passes here. If you want the zeroing insns to stay with the return, you have to express that in RTL. Anything else is extremely fragile. Segher