http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59757
--- Comment #6 from rguenther at suse dot de <rguenther at suse dot de> --- On Mon, 13 Jan 2014, joey.ye at arm dot com wrote: > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59757 > > --- Comment #5 from Joey Ye <joey.ye at arm dot com> --- > Here are some debug and log that might help to investigate. > > Following one is suspecious to me, .MEM_18 is said to be defined a stmt that > doesn't look like it should do > (gdb) call debug_tree((*cfun->gimple_df->ssa_names).m_vecdata[18] ) > <ssa_name 0x8fcacf8 > type <void_type 0x89c08a0 void VOID > align 8 symtab 0 alias set -1 canonical type 0x89c08a0 > pointer_to_this <pointer_type 0x89c0900>> > visited var <var_decl 0x8fcc720 .MEM>def_stmt _11 = _10 (258); > > version 18> This is an indirect call which clobbers memory and thus has to define .MEM. > dump.pre: > SCC consists of: .MEM_18 .MEM_18 should get a value-number (.MEM_18 itself) during processing of this stmt. I suppose that the value-number of _10 is not _10 but a const/pure function decl. You can put a breakpoint on visit_use if use->base.u.version == 18 and follow what happens. It seems that there must be a path in its is_gimple_call () handling where it fails to assign a value-number to the virtual operand. > SCC consists of: _12 > Value numbering _12 stmt = _12 = d_2(D)->core.get_parameter; > <then crash> > > Last good dump: > univision_ug2828gfeff01_init (struct CTL_GFX_SEP_DRIVER_t * d, int depth) > { > struct CTL_GFX_DRIVER_t * _7; > long int _9; > long int (*<Td17>) (int) _10; > long int _11; > long int (*<Td17>) (int) _12; > long int _13; > > <bb 2>: > d_2(D)->core.get_parameter = univision_ug2828gfeff01_get_parameter; > _7 = &d_2(D)->core; > ctl_gfx_driver = _7; > MEM[(struct CTL_GFX_DRIVER_t *)d_2(D)].draw_pixel = 0B; > _9 = univision_ug2828gfeff01_get_parameter (258); > if (_9 == 8) > goto <bb 3>; > else > goto <bb 4>; > > <bb 3>: > d_2(D)->set_bounding = sep_set_bounding_8b; > goto <bb 9>; > > <bb 4>: > _10 = d_2(D)->core.get_parameter; > _11 = _10 (258); > if (_11 == 16) > goto <bb 5>; > else > goto <bb 6>; > > <bb 5>: > d_2(D)->set_bounding = sep_set_bounding_16b; > goto <bb 9>; > > <bb 6>: > _12 = d_2(D)->core.get_parameter; > _13 = _12 (512); > if (_13 > 255) > goto <bb 7>; > else > goto <bb 8>; > > <bb 7>: > d_2(D)->set_bounding = sep_set_bounding_16b; > goto <bb 9>; > > <bb 8>: > d_2(D)->set_bounding = sep_set_bounding_8b; > > <bb 9>: > return; > > } > > Any hint to continue investigating? > >