Commit ac33bce8 by Jakub Jelinek Committed by Jakub Jelinek

re PR tree-optimization/88107 (ICE in find_outermost_region_in_block, at tree-cfg.c:7157)

	PR tree-optimization/88107
	* tree-cfg.c (find_outermost_region_in_block): Add ALL argument,
	instead of assertion that eh_region_outermost is non-NULL, if it
	is NULL, set *ALL to true and return NULL.
	(move_sese_region_to_fn): Adjust caller, if all is set, call
	duplicate_eh_regions with NULL region.

	* gcc.dg/gomp/pr88107.c: New test.

From-SVN: r268444
parent 7beb51f9
2019-02-01 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/88107
* tree-cfg.c (find_outermost_region_in_block): Add ALL argument,
instead of assertion that eh_region_outermost is non-NULL, if it
is NULL, set *ALL to true and return NULL.
(move_sese_region_to_fn): Adjust caller, if all is set, call
duplicate_eh_regions with NULL region.
2019-02-01 Richard Biener <rguenth@suse.de> 2019-02-01 Richard Biener <rguenth@suse.de>
PR rtl-optimization/88593 PR rtl-optimization/88593
......
2019-02-01 Jakub Jelinek <jakub@redhat.com> 2019-02-01 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/88107
* gcc.dg/gomp/pr88107.c: New test.
PR c++/87175 PR c++/87175
* g++.dg/ext/attrib57.C: New test. * g++.dg/ext/attrib57.C: New test.
......
/* PR tree-optimization/88107 */
/* { dg-do compile { target fgraphite } } */
/* { dg-require-effective-target vect_simd_clones } */
/* { dg-options "-O2 -fexceptions -floop-nest-optimize -fnon-call-exceptions -fopenmp-simd -ftree-parallelize-loops=2" } */
#define N 1024
int a[N], b[N];
long int c[N];
unsigned char d[N];
#pragma omp declare simd notinbranch
__attribute__((noinline)) static int
foo (long int a, int b, int c)
{
return a + b + c;
}
#pragma omp declare simd notinbranch
__attribute__((noinline)) static long int
bar (int a, int b, long int c)
{
return a + b + c;
}
void
baz (void)
{
int i;
#pragma omp simd
for (i = 0; i < N; i++)
a[i] = foo (c[i], a[i], b[i]) + 6;
#pragma omp simd
for (i = 0; i < N; i++)
c[i] = bar (a[i], b[i], c[i]) * 2;
}
...@@ -7143,11 +7143,14 @@ move_block_to_fn (struct function *dest_cfun, basic_block bb, ...@@ -7143,11 +7143,14 @@ move_block_to_fn (struct function *dest_cfun, basic_block bb,
} }
/* Examine the statements in BB (which is in SRC_CFUN); find and return /* Examine the statements in BB (which is in SRC_CFUN); find and return
the outermost EH region. Use REGION as the incoming base EH region. */ the outermost EH region. Use REGION as the incoming base EH region.
If there is no single outermost region, return NULL and set *ALL to
true. */
static eh_region static eh_region
find_outermost_region_in_block (struct function *src_cfun, find_outermost_region_in_block (struct function *src_cfun,
basic_block bb, eh_region region) basic_block bb, eh_region region,
bool *all)
{ {
gimple_stmt_iterator si; gimple_stmt_iterator si;
...@@ -7166,7 +7169,11 @@ find_outermost_region_in_block (struct function *src_cfun, ...@@ -7166,7 +7169,11 @@ find_outermost_region_in_block (struct function *src_cfun,
else if (stmt_region != region) else if (stmt_region != region)
{ {
region = eh_region_outermost (src_cfun, stmt_region, region); region = eh_region_outermost (src_cfun, stmt_region, region);
gcc_assert (region != NULL); if (region == NULL)
{
*all = true;
return NULL;
}
} }
} }
} }
...@@ -7501,12 +7508,17 @@ move_sese_region_to_fn (struct function *dest_cfun, basic_block entry_bb, ...@@ -7501,12 +7508,17 @@ move_sese_region_to_fn (struct function *dest_cfun, basic_block entry_bb,
if (saved_cfun->eh) if (saved_cfun->eh)
{ {
eh_region region = NULL; eh_region region = NULL;
bool all = false;
FOR_EACH_VEC_ELT (bbs, i, bb) FOR_EACH_VEC_ELT (bbs, i, bb)
region = find_outermost_region_in_block (saved_cfun, bb, region); {
region = find_outermost_region_in_block (saved_cfun, bb, region, &all);
if (all)
break;
}
init_eh_for_function (); init_eh_for_function ();
if (region != NULL) if (region != NULL || all)
{ {
new_label_map = htab_create (17, tree_map_hash, tree_map_eq, free); new_label_map = htab_create (17, tree_map_hash, tree_map_eq, free);
eh_map = duplicate_eh_regions (saved_cfun, region, 0, eh_map = duplicate_eh_regions (saved_cfun, region, 0,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment