loop unrolling performance regression

Jan Hubicka jh@suse.cz
Mon Feb 18 02:54:00 GMT 2002


Hi,
I've been investigating futher the loop unrolling regression caused by Richard
fix and cleanup.  The problem I see is with loop like

loop_beg_note
loop_label:
..body..
if (test) goto skip
exit code
goto exit_label
skip:
goto loop_label
loop_end_note

The goto skip is forwarded to loop_label and resutling code is:

loop_beg_note
loop_label:
..body..
if (test) goto loop_beg_label
exit code
goto exit_label
loop_end_note

And the loop is ignored by loop optimizer as missformed one.

While the original code did jump optimized this special case by hand moving
the loop_end_note backward to re-construct proper loop.

I see three possible fixes:
1) re-incarante the ugly code to more loop_end_label around
2) teach delete_block to move loop_end note backward in such case
3) avoid forwarding of the jumps followed by loop_end note

The 3) looks most correct to me as it will solve problems with multiple
back edges that I beleive didn't happen in old jump implementation.

2) looks it can produce better code tought.  So I will try to prepare both
fixes and give it benchmark run.

Honza



More information about the Gcc mailing list