Bug 85497

Summary: [10/11/12/13 Regression] [graphite] ICE in set_codegen_error, at graphite-isl-ast-to-gimple.c:206
Product: gcc Reporter: Arseny Solokha <asolokha>
Component: tree-optimizationAssignee: Richard Biener <rguenth>
Status: RESOLVED FIXED    
Severity: normal CC: rguenth
Priority: P2 Keywords: deferred, ice-on-valid-code
Version: 8.0.1   
Target Milestone: 8.0   
Host: Target:
Build: Known to work:
Known to fail: Last reconfirmed: 2018-04-23 00:00:00
Bug Depends on:    
Bug Blocks: 59859    

Description Arseny Solokha 2018-04-23 03:08:38 UTC
gcc-8.0.0-alpha20180415 snapshot (r259389) ICEs when compiling the following snippet w/ -O1 -floop-parallelize-all -fno-tree-loop-im --param scev-max-expr-size=1:

int au;

void
a8 (int k7)
{
  int xo;

  for (xo = 0; xo < 2; ++xo)
    {
      int dd;

      for (dd = 0; dd < 2; ++dd)
        au = !!k7 ? xo : 0;
    }
}

% gcc-8.0.0-alpha20180415 -O1 -floop-parallelize-all -fno-tree-loop-im --param scev-max-expr-size=1 -w -c tjvdwsqb.c
during GIMPLE pass: graphite
tjvdwsqb.c: In function 'a8':
tjvdwsqb.c:4:1: internal compiler error: in set_codegen_error, at graphite-isl-ast-to-gimple.c:206
 a8 (int k7)
 ^~
0x728814 translate_isl_ast_to_gimple::set_codegen_error()
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/graphite-isl-ast-to-gimple.c:205
0x728972 translate_isl_ast_to_gimple::set_codegen_error()
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/tree.h:3249
0x728972 translate_isl_ast_to_gimple::get_rename_from_scev(tree_node*, gimple**, loop*, vec<tree_node*, va_heap, vl_ptr>)
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/graphite-isl-ast-to-gimple.c:1102
0x146a761 translate_isl_ast_to_gimple::copy_bb_and_scalar_dependences(basic_block_def*, edge_def*, vec<tree_node*, va_heap, vl_ptr>)
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/graphite-isl-ast-to-gimple.c:1310
0x146aca1 translate_isl_ast_to_gimple::translate_isl_ast_node_user(isl_ast_node*, edge_def*, std::map<isl_id*, tree_node*, std::less<isl_id*>, std::allocator<std::pair<isl_id* const, tree_node*> > >&)
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/graphite-isl-ast-to-gimple.c:830
0x146b364 translate_isl_ast_to_gimple::translate_isl_ast_node_block(loop*, isl_ast_node*, edge_def*, std::map<isl_id*, tree_node*, std::less<isl_id*>, std::allocator<std::pair<isl_id* const, tree_node*> > >&)
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/graphite-isl-ast-to-gimple.c:859
0x146ae65 translate_isl_ast_to_gimple::translate_isl_ast_for_loop(loop*, isl_ast_node*, edge_def*, tree_node*, tree_node*, tree_node*, std::map<isl_id*, tree_node*, std::less<isl_id*>, std::allocator<std::pair<isl_id* const, tree_node*> > >&)
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/graphite-isl-ast-to-gimple.c:623
0x146b139 translate_isl_ast_to_gimple::translate_isl_ast_node_for(loop*, isl_ast_node*, edge_def*, std::map<isl_id*, tree_node*, std::less<isl_id*>, std::allocator<std::pair<isl_id* const, tree_node*> > >&)
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/graphite-isl-ast-to-gimple.c:751
0x146ae65 translate_isl_ast_to_gimple::translate_isl_ast_for_loop(loop*, isl_ast_node*, edge_def*, tree_node*, tree_node*, tree_node*, std::map<isl_id*, tree_node*, std::less<isl_id*>, std::allocator<std::pair<isl_id* const, tree_node*> > >&)
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/graphite-isl-ast-to-gimple.c:623
0x146b139 translate_isl_ast_to_gimple::translate_isl_ast_node_for(loop*, isl_ast_node*, edge_def*, std::map<isl_id*, tree_node*, std::less<isl_id*>, std::allocator<std::pair<isl_id* const, tree_node*> > >&)
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/graphite-isl-ast-to-gimple.c:751
0x146b446 translate_isl_ast_to_gimple::translate_isl_ast_node_if(loop*, isl_ast_node*, edge_def*, std::map<isl_id*, tree_node*, std::less<isl_id*>, std::allocator<std::pair<isl_id* const, tree_node*> > >&)
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/graphite-isl-ast-to-gimple.c:897
0x146b74c graphite_regenerate_ast_isl(scop*)
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/graphite-isl-ast-to-gimple.c:1505
0x1467953 graphite_transform_loops()
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/graphite.c:413
0x1467e60 graphite_transforms
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/graphite.c:475
0x1467e60 execute
	/var/tmp/portage/sys-devel/gcc-8.0.0_alpha20180415/work/gcc-8-20180415/gcc/graphite.c:552
