#include "tv.h"
#include "irgwalk.h"
#include "firm_types.h"
+#include "irdump_grgen.h"
typedef struct
irg_grgen_dumper_env_t *init_irg_grgen_dumper(char *file, int append)
{
- irg_grgen_dumper_env_t *const grgen_dumper_env = xmalloc(sizeof(*grgen_dumper_env));
+ irg_grgen_dumper_env_t *const grgen_dumper_env = XMALLOC(irg_grgen_dumper_env_t);
FILE *fp;
if(append)
{
char filename[100] = "";
- strncat(filename, get_entity_name(get_irg_entity(irg)), 100);
- strncat(filename, suffix, 100);
- strncat(filename, ".grg", 100);
+ strncat(filename, get_entity_name(get_irg_entity(irg)), sizeof(filename)-1);
+ strncat(filename, suffix, sizeof(filename)-1);
+ strncat(filename, ".grg", sizeof(filename)-1);
dump_irg_grgen_file(irg, filename, 0);
}
ir_node *n = (ir_node *) entry->key;
// Dump node
- if(get_irn_opcode(n) == iro_Proj && get_irn_modecode(n) == irm_M)
+ if(get_irn_opcode(n) == iro_Proj && get_irn_mode(n) == mode_M)
uses_memory = 1;
dump_grg_node(n, dump_info, fp);
dump_grgen_mode(n, dump_info, fp, NULL);
int i;
// Dump edges
- for(i = -1; i < get_irn_arity(n); i++)
+ for(i = is_Block(n) ? 0 : -1; i < get_irn_arity(n); i++)
dump_grg_egde(n, i, dump_info, fp);
}
// Else generate new node name and dump the node
- node_name = obstack_alloc(&(dump_info -> node_names), MAX_NODENAME_LEN);
+ node_name = OALLOCN(&dump_info->node_names, char, MAX_NODENAME_LEN);
sprintf(node_name, "%s%ld", get_op_name(get_irn_op(n)), get_irn_node_nr(n));
fprintf(fp, "%s%s : %s;\n", indent, node_name, get_op_name(get_irn_op(n)));
if((nodes_edge_names = pmap_get(dump_info -> edge_name_map, n)) == NULL)
{
- nodes_edge_names = (char **) obstack_alloc(&(dump_info->node_names), (get_irn_arity(n) + 1) * sizeof(char *));
- memset(nodes_edge_names, 0, (get_irn_arity(n) + 1) * sizeof(char *));
+ size_t const count = get_irn_arity(n) + 1;
+ nodes_edge_names = OALLOCNZ(&dump_info->node_names, char*, count);
pmap_insert(dump_info->edge_name_map, n, nodes_edge_names);
}
char edge_name[50], *edge_name_obst;
sprintf(edge_name, "pos%d_%d", n_edge + 1, edge_counter++);
- edge_name_obst = obstack_alloc(&(dump_info->node_names), strlen(edge_name) + 1);
+ edge_name_obst = OALLOCN(&dump_info->node_names, char, strlen(edge_name) + 1);
strcpy(edge_name_obst, edge_name);
nodes_edge_names[n_edge + 1] = edge_name_obst;
if(pmap_get(dump_info->mode_edge_map, n) == NULL)
{
- char *edge_name_obst = obstack_alloc(&(dump_info->node_names), strlen(edge_name) + 1);
+ char *edge_name_obst = OALLOCN(&dump_info->node_names, char, strlen(edge_name) + 1);
strcpy(edge_name_obst, edge_name);
pmap_insert(dump_info->mode_edge_map, n, edge_name_obst);
}
static char *dump_grgen_mode_node(ir_mode *irn_mode, grgen_dumpinfo_t *dump_info, FILE *fp)
{
- modecode mode_code = get_mode_modecode(irn_mode);
const char *mode_name = get_mode_name(irn_mode);
char *mode_node_name;
- if(!pmap_contains(dump_info -> mode_name_map, (void *) mode_code))
+ if(!pmap_contains(dump_info -> mode_name_map, irn_mode))
{
// No, create a new mode-node
- mode_node_name = obstack_alloc(&(dump_info -> mode_names), MAX_NODENAME_LEN);
+ mode_node_name = OALLOCN(&dump_info->mode_names, char, MAX_NODENAME_LEN);
sprintf(mode_node_name, "mode_%s_node", mode_name);
- pmap_insert(dump_info -> mode_name_map, (void *) mode_code, mode_node_name);
+ pmap_insert(dump_info -> mode_name_map, irn_mode, mode_node_name);
fprintf(fp, "%s%s : Mode_%s;\n", indent, mode_node_name, mode_name);
return(mode_node_name);
}
else
{
- return((char *) pmap_get(dump_info -> mode_name_map, (void *) mode_code));
+ return((char *) pmap_get(dump_info -> mode_name_map, irn_mode));
}
}
// Correlate the matched phi edges with the matched block edges
// Caution: Position 0 in the edge_names array is the block edge, so start at 1
- for(i = 0; i < get_irn_arity(n) + 1; i++)
+ for(i = code == iro_Block; i < get_irn_arity(n) + 1; i++)
{
assert(edge_names[i] != NULL && "Some edges have not been dumped!");