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
This commit is contained in:
parent
9b0c720280
commit
7c99ecef0b
2 changed files with 25 additions and 7 deletions
|
@ -1,3 +1,9 @@
|
|||
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,
|
||||
|
|
26
gcc/tree.c
26
gcc/tree.c
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue