aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorAlan Lawrence <alan.lawrence@arm.com>2016-01-14 16:30:56 +0000
committerAlan Lawrence <alalaw01@gcc.gnu.org>2016-01-14 16:30:56 +0000
commitb56ed680d4715cfc3cf2c4940aef30daec124a41 (patch)
treefa137cfba7ff589c5cac37f0369840923f730fc2 /gcc/expr.c
parent59a2f0fa2a8c82c6959889c8bedd15f9e67615d0 (diff)
downloadgcc-b56ed680d4715cfc3cf2c4940aef30daec124a41.zip
gcc-b56ed680d4715cfc3cf2c4940aef30daec124a41.tar.gz
gcc-b56ed680d4715cfc3cf2c4940aef30daec124a41.tar.bz2
Tidy: remove reduc_xxx_optab migration code.
* doc/md.texi (reduc_smin_@var{m}, reduc_smax_@var{m}, reduc_umin_@var{m}, reduc_umax_@var{m}, reduc_splus_@var{m}, reduc_uplus_@var{m}): Remove. * expr.c (expand_expr_real_2): Remove expansion path for reduc_[us](min|max|plus) optabs. * optabs-tree.c (scalar_reduc_to_vector): Remove. * optabs-tree.h (scalar_reduc_to_vector): Remove. * optabs.def (reduc_smax_optab, reduc_smin_optab, reduc_splus_optab, reduc_umax_optab, reduc_umin_optab, reduc_uplus_optab): Remove. * tree-vect-loop.c (vectorizable_reduction): Remove test for reduc_[us](min|max|plus) optabs. From-SVN: r232373
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c39
1 files changed, 10 insertions, 29 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 0a1c425..8123cc2 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -9162,35 +9162,16 @@ expand_expr_real_2 (sepops ops, rtx target, machine_mode tmode,
this_optab = optab_for_tree_code (code, type, optab_default);
machine_mode vec_mode = TYPE_MODE (TREE_TYPE (treeop0));
- if (optab_handler (this_optab, vec_mode) != CODE_FOR_nothing)
- {
- struct expand_operand ops[2];
- enum insn_code icode = optab_handler (this_optab, vec_mode);
-
- create_output_operand (&ops[0], target, mode);
- create_input_operand (&ops[1], op0, vec_mode);
- if (maybe_expand_insn (icode, 2, ops))
- {
- target = ops[0].value;
- if (GET_MODE (target) != mode)
- return gen_lowpart (tmode, target);
- return target;
- }
- }
- /* Fall back to optab with vector result, and then extract scalar. */
- this_optab = scalar_reduc_to_vector (this_optab, type);
- temp = expand_unop (vec_mode, this_optab, op0, NULL_RTX, unsignedp);
- gcc_assert (temp);
- /* The tree code produces a scalar result, but (somewhat by convention)
- the optab produces a vector with the result in element 0 if
- little-endian, or element N-1 if big-endian. So pull the scalar
- result out of that element. */
- int index = BYTES_BIG_ENDIAN ? GET_MODE_NUNITS (vec_mode) - 1 : 0;
- int bitsize = GET_MODE_UNIT_BITSIZE (vec_mode);
- temp = extract_bit_field (temp, bitsize, bitsize * index, unsignedp,
- target, mode, mode, false);
- gcc_assert (temp);
- return temp;
+ struct expand_operand ops[2];
+ enum insn_code icode = optab_handler (this_optab, vec_mode);
+
+ create_output_operand (&ops[0], target, mode);
+ create_input_operand (&ops[1], op0, vec_mode);
+ expand_insn (icode, 2, ops);
+ target = ops[0].value;
+ if (GET_MODE (target) != mode)
+ return gen_lowpart (tmode, target);
+ return target;
}
case VEC_UNPACK_HI_EXPR: