On 04/07/2011 01:34 PM, Alexander Monakov wrote:
Hello,(quoting myself from the PR audit trail) We call sched_scan for preheader blocks from inner regions twice: first during sel_add_loop_preheaders, and then during the subsequent call to sel_init_bbs in setup_current_loop_nest. As a result, we also call remove_notes for those blocks twice, and after the second call incorrectly record that the block has no notes. The solution is to call sel_add_loop_preheaders after sel_init_bbs. We need to add new preheader blocks into 'bbs' vector in setup_current_loop_nest, so we pass the pointer to the vector to sel_add_loop_preheaders. PR rtl-optimization/48302 * sel-sched-ir.h (sel_add_loop_preheaders): Update prototype. * sel-sched-ir.c (sel_add_loop_preheaders): Add 'bbs' argument. Use it to record added preheader blocks. (setup_current_loop_nest): Add 'bbs' argument. Pass it on to sel_add_loop_preheaders. (sel_region_init): Move call to setup_current_loop_nest after sel_init_bbs. testsuite: g++.dg/opt/pr48302.C: New.
Ok, thanks.
