------- Comment #2 from dorit at gcc dot gnu dot org 2007-09-10 09:08 ------- Testing this patch (it's a bug in the fix for PR33301. I accidentally treated TYPE_SIZE_UNIT as a constant, whereas it's really a tree...):
Index: tree-vect-analyze.c =================================================================== *** tree-vect-analyze.c (revision 128322) --- tree-vect-analyze.c (working copy) *************** vect_determine_vectorization_factor (loo *** 242,252 **** operation = GIMPLE_STMT_OPERAND (stmt, 1); if (TREE_CODE (operation) == NOP_EXPR || TREE_CODE (operation) == CONVERT_EXPR ! || TREE_CODE (operation) == WIDEN_MULT_EXPR) { tree rhs_type = TREE_TYPE (TREE_OPERAND (operation, 0)); ! if (TYPE_SIZE_UNIT (rhs_type) < TYPE_SIZE_UNIT (scalar_type)) ! scalar_type = TREE_TYPE (TREE_OPERAND (operation, 0)); } if (vect_print_dump_info (REPORT_DETAILS)) --- 242,253 ---- operation = GIMPLE_STMT_OPERAND (stmt, 1); if (TREE_CODE (operation) == NOP_EXPR || TREE_CODE (operation) == CONVERT_EXPR ! || TREE_CODE (operation) == WIDEN_MULT_EXPR) { tree rhs_type = TREE_TYPE (TREE_OPERAND (operation, 0)); ! if (TREE_INT_CST_LOW (TYPE_SIZE_UNIT (rhs_type)) < ! TREE_INT_CST_LOW (TYPE_SIZE_UNIT (scalar_type))) ! scalar_type = rhs_type; } if (vect_print_dump_info (REPORT_DETAILS)) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33373