#include "irhooks.h"
#include "dbginfo_t.h"
#include "irtools.h"
+#include "irprintf.h"
#include "irvrfy.h"
static int dump_anchors = 0;
/** An option to dump the macro block edges. */
static int dump_macro_block_edges = 0;
+/** An option to dump block marker in the block title */
+static int dump_block_marker = 0;
int dump_dominator_information_flag = 0;
int opt_dump_analysed_type_info = 1;
dump_macro_block_edges = flag;
}
+void dump_block_marker_in_title(int flag) {
+ dump_block_marker = flag;
+}
+
/* -------------- some extended helper functions ----------------- */
/**
(void) env;
if (is_Block(node)
|| node_floats(node)
- || get_irn_op(node) == op_Bad
- || get_irn_op(node) == op_Unknown
- || get_irn_op(node) == op_NoMem) {
+ || (get_op_flags(get_irn_op(node)) & irop_flag_dump_noblock)) {
ir_node ** arr = (ir_node **) ird_get_irg_link(get_irn_irg(node));
if (!arr) arr = NEW_ARR_F(ir_node *, 0);
ARR_APP1(ir_node *, arr, node);
#ifdef INTERPROCEDURAL_VIEW
int rem_view = get_interprocedural_view();
#endif
- int walk_flag = using_irn_visited(irg);
+ int walk_flag = ir_resources_reserved(irg) & IR_RESOURCE_IRN_VISITED;
ir_graph *rem = current_ir_graph;
current_ir_graph = irg;
if(walk_flag)
- clear_using_irn_visited(current_ir_graph);
+ ir_free_resources(irg, IR_RESOURCE_IRN_VISITED);
for (i = get_irp_n_irgs() - 1; i >= 0; --i)
ird_set_irg_link(get_irp_irg(i), NULL);
#endif
if(walk_flag)
- set_using_irn_visited(current_ir_graph);
+ ir_reserve_resources(irg, IR_RESOURCE_IRN_VISITED);
current_ir_graph = rem;
return ird_get_irg_link(irg);
/* implementation for default nodes */
switch (get_irn_opcode(n)) {
- case iro_Const: {
- int res;
- char buf[1024];
- res = tarval_snprintf(buf, sizeof(buf), get_Const_tarval(n));
- assert(res < (int) sizeof(buf) && "buffer to small for tarval_snprintf");
- fprintf(F, buf);
- } break;
+ case iro_Const:
+ ir_fprintf(F, "%T", get_Const_tarval(n));
+ break;
- case iro_SymConst: {
+ case iro_SymConst:
switch (get_SymConst_kind(n)) {
case symconst_addr_name:
/* don't use get_SymConst_ptr_info as it mangles the name. */
fprintf(F, "SymC %lu label", get_SymConst_label(n));
break;
}
- } break;
+ break;
- case iro_Filter: {
+ case iro_Filter:
if (!get_interprocedural_view())
fprintf(F, "Proj'");
else
goto default_case;
- } break;
+ break;
case iro_Proj: {
ir_node *pred = get_Proj_pred(n);
case iro_Start:
case iro_End:
case iro_EndExcept:
- case iro_EndReg: {
+ case iro_EndReg:
if (get_interprocedural_view()) {
fprintf(F, "%s %s", get_irn_opname(n), get_ent_dump_name(get_irg_entity(get_irn_irg(n))));
break;
} else
goto default_case;
- }
+
case iro_CallBegin: {
ir_node *addr = get_CallBegin_ptr(n);
ir_entity *ent = NULL;
fprintf(F, "%s", get_irn_opname(n));
break;
case iro_Block:
- fprintf(F, "%s%s", is_Block_dead(n) ? "Dead " : "", get_irn_opname(n));
+ fprintf(F, "%s%s%s",
+ is_Block_dead(n) ? "Dead " : "", get_irn_opname(n),
+ dump_block_marker ? (get_Block_mark(n) ? "*" : "") : "");
break;
case iro_Conv:
if (get_Conv_strict(n))
return;
/* dump this node */
- fprintf(F, "node: {title: \""); PRINT_NODEID(n); fprintf(F, "\" label: \"");
+ fputs("node: {title: \"", F);
+ PRINT_NODEID(n);
+ fputs("\"", F);
+ fputs(" label: \"", F);
bad = ! irn_vrfy_irg_dump(n, current_ir_graph, &p);
bad |= dump_node_label(F, n);
dump_node_ana_vals(F, n);
//dump_node_ana_info(F, n);
- fprintf(F, "\" ");
+ fputs("\" ", F);
+
+ if (get_op_flags(get_irn_op(n)) & irop_flag_dump_noinput) {
+ //fputs(" node_class:23", F);
+ }
+
bad |= dump_node_info(F, n);
print_node_error(F, p);
print_dbg_info(F, get_irn_dbg_info(n));
dump_node_vcgattr(F, n, NULL, bad);
- fprintf(F, "}\n");
+ fputs("}\n", F);
dump_const_node_local(F, n);
if(dump_node_edge_hook)
/* dumps a type or entity and it's edges. */
static void
-dump_type_info(type_or_ent *tore, void *env) {
+dump_type_info(type_or_ent tore, void *env) {
FILE *F = env;
int i = 0; /* to shutup gcc */
/* dump this type or entity */
- switch (get_kind(tore)) {
+ switch (get_kind(tore.ent)) {
case k_entity: {
- ir_entity *ent = (ir_entity *)tore;
+ ir_entity *ent = tore.ent;
ir_node *value;
/* The node */
dump_entity_node(F, ent, 0);
break;
}
case k_type: {
- ir_type *tp = (ir_type *)tore;
+ ir_type *tp = tore.typ;
dump_type_node(F, tp);
/* and now the edges */
switch (get_type_tpop_code(tp)) {
* If env->dump_ent dumps entities of classes and overwrites edges.
*/
static void
-dump_class_hierarchy_node(type_or_ent *tore, void *ctx) {
+dump_class_hierarchy_node(type_or_ent tore, void *ctx) {
h_env_t *env = ctx;
FILE *F = env->f;
int i = 0; /* to shutup gcc */
/* dump this type or entity */
- switch (get_kind(tore)) {
+ switch (get_kind(tore.ent)) {
case k_entity: {
- ir_entity *ent = (ir_entity *)tore;
+ ir_entity *ent = tore.ent;
if (get_entity_owner(ent) == get_glob_type()) break;
- if (!is_Method_type(get_entity_type(ent))) break; /* GL */
+ if (!is_Method_type(get_entity_type(ent)))
+ break; /* GL */
if (env->dump_ent && is_Class_type(get_entity_owner(ent))) {
/* The node */
dump_entity_node(F, ent, 0);
break;
}
case k_type: {
- ir_type *tp = (ir_type *)tore;
- if (tp == get_glob_type()) break;
+ ir_type *tp = tore.typ;
+ if (tp == get_glob_type())
+ break;
switch (get_type_tpop_code(tp)) {
case tpo_class:
dump_type_node(F, tp);
"classname 20: \"Keep Alive\"\n"
"classname 21: \"Out Edges\"\n"
"classname 22: \"Macro Block Edges\"\n"
+ //"classname 23: \"NoInput Nodes\"\n"
"infoname 1: \"Attribute\"\n"
"infoname 2: \"Verification errors\"\n"
"infoname 3: \"Debug info\"\n",