re PR tree-optimization/78574 (ice on valid C code at -O2 and -O3 in both 32- and 64-bit modes on x86_64-linux-gnu (internal compiler error: Segmentation fault (program cc1)))

PR tree-optimization/78574
	* tree-ssa-loop-ivopts.c (find_deriving_biv_for_expr): Skip loop
	header PHI that doesn't define biv.
	gcc/testsuite
	PR tree-optimization/78574
	* gcc.c-torture/compile/pr78574.c: New test.

From-SVN: r243026
This commit is contained in:
Bin Cheng 2016-11-30 14:41:09 +00:00 committed by Bin Cheng
parent 44cd68d2b7
commit aec0ee116c
4 changed files with 43 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2016-11-30 Bin Cheng <bin.cheng@arm.com>
PR tree-optimization/78574
* tree-ssa-loop-ivopts.c (find_deriving_biv_for_expr): Skip loop
header PHI that doesn't define biv.
2016-11-30 Jakub Jelinek <jakub@redhat.com>
* emit-rtl.c (verify_insn_sharing): Call verify_rtx_sharing instead of

View File

@ -1,3 +1,8 @@
2016-11-30 Bin Cheng <bin.cheng@arm.com>
PR tree-optimization/78574
* gcc.c-torture/compile/pr78574.c: New test.
2016-11-30 Andre Vehreschild <vehre@gcc.gnu.org>
* caf/single.c (_gfortran_caf_is_present): Prevent fallthrough

View File

@ -0,0 +1,27 @@
/* PR tree-optimization/78574 */
int a, d, f, g;
int b[1];
short h;
int main() {
long j;
int k, i;
for (; j; j++) {
i = 0;
for (; i < 6; i++) {
int l = a, m = d || g;
L:
l ^ m | a;
}
b[j + 1] = 2;
++k;
for (; g; g++) {
d ^= h;
if (f)
for (;;)
;
}
}
if (k)
goto L;
}

View File

@ -1853,6 +1853,11 @@ find_deriving_biv_for_expr (struct ivopts_data *data, tree expr)
{
ssa_op_iter iter;
use_operand_p use_p;
basic_block phi_bb = gimple_bb (phi);
/* Skip loop header PHI that doesn't define biv. */
if (phi_bb->loop_father == data->current_loop)
return NULL;
if (virtual_operand_p (gimple_phi_result (phi)))
return NULL;