On Tue, Jun 3, 2014 at 7:55 AM, Ilya Enkovich <enkovich....@gmail.com> wrote:
> 2014-06-02 21:27 GMT+04:00 Jeff Law <l...@redhat.com>:
>> On 06/02/14 04:48, Ilya Enkovich wrote:
>>>>
>>>> Hmm, so if I understand things correctly, src_fun has no loop
>>>> structures attached, thus there's nothing to copy.  Presumably at
>>>> some later point we build loop structures for the copy from scratch?
>>>
>>> I suppose it is just a simple bug with absent NULL pointer check.  Here is
>>> original code:
>>>
>>>    /* Duplicate the loop tree, if available and wanted.  */
>>>    if (loops_for_fn (src_cfun) != NULL
>>>        && current_loops != NULL)
>>>      {
>>>        copy_loops (id, entry_block_map->loop_father,
>>>                    get_loop (src_cfun, 0));
>>>        /* Defer to cfgcleanup to update loop-father fields of
>>> basic-blocks.  */
>>>        loops_state_set (LOOPS_NEED_FIXUP);
>>>      }
>>>
>>>    /* If the loop tree in the source function needed fixup, mark the
>>>       destination loop tree for fixup, too.  */
>>>    if (loops_for_fn (src_cfun)->state & LOOPS_NEED_FIXUP)
>>>      loops_state_set (LOOPS_NEED_FIXUP);
>>>
>>> As you may see we have check for absent loops structure in the first
>>> if-statement and no check in the second one.  I hit segfault and added the
>>> check.
>>
>> Downthread you indicated you're not in SSA form which might explain the
>> inconsistency here.  If so, then we need to make sure that the loop & df
>> structures do get set up properly later.
>
> That is what init_data_structures pass will do for us as Richard pointed. 
> Right?

loops are set up during the CFG construction and thus are available everywhere.
the df structures are set up in init_data_structures pass which is run before
going into SSA form (I'd like to somehow cleanup that area).

Richard.

> Ilya
>
>>
>> Jeff

Reply via email to