Hi! On Wed, Aug 11, 2021 at 11:02:25AM -0500, Pat Haugen wrote: > * config/rs6000/rs6000-cpus.def (ISA_3_1_MASKS_SERVER): Add new flag. > (POWERPC_MASKS): Likewise.
"Add OPTION_MASK_P10_FUSION_2STORE", instead. > +static bool > +is_fusable_store (rtx_insn *insn, rtx *str_mem) > +{ > + /* Insn must be a non-prefixed base+disp form store. */ > + if (is_store_insn (insn, str_mem) > + && get_attr_prefixed (insn) == PREFIXED_NO > + && get_attr_update (insn) == UPDATE_NO > + && get_attr_indexed (insn) == INDEXED_NO) > + { > + /* Further restictions by mode and size. */ (typo, "restrictions") > + machine_mode mode = GET_MODE (*str_mem); > + HOST_WIDE_INT size; > + if (MEM_SIZE_KNOWN_P (*str_mem)) > + size = MEM_SIZE (*str_mem); > + else > + return false; if (!MEM_SIZE_KNOWN_P (*str_mem)) return false; machine_mode mode = GET_MODE (*str_mem); HOST_WIDE_INT size = MEM_SIZE (*str_mem); > +static int > +power10_sched_reorder (rtx_insn **ready, int lastpos) > +{ > + rtx mem1; > + > + /* Do store fusion during sched2 only. */ > + if (!reload_completed) > + return cached_can_issue_more; Should that just be "return false"? > + { > + int pos; > + rtx mem2; > + > + /* A fusable store was just scheduled. Scan the ready list for another > + store that it can fuse with. */ > + pos = lastpos; Declare the var not before here? > + while (pos >= 0) > + { And mem2 not before in this block? > +/* { dg-final { scan-assembler-times {stw 4,4\(3\)\n\tstw 6,8\(3\)} 1 { > target lp64 } } } */ > +/* { dg-final { scan-assembler-times {stw 4,4\(3\)\n\tstw 6,8\(3\)} 2 { > target ilp32 } } } */ > +/* { dg-final { scan-assembler-times {std 4,8\(3\)\n\tstd 6,16\(3\)} 1 { > target lp64 } } } */ > +/* { dg-final { scan-assembler-times {stfd 1,8\(3\)\n\tstfd 3,16\(3\)} 1 } } > */ This is probably okay because p10 is not supported on any config that uses register names. > +/* { dg-final { scan-assembler-not {stw 4,4\(3\)\n\tstw 6,8\(3\)} } } */ > +/* { dg-final { scan-assembler-not {std 4,8\(3\)\n\tstd 6,16\(3\)} { target > lp64 } } } */ > +/* { dg-final { scan-assembler-not {stfd 1,8\(3\)\n\tstfd 3,16\(3\)} } } */ Heh. A little fragile, the compiler could reorder the stores for other reasons, but the best we can do here I guess. Okay for trunk with the trivial cleanups. Thanks! Segher