<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/111906>111906</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [PowerPC] missing VSX FMA Mutation optimize in some case for -schedule-ppc-vsx-fma-mutation-early
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:PowerPC,
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            diggerlin
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          diggerlin
      </td>
    </tr>
</table>

<pre>
     Description:
 
 
bash> cat test.c
```
   extern "C" {
#include "altivec.h"

void vsexp (float* __restrict __output_a,float* __restrict var1321In_a,int* __restrict n)
{
  int j;
# pragma nounroll
  for(j=j*4;j<*n;j++) {
    vector float var1321;
    vector unsigned char var1326;
 vector unsigned char var1323=(vector unsigned char) {63,184,170,59,63,184,170,59,63,184,170,59,63,184,170,59};
    vector unsigned char var1325=(vector unsigned char) {69,195,244,0,69,195,244,0,69,195,244,0,69,195,244,0};
 var1321=vec_xl(0,var1321In_a+4*(j));
    var1326=(vector unsigned char) vec_madd((vector float)(var1321), (vector float)(var1323), (vector float)(var1325));
     vec_xst((vector float)var1326,0,__output_a+4*(j));
}
  return;
}
} //extern "C"
```
 
 when compile with `-mllvm -disable-ppc-vsx-fma-mutation=false -mllvm -schedule-ppc-vsx-fma-mutation-early`
 
 it generate the asm as  (the loop has 6 instructions)
 
```
 .vsexp:
# %bb.0: # %entry
        lwz r5, 0(r5)
        cmpwi   r5, 1
 bltlr   cr0
# %bb.1:                                # %for.body.preheader
        xxspltiw vs0, 1069066811
        mtctr r5
        li r5, 0
        .align  5
L..BB0_2: # %for.body
                                        # =>This Inner Loop Header: Depth=1
        lxvx vs1, r4, r5
        xxspltiw vs2, 1170469888
        xvmaddasp vs2, vs1, vs0
        stxvx vs2, r3, r5
        addi r5, r5, 16
        bdnz L..BB0_2
# %bb.3: # %for.end
        blr
```

obviously , there is more efficient code as which pull ` xxspltiw vs2, 1170469888` put the loop and 
change the `xvmaddasp ` to `xvmaddmsp' , the asm code as  (the  loop only has 5 instructions)


```
.vsexp:
# %bb.0: # %entry
        lwz r5, 0(r5)
        cmpwi   r5, 1
        bltlr   cr0
# %bb.1:                                # %for.body.preheader
        xxspltiw vs0, 1069066811
        xxspltiw vs1, 1170469888
        mtctr r5
        li r5, 0
        .align 5
L..BB0_2:                               # %for.body
 # =>This Inner Loop Header: Depth=1
        lxvx vs2, r4, r5
        xvmaddmsp vs2, vs0, vs1
        stxvx vs2, r3, r5
        addi r5, r5, 16
        bdnz L..BB0_2
# %bb.3: # %for.end
        blr
```


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUV1Gv2rgS_jXmZQRybBKSBx6A9OhWaqVK9-pq35DjGOKzjh3ZTuD0168cEiCUnna30moXRQ6xP898M_Y3cZhz8qiFWKN4iwgp5fEorJIaEYLifMZaXxm7vnbPClO-rSEXjlvZeGk0ohuEc4Q3MLkVzFWIfgDOPHjh_IJf-lGCh-uCBhBnL6wGRMgOEQJotR2QhErNVVuKMMaUl53giyoQu4z3bWdkCZ0T5wYQSQ_KMI_IBvZ7K5y3knvY703rm9bvGSK7Z4CO2YiS6KPuEVI_jmtEssHlyA1Aag-viN64QmPZsWagTautUWoEHoxFJH1FNH9FZLNEdPuK6A6Rje7_km1_ZXBnG6AT3BsLPduR39XZHaDV_eqVwCtmB2ByA76DoojmiKTPEAObhCKyi9JlaFcYkV2cIbL71d5V_rNxxD9mGJxEWYzIjiyDl-Djlzrv2V3TnneC788KkTTMmuyW7RKRTb-8JAvXJLRxNd6LIpiuWVkikt5QwybNQs9AIjzs4B0I_TEkfkKyJ3B2_qn_MYJLuu519L24QwIH21b41upvR9AqB0ReEHmZCv95eRhup0po4KZupBJwkr4ClOB5rVRXw7yUjhVKzJuGzzt3nh9qNq9bzy7VKT8w5QSMYMcrUbbfQc8Fs-rtG-_Sw1FoYZkX4CsBzNXAHIRch0dlTAMVc5CA1M7blgdb7lo14Hloi75qXctnKCGIxEWxwIhuYHgU2tu3u-UCAHX6CjZsWsCIpDa--Rl-vG5OEmAARcNgobyyYdTiR4dRcPiD34A-GLsIr4BFY0UlWCns1Pf57Brl5Qk6h3vvOMlwkqRRNMXVnnsbGE5Dk9fIJv0LpuRRAwzwT4vFdov35C5PI6_pvJ8KiuaIfvhfJR181FpY-BSW8z-X2OgGctH4CtH8IQB17s7QuSiwtcu-jb-bCtKnIlrhZZKlafqA60IBYK4ZgYPVkMEJ0PmLzx5k6TOfrCzHFA6rn0wBRam_wjV_D_uAPiRU6PJhtrJP9_KlNUUnTevUGwTPvhJWgHRQGytAHA6SS6E9cFMGBcGpkryCplUqaPm9bCUYmtbDVWpMl4OkeMX08aJJlOBbIsMUb259tWsQWY20ev2ONEYRX0wbrd56KcfPpTxppzn4m-V8XZF_kqrvcNF7W_4vqf-J-P9UcGMx_mXNk3c0P263m5bxKOl_lZZn5ZqWGc3YTKyjFUnjDGOCZ9U6FmWZLA88i2JGDzFJWBpFq7JMSx4VSRbP5JpgsoxwhKMspku84ISW5YpmaVTgtEhjtMSiZlItwgt5YexxJp1rxTqKogwnM8UKodzwOVIw_ntgTjdfzEnYL_1BoT8uaHGCft7woWLXwdy8aI8OLbGSzrubAy-96r9wRitxDrV0Tuoj_P-_v8HL5w18Hs4AYBova_lVgNTgTC2AMyfCMf6nDg-z1qp15X3jQinozzlH6au2WHBTI_ISOA23eWPNq-AekZc-EofIy5CEbk3-CAAA__801q3y">