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

    <tr>
        <th>Summary</th>
        <td>
            [LV] cannot prove it is safe to reorder floating-point operations llvm.fmuladd
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    * test **fmuladd_reduce.ll**: https://gcc.godbolt.org/z/deW1bWqd1
  > `reassoc contract @llvm.fmuladd.f64` can be decomposed with a `fmul` and `fadd`, and now loop succeeds vectorization with `fmul` and `fadd`, but fails  vectorization with `@llvm.fmuladd.f64`
```
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
target triple = "aarch64-unknown-linux-gnu"

; Function Attrs: argmemonly nofree norecurse nosync nounwind readonly uwtable vscale_range(1,16)
define dso_local double @fnmadd(ptr nocapture noundef readonly %a, ptr nocapture noundef readonly %b, ptr nocapture noundef readonly %c, i32 noundef %n) local_unnamed_addr #0 {
entry:
  %cmp11 = icmp sgt i32 %n, 0
  br i1 %cmp11, label %for.body.preheader, label %for.cond.cleanup

for.body.preheader:                               ; preds = %entry
  %wide.trip.count = zext i32 %n to i64
  br label %for.body

for.cond.cleanup:                                 ; preds = %for.body, %entry
  %d.0.lcssa = phi double [ 0.000000e+00, %entry ], [ %add5, %for.body ]
  ret double %d.0.lcssa

for.body: ; preds = %for.body.preheader, %for.body
 %indvars.iv = phi i64 [ 0, %for.body.preheader ], [ %indvars.iv.next, %for.body ]
  %d.012 = phi double [ 0.000000e+00, %for.body.preheader ], [ %add5, %for.body ]
  %arrayidx = getelementptr inbounds double, ptr %a, i64 %indvars.iv
  %0 = load double, ptr %arrayidx, align 8
  %arrayidx2 = getelementptr inbounds double, ptr %c, i64 %indvars.iv
  %1 = load double, ptr %arrayidx2, align 8
 ; %mul = fmul reassoc contract double %1, %0
  %arrayidx4 = getelementptr inbounds double, ptr %b, i64 %indvars.iv
  %2 = load double, ptr %arrayidx4, align 8
  %add = fadd fast double %2, %d.012
 ; %add5 = fadd reassoc contract double %add, %mul
  %add5 = call reassoc contract double @llvm.fmuladd.f64 (double %0, double %1, double %add)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body 
}

declare double @llvm.fmuladd.f64(double, double, double)

attributes #0 = { vscale_range(1,16) "target-features"="+neon,+sve,+v8.6a" "unsafe-fp-math"="true" }
```

* It still fails  vectorization for `@llvm.fmuladd.f64` even wtih attribute `fast`, https://gcc.godbolt.org/z/vsfW5cz4x
 > report `Not vectorizing: Found an unidentified PHI   %d.012 = phi double [ 0.000000e+00, %for.body.preheader ], [ %add5, %for.body ]` with local compile built with -g and the command is: _opt -passes=loop-vectorize -mtriple=aarch64-none-linux-gnu -mattr=+sve fmuladd_reduce.ll -S -debug-only=loop-vectorize_
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8V8mO47wRfhr6UpAgUV4PPtjt38gAQRBggMyxQZElmQlFarjY3f30ASlvbbuXufzGjJoia_tqYZWYc7LViEsyWZPJZsSC3xm73DeiaUa1Ea9LQlfg0XkgdEXoqumCYkI8WxSBY67UsE2qFey87x2pVoRuCd22nOetEbVRPje2JXT7RuhW4K-y_vVblKTYkGIFQKq_gEwLi8w5w4Eb7S3jHsi4UGrf5Ud9eTMdk2kBnGmoEQRy0_XGoYCD9DtgUUYkjTRMi_TKhCDTgtCntKPNAZQxPbjAOaJwsEfujZVvzEujBzmfSqmDh4ZJ5eAD1sc2D0jjYviXXj2zLXoQzDPFXk3wQKoNEEox60i1wkzOSbWK_yuayXJKqlV6xLfpmFSr6TiTJY0EJZ1nuqLD3s-4R-k7Jd7KXuFJAWOW76bjLOj_aXPQmZI6vGStDme247NawzZonhCuvLcxtMBs22FntHoFbRqLCNpY5MG6uHKvmoM2QR-kFmCRiUQZDp7VCmHvOFP4bJlukdB5SehTOSV0MSgU2EiNIJx5VoYzBcKEyEXGRaO7GAY6770FbTjrfbCYNAlsLooInbAYqa_J6u-R8UgmK3o-JHSiCV1AsvA5aM06FM9MCAuEVgWQ2XpAg9rb11gMpzynE971ZZnCIHnXg2t9Ej2IfILiRFpbkOWZIR4pVqOKO42xeazKvLe4QybQ3h1zo0XOFTId-ut4PmCtVvD5L-ZAb2OtDMkzGVBdIB2kwDzmV85N0EMSv-HLBRh4AzFhL9DusNwa-Q7AlyY-MPIsmD49slnkRa64cyzR9zt5TrTJGoq8SD8kdF0U1xKATDbpfbJOeSbE5Hh80pcojnpsLO6j2CuVjwISMX6I4X2g77wWd6QWe2ZdLvdnQHI6HtDcMF2k3aC5yMg1vvhPgA1oSvpt532p-wtPRgpr2asUL0lnix4Vdqh9LF-p61iZ7mjGqapPF0FyxDW8K6lFEqcMEw-YjxpT81Cy1TB_YA_9I4P4VwaV3zCI3lsUc4fQSRdU4o_NB-7a6SUXy6OviweAxn8EqP4KEP0GoPEHLhZiQBMXDXPXCOgRQcrD906IuXTh-8QLqZ08Hf32Xu8ggDP1iRvvGz0QOr-IT8l_4_Mb5YsrrTfllwyIAHQ4gHaHB06mT1BeCcAX6dO9qY2_dBj8fc95Xd83t_dd_7mW-nmfedSj4HjZzTbXt55ArpjFTzx5duTFaderxbU05r2VdfDoju033p6z9YeTRhyAhqkoa5DFtu_i2FNt4pOuNZrYiglduz0Oi_08nzJCYzejQTvWYNb0Wcf87szobcBEcUb6ftY7PukKfnhwXir1eIxsjP14igTco4aDlzs4gx7mU-eP8-l35u-9a35N-Nv45Vw3f4HF3lgfhf3L-LNNUrexM21j8QPTELQUqL1sJAr49z9-wN_ZC6bFMGQPg2Gc_aVCqINUfjjI2jSw-x3G0y6uZRpYn03vIeuZc-hItYlfANkJIkLWDcMxqTanuVgbjZehGGKovU2BjkkBd98_kP2ETGAd2ixOjXc6nkdiWYlFtWAjXJazckzni2JBR7vlTExni4bPCs6bmi4WVbHAaS0E0no2nwk6kkta0HExpvNiRscTms95XbFpWRYVo7SiMzIusGNS5SlhjG1H0rmAy0VRzRajVJEufdlRqvEA6TCm7WQzssvIk9WhdTHhpPPuIsVLr9In4T__QybxLtTxXumt2SNID9JBLIQ421k0NoaxUYZ5qdusN1J7MD3alNQOrnN5FKxa3qSp9LtQ59x0hG4j7fFP1lvzX-Se0G0y2xG6TbD-HwAA__8XtnX7">