Commit f32c3adb by Richard Sandiford Committed by Richard Sandiford

[AArch64] Use aarch64_reg_or_imm instead of nonmemory_operand

Some of the shift expanders accepted nonmemory_operands but were only
able to handle register_operands or CONST_INTs.  This is probably
academic without SVE, since we're not likely to see shifts by other
types of constant (const_wide_ints, consts, etc).  But for SVE,
it's possible for a vectorised shift induction to have a CONST_POLY_INT
shift amount.

This patch makes the expanders use aarch64_reg_or_imm instead.

2017-11-07  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
	* config/aarch64/aarch64.md (ashl<mode>3, ashr<mode>3, lshr<mode>3)
	(rotr<mode>3, rotl<mode>3): Use aarch64_reg_or_imm instead of
	nonmmory_operand.

From-SVN: r254499
parent 56ccfbd6
2017-11-07 Richard Sandiford <richard.sandiford@linaro.org>
* config/aarch64/aarch64.md (ashl<mode>3, ashr<mode>3, lshr<mode>3)
(rotr<mode>3, rotl<mode>3): Use aarch64_reg_or_imm instead of
nonmmory_operand.
2017-11-07 Richard Biener <rguenther@suse.de> 2017-11-07 Richard Biener <rguenther@suse.de>
* match.pd: Fix build. * match.pd: Fix build.
...@@ -3958,7 +3958,7 @@ ...@@ -3958,7 +3958,7 @@
(define_expand "<optab><mode>3" (define_expand "<optab><mode>3"
[(set (match_operand:GPI 0 "register_operand") [(set (match_operand:GPI 0 "register_operand")
(ASHIFT:GPI (match_operand:GPI 1 "register_operand") (ASHIFT:GPI (match_operand:GPI 1 "register_operand")
(match_operand:QI 2 "nonmemory_operand")))] (match_operand:QI 2 "aarch64_reg_or_imm")))]
"" ""
{ {
if (CONST_INT_P (operands[2])) if (CONST_INT_P (operands[2]))
...@@ -3994,7 +3994,7 @@ ...@@ -3994,7 +3994,7 @@
(define_expand "rotr<mode>3" (define_expand "rotr<mode>3"
[(set (match_operand:GPI 0 "register_operand") [(set (match_operand:GPI 0 "register_operand")
(rotatert:GPI (match_operand:GPI 1 "register_operand") (rotatert:GPI (match_operand:GPI 1 "register_operand")
(match_operand:QI 2 "nonmemory_operand")))] (match_operand:QI 2 "aarch64_reg_or_imm")))]
"" ""
{ {
if (CONST_INT_P (operands[2])) if (CONST_INT_P (operands[2]))
...@@ -4014,7 +4014,7 @@ ...@@ -4014,7 +4014,7 @@
(define_expand "rotl<mode>3" (define_expand "rotl<mode>3"
[(set (match_operand:GPI 0 "register_operand") [(set (match_operand:GPI 0 "register_operand")
(rotatert:GPI (match_operand:GPI 1 "register_operand") (rotatert:GPI (match_operand:GPI 1 "register_operand")
(match_operand:QI 2 "nonmemory_operand")))] (match_operand:QI 2 "aarch64_reg_or_imm")))]
"" ""
{ {
/* (SZ - cnt) % SZ == -cnt % SZ */ /* (SZ - cnt) % SZ == -cnt % SZ */
......
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