diff options
author | Alan Lawrence <alan.lawrence@arm.com> | 2016-01-14 16:30:56 +0000 |
---|---|---|
committer | Alan Lawrence <alalaw01@gcc.gnu.org> | 2016-01-14 16:30:56 +0000 |
commit | b56ed680d4715cfc3cf2c4940aef30daec124a41 (patch) | |
tree | fa137cfba7ff589c5cac37f0369840923f730fc2 /gcc/expr.c | |
parent | 59a2f0fa2a8c82c6959889c8bedd15f9e67615d0 (diff) | |
download | gcc-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.c | 39 |
1 files changed, 10 insertions, 29 deletions
@@ -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: |