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
This commit is contained in:
parent
ee8195d985
commit
9b28cb6f0a
@ -1,3 +1,10 @@
|
||||
2016-11-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
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.
|
||||
|
||||
2016-11-22 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR ipa/78309
|
||||
|
@ -1,3 +1,8 @@
|
||||
2016-11-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/78445
|
||||
* gcc.dg/pr78445.c: New test.
|
||||
|
||||
2016-11-22 Szabolcs Nagy <szabolcs.nagy@arm.com>
|
||||
|
||||
PR libgfortran/78449
|
||||
|
19
gcc/testsuite/gcc.dg/pr78445.c
Normal file
19
gcc/testsuite/gcc.dg/pr78445.c
Normal file
@ -0,0 +1,19 @@
|
||||
/* PR tree-optimization/78445 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -ftree-loop-if-convert -ftree-vectorize" } */
|
||||
/* { dg-additional-options "-mavx2" { target { i?86-*-* x86_64-*-* } } } */
|
||||
|
||||
int a;
|
||||
|
||||
void
|
||||
foo (int x, int *y)
|
||||
{
|
||||
while (a != 0)
|
||||
if (x != 0)
|
||||
{
|
||||
*y = a;
|
||||
x = *y;
|
||||
}
|
||||
else
|
||||
x = a;
|
||||
}
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user