This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Turn streamer cache to pointer_map


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.


Ciao,
Michael.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]