Message ID | 87lgjjw4ok.fsf@linaro.org |
---|---|
State | Accepted |
Commit | f32c3adb8d77c0ebee112ecf26ae249c8574970e |
Headers | show |
Series | [AArch64] Use aarch64_reg_or_imm instead of nonmemory_operand | expand |
On 06/11/17 20:08, Richard Sandiford wrote: > 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. > Tested on aarch64-elf and aarch64-linux-gnu. OK to install? > > Richard > > OK. R. > 2017-11-06 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. > > Index: gcc/config/aarch64/aarch64.md > =================================================================== > --- gcc/config/aarch64/aarch64.md 2017-11-06 19:39:27.183969328 +0000 > +++ gcc/config/aarch64/aarch64.md 2017-11-06 20:06:43.298665078 +0000 > @@ -3958,7 +3958,7 @@ (define_split > (define_expand "<optab><mode>3" > [(set (match_operand:GPI 0 "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])) > @@ -3994,7 +3994,7 @@ (define_expand "ashl<mode>3" > (define_expand "rotr<mode>3" > [(set (match_operand:GPI 0 "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])) > @@ -4014,7 +4014,7 @@ (define_expand "rotr<mode>3" > (define_expand "rotl<mode>3" > [(set (match_operand:GPI 0 "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 */ >
Index: gcc/config/aarch64/aarch64.md =================================================================== --- gcc/config/aarch64/aarch64.md 2017-11-06 19:39:27.183969328 +0000 +++ gcc/config/aarch64/aarch64.md 2017-11-06 20:06:43.298665078 +0000 @@ -3958,7 +3958,7 @@ (define_split (define_expand "<optab><mode>3" [(set (match_operand:GPI 0 "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])) @@ -3994,7 +3994,7 @@ (define_expand "ashl<mode>3" (define_expand "rotr<mode>3" [(set (match_operand:GPI 0 "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])) @@ -4014,7 +4014,7 @@ (define_expand "rotr<mode>3" (define_expand "rotl<mode>3" [(set (match_operand:GPI 0 "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 */