Hi, 
 
Could a gatekeeper please review the fix for bug 592?
It happens when the initializer list for vector typed variable is empty. The 
code used to get the element type from initializer, when it is empty, the code 
gets a null pointer access. Now it is changed to use the vector MTYPE to get 
its 
element type.
 
__attribute__ ((vector_size (sizeof (double) * 4))) double d1 = { 1., 2 };
__attribute__ ((vector_size (sizeof (double) * 4))) double d2 = { };
__attribute__ ((vector_size (sizeof (float) * 4))) float f1 = { 1., 2 };
__attribute__ ((vector_size (sizeof (float) * 4))) float f2 = { };
__attribute__ ((vector_size (sizeof (int) * 4))) int a = { 1, 2 };
__attribute__ ((vector_size (sizeof (int) * 4))) int c = { };

Thanks,
-Xiaohua
 
Index: common/com/mtypes.cxx
===================================================================
--- common/com/mtypes.cxx       (revision 3336)
+++ common/com/mtypes.cxx       (working copy)
@@ -482,7 +482,6 @@
   return Machine_Prev_Alignment[type];
 }
-#if defined(TARG_X8664)
 /* ====================================================================
  *
  * TYPE_ID Mtype_vector_elemtype(TYPE_ID)
@@ -494,6 +493,7 @@
 TYPE_ID  Mtype_vector_elemtype(TYPE_ID type)
 {
   switch (type) {
+#if defined(TARG_X8664)
     case MTYPE_V32F8:
     case MTYPE_V16F8:
       return MTYPE_F8;
@@ -526,9 +526,9 @@
     case MTYPE_V8I1:
     case MTYPE_M8I1:
       return MTYPE_I1;
+#endif
     default:
       return type;
   }
 }
-#endif
Index: common/com/mtypes.h
===================================================================
--- common/com/mtypes.h (revision 3336)
+++ common/com/mtypes.h (working copy)
@@ -317,9 +317,7 @@
 extern TYPE_ID  Mtype_next_alignment( TYPE_ID);
 extern TYPE_ID  Mtype_prev_alignment( TYPE_ID);
-#if defined (TARG_X8664)
 extern TYPE_ID  Mtype_vector_elemtype( TYPE_ID);
-#endif
 #ifdef __cplusplus
 }
Index: wgen/wgen_decl.cxx
===================================================================
--- wgen/wgen_decl.cxx  (revision 3336)
+++ wgen/wgen_decl.cxx  (working copy)
@@ -2351,13 +2351,14 @@
   init = gs_tree_vector_cst_elts (init_list);
-  gs_t size = gs_type_size (gs_tree_type (gs_tree_value (init)));
-  Is_True (gs_tree_code (size) == GS_INTEGER_CST,
-           ("WGEN_Add_Aggregate_Init_Vector: Vector of variable-sized 
units?"));
-
-  UINT esize = gs_get_integer_value(size) / BITSPERBYTE;
+  // find the element size from vector mtype
+  TY_IDX vector_type = Get_TY(gs_tree_type(init_list));
+  Is_True (MTYPE_is_vector(TY_mtype(vector_type)),
+            ("WGEN_Add_Aggregate_Init_Vector: invalid vector type"));
+  TYPE_ID elem_mtype = Mtype_vector_elemtype(TY_mtype(vector_type));
+  UINT esize = MTYPE_byte_size(elem_mtype);
   UINT nunits = vec_size / esize;
-  gs_code_t code = gs_tree_code (gs_tree_value (init));
+  gs_code_t code = MTYPE_is_integral(elem_mtype) ? GS_INTEGER_CST : 
GS_REAL_CST;
   for (i = 0; 
        init;   



      
------------------------------------------------------------------------------
This SF.net Dev2Dev email is sponsored by:

Show off your parallel programming skills.
Enter the Intel(R) Threading Challenge 2010.
http://p.sf.net/sfu/intel-thread-sfd
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to