tree-optimization/98736 - use programing order preserved RPO in ldist
authorBin Cheng <bin.cheng@linux.alibaba.com>
Wed, 7 Apr 2021 02:24:32 +0000 (10:24 +0800)
committerBin Cheng <bin.cheng@linux.alibaba.com>
Wed, 7 Apr 2021 02:24:32 +0000 (10:24 +0800)
commite0bdccac582c01c928a05f26edcd8f5ac24669eb
tree6e4adb9c136a595e45e5ce2caed7ff09321346ae
parenta7698c0e1ecad65b1ab651acc82b34e12c7efd35
tree-optimization/98736 - use programing order preserved RPO in ldist

Tree loop distribution uses RPO to build reduced dependence graph,
it's important that RPO preserves the original programing order.
Though it usually does so, when distributing loop nest, exit BB can
be placed before some loop BBs while after loop header.  This patch
fixes the issue by calling rev_post_order_and_mark_dfs_back_seme.

gcc/ChangeLog:

PR tree-optimization/98736
* tree-loop-distribution.c
* (loop_distribution::bb_top_order_init):
Compute RPO with programing order preserved by calling function
rev_post_order_and_mark_dfs_back_seme.

gcc/testsuite/ChangeLog:

PR tree-optimization/98736
* gcc.c-torture/execute/pr98736.c: New test.
gcc/testsuite/gcc.c-torture/execute/pr98736.c [new file with mode: 0644]
gcc/tree-loop-distribution.c