re PR middle-end/81832 (ICE in expand_LOOP_DIST_ALIAS, at internal-fn.c:2273)

PR tree-optimization/81832
	* tree-ssa-loop-ch.c (should_duplicate_loop_header_p): Don't
	copy loop header which has IFN_LOOP_DIST_ALIAS call.

	gcc/testsuite
	* gcc.dg/tree-ssa/pr81832.c: New test.

From-SVN: r251123
This commit is contained in:
Bin Cheng 2017-08-16 15:02:03 +00:00 committed by Bin Cheng
parent 5dd2d9850b
commit 90d43c80aa
4 changed files with 37 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2017-08-16 Bin Cheng <bin.cheng@arm.com>
PR tree-optimization/81832
* tree-ssa-loop-ch.c (should_duplicate_loop_header_p): Don't
copy loop header which has IFN_LOOP_DIST_ALIAS call.
2017-08-16 Marek Polacek <polacek@redhat.com>
PR middle/81695

View File

@ -1,3 +1,8 @@
2017-08-16 Bin Cheng <bin.cheng@arm.com>
PR tree-optimization/81832
* gcc.dg/tree-ssa/pr81832.c: New test.
2017-08-16 Richard Sandiford <richard.sandiford@linaro.org>
PR tree-optimization/81835

View File

@ -0,0 +1,22 @@
/* { dg-do compile } */
/* { dg-options "-O3" } */
int a, b, *c;
void d(void)
{
int **e;
for(;;)
for(int f = 1; f <= 6; f++)
{
b = 0;
if(a)
g:
while(a++);
if (**e);
else
{
*c = a;
goto g;
}
}
}

View File

@ -119,7 +119,10 @@ should_duplicate_loop_header_p (basic_block header, struct loop *loop,
continue;
if (gimple_code (last) == GIMPLE_CALL
&& !gimple_inexpensive_call_p (as_a <gcall *> (last)))
&& (!gimple_inexpensive_call_p (as_a <gcall *> (last))
/* IFN_LOOP_DIST_ALIAS means that inner loop is distributed
at current loop's header. Don't copy in this case. */
|| gimple_call_internal_p (last, IFN_LOOP_DIST_ALIAS)))
{
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file,