Commit 7c99ecef by Richard Guenther Committed by Richard Biener

tree.c (build_opaque_vector_type): Make opaque vectors variant types of the…

tree.c (build_opaque_vector_type): Make opaque vectors variant types of the corresponding non-opaque type.

2011-09-29  Richard Guenther  <rguenther@suse.de>

	* tree.c (build_opaque_vector_type): Make opaque vectors
	variant types of the corresponding non-opaque type.  Make
	sure to share opaque vector types properly.

From-SVN: r179341
parent 9b0c7202
2011-09-29 Richard Guenther <rguenther@suse.de>
* tree.c (build_opaque_vector_type): Make opaque vectors
variant types of the corresponding non-opaque type. Make
sure to share opaque vector types properly.
2011-09-29 David S. Miller <davem@davemloft.net>
* config/sparc/sparc.md (UNSPEC_ARRAY8, UNSPEC_ARRAY16,
......@@ -9752,17 +9752,29 @@ build_vector_type (tree innertype, int nunits)
return make_vector_type (innertype, nunits, VOIDmode);
}
/* Similarly, but takes the inner type and number of units, which must be
a power of two. */
/* Similarly, but builds a variant type with TYPE_VECTOR_OPAQUE set. */
tree
build_opaque_vector_type (tree innertype, int nunits)
{
tree t;
innertype = build_distinct_type_copy (innertype);
t = make_vector_type (innertype, nunits, VOIDmode);
TYPE_VECTOR_OPAQUE (t) = true;
return t;
tree t = make_vector_type (innertype, nunits, VOIDmode);
tree cand;
/* We always build the non-opaque variant before the opaque one,
so if it already exists, it is TYPE_NEXT_VARIANT of this one. */
cand = TYPE_NEXT_VARIANT (t);
if (cand
&& TYPE_VECTOR_OPAQUE (cand)
&& check_qualified_type (cand, t, TYPE_QUALS (t)))
return cand;
/* Othewise build a variant type and make sure to queue it after
the non-opaque type. */
cand = build_distinct_type_copy (t);
TYPE_VECTOR_OPAQUE (cand) = true;
TYPE_CANONICAL (cand) = TYPE_CANONICAL (t);
TYPE_NEXT_VARIANT (cand) = TYPE_NEXT_VARIANT (t);
TYPE_NEXT_VARIANT (t) = cand;
TYPE_MAIN_VARIANT (cand) = TYPE_MAIN_VARIANT (t);
return cand;
}
......
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