<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/64370>64370</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[LICM] Missed optimization: var_6 + var_15 + var_15 + var_5 + var_6
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ZY546
</td>
</tr>
</table>
<pre>
Hi, I noticed that the code below is not optimized for LICM very well:
https://godbolt.org/z/59x8GM1sv
```c
extern int var_23;
void test(int var_1, int var_4, int var_5, int var_6, int var_15) {
for (int i_3 = var_1 - 1277502689; i_3 < var_4 + 19; i_3 += 4)
{
var_23 += var_6 + var_15 + var_15 + var_5 + var_6;
i_3+=i_3/3;
}
}
```
The expression `var_6 + var_15 + var_15 + var_5 + var_6` is a loop invariant, but clang16 -O3:
```
for.body: ; preds = %for.body.lr.ph, %for.body
%i_3.017 = phi i32 [ %sub, %for.body.lr.ph ], [ %add7, %for.body ]
%add51416 = phi i32 [ %var_23.promoted, %for.body.lr.ph ], [ %add5, %for.body ]
%add4 = add i32 %add51416, %var_5
%add5 = add i32 %add4, %reass.mul
%div = sdiv i32 %i_3.017, 3
%add6 = add i32 %i_3.017, 4
%add7 = add i32 %add6, %div
%cmp = icmp slt i32 %add7, %add
br i1 %cmp, label %for.body, label %for.cond.for.cond.cleanup_crit_edge
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVU2P4ygQ_TX4UmqLD4Pjgw-bjrI70rb2spfdS4QNHbMixgKc6Zlfv8IfiRO1NDNWlBRUvVePclGRIZhzr3WN-B7xQybH2Dlf__sPL0TWOPWt_sMg-gpfoHfRtFpB7GSE2GlondLQaOu-ggnJDW6I5mK-awXvzsOfX17f4Kr9N_iqrUXsN4QPCC_fXYxDSHv0iOjx7FTjbMydPyN6_I7okVcfu9_fSLguIIHnTzuv9UfUvgfTR7hKf6IMsf3suTqjIOoQEd2tbpJOsC6K7YJvF2K7IBzRClC50ALAdKiF1ZwYIHaYI-EFCC1LjqnYVYjtF-_rnA4Q3QO579N9AhYT-0z9kCQ985HW0EnaxDLr-szkcDPFrRQLqTmxmWkyjvdSpVSoPCzBN2Mt9Zbk706D_hi8DsG4HpDAv6xK4NQmEqxzA5j-Kr2RfUwlb8YIrZX9mQh4-YvdO-VRybvzeepIxG6F-uGTqj54rcL0thDlK0lufT50Kftmcy0LotycWI5JOcGGzoBhFBDfJ1cYmyfcTAaIHybHHCaVKp_ipoh7DqkUJwURnyWZWyAfvLu4qNVPJuQ_TFhMyaRSc7K7iAU5X4pHjZ9AiiXcaxlCfhntBqLMdUKEZCyQpZwJxR7ZxTP7JrR4DC0_EbLqVua6CW4vwxRrkhFs3ADWdyKVWgGNB0MWWPJa2Wj70BfPm63rVX4zWqtlPw6n1pt40uqsn9o3UzVTFatkpmsiKoKLiuEq62rWVrIhdCcEFYQ076rl77ihBZYtYVzIzNQUU4Z3mOGSc1zlRBRENErsCqLLShBUYH2RxubWXi9pfGYmhFHXomAlzibNYRrtlPY6zekwakRpmvS-TpiXZjwHVGBrQgx3lmiinf4T0hBH_ABvJgSt1gkvo3F9uoe_OgWy0dv6afab2I1N3roLosckYPl5Gbz7T7cR0eMkOyB6nI71fwAAAP__psvYXA">