RFC: Very long alternative lists for RTL patterns like move
Michael Meissner
meissner@linux.vnet.ibm.com
Mon Mar 14 20:48:00 GMT 2016
On Mon, Mar 14, 2016 at 02:55:40PM -0500, Segher Boessenkool wrote:
> On Mon, Mar 14, 2016 at 01:35:30PM -0600, Jeff Law wrote:
> > >(define_insn "mov<mode>_hardfloat"
> > > [(set (match_operand:FMOVE32 0 "nonimmediate_operand"
> > > "=!r,!r,m,f,<f32_vsx>,<f32_vsx>,!r,<f32_lr>,<f32_lr2>,<f32_sm>,<f32_sm2>,<f32_av>,Z,?<f32_dm>,?r,*c*l,!r,*h")
> > > (match_operand:FMOVE32 1 "input_operand"
> > > "r,m,r,f,<f32_vsx>,j,j,<f32_lm>,<f32_lm2>,<f32_sr>,<f32_sr2>,Z,<f32_av>,r,<f32_dm>,r,h,0"))]
> > > "(gpc_reg_operand (operands[0], <MODE>mode)
> > > || gpc_reg_operand (operands[1], <MODE>mode))
> > > && (TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_SINGLE_FLOAT)"
>
> We can get rid of the very many different mov patterns (or at least limit
> it somewhat) by not doing a condition like this, instead using the
> "enabled" attribute?
>
> > >The problem is you have count each alternative to get things to line up.
> > >
> > >One thing that I do when editing rs6000.md is make the columns line up
> > >between
> > >the different operands, and then edit it with a very wide emacs screen, for
> > >example:
>
> You can split a string over multiple lines just fine, as well. That again
> becomes unreadable if you need too many lines, of course :-(
Yes you can split it over several lines, but that doesn't help much.
Then you have
(define_insn "mov<mode>_hardfloat"
[(set (match_operand:FMOVE32 0 "nonimmediate_operand" "=!r,
!r,
m,
f,
<f32_vsx>,
<f32_vsx>,
!r,
<f32_lr>,
<f32_lr2>,
<f32_sm>,
<f32_sm2>,
<f32_av>,
Z,
?<f32_dm>,
?r,
*c*l,
!r,
*h")
(match_operand:FMOVE32 1 "input_operand" "r,
m,
r,
f,
<f32_vsx>,
j,
j,
<f32_lm>,
<f32_lm2>,
<f32_sr>,
<f32_sr2>,
Z,
<f32_av>,
r,
<f32_dm>,
r,
h,
0"))]
"(gpc_reg_operand (operands[0], <MODE>mode)
|| gpc_reg_operand (operands[1], <MODE>mode))
&& (TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_SINGLE_FLOAT)"
...
And of course if we do add new syntax (or allow multiple moves), it will make
it harder to backport things to older releases.
--
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email: meissner@linux.vnet.ibm.com, phone: +1 (978) 899-4797
More information about the Gcc-help
mailing list