Several SVE patterns need define_insn_and_splits that generate the same insn_code, but with different operands. That's probably a niche requirement, but it's cropping up often enough on the ACLE branch that I think it would be good to have a syntactic sugar for it.
This patch therefore adds a new construct called define_insn_and_rewrite. It's basically a define_insn_and_split with an implicit split pattern, obtained by copying the insn pattern and replacing match_operands with match_dups and match_operators with match_op_dups.
2019-05-31 Richard Sandiford
- doc/md.texi: Document define_insn_and_rewrite.
- rtl.def (DEFINE_INSN_AND_REWRITE): New rtx code.
- gensupport.c (queue_elem): Update comment. (replace_operands_with_dups): New function. (gen_rewrite_sequence): Likewise. (process_rtx): Handle DEFINE_INSN_AND_REWRITE.
- read-rtl.c (apply_subst_iterator): Likewise. (add_condition_to_rtx, named_rtx_p): Likewise. (rtx_reader::read_rtx_operand): Likewise.
- config/aarch64/aarch64-sve.md (while_ult
e8c17f8e6fe New .md construct: define_insn_and_rewrite
gcc/ChangeLog | 18 ++++++
gcc/config/aarch64/aarch64-sve.md | 87 ++++++++++++-----------------
gcc/doc/md.texi | 113 ++++++++++++++++++++++++++++++++++++++
gcc/gensupport.c | 74 +++++++++++++++++++++++--
gcc/read-rtl.c | 13 +++--
gcc/rtl.def | 6 ++
6 files changed, 249 insertions(+), 62 deletions(-)