Comment 1 Martin Liška 2018-04-23 07:41:24 UTC
Started with r257441.
Comment 2 Richard Biener 2018-04-23 08:01:54 UTC
This touches more cases where SCOP analysis only is checking scev_analyzable_p () but code-gen uses scalar_evolution_in_region with a loop != def-loop.  The artificial scev-max-expr-size makes one succeed and the other fail.  Note more
complex cases could ICE because of the same reason or because some use site is
really not analyzable.

IMHO scev_analyzable_p should get a 'loop' arg.

Nothing for 8.1.
Comment 3 Richard Biener 2019-02-01 09:17:28 UTC
Note the testcase no longer fails on trunk or the branch or even with GCC 8.1.0.
Comment 4 Richard Biener 2019-02-01 09:17:41 UTC
Testcase queued for backporting.
Comment 5 Richard Biener 2019-02-01 09:17:47 UTC
Author: rguenth
Date: Fri Feb  1 09:17:14 2019
New Revision: 268447

URL: https://gcc.gnu.org/viewcvs?rev=268447&root=gcc&view=rev
Log:
2019-02-01  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/85497
	* gcc.dg/graphite/pr85497.c: New testcase.

Added:
    trunk/gcc/testsuite/gcc.dg/graphite/pr85497.c
Modified:
    trunk/gcc/testsuite/ChangeLog
Comment 6 Arseny Solokha 2019-02-01 09:47:27 UTC
Sorry, but it would be a mistake to think that I'm short of testcases… Usually I get one every few minutes.

1.

% gcc-9.0.0-alpha20190127 -O3 -floop-parallelize-all -fopenacc -fopenmp -fno-guess-branch-probability --param scev-max-expr-size=3 -c libgomp/testsuite/libgomp.c-c++-common/target-1.c
during GIMPLE pass: graphite
libgomp/testsuite/libgomp.c-c++-common/target-1.c: In function 'main':
libgomp/testsuite/libgomp.c-c++-common/target-1.c:78:1: internal compiler error: in set_codegen_error, at graphite-isl-ast-to-gimple.c:205
   78 | main ()
      | ^~~~
