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