[PATCH, 2/2][PR66642] Add empty loop exit block in transform_to_exit_first_loop_alt
Tom de Vries
Tom_deVries@mentor.com
Thu Jun 25 08:15:00 GMT 2015
Hi,
I ran into a failure with parloops for reduction loop testcase
libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-3.c. When we
exercise the low iteration count loop, the test-case fails.
To understand the problem, let's first look at what happens when we use
transform_to_exit_first_loop (the original one) instead of
transform_to_exit_first_loop_alt (the alternative one, which is
currently used, and causing the failure).
Before transform_to_exit_first_loop, the low iteration count loop and
the main loop share the loop exit block. After
transform_to_exit_first_loop, that's not the case anymore, the main loop
now has an exit block with a single predecessor. Subsequently,
separate_decls_in_region inserts code in the main loop exit block, which
is only triggered upon exit of the main loop.
However, transform_to_exit_first_loop_alt does not insert such an exit
block, and the code inserted by separate_decls_in_region is also active
for the low iteration count loop, which results in an incorrect
reduction result when the low iteration count loop is used.
This patch fixes the problem by making sure
transform_to_exit_first_loop_alt adds a new exit block inbetween the
main loop header and the old exit block.
Bootstrapped and reg-tested on x86_64.
OK for trunk?
Thanks,
- Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-Add-empty-loop-exit-block-in-transform_to_exit_first.patch
Type: text/x-patch
Size: 6359 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20150625/5c7e22d7/attachment.bin>
More information about the Gcc-patches
mailing list