0x79c1fa translate_isl_ast_to_gimple::set_codegen_error()
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190127/work/gcc-9-20190127/gcc/graphite-isl-ast-to-gimple.c:205
0x79c49c translate_isl_ast_to_gimple::set_codegen_error()
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190127/work/gcc-9-20190127/gcc/tree.h:3290
0x79c49c translate_isl_ast_to_gimple::get_rename_from_scev(tree_node*, gimple**, loop*, vec<tree_node*, va_heap, vl_ptr>)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190127/work/gcc-9-20190127/gcc/graphite-isl-ast-to-gimple.c:1104
0x15d8e8e translate_isl_ast_to_gimple::graphite_copy_stmts_from_block(basic_block_def*, basic_block_def*, vec<tree_node*, va_heap, vl_ptr>)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190127/work/gcc-9-20190127/gcc/graphite-isl-ast-to-gimple.c:1223
0x15d9845 translate_isl_ast_to_gimple::copy_bb_and_scalar_dependences(basic_block_def*, edge_def*, vec<tree_node*, va_heap, vl_ptr>)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190127/work/gcc-9-20190127/gcc/graphite-isl-ast-to-gimple.c:1272
0x15d9ec4 translate_isl_ast_to_gimple::translate_isl_ast_node_user(isl_ast_node*, edge_def*, std::map<isl_id*, tree_node*, std::less<isl_id*>, std::allocator<std::pair<isl_id* const, tree_node*> > >&)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190127/work/gcc-9-20190127/gcc/graphite-isl-ast-to-gimple.c:832
0x15da16f translate_isl_ast_to_gimple::translate_isl_ast_for_loop(loop*, isl_ast_node*, edge_def*, tree_node*, tree_node*, tree_node*, std::map<isl_id*, tree_node*, std::less<isl_id*>, std::allocator<std::pair<isl_id* const, tree_node*> > >&)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190127/work/gcc-9-20190127/gcc/graphite-isl-ast-to-gimple.c:625
0x15da40f translate_isl_ast_to_gimple::translate_isl_ast_node_for(loop*, isl_ast_node*, edge_def*, std::map<isl_id*, tree_node*, std::less<isl_id*>, std::allocator<std::pair<isl_id* const, tree_node*> > >&)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190127/work/gcc-9-20190127/gcc/graphite-isl-ast-to-gimple.c:753
0x15da654 translate_isl_ast_to_gimple::translate_isl_ast_node_block(loop*, isl_ast_node*, edge_def*, std::map<isl_id*, tree_node*, std::less<isl_id*>, std::allocator<std::pair<isl_id* const, tree_node*> > >&)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190127/work/gcc-9-20190127/gcc/graphite-isl-ast-to-gimple.c:861
0x15daa1d graphite_regenerate_ast_isl(scop*)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190127/work/gcc-9-20190127/gcc/graphite-isl-ast-to-gimple.c:1510
0x15d6b34 graphite_transform_loops()
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190127/work/gcc-9-20190127/gcc/graphite.c:413
0x15d7130 graphite_transforms
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190127/work/gcc-9-20190127/gcc/graphite.c:476
0x15d7130 execute
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190127/work/gcc-9-20190127/gcc/graphite.c:553

2.

% gcc-9.0.0-alpha20190127 -O1 -floop-parallelize-all --param scev-max-expr-size=3 -c gcc/testsuite/gcc.dg/graphite/uns-block-1.c

3.

% powerpc-e300c3-linux-gnu-gfortran-9.0.0-alpha20190127 -O2 -fgraphite-identity -fopenmp --param max-completely-peel-times=3 --param scev-max-expr-size=3 -w -c gcc/testsuite/gfortran.dg/gomp/pr70855.f90
Comment 7 rguenther@suse.de 2019-02-01 11:07:59 UTC
On Fri, 1 Feb 2019, asolokha at gmx dot com wrote:

> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85497
> 
> --- Comment #6 from Arseny Solokha <asolokha at gmx dot com> ---
> Sorry, but it would be a mistake to think that I'm short of testcases… Usually
> I get one every few minutes.

Heh ;)  Well, I'm (slowly) working on elimiating SCEV expr size limiting,
it's really a bit fragile to rely on the various entries to produce
a meaningful result if one ends up hitting the limit...
Comment 8 Jakub Jelinek 2020-05-07 11:56:08 UTC
GCC 10.1 has been released.
Comment 9 Richard Biener 2020-07-23 06:51:49 UTC
GCC 10.2 is released, adjusting target milestone.
Comment 10 Richard Biener 2021-04-08 12:02:26 UTC
GCC 10.3 is being released, retargeting bugs to GCC 10.4.
Comment 11 Jakub Jelinek 2022-06-28 10:35:14 UTC
GCC 10.4 is being released, retargeting bugs to GCC 10.5.
Comment 12 Richard Biener 2023-01-19 14:13:34 UTC
Let's close this one, we have a "duplicate" with another testcase for the scev-expr-size issues.