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

    <tr>
        <th>Summary</th>
        <td>
            [X86] llvm.vp.fma intrinsic is not properly handled?
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            bug,
            backend:X86,
            vectorization
      </td>
    </tr>

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

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

<pre>
    The lowering of `llvm.vp.fma.*` crashes for X86:

repro.ll
```
define <16 x float> @test.vp.fma(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> %mask,
                                 i32 zeroext %evl) {
 %d = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %a,
 <16 x float> %b,
 <16 x float> %c,
 <16 x i1> %mask,
 i32 %evl)
   ret <16 x float> %d
}

declare <16 x float> @llvm.vp.fma.v16f32(<16 x float> %a,
 <16 x float> %b,
                                        <16 x float> %c,
                                        <16 x i1> %mask,
 i32 %evl)
```

```
llc repro.ll -mcpu=cascadelake
LLVM ERROR: Cannot select: t37: v16f32 = vp_fma t2, t4, t6, t35, Constant:i32<16>
```

It looks like the `llvm.vp.fma` is not properly expanded by expandvp:

```
*** IR Dump After Expand vector predication intrinsics (expandvp) *** 
define <16 x float> @test.vp.fma(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> %mask, i32 zeroext %evl) #0 {                                     
 %.splatinsert = insertelement <16 x i32> poison, i32 %evl, i64 0 
  %.splat = shufflevector <16 x i32> %.splatinsert, <16 x i32> poison, <16 x i32> zeroinitializer 
  %1 = icmp ult <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>, %.splat      
  %2 = and <16 x i1> %1, %mask 
  %d = call <16 x float> @llvm.vp.fma.v16f32(<16 x float> %a, <16 x float> %b, <16 x float> %c, <16 x i1> %2, i32 16)                                           
  ret <16 x float> %d 
}
```
@rofirrim, @simoll, @qcolombet, @topperc
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVlGPozYQ_jXmZXSRsYGwDzzsJRvppKsqraqqb5UxQ-KuwdQ26d7--soESEqSva10lYoiGMaZb-abGY8Rzql9i1iQ9DNJt5Ho_cHYopKiFFpjVJrqW_HLAUGbv9Cqdg-mBpJRrY_N6tit6kasCHskGQVphTugg9pY-C3PCH8kdEvoeLfYWbPSetRldPwNrxXWqkUgfBNn8Aq1NsIT_gQkoR6dHx0Rll__g6WCsM0NU5aW9xbk5YKKR20j3Athm1NE8L1LcQZvaA2--mCMR03YA5D159GesLQCwrcghdY3mV2m8BhnNWfvEJxQ79B8Z1leL9-hHCjNVOY0WPQ3cauxkuvtZZkrlFrY26X8Dwh_8PpOXv4lysfTt2jzm0qtJUybAz41susJ30rhpKhQixc8_evr119_gqfn55-fCX-EjWhb48GhRumDwvN1eJyyOrTdsfu9bgR4FnrdJ8M9G-48DY-NaZ0XbbBWnA3UCH96J-wvHrQxLw60ekHwB1yMgTAClIMQV2dNh1Z_A3ztRFthBeUkH7vFXFj6YuMPvjzDtm86eKw9WngarOGI0hsLncVKSeGVaUG13qrWKemAsHz2EjbjjPX_mzL35gfjNAyRj_XjPGlWrtPCq9ah9UP1TyJqbLA9b9-h0E_QGeVMOwUxOd-AyhKgE-oZdgB0h76uNY75XwAuIvgH76XLxUJIgWqVV0KrN7SX3uMTE9l00OsrEoRvQvR0ohFPApsEPgnJJKSTkE3CehLySXiYAc_QM3Y8g8czejzDx2nYQYHjnLrLOgX1aW-GTr5qjHi0DA1yafIjT5Ef0cDnFGShYz9-TZzuHiiwPFEWoyGh1tTKWtUMgSXUqcZoPb78KY02TYl-fPem69DKqCp49cAfRIRFnK1TTuMsi6NDUco4p3kq1lyKfJ0-UIlVHedxnksuJCaRKhhlnDLKaMwTFq8wy8sqoayseCp4mpGEYiOUXg01MHYfKed6LDKaZEmkRYnaDd9VjJX9nrCQuSAL-YJtRfhj-EqatKedpd6GoRa06TayRUD-VPZ7FyqtnHdnX155PXy2BZR0CxeNcJ6JVxP5INpKY0X4LuqtLg7edy5MZLYjbLdX_tCXK2kawnYBb3x86qz5I5w0bDcwdITtBpJ_BwAA__8NmbcD">