This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/45902] CPU2006 benchmark sphinx3 fails with vectorization
- From: "rguenth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Sun, 10 Oct 2010 13:27:43 +0000
- Subject: [Bug tree-optimization/45902] CPU2006 benchmark sphinx3 fails with vectorization
- Auto-submitted: auto-generated
- References: <bug-45902-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45902
--- Comment #9 from Richard Guenther <rguenth at gcc dot gnu.org> 2010-10-10 13:26:39 UTC ---
(In reply to comment #8)
> The problem is in creation of constant operands for SLP, and is caused by my
> patch r155882, which takes the type for the constant from the constant itself.
> This was needed for pointers, but is bad for other cases, like shift of shorts
> that is treated as int here, causing wrong code generation.
>
> I am going to test this patch now:
>
> Index: tree-vect-slp.c
> ===================================================================
> --- tree-vect-slp.c (revision 164987)
> +++ tree-vect-slp.c (working copy)
> @@ -1894,13 +1894,20 @@ vect_get_constant_vectors (slp_tree slp_
> }
>
> if (CONSTANT_CLASS_P (op))
> - constant_p = true;
> + {
> + constant_p = true;
> + if (POINTER_TYPE_P (TREE_TYPE (gimple_assign_lhs (stmt))))
> + vector_type = get_vectype_for_scalar_type (TREE_TYPE (op));
> + else
> + vector_type = STMT_VINFO_VECTYPE (stmt_vinfo);
> + }
> else
> - constant_p = false;
> + {
> + constant_p = false;
> + vector_type = get_vectype_for_scalar_type (TREE_TYPE (op));
> + }
>
> - vector_type = get_vectype_for_scalar_type (TREE_TYPE (op));
> gcc_assert (vector_type);
> -
> nunits = TYPE_VECTOR_SUBPARTS (vector_type);
>
> /* NUMBER_OF_COPIES is the number of times we need to use the same values in
I certainly would prefer unconditional use of STMT_VINFO_VECTYPE (stmt_vinfo).
Why should that not work?