/*
- * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved.
- *
* This file is part of libFirm.
- *
- * This file may be distributed and/or modified under the terms of the
- * GNU General Public License version 2 as published by the Free Software
- * Foundation and appearing in the file LICENSE.GPL included in the
- * packaging of this file.
- *
- * Licensees holding valid libFirm Professional Edition licenses may use
- * this file in accordance with the libFirm Commercial License.
- * Agreement provided with the Software.
- *
- * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
- * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE.
+ * Copyright (C) 2012 University of Karlsruhe.
*/
/**
* @file
* @brief Statistics for Firm. Dumping patterns.
* @author Michael Beck
- * @version $Id$
*/
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
+#include "config.h"
#include <stdio.h>
-#ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
+#include <stdlib.h>
#include "ident.h"
#include "irop_t.h"
/**
* the pattern dumper
*/
-struct _pattern_dumper_t {
+struct pattern_dumper_t {
DUMP_NEW_PATTERN_FUNC dump_new_pattern;
DUMP_FINISH_PATTERN_FUNC dump_finish_pattern;
DUMP_NODE_FUNC dump_node;
/**
* VCG private data
*/
-typedef struct _vcg_private_t {
+typedef struct vcg_private_t {
FILE *f; /**< file to dump to */
unsigned pattern_id; /**< ID of the pattern */
unsigned max_pattern; /**< maximum number of pattern to be dumped */
*/
static void vcg_dump_start(pattern_dumper_t *self)
{
- vcg_private_t *priv = self->data;
+ vcg_private_t *priv = (vcg_private_t*)self->data;
fprintf(priv->f,
"graph: { title: \"Most found pattern\"\n"
" port_sharing: no\n"
" orientation: bottom_to_top\n"
);
-} /* vcg_dump_start */
+}
/**
* Ends a new VCG graph.
*/
static void vcg_dump_end(pattern_dumper_t *self)
{
- vcg_private_t *priv = self->data;
+ vcg_private_t *priv = (vcg_private_t*)self->data;
fprintf(priv->f, "}\n");
fclose(priv->f);
-} /* vcg_dump_end */
+}
/**
* Starts a new pattern.
*/
static void vcg_dump_new_pattern(pattern_dumper_t *self, counter_t *cnt)
{
- vcg_private_t *priv = self->data;
+ vcg_private_t *priv = (vcg_private_t*)self->data;
static unsigned nr = 0;
if (priv->pattern_id > priv->max_pattern)
" node: {title: \"c%u\" label: \"cnt: %u\" color:red }\n",
++nr, cnt_to_uint(cnt)
);
-} /* vcg_dump_new_pattern */
+}
/**
* Finish the current pattern.
*/
static void vcg_dump_finish_pattern(pattern_dumper_t *self)
{
- vcg_private_t *priv = self->data;
+ vcg_private_t *priv = (vcg_private_t*)self->data;
if (priv->pattern_id > priv->max_pattern)
return;
priv->pattern_id - 1);
++priv->pattern_id;
-} /* vcg_dump_finish_pattern */
+}
/**
* Dumps a node.
static void vcg_dump_node(pattern_dumper_t *self, unsigned id,
unsigned op_code, unsigned mode_code, void *attr)
{
- vcg_private_t *priv = self->data;
+ vcg_private_t *priv = (vcg_private_t*)self->data;
ir_op *op = stat_get_op_from_opcode(op_code);
- ir_mode *mode = (ir_mode *)mode_code;
+ ir_mode *mode = ir_get_mode(mode_code);
long l = attr ? *(long *)attr : 0;
if (priv->pattern_id > priv->max_pattern)
} else {
fprintf(priv->f, " node: {title: \"n%u_%u\" label: \"%s%s n%u\" }\n",
priv->pattern_id, id, get_id_str(op->name), mode ? get_mode_name(mode) : "", id);
- } /* if */
-} /* vcg_dump_node */
+ }
+}
/**
* Dumps an edge.
*/
static void vcg_dump_edge(pattern_dumper_t *self, unsigned tgt, unsigned src, unsigned pos, unsigned mode_code)
{
- vcg_private_t *priv = self->data;
+ vcg_private_t *priv = (vcg_private_t*)self->data;
+ (void) mode_code;
if (priv->pattern_id > priv->max_pattern)
return;
priv->pattern_id, tgt,
pos
);
-} /* vcg_dump_edge */
+}
/**
* The VCG dumper.
*/
static void stdout_dump_new_pattern(pattern_dumper_t *self, counter_t *cnt)
{
- FILE *f = self->data;
+ FILE *f = (FILE*)self->data;
fprintf(f, "%8u ", cnt_to_uint(cnt));
-} /* stdout_dump_new_pattern */
+}
/**
*/
static void stdout_dump_finish_pattern(pattern_dumper_t *self)
{
- FILE *f = self->data;
+ FILE *f = (FILE*)self->data;
fprintf(f, "\n");
-} /* stdout_dump_finish_pattern */
+}
/**
* Dumps a node.
*/
static void stdout_dump_node(pattern_dumper_t *self, unsigned id, unsigned op_code, unsigned mode_code, void *attr)
{
- FILE *f = self->data;
+ FILE *f = (FILE*)self->data;
ir_op *op = stat_get_op_from_opcode(op_code);
- ir_mode *mode = (ir_mode *)mode_code;
+ ir_mode *mode = ir_get_mode(mode_code);
+ (void) attr;
/* if (env->options & OPT_ENC_GRAPH) */
fprintf(f, "%u:", id);
if (mode)
fprintf(f, "%s", get_mode_name(mode));
-} /* stdout_dump_node */
+}
/**
* Dump a ref
*/
static void stdout_dump_ref(pattern_dumper_t *self, unsigned id)
{
- FILE *f = self->data;
+ FILE *f = (FILE*)self->data;
fprintf(f, "REF:%u", id);
-} /* stdout_dump_ref */
+}
/**
* Dump an edge.
*/
static void stdout_dump_edge(pattern_dumper_t *self, unsigned tgt, unsigned src, unsigned pos, unsigned mode_code)
{
- FILE *f = self->data;
+ FILE *f = (FILE*)self->data;
+ (void) tgt;
+ (void) src;
+ (void) pos;
+ (void) mode_code;
if (pos > 0)
fprintf(f, ", ");
-} /* stdout_dump_edge */
+}
/**
* Start the children dumper.
*/
static void stdout_start_children(pattern_dumper_t *self, unsigned id)
{
- FILE *f = self->data;
+ FILE *f = (FILE*)self->data;
+ (void) id;
fprintf(f, "(");
-} /* stdout_start_children */
+}
/**
* Finish the children dumper.
*/
static void stdout_finish_children(pattern_dumper_t *self, unsigned id)
{
- FILE *f = self->data;
+ FILE *f = (FILE*)self->data;
+ (void) id;
fprintf(f, ")");
-} /* stdout_finish_children */
+}
/**
* The stdout dumper.
{
if (self->dump_new_pattern)
self->dump_new_pattern(self, cnt);
-} /* pattern_dump_new_pattern */
+}
/*
{
if (self->dump_finish_pattern)
self->dump_finish_pattern(self);
-} /* pattern_dump_finish_pattern */
+}
/*
{
if (self->dump_node)
self->dump_node(self, id, op_code, mode_code, attr);
-} /* pattern_dump_node */
+}
/*
* Dump a ref.
{
if (self->dump_ref)
self->dump_ref(self, id);
-} /* pattern_dump_ref */
+}
/*
* Dump an edge.
{
if (self->dump_edge)
self->dump_edge(self, tgt, src, pos, mode_code);
-} /* pattern_dump_edge */
+}
/*
* Start the children dumper.
{
if (self->dump_start_children)
self->dump_start_children(self, id);
-} /* pattern_start_children */
+}
/*
* Finish the the children dumper.
{
if (self->dump_finish_children)
self->dump_finish_children(self, id);
-} /* pattern_finish_children */
+}
/*
* Finish the the dumper.
self->dump_end(self);
free(self);
-} /* pattern_end */
+}
/**
* pattern dumper factory for text dumper
*/
pattern_dumper_t *new_text_dumper(void)
{
- pattern_dumper_t *res = malloc(sizeof(*res));
+ pattern_dumper_t *res = XMALLOC(pattern_dumper_t);
- if (res) {
- memcpy(res, &stdout_dump, sizeof(*res));
- res->data = stdout;
+ *res = stdout_dump;
+ res->data = stdout;
- if (res->dump_start)
- res->dump_start(res);
- } /* if */
+ if (res->dump_start)
+ res->dump_start(res);
return res;
-} /* new_text_dumper */
+}
/**
* pattern dumper factory for vcg dumper
*/
pattern_dumper_t *new_vcg_dumper(const char *vcg_name, unsigned max_pattern)
{
- pattern_dumper_t *res = malloc(sizeof(*res) + sizeof(vcg_private_t));
+ pattern_dumper_t *res = (pattern_dumper_t*)malloc(sizeof(*res) + sizeof(vcg_private_t));
vcg_private_t *priv;
if (res) {
if (res->dump_start)
res->dump_start(res);
- } /* if */
+ }
return res;
-} /* new_vcg_dumper */
+}