Re: [PATCH v4 4/5] RISC-V: Add macro-fusion pair recognition
Jeffrey Law <[email protected]> Wed, 5 Aug 2026 17:36:51 -0600
| Newsgroups | gmane.comp.gcc.patches |
|---|---|
| Message-ID | <[email protected]> |
On 7/29/2026 1:17 AM, Jin Ma wrote: > Add recognition for the following macro-fusion pairs: > > RISCV_FUSE_SUB_SEQZ - sub/subw + seqz/snez > RISCV_FUSE_ADD_LD - add type + integer load > RISCV_FUSE_ADD_ST - add type + integer store > RISCV_FUSE_ADD_ANDI - add/addi type + andi type > RISCV_FUSE_ANDI_ADD - andi type + add/addi type > RISCV_FUSE_LOGIC_LOGIC - logic + logic > RISCV_FUSE_SLLI_SRLI - slli/slliw + srli/srliw > RISCV_FUSE_SRLI_ADD - srli/srliw + add type > RISCV_FUSE_PREINDEX_LD - addi type + load > RISCV_FUSE_PREINDEX_ST - addi type + store > RISCV_FUSE_POSTINDEX_LD - load + addi type > RISCV_FUSE_POSTINDEX_ST - store + addi type > RISCV_FUSE_LDST_PAIR_INC - ascending integer load/store pair > RISCV_FUSE_LDST_PAIR_DEC - descending integer load/store pair > RISCV_FUSE_FLDFST_PAIR_INC - ascending FP load/store pair > RISCV_FUSE_FLDFST_PAIR_DEC - descending FP load/store pair > > Leave the pairs disabled by default and mark positive checks as XFAIL. > > gcc/ChangeLog: > > * config/riscv/riscv-fusion.cc: Include insn-attr.h. > (riscv_fusion_same_source_p, riscv_set_is_addw_p, > riscv_set_is_word_add_p, riscv_set_is_addiw_p, riscv_insn_is_mv_li_p, > riscv_insn_is_addi_type_p, riscv_insn_is_nonword_addi_type_p, > riscv_insn_is_add_type_p, riscv_insn_is_add_addi_p, > riscv_insn_is_sub_type_p, riscv_insn_is_andi_type_p, > riscv_insn_is_logical_type_p, riscv_set_is_slli_p, > riscv_set_is_slliw_p, riscv_set_is_srli_p, riscv_set_is_srliw_p, > riscv_set_is_word_shift_p, riscv_fusion_extract_address, > riscv_fusion_load_store, riscv_insn_is_load_store_type_p): New > helper functions. > (riscv_fuse_sub_seqz, riscv_fuse_add_andi, riscv_fuse_add_ldst_1, > riscv_fuse_add_ld, riscv_fuse_add_st, riscv_fuse_andi_add, > riscv_fuse_logic_logic, riscv_fuse_slli_srli, riscv_fuse_srli_add, > riscv_fuse_preindex_ldst_1, riscv_fuse_preindex_ld, > riscv_fuse_preindex_st, riscv_fuse_postindex_ldst_1, > riscv_fuse_postindex_ld, riscv_fuse_postindex_st, > riscv_fuse_ldst_pair_1, riscv_fuse_ldst_pair_inc, > riscv_fuse_ldst_pair_dec, riscv_fuse_fldfst_pair_inc, > riscv_fuse_fldfst_pair_dec): New function implementing the > corresponding RISCV_FUSE_* pair. > (riscv_fusion_table): Add entries for the new pairs. > * config/riscv/riscv-protos.h (enum riscv_fusion_pairs): Add pair > flags. This is getting pretty large and tedious to try and work through from a review standpoint. I hate to ask, but can we break this down into individual cases to aid review? jeff