Commit 1b73c7ef by Richard Biener Committed by Richard Biener

tree.c (get_qualified_type): Put found type variants at the head of the variant list.

2019-04-18  Richard Biener  <rguenther@suse.de>

	* tree.c (get_qualified_type): Put found type variants at the
	head of the variant list.

From-SVN: r270437
parent 3d52462c
2019-04-18 Richard Biener <rguenther@suse.de>
* tree.c (get_qualified_type): Put found type variants at the
head of the variant list.
2018-04-17 Segher Boessenkool <segher@kernel.crashing.org> 2018-04-17 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/rs6000.c (rs6000_register_move_cost): Fix typo. * config/rs6000/rs6000.c (rs6000_register_move_cost): Fix typo.
......
...@@ -6451,17 +6451,28 @@ check_aligned_type (const_tree cand, const_tree base, unsigned int align) ...@@ -6451,17 +6451,28 @@ check_aligned_type (const_tree cand, const_tree base, unsigned int align)
tree tree
get_qualified_type (tree type, int type_quals) get_qualified_type (tree type, int type_quals)
{ {
tree t;
if (TYPE_QUALS (type) == type_quals) if (TYPE_QUALS (type) == type_quals)
return type; return type;
tree mv = TYPE_MAIN_VARIANT (type);
if (check_qualified_type (mv, type, type_quals))
return mv;
/* Search the chain of variants to see if there is already one there just /* Search the chain of variants to see if there is already one there just
like the one we need to have. If so, use that existing one. We must like the one we need to have. If so, use that existing one. We must
preserve the TYPE_NAME, since there is code that depends on this. */ preserve the TYPE_NAME, since there is code that depends on this. */
for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t)) for (tree *tp = &TYPE_NEXT_VARIANT (mv); *tp; tp = &TYPE_NEXT_VARIANT (*tp))
if (check_qualified_type (t, type, type_quals)) if (check_qualified_type (*tp, type, type_quals))
return t; {
/* Put the found variant at the head of the variant list so
frequently searched variants get found faster. The C++ FE
benefits greatly from this. */
tree t = *tp;
*tp = TYPE_NEXT_VARIANT (t);
TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (mv);
TYPE_NEXT_VARIANT (mv) = t;
return t;
}
return NULL_TREE; return NULL_TREE;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment