diff options
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/tree-vect-analyze.c | 9 |
2 files changed, 15 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b84cbb5..7c520a2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,11 @@ 2005-03-16 Steven Bosscher <stevenb@suse.de> + Dorit Naishlos <dorit@il.ibm.com> + + * tree-vect-analyze.c (vect_enhance_data_refs_alignment): Copy + UNITS_PER_SIMD_WORD to a local variable to avoid a "division by zero" + error. + +2005-03-16 Steven Bosscher <stevenb@suse.de> * tree-inline.c (walk_type_fields, walk_tree, walk_tree_without_duplicates): Move from here... diff --git a/gcc/tree-vect-analyze.c b/gcc/tree-vect-analyze.c index d1b274b..df2e882 100644 --- a/gcc/tree-vect-analyze.c +++ b/gcc/tree-vect-analyze.c @@ -1013,6 +1013,13 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo) struct data_reference *dr0 = NULL; unsigned int i, j; + /* Sigh, a hack to make targets that do not define UNITS_PER_SIMD_WORD + bootstrap. Copy UNITS_PER_SIMD_WORD to a local variable to avoid a + "division by zero" error. This error would be issued because we + we do "... % UNITS_PER_SIMD_WORD" below, and UNITS_PER_SIMD_WORD + defaults to 0 if it is not defined by the target. */ + int units_per_simd_word = UNITS_PER_SIMD_WORD; + /* This pass will require a cost model to guide it whether to apply peeling or versioning or a combination of the two. For example, the scheme that @@ -1167,7 +1174,7 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo) int drsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (DR_REF (dr)))); DR_MISALIGNMENT (dr) += npeel * drsize; - DR_MISALIGNMENT (dr) %= UNITS_PER_SIMD_WORD; + DR_MISALIGNMENT (dr) %= units_per_simd_word; } else DR_MISALIGNMENT (dr) = -1; |