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

    <tr>
        <th>Summary</th>
        <td>
            SROA miscompilation
        </td>
    </tr>

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

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

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

<pre>
    The problematic IR is

```
; Function Attrs: mustprogress nofree noinline norecurse nosync nounwind willreturn memory(none) uwtable 
define dso_local noundef nofpclass(nan inf) float @_Z17add_floatConstantff(float noundef nofpclass(nan inf) %input, float noundef nofpclass(nan inf) %constant) {
entry: 
  %add = fadd fast float %constant, %input 
  ret float %add 

 
define <4 x float> @_ZGVbN4vv__Z17add_floatConstantff(<4 x float> %0, <4 x float> %1) { 
funcEntry: 
  %2 = alloca <4 x float>, align 16 
  %3 = alloca i8, align 1 
  store i8 0, ptr %3, align 1 
  br label %loopHeader 
 
loopHeader: ; preds = %loopBody, %funcEntry 
  %4 = load i8, ptr %3, align 1 
  %5 = icmp slt i8 %4, 4 
  br i1 %5, label %loopBody, label %funcExit 
 
loopBody:                                         ; preds = %loopHeader 
  %6 = extractelement <4 x float> %0, i8 %4 
  %7 = extractelement <4 x float> %1, i8 %4 
  %8 = call float @_Z17add_floatConstantff(float %6, float %7) 
  %9 = load <4 x float>, ptr %2, align 16 
  %10 = insertelement <4 x float> %9, float %8, i8 %4 
  store <4 x float> %9, ptr %2, align 16 
  %11 = add i8 %4, 1 
  store i8 %11, ptr %3, align 1 
  br label %loopHeader 
 
funcExit: ; preds = %loopHeader 
  %12 = load <4 x float>, ptr %2, align 16 
  ret <4 x float> %12 

```

When running the sroa-pass like this `opt  --passes="sroa" -S input.ll -o output.ll` this yields the following IR:

```
; ModuleID = 'sroa_problem.ll'
source_filename = "sroa_problem.ll"

define dso_local noundef nofpclass(nan inf) float @_Z17add_floatConstantff(float noundef nofpclass(nan inf) %input, float noundef nofpclass(nan inf) %constant) {
entry:
  %add = fadd fast float %constant, %input
  ret float %add
}

define <4 x float> @_ZGVbN4vv__Z17add_floatConstantff(<4 x float> %0, <4 x float> %1) {
funcEntry:
  br label %loopHeader

loopHeader: ; preds = %loopBody, %funcEntry
  %.0 = phi i8 [ 0, %funcEntry ], [ %7, %loopBody ]
  %2 = icmp slt i8 %.0, 4
  br i1 %2, label %loopBody, label %funcExit

loopBody: ; preds = %loopHeader
  %3 = extractelement <4 x float> %0, i8 %.0
  %4 = extractelement <4 x float> %1, i8 %.0
  %5 = call float @_Z17add_floatConstantff(float %3, float %4)
  %6 = insertelement <4 x float> undef, float %5, i8 %.0
  %7 = add i8 %.0, 1
  br label %loopHeader

funcExit:                                         ; preds = %loopHeader
  ret <4 x float> undef
}
```

IMO, this is not correct, especially the return statement `ret <4 x float> undef` looks suspicious. The issue can be reproduced with 535247841d8635bc998ec0ec4871ea22f27caba6, so also https://alive2.llvm.org/ce/z/hmoTmF
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcV01v4zYT_jX0hYhBUZJtHXyQ4_X75rBdILtogV4CihzZ7FKkQFJJ3F9fkFJsy7Gz2bTooYGBSOR8PDOcmUdkzsmtBliifIXy9YR1fmfs8t44aMGDnVRG7JffdoBbayoFDfOS47t7LB0iZfjNyPAjJUpXeNNp7qXRuPTeOpSWuOmcb63ZWnAOa1NbAKyN1Erq8GCBd9aFJ7fXHGvT6SepBX6SSlnwndW4gcbYPaILbTQgWuDuybNKAUakFFAHO8KZB2U4U9GAgDp4arlizgU9prHUdVCtlWEeo4w8_J7MmRAPceHWaOeZ9nWN6KIX-YEdRHOp284jeovfq8AHL_F1vkKkBO3tPiQJkRIHESYERuka1-GhZs6_AD7Vvj147_UsnIhFC6RE83XcPKYIpbcZfu4FUfqpz8H_fq1-yR4fH65n45UazUmE8Ho9GQILTutO80_n0dEYG1PhpM4NBJtMya3GyeygkJ4qyMWJTC_ivLGA5QJHSK23UemVWGWxYhWosKuMaf8PTIB9yc9xJWJNV7i1IFx0PSisjNgPeT8EdgCZRUllmBggXsWBaJ5HYcmbFjvlA_RgIUhmB6wyiZJhcQT7BcVhMWJ5lv40kiiUlvi9fxfjPUlQWJrFPXj2lnEPChrQ_lIBxFMYQjooz9-pnFxSXkRlzpR6f-cGwMe2DAhiXQ4Wi-NpXajA4ejoxWpMSH942oF9K5Ji5H3xKq6-aq8pvg0h6TtCiNPSOe-GKPg3OuKlrq72w1l9JPSDSQ2T61Ip0JMRNmIYUv62A41tp7XUW-x3gJ017KZlzmElvwP2O-kwmhHTeoxv4gY4lK4RpUESUYpvvuI4PadK4RuDTef7FzQjvfpeghIuWq-NUuYp-Lq7R2l5mfQ-G9EpuFsPKZoHRw8DYQa7dI5I6UxnOTzUUoFmDQyy9JUs7X38N4jtg7x2kdb6khhl59_jtDNKe6OJeoAfJJWXfE37UdPuZOznfNUz3Jh_8nVcy1fDkLs9tRy3R7x7RjrTaDEbkw59P-kc43yhnDdGxZjQf4pJpmRMtD_FJEfl_GNMko5meYZoMSbFt8kgNs7IQn4J2_xsqPdHk_ywyE7n9D_A91dHch_Gof3GA_nu85eANg5OGb7wPebGWuCxo8G1wCVTah_H6fBF7zzzQ8Zm5LrHGcHKmO8Ou861kkvTuSkOlxHpXAeYM42rYLO1RnQcwqXB73Ce5jSbL7JELGZpXvGiWAAnwLPFPAFGaU3nnFUsfiM4g5lyBu-8b8NtBdENohum5CPQqVKPzdTYLaIbDohu_kR0s2vMt2YzEctUFGnBJrBM5inNM5IUZLJb5kXKa0ZrUdSZqIs8hTQp8qpI65kgaQ4TuaSEZklC8yQlRbaY5hmZFUVNM5ZBVUGKMgINk-rgfRKDXSbJPM_JJNaCi9c1SjU89akIrJGvJ3YZlG6qbutQRpR03h3NeOkVLL_efylxIx03TSsVC1e1SWfVcpyArfS7rppy0yC6CRaGfzetNX_Ek91Evw7RzQDscUn_CgAA__8nkDcq">