X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fstat%2Fpattern.c;h=c21555679bceac39626108976acb92d6b9cb49d4;hb=f57ebc0175b0f091172a3228db1d84e56a79b1b4;hp=e8cf593d9c064f16a1afc2832b3bb4fd92d4edc7;hpb=6032e9e802d2d5c696b90fd17f4b4c9bf9a39540;p=libfirm diff --git a/ir/stat/pattern.c b/ir/stat/pattern.c index e8cf593d9..c21555679 100644 --- a/ir/stat/pattern.c +++ b/ir/stat/pattern.c @@ -397,10 +397,10 @@ static int addr_cmp(const void *p1, const void *p2, size_t size) */ static size_t find_mode_index(const ir_mode *mode) { - size_t i, n = get_irp_n_modes(); + size_t i, n = ir_get_n_modes(); for (i = 0; i < n; ++i) { - if (get_irp_mode(i) == mode) + if (ir_get_mode(i) == mode) return i; } /* should really not happen */ @@ -745,8 +745,7 @@ static void calc_nodes_pattern(ir_node *node, void *ctx) static void store_pattern(const char *fname) { FILE *f; - pattern_entry_t *entry; - size_t i, count = pset_count(status->pattern_hash); + size_t count = pset_count(status->pattern_hash); if (count <= 0) return; @@ -760,9 +759,7 @@ static void store_pattern(const char *fname) fwrite("FPS1", 4, 1, f); fwrite(&count, sizeof(count), 1, f); - for (i = 0, entry = (pattern_entry_t*)pset_first(status->pattern_hash); - entry && i < count; - entry = (pattern_entry_t*)pset_next(status->pattern_hash), ++i) { + foreach_pset(status->pattern_hash, pattern_entry_t, entry) { fwrite(entry, offsetof(pattern_entry_t, buf) + entry->len, 1, f); } /* for */ fclose(f); @@ -783,6 +780,7 @@ static HASH_MAP(pattern_entry_t) *read_pattern(const char *fname) HASH_MAP(pattern_entry_t) *pattern_hash = new_pset(pattern_cmp, 8); BYTE buffer[PATTERN_STORE_SIZE]; CODE_BUFFER buf; + int res; f = fopen(fname, "rb"); if (! f) { @@ -790,19 +788,20 @@ static HASH_MAP(pattern_entry_t) *read_pattern(const char *fname) return NULL; } /* if */ - fread(magic, 4, 1, f); + res = fread(magic, 4, 1, f); + if (res != 1) + goto read_error; count = 0; - fread(&count, sizeof(count), 1, f); - if (memcmp(magic, "FPS1", 4) != 0 || count <= 0) { - fprintf(stderr, "Error: %s is not a Firm pattern store. Ignored.\n", fname); - fclose(f); - return NULL; - } /* if */ + res = fread(&count, sizeof(count), 1, f); + if (res != 1 || memcmp(magic, "FPS1", 4) != 0 || count <= 0) + goto read_error; /* read all pattern entries and put them into the hash table. */ for (i = 0; i < count; ++i) { init_buf(&buf, buffer, sizeof(buffer)); - fread(&tmp, offsetof(pattern_entry_t, buf), 1, f); + res = fread(&tmp, offsetof(pattern_entry_t, buf), 1, f); + if (res != 1) + goto read_error; for (j = 0; j < tmp.len; ++j) put_byte(&buf, fgetc(f)); entry = pattern_get_entry(&buf, pattern_hash); @@ -814,6 +813,11 @@ static HASH_MAP(pattern_entry_t) *read_pattern(const char *fname) assert(pset_count(pattern_hash) == count); return pattern_hash; + +read_error: + fprintf(stderr, "Error: %s is not a Firm pattern store. Ignored.\n", fname); + fclose(f); + return NULL; } /* read_pattern */ /** @@ -823,7 +827,6 @@ static HASH_MAP(pattern_entry_t) *read_pattern(const char *fname) */ static void pattern_output(const char *fname) { - pattern_entry_t *entry; pattern_entry_t **pattern_arr; pattern_dumper_t *dump; size_t i, count = pset_count(status->pattern_hash); @@ -837,10 +840,9 @@ static void pattern_output(const char *fname) dump = new_vcg_dumper(fname, 100); pattern_arr = XMALLOCN(pattern_entry_t*, count); - for (i = 0, entry = (pattern_entry_t*)pset_first(status->pattern_hash); - entry && i < count; - entry = (pattern_entry_t*)pset_next(status->pattern_hash), ++i) { - pattern_arr[i] = entry; + i = 0; + foreach_pset(status->pattern_hash, pattern_entry_t, entry) { + pattern_arr[i++] = entry; } /* for */ assert(count == i); count = i; @@ -849,7 +851,7 @@ static void pattern_output(const char *fname) qsort(pattern_arr, count, sizeof(*pattern_arr), pattern_count_cmp); for (i = 0; i < count; ++i) { - entry = pattern_arr[i]; + pattern_entry_t *const entry = pattern_arr[i]; if (cnt_to_uint(&entry->count) < status->bound) continue;