<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">