diff options
author | Jakub Jelinek <jakub@redhat.com> | 2016-11-22 11:13:01 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2016-11-22 11:13:01 +0100 |
commit | 9b28cb6f0abed5a65534487ca27487675fa4dc18 (patch) | |
tree | cce9bfc0d897a8d181e9aea4792743d8e5746db8 /gcc/tree-if-conv.c | |
parent | ee8195d985c6ed11902ae7fc65a77d75bdf42403 (diff) | |
download | gcc-9b28cb6f0abed5a65534487ca27487675fa4dc18.zip gcc-9b28cb6f0abed5a65534487ca27487675fa4dc18.tar.gz gcc-9b28cb6f0abed5a65534487ca27487675fa4dc18.tar.bz2 |
re PR middle-end/78445 (ICE in maybe_gen_insn, at optabs.c:7014)
PR tree-optimization/78445
* tree-if-conv.c (tree_if_conversion): If any_pred_load_store or
any_complicated_phi, version loop even if flag_tree_loop_if_convert is
1. Formatting fix.
* gcc.dg/pr78445.c: New test.
From-SVN: r242689
Diffstat (limited to 'gcc/tree-if-conv.c')
-rw-r--r-- | gcc/tree-if-conv.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c index dc43d95..13e12c6 100644 --- a/gcc/tree-if-conv.c +++ b/gcc/tree-if-conv.c @@ -2808,15 +2808,20 @@ tree_if_conversion (struct loop *loop) goto cleanup; /* Since we have no cost model, always version loops unless the user - specified -ftree-loop-if-convert. Either version this loop, or if - the pattern is right for outer-loop vectorization, version the - outer loop. In the latter case we will still if-convert the - original inner loop. */ - if (flag_tree_loop_if_convert != 1 - && !version_loop_for_if_conversion - (versionable_outer_loop_p (loop_outer (loop)) - ? loop_outer (loop) : loop)) - goto cleanup; + specified -ftree-loop-if-convert or unless versioning is required. + Either version this loop, or if the pattern is right for outer-loop + vectorization, version the outer loop. In the latter case we will + still if-convert the original inner loop. */ + if (any_pred_load_store + || any_complicated_phi + || flag_tree_loop_if_convert != 1) + { + struct loop *vloop + = (versionable_outer_loop_p (loop_outer (loop)) + ? loop_outer (loop) : loop); + if (!version_loop_for_if_conversion (vloop)) + goto cleanup; + } /* Now all statements are if-convertible. Combine all the basic blocks into one huge basic block doing the if-conversion |