buf->hash = (buf->hash * 9) ^ byte;
} else {
buf->overrun = 1;
- } /* if */
+ }
} /* put_byte */
/**
*/
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 */
entry.addr = node;
entry.id = env->curr_id;
- s_entry = set_hinsert(env->id_set, &entry, sizeof(entry), HASH_PTR(node));
+ s_entry = set_hinsert(env->id_set, &entry, sizeof(entry), hash_ptr(node));
r_entry = (addr_entry_t *)s_entry->dptr;
if (r_entry->id != env->curr_id) {
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;
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);
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) {
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);
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 */
/**
*/
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);
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;
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;