On Mon, May 2, 2011 at 4:35 PM, Michael Matz <m...@suse.de> wrote: > Hi, > > On Mon, 2 May 2011, Jan Hubicka wrote: > >> ! d_entry.base.from = t; >> ! slot = htab_find_slot (cache->node_map, &d_entry, INSERT); >> ! if (*slot == NULL) >> { >> /* Determine the next slot to use in the cache. */ >> if (insert_at_next_slot_p) >> ix = VEC_length (tree, cache->nodes); >> else >> ix = *ix_p; >> ! >> ! entry = (struct tree_int_map *)pool_alloc (cache->node_map_entries); >> ! entry->base.from = t; >> ! entry->to = ix; >> ! *slot = entry; >> >> lto_streamer_cache_add_to_node_array (cache, ix, t); >> >> --- 348,367 ---- >> bool insert_at_next_slot_p) >> { >> void **slot; >> unsigned ix; >> bool existed_p; >> >> gcc_assert (t); >> >> ! slot = pointer_map_insert (cache->node_map, t); >> ! if (!*slot) > > ix might legitimately be zero. Hence this transformation is not > equivalent. You might want to enter ix+1 into the cache with the > appropriate adjustment at read-out. Same for the other places.
Or not use index zero. Maybe better than also have to deal with ix + 1 wrapping ... Richard. > > Ciao, > Michael. >