* returns the name of a type or <ERROR> if mode is NOT a mode object.
* in the later case, sets bad
*/
-const char *get_type_name_ex(type *tp, int *bad)
+const char *get_type_name_ex(ir_type *tp, int *bad)
{
if (is_type(tp))
return get_type_name(tp);
* prints the edge from a type S to a type T with additional info fmt, ...
* to the file F
*/
-static void print_type_type_edge(FILE *F, type *S, type *T, const char *fmt, ...)
+static void print_type_type_edge(FILE *F, ir_type *S, ir_type *T, const char *fmt, ...)
{
va_list ap;
* prints the edge from a type T to an entity E with additional info fmt, ...
* to the file F
*/
-static void print_type_ent_edge(FILE *F, type *T, entity *E, const char *fmt, ...)
+static void print_type_ent_edge(FILE *F, ir_type *T, entity *E, const char *fmt, ...)
{
va_list ap;
* prints the edge from an entity E to a type T with additional info fmt, ...
* to the file F
*/
-static void print_ent_type_edge(FILE *F, entity *E, type *T, const char *fmt, ...)
+static void print_ent_type_edge(FILE *F, entity *E, ir_type *T, const char *fmt, ...)
{
va_list ap;
* prints the edge from a node N to a type T with additional info fmt, ...
* to the file F
*/
-static void print_node_type_edge(FILE *F, const ir_node *N, type *T, const char *fmt, ...)
+static void print_node_type_edge(FILE *F, const ir_node *N, ir_type *T, const char *fmt, ...)
{
va_list ap;
* prints the edge from a type E to an enumeration item item with additional info fmt, ...
* to the file F
*/
-static void print_enum_item_edge(FILE *F, type *E, int item, const char *fmt, ...)
+static void print_enum_item_edge(FILE *F, ir_type *E, int item, const char *fmt, ...)
{
va_list ap;
ir_graph *rem = current_ir_graph;
current_ir_graph = irg;
- for (i = 0; i < get_irp_n_irgs(); i++)
+ for (i = get_irp_n_irgs() - 1; i >= 0; --i)
ird_set_irg_link(get_irp_irg(i), NULL);
irg_walk_graph(current_ir_graph, clear_link, collect_node, current_ir_graph);
if (opt_dump_analysed_type_info) {
if (get_irg_typeinfo_state(current_ir_graph) == ir_typeinfo_consistent ||
get_irg_typeinfo_state(current_ir_graph) == ir_typeinfo_inconsistent) {
- type *tp = get_irn_typeinfo_type(n);
+ ir_type *tp = get_irn_typeinfo_type(n);
if (tp != firm_none_type)
fprintf(F, "[%s] ", get_type_name_ex(tp, &bad));
else
#undef X
};
+/** the lookup table for Proj(CopyB) names */
+static const pns_lookup_t copyb_lut[] = {
+#define X(a) { pn_CopyB_##a, #a }
+ X(M),
+ X(X_except),
+ X(M_except)
+#undef X
+};
+
+/** the lookup table for Proj(InstOf) names */
+static const pns_lookup_t instof_lut[] = {
+#define X(a) { pn_InstOf_##a, #a }
+ X(M),
+ X(X_except),
+ X(res),
+ X(M_except),
+#undef X
+};
+
+/** the lookup table for Proj(Raise) names */
+static const pns_lookup_t raise_lut[] = {
+#define X(a) { pn_Raise_##a, #a }
+ X(M),
+ X(X),
+#undef X
+};
+
+/** the lookup table for Proj(Bound) names */
+static const pns_lookup_t bound_lut[] = {
+#define X(a) { pn_Bound_##a, #a }
+ X(M),
+ X(X_except),
+ X(res),
+ X(M_except)
+#undef X
+};
/** the Proj lookup table */
static const proj_lookup_t proj_lut[] = {
{ iro_Mod, E(mod_lut) },
{ iro_Load, E(load_lut) },
{ iro_Store, E(store_lut) },
- { iro_Alloc, E(alloc_lut) }
+ { iro_Alloc, E(alloc_lut) },
+ { iro_CopyB, E(copyb_lut) },
+ { iro_InstOf, E(instof_lut) },
+ { iro_Raise, E(raise_lut) },
+ { iro_Bound, E(bound_lut) }
#undef E
};
fprintf (F, "%s ", get_pnc_string(get_Proj_proj(n)));
else if (code == iro_Proj && get_irn_opcode(get_Proj_pred(pred)) == iro_Start)
fprintf (F, "Arg %ld ", proj_nr);
+ else if (code == iro_Cond && get_irn_mode(get_Cond_selector(pred)) != mode_b)
+ fprintf (F, "%ld ", proj_nr);
else {
unsigned i, j, f = 0;
}
#if 0
-static int print_type_info(FILE *F, type *tp) {
+static int print_type_info(FILE *F, ir_type *tp) {
int bad = 0;
if (get_type_state(tp) == layout_undefined) {
return bad;
}
-static void print_typespecific_info(FILE *F, type *tp) {
+static void print_typespecific_info(FILE *F, ir_type *tp) {
switch (get_type_tpop_code(tp)) {
case tpo_class:
{
}
#endif
-static void print_typespecific_vcgattr(FILE *F, type *tp) {
+static void print_typespecific_vcgattr(FILE *F, ir_type *tp) {
switch (get_type_tpop_code(tp)) {
case tpo_class:
{
}
-int dump_type_node(FILE *F, type *tp)
+int dump_type_node(FILE *F, ir_type *tp)
{
int bad = 0;
}
#undef X
-static void dump_enum_item(FILE *F, type *tp, int pos)
+static void dump_enum_item(FILE *F, ir_type *tp, int pos)
{
char buf[1024];
ident *id = get_enumeration_nameid(tp, pos);
} break;
case k_type:
{
- type *tp = (type *)tore;
+ ir_type *tp = (ir_type *)tore;
dump_type_node(F, tp);
/* and now the edges */
switch (get_type_tpop_code(tp)) {
} break; /* case k_entity */
case k_type:
{
- type *tp = (type *)tore;
+ ir_type *tp = (ir_type *)tore;
if (tp == get_glob_type()) break;
switch (get_type_tpop_code(tp)) {
case tpo_class: {
"port_sharing: no\n"
"orientation: %s\n"
"classname 1: \"intrablock Data\"\n"
- "classname 16: \"interblock Data\"\n"
"classname 2: \"Block\"\n"
- "classname 13: \"Control Flow\"\n"
- "classname 18: \"Exception Control Flow for Interval Analysis\"\n"
- "classname 14: \"intrablock Memory\"\n"
- "classname 17: \"interblock Memory\"\n"
- "classname 15: \"Dominators\"\n"
"classname 3: \"Entity type\"\n"
"classname 4: \"Entity owner\"\n"
"classname 5: \"Method Param\"\n"
"classname 10: \"Array Element Type\"\n"
"classname 11: \"Overwrites\"\n"
"classname 12: \"Member\"\n"
+ "classname 13: \"Control Flow\"\n"
+ "classname 14: \"intrablock Memory\"\n"
+ "classname 15: \"Dominators\"\n"
+ "classname 16: \"interblock Data\"\n"
+ "classname 17: \"interblock Memory\"\n"
+ "classname 18: \"Exception Control Flow for Interval Analysis\"\n"
+ "classname 19: \"Postdominators\"\n"
"infoname 1: \"Attribute\"\n"
"infoname 2: \"Verification errors\"\n"
"infoname 3: \"Debug info\"\n",
* only the requested irg but also all irgs that can be reached
* from irg.
*/
- for (i = 0; i < get_irp_n_irgs(); i++) {
+ for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
ir_node **arr = ird_get_irg_link(get_irp_irg(i));
if (arr) {
dump_graph_from_list(f, get_irp_irg(i));
dump_graph_info(F, irg);
print_dbg_info(F, get_entity_dbg_info(ent));
- for (i = 0; i < get_irp_n_irgs(); i++) {
+ for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
ir_graph *irg = get_irp_irg(i);
list_tuple *lists = ird_get_irg_link(irg);
/* dump common blocked ir graph */
construct_block_lists(irg);
- for (i = 0; i < get_irp_n_irgs(); i++) {
+ for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
ir_node **arr = ird_get_irg_link(get_irp_irg(i));
if (arr) {
dump_graph_from_list(f, get_irp_irg(i));
fprintf (F, "\" ");
fprintf(F, "info1:\"");
-#if 0
- if (dump_dominator_information_flag) {
- fprintf(F, "dom depth %d\n", get_Block_dom_depth(block));
- fprintf(F, "tree pre num %d\n", get_Block_dom_tree_pre_num(block));
- fprintf(F, "max subtree pre num %d\n", get_Block_dom_max_subtree_pre_num(block));
- }
-
- /* show arity and possible Bad predecessors of the block */
- fprintf(F, "arity: %d\n", get_Block_n_cfgpreds(block));
- for (fl = i = 0; i < get_Block_n_cfgpreds(block); ++i) {
- ir_node *pred = get_Block_cfgpred(block, i);
- if (is_Bad(pred)) {
- if (! fl)
- fprintf(F, "Bad pred at pos: ");
- fprintf(F, "%d ", i);
- fl = 1;
- }
- }
- if (fl)
- fprintf(F, "\n");
-#else
/* the generic version. */
dump_irnode_to_file(F, block);
for (i = 0; i < get_Block_n_cfgpreds(block); ++i)
if ((fl = is_Bad(get_Block_cfgpred(block, i))))
break;
-#endif
fprintf (F, "\""); /* closing quote of info */
fprintf (F, "\"}\n");
}
- /* Dump dominator edge */
- if (dump_dominator_information_flag && get_Block_idom(block)) {
- pred = get_Block_idom(block);
- fprintf (F, "edge: { sourcename: \"");
- PRINT_NODEID(block);
- fprintf (F, "\" targetname: \"");
- PRINT_NODEID(pred);
- fprintf (F, "\" " DOMINATOR_EDGE_ATTR "}\n");
+ /* Dump dominator/postdominator edge */
+ if (dump_dominator_information_flag) {
+ if (get_irg_dom_state(current_ir_graph) == dom_consistent && get_Block_idom(block)) {
+ pred = get_Block_idom(block);
+ fprintf (F, "edge: { sourcename: \"");
+ PRINT_NODEID(block);
+ fprintf (F, "\" targetname: \"");
+ PRINT_NODEID(pred);
+ fprintf (F, "\" " DOMINATOR_EDGE_ATTR "}\n");
+ }
+ if (get_irg_postdom_state(current_ir_graph) == dom_consistent && get_Block_ipostdom(block)) {
+ pred = get_Block_ipostdom(block);
+ fprintf (F, "edge: { sourcename: \"");
+ PRINT_NODEID(block);
+ fprintf (F, "\" targetname: \"");
+ PRINT_NODEID(pred);
+ fprintf (F, "\" " POSTDOMINATOR_EDGE_ATTR "}\n");
+ }
}
}
}
{
FILE *f;
ir_graph *rem = current_ir_graph;
- int ddif = dump_dominator_information_flag;
int ipv = get_interprocedural_view();
/* if a filter is set, dump only the irg's that match the filter */
set_interprocedural_view(0);
}
- if (get_irg_dom_state(irg) != dom_consistent)
- dump_dominator_information_flag = 0;
-
/* walk over the blocks in the graph */
irg_block_walk(get_irg_end(irg), dump_block_to_cfg, NULL, f);
dump_node(f, get_irg_bad(irg));
- dump_dominator_information_flag = ddif;
set_interprocedural_view(ipv);
vcg_close(f);
current_ir_graph = rem;
void dump_callgraph(const char *suffix) {
FILE *F;
- int i, n_irgs = get_irp_n_irgs();
+ int i;
int rem = edge_label;
edge_label = 1;
//ident *prefix = new_id_from_str("java/");
F = vcg_open_name("Callgraph", suffix);
dump_vcg_header(F, "Callgraph", NULL);
- for (i = 0; i < n_irgs; ++i) {
+ for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
ir_graph *irg = get_irp_irg(i);
entity *ent = get_irg_entity(irg);
int j, n_callees = get_irg_n_callees(irg);
dump_vcg_header(f, "All_graphs", NULL);
/* collect nodes in all irgs reachable in call graph*/
- for (i = 0; i < get_irp_n_irgs(); i++)
+ for (i = get_irp_n_irgs() - 1; i >= 0; --i)
ird_set_irg_link(get_irp_irg(i), NULL);
cg_walk(clear_link, collect_node, NULL);
/* dump all graphs */
- for (i = 0; i < get_irp_n_irgs(); i++) {
+ for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
current_ir_graph = get_irp_irg(i);
assert(ird_get_irg_link(current_ir_graph));
dump_graph_from_list(f, current_ir_graph);
void dump_all_ir_graphs(dump_graph_func *dmp_grph, const char *suffix) {
int i;
- for (i = get_irp_n_irgs() - 1; i >= 0; --i) {
+ for (i = get_irp_n_irgs() - 1; i >= 0; --i)
dmp_grph(get_irp_irg(i), suffix);
- }
}