diff options
author | irar <irar@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-01-12 14:41:44 +0000 |
---|---|---|
committer | irar <irar@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-01-12 14:41:44 +0000 |
commit | 6175d24ae148600e2f194fe9e5c27861d8411807 (patch) | |
tree | 3467c5cd21b186bcb2ee3ad3559793fbeb64f44e /gcc/tree-vect-patterns.c | |
parent | 3e0111a5340a6a020a2f8b4e4bd139aac2527e1a (diff) |
PR tree-optimization/51799
* tree-vect-patterns.c (vect_recog_over_widening_pattern): Check
that the last operation is a type demotion.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183126 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-vect-patterns.c')
-rw-r--r-- | gcc/tree-vect-patterns.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c index 46d43ce44ad..34ac2e5329f 100644 --- a/gcc/tree-vect-patterns.c +++ b/gcc/tree-vect-patterns.c @@ -1186,13 +1186,15 @@ vect_recog_over_widening_pattern (VEC (gimple, heap) **stmts, { use_lhs = gimple_assign_lhs (use_stmt); use_type = TREE_TYPE (use_lhs); - /* Support only type promotion or signedess change. Check that USE_TYPE - is not bigger than the original type. */ + /* Support only type demotion or signedess change. */ if (!INTEGRAL_TYPE_P (use_type) - || TYPE_PRECISION (new_type) > TYPE_PRECISION (use_type) - || TYPE_PRECISION (type) < TYPE_PRECISION (use_type)) + || TYPE_PRECISION (type) <= TYPE_PRECISION (use_type)) return NULL; + /* Check that NEW_TYPE is not bigger than the conversion result. */ + if (TYPE_PRECISION (new_type) > TYPE_PRECISION (use_type)) + return NULL; + if (TYPE_UNSIGNED (new_type) != TYPE_UNSIGNED (use_type) || TYPE_PRECISION (new_type) != TYPE_PRECISION (use_type)) { |