diff options
author | Richard Henderson <rth@redhat.com> | 2012-07-10 01:25:20 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2012-07-10 01:25:20 -0700 |
commit | 00f07b86e7d7c80695fb655738b89d893b54fc9a (patch) | |
tree | 92ca34cfac26d6253011a1acbd60501bca8cdf7a /gcc/tree-vect-patterns.c | |
parent | 9283726f7623410f58bf23da7d7589c7b261b449 (diff) | |
download | gcc-00f07b86e7d7c80695fb655738b89d893b54fc9a.zip gcc-00f07b86e7d7c80695fb655738b89d893b54fc9a.tar.gz gcc-00f07b86e7d7c80695fb655738b89d893b54fc9a.tar.bz2 |
Move vector highpart emulation to the optabs layer
* expmed.c (expmed_mult_highpart): Rename from expand_mult_highpart.
(expmed_mult_highpart_optab): Rename from expand_mult_highpart_optab.
* optabs.c (can_mult_highpart_p): New.
(expand_mult_highpart): New.
* expr.c (expand_expr_real_2) [MULT_HIGHPART_EXPR): Use it.
* tree-vect-generic.c (expand_vector_operations_1): Don't expand
by pieces if can_mult_highpart_p.
(expand_vector_divmod): Use can_mult_highpart_p and always
generate MULT_HIGHPART_EXPR.
* tree-vect-patterns.c (vect_recog_divmod_pattern): Likewise.
* tree-vect-stmts.c (vectorizable_operation): Likewise.
From-SVN: r189407
Diffstat (limited to 'gcc/tree-vect-patterns.c')
-rw-r--r-- | gcc/tree-vect-patterns.c | 23 |
1 files changed, 3 insertions, 20 deletions
diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c index 3f57e5d..ab9e927 100644 --- a/gcc/tree-vect-patterns.c +++ b/gcc/tree-vect-patterns.c @@ -1642,10 +1642,8 @@ vect_recog_divmod_pattern (VEC (gimple, heap) **stmts, loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_vinfo); bb_vec_info bb_vinfo = STMT_VINFO_BB_VINFO (stmt_vinfo); optab optab; - tree dummy, q; - enum tree_code dummy_code; + tree q; int dummy_int, prec; - VEC (tree, heap) *dummy_vec; stmt_vec_info def_stmt_vinfo; if (!is_gimple_assign (last_stmt)) @@ -1814,23 +1812,8 @@ vect_recog_divmod_pattern (VEC (gimple, heap) **stmts, || prec > HOST_BITS_PER_WIDE_INT) return NULL; - optab = optab_for_tree_code (MULT_HIGHPART_EXPR, vectype, optab_default); - if (optab == NULL - || optab_handler (optab, TYPE_MODE (vectype)) == CODE_FOR_nothing) - { - tree witype = build_nonstandard_integer_type (prec * 2, - TYPE_UNSIGNED (itype)); - tree vecwtype = get_vectype_for_scalar_type (witype); - - if (vecwtype == NULL_TREE) - return NULL; - if (!supportable_widening_operation (WIDEN_MULT_EXPR, last_stmt, - vecwtype, vectype, - &dummy, &dummy, &dummy_code, - &dummy_code, &dummy_int, - &dummy_vec)) - return NULL; - } + if (!can_mult_highpart_p (TYPE_MODE (vectype), TYPE_UNSIGNED (itype))) + return NULL; STMT_VINFO_PATTERN_DEF_SEQ (stmt_vinfo) = NULL; |