https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117804

--- Comment #1 from Robin Dapp <rdapp at gcc dot gnu.org> ---
The problem is that at combine-time we don't know the range of cA, cB etc
anymore so we can't just combine those to the two-operand widening pattern.

I have a local patch that introduces a widening FMA operation at gimple-level
(we wanted to do this anyway for more of our widening ops).  Once this is in
place, I just used a match.pd pattern that can access range information in
order to combine a single operand widening .FMA and the other operand with
range information into a WIDEN_FMA.

This is how it looks like locally:

.L5:
        vsetvli a5,a2,e8,mf2,ta,ma
        vle8.v  v4,0(t4)
        vle8.v  v3,0(t3)
        vmv1r.v v1,v2
        vwmaccu.vv      v1,v4,v8
        vle8.v  v4,0(t5)
        vwmaccu.vv      v1,v3,v7
        vle8.v  v3,0(t1)
        vwmaccu.vv      v1,v4,v6
        vwmaccu.vv      v1,v3,v5
        vnsrl.wi        v1,v1,6
        vse8.v  v1,0(a4)

Reply via email to