Commit 261ba0c8 by Ira Rosen Committed by Dorit Nuzman

tree-vectorizer.c (vect_analyze_offset_expr): Use ssizetype instead sizetype.

2005-01-31  Ira Rosen  <irar@il.ibm.com>

        * tree-vectorizer.c (vect_analyze_offset_expr): Use ssizetype instead
        sizetype.
        (vect_get_base_and_offset): Use ssizetype instead sizetype. Remove
        redundant fold. Fix misalignment for MINUS_EXPR.
        (vect_compute_data_ref_alignment): Use ssizetype instead sizetype.
        (vect_analyze_pointer_ref_access): Likewise.
        (vect_get_memtag_and_dr): Likewise.

From-SVN: r94480
parent 2ae1ac77
2005-01-31 Ira Rosen <irar@il.ibm.com>
* tree-vectorizer.c (vect_analyze_offset_expr): Use ssizetype instead
sizetype.
(vect_get_base_and_offset): Use ssizetype instead sizetype. Remove
redundant fold. Fix misalignment for MINUS_EXPR.
(vect_compute_data_ref_alignment): Use ssizetype instead sizetype.
(vect_analyze_pointer_ref_access): Likewise.
(vect_get_memtag_and_dr): Likewise.
2005-01-31 Richard Henderson <rth@redhat.com> 2005-01-31 Richard Henderson <rth@redhat.com>
* config/i386/i386.c (absnegsf2_mixed): Remove all of the # hackery. * config/i386/i386.c (absnegsf2_mixed): Remove all of the # hackery.
......
...@@ -1407,12 +1407,12 @@ vect_analyze_offset_expr (tree expr, ...@@ -1407,12 +1407,12 @@ vect_analyze_offset_expr (tree expr,
{ {
tree oprnd0; tree oprnd0;
tree oprnd1; tree oprnd1;
tree left_offset = size_zero_node; tree left_offset = ssize_int (0);
tree right_offset = size_zero_node; tree right_offset = ssize_int (0);
tree left_misalign = size_zero_node; tree left_misalign = ssize_int (0);
tree right_misalign = size_zero_node; tree right_misalign = ssize_int (0);
tree left_step = size_zero_node; tree left_step = ssize_int (0);
tree right_step = size_zero_node; tree right_step = ssize_int (0);
enum tree_code code; enum tree_code code;
tree init, evolution; tree init, evolution;
...@@ -1429,9 +1429,9 @@ vect_analyze_offset_expr (tree expr, ...@@ -1429,9 +1429,9 @@ vect_analyze_offset_expr (tree expr,
1. Constant. */ 1. Constant. */
if (TREE_CODE (expr) == INTEGER_CST) if (TREE_CODE (expr) == INTEGER_CST)
{ {
*initial_offset = fold_convert (sizetype, expr); *initial_offset = fold_convert (ssizetype, expr);
*misalign = fold_convert (sizetype, expr); *misalign = fold_convert (ssizetype, expr);
*step = size_zero_node; *step = ssize_int (0);
return true; return true;
} }
...@@ -1459,14 +1459,14 @@ vect_analyze_offset_expr (tree expr, ...@@ -1459,14 +1459,14 @@ vect_analyze_offset_expr (tree expr,
return false; return false;
if (TREE_CODE (init) == INTEGER_CST) if (TREE_CODE (init) == INTEGER_CST)
*misalign = fold_convert (sizetype, init); *misalign = fold_convert (ssizetype, init);
else else
/* Not constant, misalignment cannot be calculated. */ /* Not constant, misalignment cannot be calculated. */
*misalign = NULL_TREE; *misalign = NULL_TREE;
*initial_offset = fold_convert (sizetype, init); *initial_offset = fold_convert (ssizetype, init);
*step = evolution ? fold_convert (sizetype, evolution) : size_zero_node; *step = evolution ? fold_convert (ssizetype, evolution) : ssize_int (0);
return true; return true;
} }
...@@ -1511,8 +1511,8 @@ vect_analyze_offset_expr (tree expr, ...@@ -1511,8 +1511,8 @@ vect_analyze_offset_expr (tree expr,
/* If the left side contains variable that cannot be substituted with /* If the left side contains variable that cannot be substituted with
constant, we check if the right side is a multiple of ALIGNMENT. */ constant, we check if the right side is a multiple of ALIGNMENT. */
if (integer_zerop (size_binop (TRUNC_MOD_EXPR, right_offset, if (integer_zerop (size_binop (TRUNC_MOD_EXPR, right_offset,
vectype_alignment))) fold_convert (ssizetype, vectype_alignment))))
*misalign = size_zero_node; *misalign = ssize_int (0);
else else
/* If the remainder is not zero or the right side isn't constant, we /* If the remainder is not zero or the right side isn't constant, we
can't compute misalignment. */ can't compute misalignment. */
...@@ -1551,7 +1551,7 @@ vect_analyze_offset_expr (tree expr, ...@@ -1551,7 +1551,7 @@ vect_analyze_offset_expr (tree expr,
} }
/* Compute offset. */ /* Compute offset. */
*initial_offset = fold_convert (sizetype, *initial_offset = fold_convert (ssizetype,
fold (build2 (code, TREE_TYPE (left_offset), fold (build2 (code, TREE_TYPE (left_offset),
left_offset, left_offset,
right_offset))); right_offset)));
...@@ -1602,9 +1602,9 @@ vect_get_base_and_offset (struct data_reference *dr, ...@@ -1602,9 +1602,9 @@ vect_get_base_and_offset (struct data_reference *dr,
tree *step, tree *step,
bool *base_aligned_p) bool *base_aligned_p)
{ {
tree this_offset = size_zero_node; tree this_offset = ssize_int (0);
tree this_misalign = size_zero_node; tree this_misalign = ssize_int (0);
tree this_step = size_zero_node; tree this_step = ssize_int (0);
tree base = NULL_TREE; tree base = NULL_TREE;
tree next_ref; tree next_ref;
tree oprnd0, oprnd1; tree oprnd0, oprnd1;
...@@ -1624,9 +1624,9 @@ vect_get_base_and_offset (struct data_reference *dr, ...@@ -1624,9 +1624,9 @@ vect_get_base_and_offset (struct data_reference *dr,
/* These cases end the recursion: */ /* These cases end the recursion: */
case VAR_DECL: case VAR_DECL:
case PARM_DECL: case PARM_DECL:
*initial_offset = size_zero_node; *initial_offset = ssize_int (0);
*step = size_zero_node; *step = ssize_int (0);
*misalign = size_zero_node; *misalign = ssize_int (0);
if (DECL_ALIGN (expr) >= TYPE_ALIGN (vectype)) if (DECL_ALIGN (expr) >= TYPE_ALIGN (vectype))
*base_aligned_p = true; *base_aligned_p = true;
return expr; return expr;
...@@ -1644,16 +1644,16 @@ vect_get_base_and_offset (struct data_reference *dr, ...@@ -1644,16 +1644,16 @@ vect_get_base_and_offset (struct data_reference *dr,
else else
{ {
*base_aligned_p = true; *base_aligned_p = true;
*misalign = size_zero_node; *misalign = ssize_int (0);
} }
*initial_offset = size_zero_node; *initial_offset = ssize_int (0);
*step = size_zero_node; *step = ssize_int (0);
return expr; return expr;
case INTEGER_CST: case INTEGER_CST:
*initial_offset = fold_convert (sizetype, expr); *initial_offset = fold_convert (ssizetype, expr);
*misalign = fold_convert (sizetype, expr); *misalign = fold_convert (ssizetype, expr);
*step = size_zero_node; *step = ssize_int (0);
return expr; return expr;
/* These cases continue the recursion: */ /* These cases continue the recursion: */
...@@ -1679,11 +1679,13 @@ vect_get_base_and_offset (struct data_reference *dr, ...@@ -1679,11 +1679,13 @@ vect_get_base_and_offset (struct data_reference *dr,
&this_offset, &this_misalign, &this_offset, &this_misalign,
&this_step, base_aligned_p); &this_step, base_aligned_p);
/* Offset was already computed in vect_analyze_pointer_ref_access. */ /* Offset was already computed in vect_analyze_pointer_ref_access. */
this_offset = size_zero_node; this_offset = ssize_int (0);
if (!base) if (!base)
this_misalign = NULL_TREE; this_misalign = NULL_TREE;
else
this_misalign = size_binop (TREE_CODE (expr), ssize_int (0),
this_misalign);
next_ref = oprnd0; next_ref = oprnd0;
break; break;
...@@ -1712,7 +1714,7 @@ vect_get_base_and_offset (struct data_reference *dr, ...@@ -1712,7 +1714,7 @@ vect_get_base_and_offset (struct data_reference *dr,
/* Add bit position to OFFSET and MISALIGN. */ /* Add bit position to OFFSET and MISALIGN. */
bit_pos_in_bytes = size_int (pbitpos/BITS_PER_UNIT); bit_pos_in_bytes = ssize_int (pbitpos/BITS_PER_UNIT);
/* Check that there is no remainder in bits. */ /* Check that there is no remainder in bits. */
if (pbitpos%BITS_PER_UNIT) if (pbitpos%BITS_PER_UNIT)
{ {
...@@ -1720,8 +1722,8 @@ vect_get_base_and_offset (struct data_reference *dr, ...@@ -1720,8 +1722,8 @@ vect_get_base_and_offset (struct data_reference *dr,
fprintf (dump_file, "bit offset alignment."); fprintf (dump_file, "bit offset alignment.");
return NULL_TREE; return NULL_TREE;
} }
this_offset = fold (size_binop (PLUS_EXPR, bit_pos_in_bytes, this_offset = size_binop (PLUS_EXPR, bit_pos_in_bytes,
fold_convert (sizetype, this_offset))); fold_convert (ssizetype, this_offset));
if (this_misalign) if (this_misalign)
this_misalign = size_binop (PLUS_EXPR, this_misalign, bit_pos_in_bytes); this_misalign = size_binop (PLUS_EXPR, this_misalign, bit_pos_in_bytes);
...@@ -1743,8 +1745,7 @@ vect_get_base_and_offset (struct data_reference *dr, ...@@ -1743,8 +1745,7 @@ vect_get_base_and_offset (struct data_reference *dr,
*step = size_binop (PLUS_EXPR, *step, this_step); *step = size_binop (PLUS_EXPR, *step, this_step);
*initial_offset = fold (build2 (PLUS_EXPR, TREE_TYPE (*initial_offset), *initial_offset = size_binop (PLUS_EXPR, *initial_offset, this_offset);
*initial_offset, this_offset));
if (vect_debug_details (NULL)) if (vect_debug_details (NULL))
{ {
...@@ -4201,7 +4202,7 @@ vect_compute_data_ref_alignment (struct data_reference *dr) ...@@ -4201,7 +4202,7 @@ vect_compute_data_ref_alignment (struct data_reference *dr)
&& DECL_ALIGN (base) >= TYPE_ALIGN (vectype))); && DECL_ALIGN (base) >= TYPE_ALIGN (vectype)));
/* Alignment required, in bytes: */ /* Alignment required, in bytes: */
alignment = size_int (TYPE_ALIGN (vectype)/BITS_PER_UNIT); alignment = ssize_int (TYPE_ALIGN (vectype)/BITS_PER_UNIT);
/* Modulo alignment. */ /* Modulo alignment. */
misalign = size_binop (TRUNC_MOD_EXPR, misalign, alignment); misalign = size_binop (TRUNC_MOD_EXPR, misalign, alignment);
...@@ -4667,14 +4668,14 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read) ...@@ -4667,14 +4668,14 @@ vect_analyze_pointer_ref_access (tree memref, tree stmt, bool is_read)
return NULL; return NULL;
} }
STMT_VINFO_VECT_STEP (stmt_info) = fold_convert (sizetype, step); STMT_VINFO_VECT_STEP (stmt_info) = fold_convert (ssizetype, step);
if (TREE_CODE (init) == PLUS_EXPR if (TREE_CODE (init) == PLUS_EXPR
|| TREE_CODE (init) == MINUS_EXPR) || TREE_CODE (init) == MINUS_EXPR)
STMT_VINFO_VECT_INIT_OFFSET (stmt_info) = STMT_VINFO_VECT_INIT_OFFSET (stmt_info) =
fold (size_binop (TREE_CODE (init), size_zero_node, size_binop (TREE_CODE (init), ssize_int (0),
fold_convert (sizetype, TREE_OPERAND (init, 1)))); fold_convert (ssizetype, TREE_OPERAND (init, 1)));
else else
STMT_VINFO_VECT_INIT_OFFSET (stmt_info) = size_zero_node; STMT_VINFO_VECT_INIT_OFFSET (stmt_info) = ssize_int (0);
indx_access_fn = indx_access_fn =
build_polynomial_chrec (loopnum, integer_zero_node, integer_one_node); build_polynomial_chrec (loopnum, integer_zero_node, integer_one_node);
...@@ -4833,9 +4834,9 @@ vect_get_memtag_and_dr (tree memref, tree stmt, bool is_read, ...@@ -4833,9 +4834,9 @@ vect_get_memtag_and_dr (tree memref, tree stmt, bool is_read,
return NULL_TREE; return NULL_TREE;
} }
offset = size_zero_node; offset = ssize_int (0);
misalign = size_zero_node; misalign = ssize_int (0);
step = size_zero_node; step = ssize_int (0);
/* Analyze data-ref, find its base, initial offset from the base, step, /* Analyze data-ref, find its base, initial offset from the base, step,
and alignment. */ and alignment. */
...@@ -4850,8 +4851,8 @@ vect_get_memtag_and_dr (tree memref, tree stmt, bool is_read, ...@@ -4850,8 +4851,8 @@ vect_get_memtag_and_dr (tree memref, tree stmt, bool is_read,
vect_analyze_pointer_ref_access, we combine the values here. */ vect_analyze_pointer_ref_access, we combine the values here. */
if (STMT_VINFO_VECT_INIT_OFFSET (stmt_info)) if (STMT_VINFO_VECT_INIT_OFFSET (stmt_info))
STMT_VINFO_VECT_INIT_OFFSET (stmt_info) = STMT_VINFO_VECT_INIT_OFFSET (stmt_info) =
fold (build2 (PLUS_EXPR, TREE_TYPE (offset), offset, size_binop (PLUS_EXPR, offset,
STMT_VINFO_VECT_INIT_OFFSET (stmt_info))); STMT_VINFO_VECT_INIT_OFFSET (stmt_info));
else else
STMT_VINFO_VECT_INIT_OFFSET (stmt_info) = offset; STMT_VINFO_VECT_INIT_OFFSET (stmt_info) = offset;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment