return cfg_hooks->ir;
}
+static const char *
+current_ir_name (void)
+{
+ enum ir_type ir = cfg_hooks->ir;
+ switch (ir)
+ {
+ case IR_GIMPLE:
+ return "gimple";
+ case IR_RTL_CFGRTL:
+ return "rtl";
+ case IR_RTL_CFGLAYOUT:
+ return "cfglayout mode";
+ default:
+ gcc_unreachable();
+ }
+}
+
/* Verify the CFG consistency.
Currently it does following: checks edge and basic block list correctness
{
if (!cfg_hooks->dump_bb_for_graph)
internal_error ("%s does not support dump_bb_for_graph",
- cfg_hooks->name);
+ current_ir_name ());
/* TODO: Add pretty printer for counter. */
if (bb->count.initialized_p ())
pp_printf (pp, "COUNT:" "%" PRId64, bb->count.to_gcov_type ());
{
if (!cfg_hooks->dump_bb_for_graph)
internal_error ("%s does not support dump_bb_as_sarif_properties",
- cfg_hooks->name);
+ current_ir_name ());
namespace bb_property_names = custom_sarif_properties::cfg::basic_block;
if (bb->index == ENTRY_BLOCK)
output_bag.set_string (bb_property_names::kind, "entry");
if (!cfg_hooks->redirect_edge_and_branch)
internal_error ("%s does not support redirect_edge_and_branch",
- cfg_hooks->name);
+ current_ir_name ());
ret = cfg_hooks->redirect_edge_and_branch (e, dest);
{
if (!cfg_hooks->can_remove_branch_p)
internal_error ("%s does not support can_remove_branch_p",
- cfg_hooks->name);
+ current_ir_name ());
if (EDGE_COUNT (e->src->succs) != 2)
return false;
if (!cfg_hooks->redirect_edge_and_branch_force)
internal_error ("%s does not support redirect_edge_and_branch_force",
- cfg_hooks->name);
+ current_ir_name ());
if (current_loops != NULL)
rescan_loop_exit (e, false, true);
edge res;
if (!cfg_hooks->split_block)
- internal_error ("%s does not support split_block", cfg_hooks->name);
+ internal_error ("%s does not support split_block", current_ir_name ());
new_bb = cfg_hooks->split_block (bb, i);
if (!new_bb)
bool ret;
if (!cfg_hooks->move_block_after)
- internal_error ("%s does not support move_block_after", cfg_hooks->name);
+ internal_error ("%s does not support move_block_after",
+ current_ir_name ());
ret = cfg_hooks->move_block_after (bb, after);
delete_basic_block (basic_block bb)
{
if (!cfg_hooks->delete_basic_block)
- internal_error ("%s does not support delete_basic_block", cfg_hooks->name);
+ internal_error ("%s does not support delete_basic_block",
+ current_ir_name ());
cfg_hooks->delete_basic_block (bb);
basic_block src = e->src, dest = e->dest;
if (!cfg_hooks->split_edge)
- internal_error ("%s does not support split_edge", cfg_hooks->name);
+ internal_error ("%s does not support split_edge", current_ir_name ());
if (current_loops != NULL)
rescan_loop_exit (e, false, true);
basic_block ret;
if (!cfg_hooks->create_basic_block)
- internal_error ("%s does not support create_basic_block", cfg_hooks->name);
+ internal_error ("%s does not support create_basic_block",
+ current_ir_name ());
ret = cfg_hooks->create_basic_block (head, end, after);
bool ret;
if (!cfg_hooks->can_merge_blocks_p)
- internal_error ("%s does not support can_merge_blocks_p", cfg_hooks->name);
+ internal_error ("%s does not support can_merge_blocks_p",
+ current_ir_name ());
ret = cfg_hooks->can_merge_blocks_p (bb1, bb2);
predict_edge (edge e, enum br_predictor predictor, int probability)
{
if (!cfg_hooks->predict_edge)
- internal_error ("%s does not support predict_edge", cfg_hooks->name);
+ internal_error ("%s does not support predict_edge",
+ current_ir_name ());
cfg_hooks->predict_edge (e, predictor, probability);
}
predicted_by_p (const_basic_block bb, enum br_predictor predictor)
{
if (!cfg_hooks->predict_edge)
- internal_error ("%s does not support predicted_by_p", cfg_hooks->name);
+ internal_error ("%s does not support predicted_by_p",
+ current_ir_name ());
return cfg_hooks->predicted_by_p (bb, predictor);
}
edge_iterator ei;
if (!cfg_hooks->merge_blocks)
- internal_error ("%s does not support merge_blocks", cfg_hooks->name);
+ internal_error ("%s does not support merge_blocks",
+ current_ir_name ());
/* Pick the more reliable count. If both qualities agrees, pick the larger
one since turning mistakely hot code to cold is more harmful. */
if (!cfg_hooks->make_forwarder_block)
internal_error ("%s does not support make_forwarder_block",
- cfg_hooks->name);
+ current_ir_name ());
fallthru = split_block_after_labels (bb);
dummy = fallthru->src;
if (!cfg_hooks->force_nonfallthru)
internal_error ("%s does not support force_nonfallthru",
- cfg_hooks->name);
+ current_ir_name ());
ret = cfg_hooks->force_nonfallthru (e);
if (ret != NULL)
{
if (!cfg_hooks->can_duplicate_block_p)
internal_error ("%s does not support can_duplicate_block_p",
- cfg_hooks->name);
+ current_ir_name ());
if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun) || bb == ENTRY_BLOCK_PTR_FOR_FN (cfun))
return false;
if (!cfg_hooks->duplicate_block)
internal_error ("%s does not support duplicate_block",
- cfg_hooks->name);
+ current_ir_name ());
if (bb->count < new_count)
new_count = bb->count;
block_ends_with_call_p (basic_block bb)
{
if (!cfg_hooks->block_ends_with_call_p)
- internal_error ("%s does not support block_ends_with_call_p", cfg_hooks->name);
+ internal_error ("%s does not support block_ends_with_call_p",
+ current_ir_name ());
return (cfg_hooks->block_ends_with_call_p) (bb);
}
{
if (!cfg_hooks->block_ends_with_condjump_p)
internal_error ("%s does not support block_ends_with_condjump_p",
- cfg_hooks->name);
+ current_ir_name ());
return (cfg_hooks->block_ends_with_condjump_p) (bb);
}
{
if (!cfg_hooks->flow_call_edges_add)
internal_error ("%s does not support flow_call_edges_add",
- cfg_hooks->name);
+ current_ir_name ());
return (cfg_hooks->flow_call_edges_add) (blocks);
}