------- Comment #1 from ubizjak at gmail dot com 2007-06-05 21:04 ------- In _.101t.vect, we have:
vect_var_.36_43 = VEC_UNPACK_FLOAT_LO_EXPR < vect_vec_iv_.40_41 > ; vect_var_.36_44 = VEC_UNPACK_FLOAT_HI_EXPR < vect_vec_iv_.40_41 > ; D.2004_4 = (double) x_13; vect_var_.41_46 = vect_cst_.42_45 / vect_var_.36_43; vect_var_.41_47 = vect_cst_.42_45 / vect_var_.36_44; D.2005_5 = 1.6e+1 / D.2004_4; vect_var_.43_48 = VEC_PACK_FIX_TRUNC_EXPR < vect_var_.41_46, vect_var_.41_47 > ; D.2006_6 = (unsigned int) D.2005_5; But vectlower2 pass creates: vect_var_.36_43 = VEC_UNPACK_FLOAT_LO_EXPR < vect_vec_iv_.40_41 > ; vect_var_.36_44 = VEC_UNPACK_FLOAT_HI_EXPR < vect_vec_iv_.40_41 > ; D.2004_4 = (double) x_13; vect_var_.41_46 = vect_cst_.42_45 / vect_var_.36_43; vect_var_.41_47 = vect_cst_.42_45 / vect_var_.36_44; D.2005_5 = 1.6e+1 / D.2004_4; D.2092_24 = BIT_FIELD_REF <vect_var_.41_46, 64, 0>; D.2093_65 = BIT_FIELD_REF <vect_var_.41_47, 64, 0>; D.2094_66 = VEC_PACK_FIX_TRUNC_EXPR < D.2092_24, D.2093_65 > ; D.2095_67 = BIT_FIELD_REF <vect_var_.41_46, 64, 64>; D.2096_68 = BIT_FIELD_REF <vect_var_.41_47, 64, 64>; D.2097_69 = VEC_PACK_FIX_TRUNC_EXPR < D.2095_67, D.2096_68 > ; D.2098_70 = VIEW_CONVERT_EXPR<vector unsigned int>({D.2094_66, D.2097_69}); vect_var_.43_48 = D.2098_70; D.2006_6 = (unsigned int) D.2005_5; I suspect that the code around VEC_PACK_FIX_TRUNC_EXPR is correct. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32216