https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63970
--- Comment #4 from wmi at google dot com ---
(In reply to Jan Hubicka from comment #3)
> Created attachment 34047 [details]
> Patch
>
> Something like this (untested) may work
Thanks! I tested your patch after minor change. It passed bootstrap and
regression. It also solved the performance regression we saw in internal
benchmarks.
+ if (origin_node && !origin_node->used_as_abstract_origin)
+ {
+ origin_node->used_as_abstract_origin = true;
+ enqueue_node (origin_node, &first, &reachable); // enqueue_node
moved here
+ gcc_assert (!origin_node->prev_sibling_clone);
+ gcc_assert (!origin_node->next_sibling_clone);
+ for (origin_node = origin_node->clones; origin_node;
+ origin_node = origin_node->next_sibling_clone)
+ if (origin_node->decl == DECL_ABSTRACT_ORIGIN (node->decl))
+ origin_node->used_as_abstract_origin = true;
+ }
Wei.