diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2011-09-28 15:00:10 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2011-09-28 15:00:10 +0000 |
commit | d92aed064711dceb6caf355d064759224ce9b42a (patch) | |
tree | 34a5de335986c583663858a18d6751ce9b02842a /gcc | |
parent | 783465f8e32d04d92b802bb902f9e65cabeddaa6 (diff) | |
download | gcc-d92aed064711dceb6caf355d064759224ce9b42a.zip gcc-d92aed064711dceb6caf355d064759224ce9b42a.tar.gz gcc-d92aed064711dceb6caf355d064759224ce9b42a.tar.bz2 |
neon.md (neon_move_lo_quad_<mode>): Delete.
gcc/
* config/arm/neon.md (neon_move_lo_quad_<mode>): Delete.
(neon_move_hi_quad_<mode>): Likewise.
(move_hi_quad_<mode>, move_lo_quad_<mode>): Use subreg moves.
From-SVN: r179316
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/arm/neon.md | 71 |
2 files changed, 12 insertions, 65 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ad1d82b..98d926a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-09-28 Richard Sandiford <richard.sandiford@linaro.org> + + * config/arm/neon.md (neon_move_lo_quad_<mode>): Delete. + (neon_move_hi_quad_<mode>): Likewise. + (move_hi_quad_<mode>, move_lo_quad_<mode>): Use subreg moves. + 2011-09-28 Nick Clifton <nickc@redhat.com> * config/rx/predicates.md (rx_minmax_operand): New predicate. diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index 5be3cf7..ea09da2 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -1251,66 +1251,14 @@ (const_string "neon_int_1") (const_string "neon_int_5")))] ) -; FIXME: We wouldn't need the following insns if we could write subregs of -; vector registers. Make an attempt at removing unnecessary moves, though -; we're really at the mercy of the register allocator. - -(define_insn "neon_move_lo_quad_<mode>" - [(set (match_operand:ANY128 0 "s_register_operand" "+w") - (vec_concat:ANY128 - (match_operand:<V_HALF> 1 "s_register_operand" "w") - (vec_select:<V_HALF> - (match_dup 0) - (match_operand:ANY128 2 "vect_par_constant_high" ""))))] - "TARGET_NEON" -{ - int dest = REGNO (operands[0]); - int src = REGNO (operands[1]); - - if (dest != src) - return "vmov\t%e0, %P1"; - else - return ""; -} - [(set_attr "neon_type" "neon_bp_simple")] -) - -(define_insn "neon_move_hi_quad_<mode>" - [(set (match_operand:ANY128 0 "s_register_operand" "+w") - (vec_concat:ANY128 - (vec_select:<V_HALF> - (match_dup 0) - (match_operand:ANY128 2 "vect_par_constant_low" "")) - (match_operand:<V_HALF> 1 "s_register_operand" "w")))] - - "TARGET_NEON" -{ - int dest = REGNO (operands[0]); - int src = REGNO (operands[1]); - - if (dest != src) - return "vmov\t%f0, %P1"; - else - return ""; -} - [(set_attr "neon_type" "neon_bp_simple")] -) - (define_expand "move_hi_quad_<mode>" [(match_operand:ANY128 0 "s_register_operand" "") (match_operand:<V_HALF> 1 "s_register_operand" "")] "TARGET_NEON" { - rtvec v = rtvec_alloc (<V_mode_nunits>/2); - rtx t1; - int i; - - for (i=0; i < (<V_mode_nunits>/2); i++) - RTVEC_ELT (v, i) = GEN_INT (i); - - t1 = gen_rtx_PARALLEL (<MODE>mode, v); - emit_insn (gen_neon_move_hi_quad_<mode> (operands[0], operands[1], t1)); - + emit_move_insn (simplify_gen_subreg (<V_HALF>mode, operands[0], <MODE>mode, + GET_MODE_SIZE (<V_HALF>mode)), + operands[1]); DONE; }) @@ -1319,16 +1267,9 @@ (match_operand:<V_HALF> 1 "s_register_operand" "")] "TARGET_NEON" { - rtvec v = rtvec_alloc (<V_mode_nunits>/2); - rtx t1; - int i; - - for (i=0; i < (<V_mode_nunits>/2); i++) - RTVEC_ELT (v, i) = GEN_INT ((<V_mode_nunits>/2) + i); - - t1 = gen_rtx_PARALLEL (<MODE>mode, v); - emit_insn (gen_neon_move_lo_quad_<mode> (operands[0], operands[1], t1)); - + emit_move_insn (simplify_gen_subreg (<V_HALF>mode, operands[0], + <MODE>mode, 0), + operands[1]); DONE; }) |