Lines Matching refs:fbi
620 /* Get IPA BB information about the given BB. FBI is the context of analyzis
624 ipa_get_bb_info (struct ipa_func_body_info *fbi, basic_block bb)
626 gcc_checking_assert (fbi);
627 return &fbi->bb_infos[bb->index];
794 detect_type_change_from_memory_writes (ipa_func_body_info *fbi, tree arg,
817 if (fbi->aa_walk_budget == 0)
832 &tci, NULL, NULL, fbi->aa_walk_budget);
834 fbi->aa_walk_budget -= walked;
836 fbi->aa_walk_budget = 0;
850 detect_type_change (ipa_func_body_info *fbi, tree arg, tree base,
862 return detect_type_change_from_memory_writes (fbi, arg, base, comp_type,
871 detect_type_change_ssa (ipa_func_body_info *fbi, tree arg, tree comp_type,
885 return detect_type_change_from_memory_writes (fbi, arg, arg, comp_type,
905 find_dominating_aa_status (struct ipa_func_body_info *fbi, basic_block bb,
913 struct ipa_bb_info *bi = ipa_get_bb_info (fbi, bb);
925 parm_bb_aa_status_for_bb (struct ipa_func_body_info *fbi, basic_block bb,
928 gcc_checking_assert (fbi);
929 struct ipa_bb_info *bi = ipa_get_bb_info (fbi, bb);
931 bi->param_aa_statuses.safe_grow_cleared (fbi->param_count, true);
939 dom_paa = find_dominating_aa_status (fbi, bb, index);
951 statement STMT. FBI holds information about the function we have so far
955 parm_preserved_before_stmt_p (struct ipa_func_body_info *fbi, int index,
967 gcc_checking_assert (fbi);
968 paa = parm_bb_aa_status_for_bb (fbi, gimple_bb (stmt), index);
969 if (paa->parm_modified || fbi->aa_walk_budget == 0)
976 fbi->aa_walk_budget);
980 fbi->aa_walk_budget = 0;
983 fbi->aa_walk_budget -= walked;
994 load_from_unmodified_param (struct ipa_func_body_info *fbi,
1010 || !parm_preserved_before_stmt_p (fbi, index, stmt, op1))
1021 parm_ref_data_preserved_p (struct ipa_func_body_info *fbi,
1028 gcc_checking_assert (fbi);
1029 paa = parm_bb_aa_status_for_bb (fbi, gimple_bb (stmt), index);
1030 if (paa->ref_modified || fbi->aa_walk_budget == 0)
1037 fbi->aa_walk_budget);
1041 fbi->aa_walk_budget = 0;
1044 fbi->aa_walk_budget -= walked;
1052 CALL into which it is passed. FBI describes the function body. */
1055 parm_ref_data_pass_through_p (struct ipa_func_body_info *fbi, int index,
1068 struct ipa_param_aa_status *paa = parm_bb_aa_status_for_bb (fbi,
1071 if (paa->pt_modified || fbi->aa_walk_budget == 0)
1077 fbi->aa_walk_budget);
1080 fbi->aa_walk_budget = 0;
1084 fbi->aa_walk_budget -= walked;
1106 ipa_load_from_parm_agg (struct ipa_func_body_info *fbi,
1128 && parm_preserved_before_stmt_p (fbi, index, stmt, op))
1169 index = load_from_unmodified_param (fbi, descriptors, def);
1174 bool data_preserved = parm_ref_data_preserved_p (fbi, index, stmt, op);
1193 FBI holds gathered information about the function. INFO describes
1200 load_from_unmodified_param_or_agg (struct ipa_func_body_info *fbi,
1206 int index = load_from_unmodified_param (fbi, info->descriptors, stmt);
1231 if (!ipa_load_from_parm_agg (fbi, info->descriptors, stmt, rhs, &index,
1371 compute_complex_assign_jump_func (struct ipa_func_body_info *fbi,
1389 index = load_from_unmodified_param (fbi, info->descriptors,
1395 index = load_from_unmodified_param (fbi, info->descriptors, stmt);
1419 bool agg_p = parm_ref_data_pass_through_p (fbi, index, call,
1453 parm_ref_data_pass_through_p (fbi, index, call, ssa),
1524 compute_complex_ancestor_jump_func (struct ipa_func_body_info *fbi,
1580 parm_ref_data_pass_through_p (fbi, index, call, parm),
1770 analyze_agg_content_value (struct ipa_func_body_info *fbi,
1918 index = load_from_unmodified_param_or_agg (fbi, fbi->info, stmt,
1922 index = ipa_get_param_decl_index (fbi->info, SSA_NAME_VAR (rhs1));
1942 extract_mem_content (struct ipa_func_body_info *fbi,
1973 analyze_agg_content_value (fbi, &content->value, stmt);
1979 formal parameter in the way described by some kinds of jump functions. FBI
1985 determine_known_aggregate_parts (struct ipa_func_body_info *fbi,
1997 int max_agg_items = opt_for_fn (fbi->node->decl, param_ipa_max_agg_items);
2065 dom_vuse && fbi->aa_walk_budget > 0;)
2072 fbi->aa_walk_budget,
2077 fbi->aa_walk_budget--;
2083 if (!extract_mem_content (fbi, stmt, arg_base, check_ref, content))
2247 ipa_compute_jump_functions_for_edge (struct ipa_func_body_info *fbi,
2280 &fbi->aa_walk_budget);
2365 if (parm_preserved_before_stmt_p (fbi, index, call, arg))
2379 agg_p = parm_ref_data_pass_through_p (fbi, index, call, arg);
2387 compute_complex_assign_jump_func (fbi, info, jfunc,
2390 compute_complex_ancestor_jump_func (fbi, info, jfunc,
2411 determine_known_aggregate_parts (fbi, call, arg, param_type, jfunc);
2421 ipa_compute_jump_functions_for_bb (struct ipa_func_body_info *fbi, basic_block bb)
2423 struct ipa_bb_info *bi = ipa_get_bb_info (fbi, bb);
2440 ipa_compute_jump_functions_for_edge (fbi, cs);
2591 ipa_analyze_indirect_call_uses (struct ipa_func_body_info *fbi, gcall *call,
2594 class ipa_node_params *info = fbi->info;
2603 ipa_note_param_call (fbi->node, index, call, false);
2611 && ipa_load_from_parm_agg (fbi, info->descriptors, def,
2615 struct cgraph_edge *cs = ipa_note_param_call (fbi->node, index,
2715 && parm_preserved_before_stmt_p (fbi, index, call, rec))
2717 struct cgraph_edge *cs = ipa_note_param_call (fbi->node, index,
2730 FBI->node (described by FBI->info), create a call note for the
2734 ipa_analyze_virtual_call_uses (struct ipa_func_body_info *fbi,
2747 class ipa_node_params *info = fbi->info;
2756 if (detect_type_change_ssa (fbi, obj, obj_type_ref_class (target),
2771 if (detect_type_change (fbi, obj, expr, obj_type_ref_class (target),
2776 struct cgraph_edge *cs = ipa_note_param_call (fbi->node, index,
2790 ipa_analyze_call_uses (struct ipa_func_body_info *fbi, gcall *call)
2799 struct cgraph_edge *cs = fbi->node->get_edge (call);
2821 &fbi->aa_walk_budget);
2826 ipa_analyze_indirect_call_uses (fbi, call, target);
2828 ipa_analyze_virtual_call_uses (fbi, call, target);
2833 in INFO) of caller given by FBI->NODE. Currently it only checks whether
2837 ipa_analyze_stmt_uses (struct ipa_func_body_info *fbi, gimple *stmt)
2840 ipa_analyze_call_uses (fbi, as_a <gcall *> (stmt));
2866 structure, such as parameter flags, notes etc. FBI holds various data about
2870 ipa_analyze_params_uses_in_bb (struct ipa_func_body_info *fbi, basic_block bb)
2880 ipa_analyze_stmt_uses (fbi, stmt);
2881 walk_stmt_load_store_addr_ops (stmt, fbi->info,
2887 walk_stmt_load_store_addr_ops (gsi_stmt (gsi), fbi->info,
3013 analysis_dom_walker (struct ipa_func_body_info *fbi)
3014 : dom_walker (CDI_DOMINATORS), m_fbi (fbi) {}
3030 /* Release body info FBI. */
3033 ipa_release_body_info (struct ipa_func_body_info *fbi)
3038 FOR_EACH_VEC_ELT (fbi->bb_infos, i, bi)
3040 fbi->bb_infos.release ();
3050 struct ipa_func_body_info fbi;
3077 fbi.node = node;
3078 fbi.info = info;
3079 fbi.bb_infos = vNULL;
3080 fbi.bb_infos.safe_grow_cleared (last_basic_block_for_fn (cfun), true);
3081 fbi.param_count = ipa_get_param_count (info);
3082 fbi.aa_walk_budget = opt_for_fn (node->decl, param_ipa_max_aa_steps);
3086 ipa_bb_info *bi = ipa_get_bb_info (&fbi, gimple_bb (cs->call_stmt));
3092 ipa_bb_info *bi = ipa_get_bb_info (&fbi, gimple_bb (cs->call_stmt));
3096 analysis_dom_walker (&fbi).walk (ENTRY_BLOCK_PTR_FOR_FN (cfun));
3098 ipa_release_body_info (&fbi);
5666 ipcp_modif_dom_walker (struct ipa_func_body_info *fbi,
5670 : dom_walker (CDI_DOMINATORS), m_fbi (fbi), m_descriptors (descs),
6030 struct ipa_func_body_info fbi;
6067 fbi.node = node;
6068 fbi.info = NULL;
6069 fbi.bb_infos = vNULL;
6070 fbi.bb_infos.safe_grow_cleared (last_basic_block_for_fn (cfun), true);
6071 fbi.param_count = param_count;
6072 fbi.aa_walk_budget = opt_for_fn (node->decl, param_ipa_max_aa_steps);
6076 ipcp_modif_dom_walker walker (&fbi, descriptors, aggval, &modified_mem_access);
6083 FOR_EACH_VEC_ELT (fbi.bb_infos, i, bi)
6085 fbi.bb_infos.release ();