New .md construct: define_insn_and_rewrite

Programming / Compilers / GCC - rsandifo [138bc75d-0d04-0410-961f-82ee72b054a4] - 31 May 2019 16:27 EDT

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/ (while_ult_cc): Rename to... (*while_ult_cc): ...this and use define_insn_and_rewrite. (*cond__any): Turn into define_insn_and_rewrites. Remove separate define_split.

e8c17f8e6fe New .md construct: define_insn_and_rewrite
gcc/ChangeLog | 18 ++++++
gcc/config/aarch64/ | 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(-)


  • Share