aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vectorizer.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2005-01-02 00:35:34 -0800
committerRichard Henderson <rth@gcc.gnu.org>2005-01-02 00:35:34 -0800
commit155a821372f0f6533eb7e6f711bb221ce5bc136b (patch)
tree7ac40de5ff75592ffe8a5c47e0137e8c80274d06 /gcc/tree-vectorizer.c
parentbedb9fc04bb56b56d8af671bdfe28cc9052622ec (diff)
downloadgcc-155a821372f0f6533eb7e6f711bb221ce5bc136b.zip
gcc-155a821372f0f6533eb7e6f711bb221ce5bc136b.tar.gz
gcc-155a821372f0f6533eb7e6f711bb221ce5bc136b.tar.bz2
tree-vectorizer.c (vect_analyze_offset_expr): Strip conversions that don't narrow the value.
* tree-vectorizer.c (vect_analyze_offset_expr): Strip conversions that don't narrow the value. Fail for other conversions. From-SVN: r92804
Diffstat (limited to 'gcc/tree-vectorizer.c')
-rw-r--r--gcc/tree-vectorizer.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c
index 5df56df..bd826d0 100644
--- a/gcc/tree-vectorizer.c
+++ b/gcc/tree-vectorizer.c
@@ -1390,7 +1390,22 @@ vect_analyze_offset_expr (tree expr,
enum tree_code code;
tree init, evolution, def_stmt;
- STRIP_NOPS (expr);
+ /* Strip conversions that don't narrow the mode. */
+ while (TREE_CODE (expr) == NOP_EXPR || TREE_CODE (expr) == CONVERT_EXPR)
+ {
+ tree to, ti;
+
+ to = TREE_TYPE (expr);
+ oprnd0 = TREE_OPERAND (expr, 0);
+ ti = TREE_TYPE (oprnd0);
+
+ if (!INTEGRAL_TYPE_P (to) || !INTEGRAL_TYPE_P (ti))
+ return false;
+ if (GET_MODE_SIZE (TYPE_MODE (to)) < GET_MODE_SIZE (TYPE_MODE (ti)))
+ return false;
+
+ expr = oprnd0;
+ }
*step = NULL_TREE;
*misalign = NULL_TREE;