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.

Reply via email to