*参照元 [#c8750579] #backlinks *説明 [#pff0542d] -パス: [[gcc-8.3/gcc/ira-build.c]] -FIXME: これは何? --説明 **引数 [#x2c6ba23] -なし **返り値 [#l926a0c3] -bool -- **参考 [#dead0438] *実装 [#ufcf868d] /* Create a internal representation (IR) for IRA (allocnos, copies, loop tree nodes). The function returns TRUE if we generate loop structure (besides nodes representing all function and the basic blocks) for regional allocation. A true return means that we really need to flatten IR before the reload. */ bool ira_build (void) { bool loops_p; df_analyze (); initiate_cost_vectors (); initiate_allocnos (); initiate_prefs (); initiate_copies (); create_loop_tree_nodes (); form_loop_tree (); create_allocnos (); ira_costs (); create_allocno_objects (); ira_create_allocno_live_ranges (); remove_unnecessary_regions (false); ira_compress_allocno_live_ranges (); update_bad_spill_attribute (); - --[[gcc-8.3/gcc/df_analyze()]] --[[gcc-8.3/gcc/initiate_cost_vectors()]] --[[gcc-8.3/gcc/initiate_allocnos()]] --[[gcc-8.3/gcc/initiate_prefs()]] --[[gcc-8.3/gcc/initiate_copies()]] --[[gcc-8.3/gcc/create_loop_tree_nodes()]] --[[gcc-8.3/gcc/form_loop_tree()]] --[[gcc-8.3/gcc/create_allocnos()]] --[[gcc-8.3/gcc/ira_costs()]] --[[gcc-8.3/gcc/create_allocno_objects()]] --[[gcc-8.3/gcc/ira_create_allocno_live_ranges()]] --[[gcc-8.3/gcc/remove_unnecessary_regions()]] --[[gcc-8.3/gcc/ira_compress_allocno_live_ranges()]] --[[gcc-8.3/gcc/update_bad_spill_attribute()]] loops_p = more_one_region_p (); if (loops_p) { propagate_allocno_info (); create_caps (); } ira_tune_allocno_costs (); #ifdef ENABLE_IRA_CHECKING check_allocno_creation (); #endif - --[[gcc-8.3/gcc/more_one_region_p()]] --[[gcc-8.3/gcc/propagate_allocno_info()]] --[[gcc-8.3/gcc/create_caps()]] --[[gcc-8.3/gcc/ira_tune_allocno_costs()]] --[[gcc-8.3/gcc/check_allocno_creation()]] setup_min_max_allocno_live_range_point (); sort_conflict_id_map (); setup_min_max_conflict_allocno_ids (); ira_build_conflicts (); update_conflict_hard_reg_costs (); - --[[gcc-8.3/gcc/setup_min_max_allocno_live_range_point()]] --[[gcc-8.3/gcc/sort_conflict_id_map()]] --[[gcc-8.3/gcc/setup_min_max_conflict_allocno_ids()]] --[[gcc-8.3/gcc/ira_build_conflicts()]] --[[gcc-8.3/gcc/update_conflict_hard_reg_costs()]] if (! ira_conflicts_p) { ira_allocno_t a; ira_allocno_iterator ai; /* Remove all regions but root one. */ if (loops_p) { remove_unnecessary_regions (true); loops_p = false; } /* We don't save hard registers around calls for fast allocation -- add caller clobbered registers as conflicting ones to allocno crossing calls. */ FOR_EACH_ALLOCNO (a, ai) if (ALLOCNO_CALLS_CROSSED_NUM (a) != 0) ior_hard_reg_conflicts (a, &call_used_reg_set); } - --[[gcc-8.3/gcc/ira_allocno_t]] --[[gcc-8.3/gcc/ira_allocno_iterator]] --[[gcc-8.3/gcc/remove_unnecessary_regions()]] --[[gcc-8.3/gcc/FOR_EACH_ALLOCNO()]] --[[gcc-8.3/gcc/ALLOCNO_CALLS_CROSSED_NUM()]] --[[gcc-8.3/gcc/ior_hard_reg_conflicts()]] if (internal_flag_ira_verbose > 2 && ira_dump_file != NULL) print_copies (ira_dump_file); if (internal_flag_ira_verbose > 2 && ira_dump_file != NULL) print_prefs (ira_dump_file); - --[[gcc-8.3/gcc/print_copies()]] --[[gcc-8.3/gcc/print_prefs()]] if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL) { int n, nr, nr_big; ira_allocno_t a; live_range_t r; ira_allocno_iterator ai; - --[[gcc-8.3/gcc/ira_allocno_t]] --[[gcc-8.3/gcc/live_range_t]] --[[gcc-8.3/gcc/ira_allocno_iterator]] n = 0; nr = 0; nr_big = 0; FOR_EACH_ALLOCNO (a, ai) { int j, nobj = ALLOCNO_NUM_OBJECTS (a); if (nobj > 1) nr_big++; for (j = 0; j < nobj; j++) { ira_object_t obj = ALLOCNO_OBJECT (a, j); n += OBJECT_NUM_CONFLICTS (obj); for (r = OBJECT_LIVE_RANGES (obj); r != NULL; r = r->next) nr++; } } fprintf (ira_dump_file, " regions=%d, blocks=%d, points=%d\n", current_loops == NULL ? 1 : number_of_loops (cfun), n_basic_blocks_for_fn (cfun), ira_max_point); fprintf (ira_dump_file, " allocnos=%d (big %d), copies=%d, conflicts=%d, ranges=%d\n", ira_allocnos_num, nr_big, ira_copies_num, n, nr); } - --[[gcc-8.3/gcc/FOR_EACH_ALLOCNO()]] --[[gcc-8.3/gcc/ALLOCNO_NUM_OBJECTS()]] --[[gcc-8.3/gcc/ALLOCNO_OBJECT()]] --[[gcc-8.3/gcc/OBJECT_NUM_CONFLICTS()]] --[[gcc-8.3/gcc/OBJECT_LIVE_RANGES()]] --[[gcc-8.3/gcc/number_of_loops()]] --[[gcc-8.3/gcc/n_basic_blocks_for_fn()]] return loops_p; } *コメント [#s3bda0d8]