aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/gcc-interface/trans.c
diff options
context:
space:
mode:
authorOlivier Hainque <hainque@gcc.gnu.org>2009-09-25 09:33:17 +0000
committerOlivier Hainque <hainque@gcc.gnu.org>2009-09-25 09:33:17 +0000
commit7948ae37a7584683ef2169153be4d72bc883f205 (patch)
tree81ee28b57d956878c8da819d095fb9043c7fcc3b /gcc/ada/gcc-interface/trans.c
parent6e1ee24b2fcd554744a135d2b314fde2f48d674f (diff)
downloadgcc-7948ae37a7584683ef2169153be4d72bc883f205.zip
gcc-7948ae37a7584683ef2169153be4d72bc883f205.tar.gz
gcc-7948ae37a7584683ef2169153be4d72bc883f205.tar.bz2
ada-tree.h (TYPE_REPRESENTATIVE_ARRAY): New language specific node.
ada/ * gcc-interface/ada-tree.h (TYPE_REPRESENTATIVE_ARRAY): New language specific node. Representative array type for VECTOR_TYPE entities. * gcc-interface/utils.c (handle_vector_type_attribute): New handler. Turn an ARRAY_TYPE entity into a VECTOR_TYPE. (gnat_types_compatible_p): Handle VECTOR_TYPEs. (convert): Likewise. Arrange to produce VECTOR_CST out of constant array aggregates for VECTOR_TYPE entities. (unchecked_convert): Likewise. (maybe_vector_array): New function. If EXP has VECTOR_TYPE, return EXP converted to the associated TYPE_REPRESENTATIVE_ARRAY. (handle_pure_attribute, handle_sentinel_attribute, handle_noreturn_attribute, handle_malloc_attribute, handle_vector_size_attribute): Replace uses of qE format by qs. Remove GCC_DIAG_STYLE definition. * gcc-interface/trans.c (gnat_to_gnu) <N_Indexed_Component>: Convert vector input to representative array type on entry. <N_Op_Eq, etc>: Likewise. * gcc-interface/gigi.h (maybe_vector_array): Declare. (VECTOR_TYPE_P): New predicate. * gcc-interface/misc.c (gnat_print_type): Handle VECTOR_TYPE. testsuite/ * gnat.dg/sse_nolib.adb: New testcase. From-SVN: r152165
Diffstat (limited to 'gcc/ada/gcc-interface/trans.c')
-rw-r--r--gcc/ada/gcc-interface/trans.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c
index 2669bde..7037a6e 100644
--- a/gcc/ada/gcc-interface/trans.c
+++ b/gcc/ada/gcc-interface/trans.c
@@ -3832,6 +3832,11 @@ gnat_to_gnu (Node_Id gnat_node)
Node_Id *gnat_expr_array;
gnu_array_object = maybe_implicit_deref (gnu_array_object);
+
+ /* Convert vector inputs to their representative array type, to fit
+ what the code below expects. */
+ gnu_array_object = maybe_vector_array (gnu_array_object);
+
gnu_array_object = maybe_unconstrained_array (gnu_array_object);
/* If we got a padded type, remove it too. */
@@ -4077,6 +4082,8 @@ gnat_to_gnu (Node_Id gnat_node)
&& TYPE_CONTAINS_TEMPLATE_P (gnu_result_type))
gnu_aggr_type
= TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (gnu_result_type)));
+ else if (TREE_CODE (gnu_result_type) == VECTOR_TYPE)
+ gnu_aggr_type = TYPE_REPRESENTATIVE_ARRAY (gnu_result_type);
if (Null_Record_Present (gnat_node))
gnu_result = gnat_build_constructor (gnu_aggr_type, NULL_TREE);
@@ -4272,6 +4279,12 @@ gnat_to_gnu (Node_Id gnat_node)
gnu_rhs = gnat_to_gnu (Right_Opnd (gnat_node));
gnu_type = gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ /* Pending generic support for efficient vector logical operations in
+ GCC, convert vectors to their representative array type view and
+ fallthrough. */
+ gnu_lhs = maybe_vector_array (gnu_lhs);
+ gnu_rhs = maybe_vector_array (gnu_rhs);
+
/* If this is a comparison operator, convert any references to
an unconstrained array value into a reference to the
actual array. */