Sure. https://godbolt.org/z/8857KzTno Failed to match this instruction: (set (reg:VNx2DF 134 [ vect__31.47 ]) (fma:VNx2DF (neg:VNx2DF (float_extend:VNx2DF (reg:VNx2SF 136 [ vect__28.44 ]))) (reg:VNx2DF 150 [ vect__8.12 ]) (reg:VNx2DF 171 [ vect__29.45 ]))) juzhe.zhong@rivai.ai From: Jeff Law Date: 2023-06-29 02:16 To: Juzhe-Zhong; gcc-patches CC: kito.cheng; kito.cheng; palmer; palmer; rdapp.gcc Subject: Re: [PATCH] RISC-V: Support vfwnmacc/vfwmsac/vfwnmsac combine lowering On 6/28/23 05:55, Juzhe-Zhong wrote: > Similar to vfwmacc. Add combine patterns as follows: > > For vfwnmsac: > 1. (set (reg) (fma (neg (float_extend (reg))) (float_extend (reg))) (reg) ))) > 2. (set (reg) (fma (neg (float_extend (reg))) (reg) (reg) ))) > > For vfwmsac: > 1. (set (reg) (fma (float_extend (reg)) (float_extend (reg))) (neg (reg)) ))) > 2. (set (reg) (fma (float_extend (reg)) (reg) (neg (reg)) ))) > > For vfwnmacc: > 1. (set (reg) (fma (neg (float_extend (reg))) (float_extend (reg))) (neg (reg)) ))) > 2. (set (reg) (fma (neg (float_extend (reg))) (reg) (neg (reg)) ))) > > gcc/ChangeLog: > > * config/riscv/autovec-opt.md (*double_widen_fnma): New pattern. > (*single_widen_fnma): Ditto. > (*double_widen_fms): Ditto. > (*single_widen_fms): Ditto. > (*double_widen_fnms): Ditto. > (*single_widen_fnms): Ditto. > > + > +;; This helps to match ext + fnma. > +(define_insn_and_split "*single_widen_fnma" > + [(set (match_operand:VWEXTF 0 "register_operand") > + (fma:VWEXTF > + (neg:VWEXTF > + (float_extend:VWEXTF > + (match_operand: 2 "register_operand"))) > + (match_operand:VWEXTF 3 "register_operand") > + (match_operand:VWEXTF 1 "register_operand")))] I'd like to understand this better. It looks like it's meant to be a bridge to another pattern. However, it looks like it would be a 4->1 pattern without needing a bridge. So I'd like to know why that code isn't working. Can you send the before/after combine dumps which show this bridge pattern being used? The same concern exists with the other bridge patterns, but I don't think I need to see the before/after for each of them. Thanks, Jeff