On Tue, Jun 3, 2014 at 7:55 AM, Ilya Enkovich <[email protected]> wrote: > 2014-06-02 21:27 GMT+04:00 Jeff Law <[email protected]>: >> 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
