X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fstat%2Fpattern.c;h=5f532ba52e20af91bb7a8184f223eb4fa76e6887;hb=289f417b740633fd4caab706441b6e47bb8d19d1;hp=6bb7010b03c58b09537a02bedf7be7b2b45f5e16;hpb=a1e9069afa4fa1e16e2d176bcd7905d6a1ed4677;p=libfirm diff --git a/ir/stat/pattern.c b/ir/stat/pattern.c index 6bb7010b0..5f532ba52 100644 --- a/ir/stat/pattern.c +++ b/ir/stat/pattern.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -40,6 +40,7 @@ #include "pattern_dmp.h" #include "hashptr.h" #include "error.h" +#include "lc_printf.h" #ifdef FIRM_STATISTICS @@ -91,7 +92,7 @@ enum vlc_code_t { */ typedef struct pattern_entry_t { counter_t count; /**< Amount of pattern occurance. */ - unsigned len; /**< The length of the VLC encoded buffer. */ + size_t len; /**< The length of the VLC encoded buffer. */ BYTE buf[1]; /**< The buffer containing the VLC encoded pattern. */ } pattern_entry_t; @@ -145,14 +146,13 @@ static int pattern_count_cmp(const void *elt, const void *key) */ static int pattern_cmp(const void *elt, const void *key) { - const pattern_entry_t *e1 = elt; - const pattern_entry_t *e2 = key; - int diff = e1->len - e2->len; + const pattern_entry_t *e1 = (const pattern_entry_t*)elt; + const pattern_entry_t *e2 = (const pattern_entry_t*)key; - if (diff) - return diff; + if (e1->len == e2->len) + return memcmp(e1->buf, e2->buf, e1->len); - return memcmp(e1->buf, e2->buf, e1->len); + return e1->len < e2->len ? -1 : +1; } /* pattern_cmp */ /** @@ -162,7 +162,7 @@ static int pattern_cmp(const void *elt, const void *key) * @param data a buffer address * @param len the length of the data buffer */ -static void init_buf(CODE_BUFFER *buf, BYTE *data, unsigned len) +static void init_buf(CODE_BUFFER *buf, BYTE *data, size_t len) { buf->start = buf->next = data; @@ -196,7 +196,7 @@ static inline void put_byte(CODE_BUFFER *buf, BYTE byte) * * @return the length of the buffer content */ -static unsigned buf_lenght(const CODE_BUFFER *buf) +static size_t buf_lenght(const CODE_BUFFER *buf) { return buf->next - buf->start; } /* buf_lenght */ @@ -388,23 +388,27 @@ typedef struct addr_entry_t { */ static int addr_cmp(const void *p1, const void *p2, size_t size) { - const addr_entry_t *e1 = p1; - const addr_entry_t *e2 = p2; + const addr_entry_t *e1 = (const addr_entry_t*)p1; + const addr_entry_t *e2 = (const addr_entry_t*)p2; (void) size; return e1->addr != e2->addr; } /* addr_cmp */ -static unsigned find_mode_index(const ir_mode *mode) +/** + * Return the index of a (existing) mode. + */ +static size_t find_mode_index(const ir_mode *mode) { - int n = get_irp_n_modes(); - int i; + size_t i, n = get_irp_n_modes(); for (i = 0; i < n; ++i) { if (get_irp_mode(i) == mode) return i; } - return -1; + /* should really not happen */ + assert(!"Cound not find index of mode in find_mode_index()"); + return (size_t)-1; } /** @@ -419,7 +423,7 @@ static int _encode_node(ir_node *node, int max_depth, codec_env_t *env) int i, preds; int res, depth; - ir_opcode code = get_irn_opcode(node); + unsigned code = get_irn_opcode(node); /* insert the node into our ID map */ entry.addr = node; @@ -454,7 +458,7 @@ static int _encode_node(ir_node *node, int max_depth, codec_env_t *env) /* do we need integer constants */ if (env->options & OPT_WITH_ICONST) { if (code == iro_Const) { - tarval *tv = get_Const_tarval(node); + ir_tarval *tv = get_Const_tarval(node); if (tarval_is_long(tv)) { long v = get_tarval_long(tv); @@ -634,7 +638,7 @@ static void _decode_node(unsigned parent, int position, codec_env_t *env) /** * Decode an IR-node. */ -static void decode_node(BYTE *b, unsigned len, pattern_dumper_t *dump) +static void decode_node(BYTE *b, size_t len, pattern_dumper_t *dump) { codec_env_t env; CODE_BUFFER buf; @@ -677,7 +681,7 @@ typedef struct pattern_env { static pattern_entry_t *pattern_get_entry(CODE_BUFFER *buf, pset *set) { pattern_entry_t *key, *elem; - unsigned len = buf_lenght(buf); + size_t len = buf_lenght(buf); unsigned hash; key = OALLOCF(&status->obst, pattern_entry_t, buf, len); @@ -686,14 +690,14 @@ static pattern_entry_t *pattern_get_entry(CODE_BUFFER *buf, pset *set) hash = buf_hash(buf); - elem = pset_find(set, key, hash); + elem = (pattern_entry_t*)pset_find(set, key, hash); if (elem != NULL) { obstack_free(&status->obst, key); return elem; } /* if */ cnt_clr(&key->count); - return pset_insert(set, key, hash); + return (pattern_entry_t*)pset_insert(set, key, hash); } /* pattern_get_entry */ /** @@ -722,7 +726,7 @@ static void count_pattern(CODE_BUFFER *buf, int depth) */ static void calc_nodes_pattern(ir_node *node, void *ctx) { - pattern_env_t *env = ctx; + pattern_env_t *env = (pattern_env_t*)ctx; BYTE buffer[PATTERN_STORE_SIZE]; CODE_BUFFER buf; int depth; @@ -731,7 +735,7 @@ static void calc_nodes_pattern(ir_node *node, void *ctx) depth = encode_node(node, &buf, env->max_depth); if (buf_overrun(&buf)) { - fprintf(stderr, "Pattern store: buffer overrun at size %u. Pattern ignored.\n", (unsigned) sizeof(buffer)); + lc_fprintf(stderr, "Pattern store: buffer overrun at size %zu. Pattern ignored.\n", sizeof(buffer)); } else count_pattern(&buf, depth); } /* calc_nodes_pattern */ @@ -745,7 +749,7 @@ static void store_pattern(const char *fname) { FILE *f; pattern_entry_t *entry; - int i, count = pset_count(status->pattern_hash); + size_t i, count = pset_count(status->pattern_hash); if (count <= 0) return; @@ -759,9 +763,9 @@ static void store_pattern(const char *fname) fwrite("FPS1", 4, 1, f); fwrite(&count, sizeof(count), 1, f); - for (i = 0, entry = pset_first(status->pattern_hash); + for (i = 0, entry = (pattern_entry_t*)pset_first(status->pattern_hash); entry && i < count; - entry = pset_next(status->pattern_hash), ++i) { + entry = (pattern_entry_t*)pset_next(status->pattern_hash), ++i) { fwrite(entry, offsetof(pattern_entry_t, buf) + entry->len, 1, f); } /* for */ fclose(f); @@ -776,7 +780,7 @@ static HASH_MAP(pattern_entry_t) *read_pattern(const char *fname) { FILE *f; pattern_entry_t *entry, tmp; - int i, count; + size_t i, count; unsigned j; char magic[4]; HASH_MAP(pattern_entry_t) *pattern_hash = new_pset(pattern_cmp, 8); @@ -809,7 +813,7 @@ static HASH_MAP(pattern_entry_t) *read_pattern(const char *fname) } /* for */ fclose(f); - printf("Read %d pattern from %s\n", count, fname); + lc_printf("Read %zu pattern from %s\n", count, fname); assert(pset_count(pattern_hash) == count); return pattern_hash; @@ -825,20 +829,20 @@ static void pattern_output(const char *fname) pattern_entry_t *entry; pattern_entry_t **pattern_arr; pattern_dumper_t *dump; - int i, count = pset_count(status->pattern_hash); + size_t i, count = pset_count(status->pattern_hash); - printf("\n%d pattern detected\n", count); + lc_printf("\n%zu pattern detected\n", count); - if (count <= 0) + if (count == 0) return; /* creates a dumper */ dump = new_vcg_dumper(fname, 100); pattern_arr = XMALLOCN(pattern_entry_t*, count); - for (i = 0, entry = pset_first(status->pattern_hash); + for (i = 0, entry = (pattern_entry_t*)pset_first(status->pattern_hash); entry && i < count; - entry = pset_next(status->pattern_hash), ++i) { + entry = (pattern_entry_t*)pset_next(status->pattern_hash), ++i) { pattern_arr[i] = entry; } /* for */ assert(count == i);