Commit 043d627e by Oleg Endo

re PR target/54089 ([SH] Refactor shift patterns)

	PR target/54089
	* config/sh/sh.md (ashlsi3_d): Do not split if it would result
	in a T_REG clobber.  Correct comment.
	(ashlsi3_n): Correct comment.

From-SVN: r190457
parent f5a53fc7
2012-08-17 Hans-Peter Nilsson <hp@axis.com> 2012-08-16 Oleg Endo <olegendo@gcc.gnu.org>
PR target/54089
* config/sh/sh.md (ashlsi3_d): Do not split if it would result
in a T_REG clobber. Correct comment.
(ashlsi3_n): Correct comment.
2012-08-16 Hans-Peter Nilsson <hp@axis.com>
PR middle-end/54261 PR middle-end/54261
* optabs.c (expand_atomic_fetch_op): Save and restore code when * optabs.c (expand_atomic_fetch_op): Save and restore code when
......
...@@ -3746,7 +3746,8 @@ label: ...@@ -3746,7 +3746,8 @@ label:
(match_operand:SI 2 "shift_count_operand" "r")))] (match_operand:SI 2 "shift_count_operand" "r")))]
"TARGET_DYNSHIFT" "TARGET_DYNSHIFT"
"shld %2,%0" "shld %2,%0"
"&& (CONST_INT_P (operands[2]) && ! sh_dynamicalize_shift_p (operands[2]))" "&& CONST_INT_P (operands[2]) && ! sh_dynamicalize_shift_p (operands[2])
&& ! sh_ashlsi_clobbers_t_reg_p (operands[2])"
[(const_int 0)] [(const_int 0)]
{ {
if (satisfies_constraint_P27 (operands[2])) if (satisfies_constraint_P27 (operands[2]))
...@@ -3759,7 +3760,9 @@ label: ...@@ -3759,7 +3760,9 @@ label:
/* This must happen before reload, otherwise the constant will be moved /* This must happen before reload, otherwise the constant will be moved
into a register due to the "r" constraint, after which this split into a register due to the "r" constraint, after which this split
cannot be done anymore. cannot be done anymore.
Unfortunately the move insn will not always be eliminated. */ Unfortunately the move insn will not always be eliminated.
Also, here we must not create a shift sequence that clobbers the
T_REG. */
emit_move_insn (operands[0], operands[1]); emit_move_insn (operands[0], operands[1]);
gen_shifty_op (ASHIFT, operands); gen_shifty_op (ASHIFT, operands);
DONE; DONE;
...@@ -3782,8 +3785,7 @@ label: ...@@ -3782,8 +3785,7 @@ label:
if (sh_dynamicalize_shift_p (operands[2]) && can_create_pseudo_p ()) if (sh_dynamicalize_shift_p (operands[2]) && can_create_pseudo_p ())
{ {
/* If this pattern was picked and dynamic shifts are supported, switch /* If this pattern was picked and dynamic shifts are supported, switch
to dynamic shift pattern before reload. However, we must not to dynamic shift pattern before reload. */
create a shift sequence that clobbers the T_REG. */
operands[2] = force_reg (SImode, operands[2]); operands[2] = force_reg (SImode, operands[2]);
emit_insn (gen_ashlsi3_d (operands[0], operands[1], operands[2])); emit_insn (gen_ashlsi3_d (operands[0], operands[1], operands[2]));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment