On 07/19/2011 02:42 PM, Bernd Schmidt wrote: > On 07/19/11 23:33, Richard Henderson wrote: >> But after pass_partition_blocks, we run into trouble. There >> are no less than 4 other passes that add *new* crossing jumps >> without doing *any* of the subsequent fixups for less capable >> targets: pass_outof_cfg_layout_mode, pass_reorder_blocks, >> pass_sched2 (ia64 only? it's in code in haifa that looks like >> speculative load fixups), and pass_convert_to_eh_region_ranges.
Unrelated to your response, I had intended to make the point that three of the errant passes above run after register allocation. Which of course does not work on any target that does not support long branches. > > Is it possible to leave it in for targets to call during their reorg > pass, which I'm assuming is late enough? Really the entire pass pipeline > after reload needs rethinking. I'm not sure how one would apply this during a reorg pass. Presumably your target does have at least long unconditional branches, since otherwise one runs into a register allocation problem. If in addition you've long unconditional branches as well as no exception_receiver pattern, then it seems like you could completely do away with the early pass_partition_blocks. Given the pre-conditions above, we could delay the assignment of blocks to partitions until quite late. Although you probably would never leave it any later than pass_reorder_blocks. r~