*参照元 [#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]


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS