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

    <tr>
        <th>Summary</th>
        <td>
            missed optimization: redundant operations in loop are not optimized away
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          k-arrows
      </td>
    </tr>
</table>

<pre>
    Test case:
https://godbolt.org/z/qvd3qfYEx
```cpp
int bar(int a, unsigned int k) {
  int j = a;
  for (unsigned int i = 0; i < k; i++) {
    j += j;
    j -= a;
  }
  return j;
}

int baz(int a, unsigned int k) {
  int j = a;
  for (unsigned int i = 0; i < k; i++) {
    j += a;
    j -= a;
  }
  return j;
}
```

GCC can optimize both `bar` and `baz`, but Clang fails to optimize `bar`. I made this example based on the function `foo` of the test program below.
https://github.com/gcc-mirror/gcc/blob/master/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-98.c
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMU81u2zAMfhr5QthwqMRODj40yTzsvsuOkkUnamXJleSmzdMPstc0HYaddhhgwORHfqT4J0LQJ0vUsM2ebY6ZmOLZ-eYpF967S8ikU2_NdwoROhGI8QdWHln5cI5xDEnDlmF7cko6EwvnTwzbK8P2-UXx5_7Hl9fFnVXl8nXjuCDaRpDCM9wmSTA8wGTnpyhIyBPDHbB6v3jDjD0C40cQjN_Q3nlguP3E1LNXyfh-Fg_wNIsM9_P3KSqkmLhPhMe7sAnOf8_F6uO76ClO3t5Rbrb74q7_T3Hi3xT3PsX7Wr8eDtAJC26MetBXAuniGVhVpulWJQirFu2aiHgAOUU4GGFP0AttAkT3wb3RCvgGg1AE8awD0KsYRkMgRSAFzkI8E_ST7aJ2NpF651Iu18-WmNZ19O7kxQCSjLsUf9xaHc-TLDo3JKXr8kF77_yiMGylcZJhO4gQ6QNNwcOkIy1IodLKR0-UhyAYtiGIvPeU77ZFl6mGqx3fiYyaVV3iul7xzTY7N1VfcSwrLnDV40ZSJ9fU10rsZCl7yetMN1giX-GKr3CNfFvU3baveoX1pqyq3XbH1iUNQpvCmJchHV6mQ5ioqTecrzIjJJkw3zSipQvMRoaYTtw3iZPL6RTYujQ6xPARJepoqBl0mDu9zEWkNjP-AJ7UZJWwEdxIfoYDaAvGuRGEJ7Au3oapQFzEWzZ50_yl7ynxr18-evdIXWTYzs8NDNu5nJ8BAAD__2ewXNM">