3 * File name: ir/ir/pattern_dmp.c
4 * Purpose: Statistics for Firm.
8 * Copyright: (c) 2004 Universität Karlsruhe
9 * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE.
21 #include "pattern_dmp.h"
26 * starts a new VCG graph
28 static void vcg_dump_start(pattern_dumper_t *self)
30 f = fopen("firmpattern.vcg", "w");
33 "graph: { title: \"Most found pattern\"\n"
34 " display_edge_labels: no\n"
35 " layoutalgorithm: mindepth\n"
36 " manhattan_edges: yes\n"
38 " orientation: bottom_to_top\n"
43 * ends a new VCG graph
45 static void vcg_dump_end(pattern_dumper_t *self)
52 * starts a new pattern
54 static void vcg_dump_new_pattern(pattern_dumper_t *self, counter_t *cnt)
57 " graph: { title: \"pattern cnt %u\"\n", cnt->cnt[0]
63 * Finishes current pattern
65 static void vcg_dump_finish_pattern(pattern_dumper_t *self)
71 static void vcg_dump_node(pattern_dumper_t *self, unsigned id,
72 unsigned op_code, unsigned mode_code)
74 ir_op *op = (ir_op *)op_code;
75 ir_mode *mode = (ir_mode *)mode_code;
77 fprintf(f, " node: {title: \"n%u\" label: \"%s%s n%u\" }\n",
78 id, get_id_str(op->name), mode ? get_mode_name(mode) : "", id);
81 static void vcg_dump_edge(pattern_dumper_t *self, unsigned id, unsigned parent, unsigned position)
83 fprintf(f, " edge: { sourcename: \"n%u\" targetname: \"n%u\"}\n", parent, id);
89 pattern_dumper_t vcg_dump = {
91 vcg_dump_finish_pattern,
100 * starts a new pattern
102 static void stdout_dump_new_pattern(pattern_dumper_t *self, counter_t *cnt)
104 printf("%8u ", cnt->cnt[0]);
109 * Finishes current pattern
111 static void stdout_dump_finish_pattern(pattern_dumper_t *self)
119 static void stdout_dump_node(pattern_dumper_t *self, unsigned id, unsigned op_code, unsigned mode_code)
121 ir_op *op = (ir_op *)op_code;
122 ir_mode *mode = (ir_mode *)mode_code;
124 /* if (env->options & OPT_ENC_GRAPH) */
127 printf("%s", get_id_str(op->name));
130 printf("%s", get_mode_name(mode));
136 static void stdout_dump_ref(pattern_dumper_t *self, unsigned id)
138 printf("REF:%u", id);
144 static void stdout_dump_edge(pattern_dumper_t *self, unsigned id, unsigned parent, unsigned position)
151 * Start children dumper
153 static void stdout_start_children(pattern_dumper_t *self, unsigned id)
159 * finishes childred dumper
161 static void stdout_finish_children(pattern_dumper_t *self, unsigned id)
169 pattern_dumper_t stdout_dump = {
170 stdout_dump_new_pattern,
171 stdout_dump_finish_pattern,
175 stdout_start_children,
176 stdout_finish_children,
179 /* ------------------------------------ API ------------------------------------- */
182 * starts a new pattern
184 void pattern_dump_new_pattern(pattern_dumper_t *self, counter_t *cnt)
186 if (self->dump_new_pattern)
187 self->dump_new_pattern(self, cnt);
192 * Finishes current pattern
194 void pattern_dump_finish_pattern(pattern_dumper_t *self)
196 if (self->dump_finish_pattern)
197 self->dump_finish_pattern(self);
204 void pattern_dump_node(pattern_dumper_t *self, unsigned id, unsigned op_code, unsigned mode_code)
207 self->dump_node(self, id, op_code, mode_code);
213 void pattern_dump_ref(pattern_dumper_t *self, unsigned id)
216 self->dump_ref(self, id);
222 void pattern_dump_edge(pattern_dumper_t *self, unsigned id, unsigned parent, unsigned position)
225 self->dump_edge(self, id, parent, position);
229 * Start children dumper
231 void pattern_start_children(pattern_dumper_t *self, unsigned id)
233 if (self->dump_start_children)
234 self->dump_start_children(self, id);
238 * finishes childred dumper
240 void pattern_finish_children(pattern_dumper_t *self, unsigned id)
242 if (self->dump_finish_children)
243 self->dump_finish_children(self, id);